我需要将一个wav文件转换为8000Hz的16位单声道Wav格式。我已经有一段代码,可以使用NAudio库很好地完成此操作,但我想使用MemoryStream代替临时文件。
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");
}
}
WaveFileWriter
的其中一个构造函数,该构造函数接受一个流作为参数。取自NAudio源代码。 - doomggWaveFormat
变量中指定速率、位数和通道,并将其传递给WaveFileWriter
构造函数。 - doomggWaveFileReader.ReadNextSampleFrame
和WaveFileWriter.WriteSample
将音频样本从读取器传输到写入器。我没有看到其他的方法。 - doomgg