在NAudio中附加WAV标题

时间:2015-05-31 03:21:03

标签: c# header wav naudio

我试图通过打开“MediaFoundationReaderRT”并指定其中的标准设置,以标准速率(48 KHz,16位,2个通道)将音频MP3文件转换为WAV。

将文件转换为PCM WAV后,当我尝试播放WAV文件时,它会输出错误的信息:

选项1 -

WaveStream activeStream = new MediaFoundationReaderRT([Open "MyFile.mp3"]);
WaveChannel32 waveformInputStream = new WaveChannel32(activeStream);

waveformInputStream.Sample += inputStream_Sample;

我注意到如果我将音频数据读入内存流(其中它通过“WaveFileWriter”附加WAV标题),那么事情就可以了:

选项2 -

WaveStream activeStream = new MediaFoundationReaderRT([Open "MyFile.mp3"]);

MemoryStream memStr = new MemoryStream();
byte[] audioData = new byte[activeStream.Length];
int bytesRead = activeStream.Read(audioData, 0, audioData.Length);
memStr.Write(audioData, 0, bytesRead);

WaveFileWriter.CreateWaveFile(memStr, audioData);

RawSourceWaveStream rawSrcWavStr = new RawSourceWaveStream(activeStream, 
new WaveFormat(48000, 16, 2));
WaveChannel32 waveformInputStream = new WaveChannel32(rawSrcWavStr);

waveformInputStream.Sample += inputStream_Sample;

但是,将整个音频读入内存非常耗时。因此,我正在查看上面提到的“选项1”。

我想弄清楚究竟是什么问题。是否缺少导致问题的WAV标头?

在“选项1”中是否有一种方法可以将WAV标题附加到“当前播放”的样本数据,而不是将整个音频数据转换为内存流然后附加标题?

1 个答案:

答案 0 :(得分:2)

我不太确定你为什么需要这些选项。使用NAudio:将MP3文件转换为WAV非常简单:

using(var reader = new MediaFoundationReader("input.mp3"))
{
    WaveFileWriter.CreateWaveFile("output.wav", reader);
}

如果您不需要创建WAV文件,那么您的工作已经完成 - MediaFoundationReader已经从它的Read方法返回PCM,因此您可以直接播放它。