30 lines
808 B
Elixir
30 lines
808 B
Elixir
defmodule Recognition_VAD.WavWriter do
|
|
def write_pcm_chunks_to_wav(chunks, sample_rate, path) do
|
|
data = IO.iodata_to_binary(Enum.reverse(chunks))
|
|
|
|
num_channels = 1
|
|
bits_per_sample = 16
|
|
byte_rate = sample_rate * num_channels * div(bits_per_sample, 8)
|
|
block_align = div(bits_per_sample * num_channels, 8)
|
|
|
|
header =
|
|
<<
|
|
"RIFF",
|
|
36 + byte_size(data)::little-size(32),
|
|
"WAVE",
|
|
"fmt ",
|
|
16::little-size(32),
|
|
1::little-size(16),
|
|
num_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",
|
|
byte_size(data)::little-size(32)
|
|
>>
|
|
|
|
File.write!(path, header <> data)
|
|
end
|
|
end
|