使用NAUDIO播放Dialogic ADPCM音频文件

时间:2014-06-03 13:29:03

标签: naudio adpcm

我正在尝试使用NAUDIO库播放Dialogic ADPCM文件(无RIFF标题)。我尝试过几个不同的东西但到目前为止都没有成功。我尝试了一个简单的wav转换:

        FileStream fs = new FileStream(@"C:\TestFile.vox", FileMode.Open, FileAccess.Read);
        WaveFormat wf = new WaveFormat(8000, 1);
        WaveOut wo = new WaveOut();
        RawSourceWaveStream rawSource = new RawSourceWaveStream(fs, wf);
        wo.Init(rawSource);
        wo.Play();

这实际上加载文件并开始播放,但它非常嘈杂和失真(实际上是不可听),几乎就像选择了错误的编解码器来转换文件一样。我尝试了更具体的转换,因为看起来好像NAUDIO支持内置的Dialogic ADPCM:

        FileStream fs = new FileStream(@"C:\TestFile.vox", FileMode.Open, FileAccess.Read);
        WaveFormat wf = WaveFormat.CreateCustomFormat(WaveFormatEncoding.DialogicOkiAdpcm, 8000, 1, 3000, 1, 4);
        WaveOut wo = new WaveOut();
        RawSourceWaveStream rawSource = new RawSourceWaveStream(fs, wf);
        wo.Init(rawSource);
        wo.Play();

这在调用WaveOut.Init()时引发异常 - 异常是" WaveBadFormat调用waveOutOpen"我也尝试过使用

AdpcmWaveFormat wf = new AdpcmWaveFormat(8000, 1);

对于我的WaveFormat对象 - 我得到了同样的异常。该文件以8000 Hz的采样率记录,仅为1个通道。任何帮助解决这个问题将非常感激。感谢

1 个答案:

答案 0 :(得分:0)

您需要先转换为普通PCM才能播放它。使用WaveFormatConversionStream.ConvertToPcm执行此操作。只有在您的计算机上安装了可以解压缩ADPCM的ACM编解码器时,它才会起作用,并且您还需要传递恰好正确的WaveFormat结构。

NAudioDemo应用程序可以显示您的计算机上安装了哪些ACM编解码器以及它们支持的输入和输出WaveFormats。

要了解有关使用NAudio格式转换的更多信息,您可以阅读我的article on CodeProject