使用 NAUDIO 播放 Dialogic ADPCM 音频文件
Posted
技术标签:
【中文标题】使用 NAUDIO 播放 Dialogic ADPCM 音频文件【英文标题】:Play Dialogic ADPCM audio file with NAUDIO 【发布时间】:2014-06-03 13:29:03 【问题描述】:我正在尝试使用 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】:您需要先转换为普通 PCM,然后才能播放。使用WaveFormatConversionStream.ConvertToPcm
执行此操作。只有在您的计算机上安装了可以解压 ADPCM 的 ACM 编解码器,并且您还需要传入完全正确的 WaveFormat 结构时,它才会起作用。
NAudioDemo 应用程序可以向您显示计算机上安装了哪些 ACM 编解码器以及它们支持的输入和输出 WaveFormats。
要了解有关使用 NAudio 在格式之间转换的更多信息,您可以阅读我的article on CodeProject。
【讨论】:
关于我可以在哪里下载(免费或商业)合适的编解码器来转换 Dialogic vox 文件的任何建议?这些年来,我多次环顾四周,却空手而归。以上是关于使用 NAUDIO 播放 Dialogic ADPCM 音频文件的主要内容,如果未能解决你的问题,请参考以下文章