我正在尝试使用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个通道。任何帮助解决这个问题将非常感激。感谢
答案 0 :(得分:0)
您需要先转换为普通PCM才能播放它。使用WaveFormatConversionStream.ConvertToPcm
执行此操作。只有在您的计算机上安装了可以解压缩ADPCM的ACM编解码器时,它才会起作用,并且您还需要传递恰好正确的WaveFormat结构。
NAudioDemo应用程序可以显示您的计算机上安装了哪些ACM编解码器以及它们支持的输入和输出WaveFormats。
要了解有关使用NAudio格式转换的更多信息,您可以阅读我的article on CodeProject。