3

执行此函数时出现异常“NoDriver calling acmFormatSuggest”:

private static WaveChannel32 OpenMp3Stream(string fileName)
    {
        WaveChannel32 inputStream;
        WaveStream mp3Reader = new Mp3FileReader(fileName);
        WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader);
        WaveStream blockAlignedStream = new BlockAlignReductionStream(pcmStream);
        inputStream = new WaveChannel32(blockAlignedStream);
        return inputStream;
    }

在这条线上:

WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader);

我试图改变 NAudio.dll 的平台(从 x86 到 x64,反之亦然),但这并没有帮助。

是否有其他方法可以从 MemoryStream 播放MP3文件,或者如何解决此错误?

4

3 回答 3

2

此代码依赖于可以解码系统上存在的 MP3 的 ACM 编解码器。您使用的是什么操作系统?此外,ACM 编解码器通常是 32 位的,因此在 x64 中运行意味着没有可用的编解码器。

NAudio 还提供了使用 DMO MP3 解码器作为替代方案的可能性,这在 XP 中不可用,但似乎存在于大多数较新版本的 Windows 上。

最后,我建议使用最新的 NAudio 源代码,其中 MP3FileReader 内置了 PCM 转换,这意味着您只需调用 Read 并获取 PCM。

于 2011-03-30T09:47:45.337 回答
0

为 x86 编译 NAudioDemo 并查看可用的 ACM 编解码器列表。据我所知,如果您在列表中看不到 NAudio 使用 Fraunhofer 专业 ACM 编解码器,我之前尝试安装 LAME ACM 但这没有帮助,它需要 fraunhofer 编解码器。

还有一点需要注意的是,在 x64 版本的 Windows 上,ACM 注册表项位于

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Drivers32]

而不是

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32]

您可以使用 Mark 出色的 NAudioDemo 工具来检查 ACM 是否在您的系统上正确注册

于 2012-04-07T05:31:00.517 回答
-1

该线程包含一些可能对您有所帮助的解决方案:Play audio from a stream using C#

于 2011-03-25T14:00:36.147 回答