我正在尝试使用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个通道。任何帮助解决这个问题的人都将不胜感激。谢谢
发布于 2014-06-04 00:25:08
需要转换成普通的PCM才能播放。使用WaveFormatConversionStream.ConvertToPcm可以做到这一点。只有在您的计算机上安装了可以解压缩ADPCM的ACM编解码器,并且您还需要准确地传入正确的WaveFormat结构时,它才能工作。
NAudioDemo应用程序可以显示您的计算机上安装了哪些ACM编解码器,以及它们支持哪些输入和输出WaveFormats。
要了解有关使用NAudio在格式之间进行转换的更多信息,请阅读我的article on CodeProject。
https://stackoverflow.com/questions/24016476
复制相似问题