Мне нужно преобразовать wav-файл в 8000Hz 16Bit Mono Wav. У меня уже есть код, который хорошо работает с библиотекой NAudio, но я хочу использовать MemoryStream вместо временного файла.Преобразование wav-файла в 8000Hz 16Bit Mono Wav
using System.IO;
using NAudio.Wave;
static void Main()
{
var input = File.ReadAllBytes("C:/input.wav");
var output = ConvertWavTo8000Hz16BitMonoWav(input);
File.WriteAllBytes("C:/output.wav", output);
}
public static byte[] ConvertWavTo8000Hz16BitMonoWav(byte[] inArray)
{
using (var mem = new MemoryStream(inArray))
using (var reader = new WaveFileReader(mem))
using (var converter = WaveFormatConversionStream.CreatePcmStream(reader))
using (var upsampler = new WaveFormatConversionStream(new WaveFormat(8000, 16, 1), converter))
{
// todo: without saving to file using MemoryStream or similar
WaveFileWriter.CreateWaveFile("C:/tmp_pcm_8000_16_mono.wav", upsampler);
return File.ReadAllBytes("C:/tmp_pcm_8000_16_mono.wav");
}
}
Вы можете использовать один из конструкторов 'WaveFi leWriter', который берет поток для аргумента. Взято из [NAudio исходного кода] (https://github.com/naudio/NAudio/blob/master/NAudio/Wave/WaveOutputs/WaveFileWriter.cs#LC63) – bob1024
@ bob1024 Я уже пробовал, но нет никакого параметра для конвертер ... или, возможно, я чего-то не хватает –
Вы можете указать скорость, биты и каналы в переменной WaveFormat и передать ее конструктору 'WaveFileWriter' – bob1024