Files
voice_recognition/whisper/lib/whisper/audio_manager/audio_saver.ex

39 lines
1018 B
Elixir

defmodule AudioSaver do
@wav_dir "recordings/"
def save_chunk_as_wav(ref, chunk, sample_rate \\ 48100, bits_per_sample \\ 16, channels \\ 1, type) do
File.mkdir_p!(@wav_dir)
data_size = byte_size(chunk)
byte_rate = sample_rate * channels * div(bits_per_sample, 8)
block_align = div(bits_per_sample * channels, 8)
riff_size = 36 + data_size
header =
<<
"RIFF",
riff_size::little-size(32),
"WAVE",
"fmt ",
16::little-size(32),
1::little-size(16),
channels::little-size(16),
sample_rate::little-size(32),
byte_rate::little-size(32),
block_align::little-size(16),
bits_per_sample::little-size(16),
"data",
data_size::little-size(32)
>>
chunk_number = Whisper.Counter.next(ref)
filename = "#{ref}_#{chunk_number}.wav"
path = Path.join(@wav_dir, filename)
File.write!(path, header <> chunk)
IO.inspect(path, label: "---> ")
{:ok, path}
end
end