1

我正在尝试使用 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 个通道。任何帮助解决这个问题将不胜感激。谢谢

4

1 回答 1

0

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

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

要了解有关使用 NAudio 在格式之间转换的更多信息,您可以阅读我在 CodeProject 上的文章

于 2014-06-03T16:25:07.713 回答