使用 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 音频文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 NAudio 1.7+ 播放音频文件

使用 naudio 播放 .wav 文件,播放在 1 秒后停止

使用 NAudio 播放 IMA ADPCM 音频

使用 naudio 动态播放音频文件

来自流的NAudio?播放音频

使用 NAudio 处理后播放 wav 文件