1

我正在使用 NAudio 将 mp3 转换为 WAV,使用该WaveFormatConversionStream.CreatePcmStream()方法。

据我了解,这会向操作系统询问可用的 ACM 编解码器,然后选择一个。

如何控制使用哪些 ACM,或为它们设置优先级?在 Windows 操作系统或 NAudio 中是否有此选项?

目前它似乎正在使用 Windows Media Player 附带的那些,并且它们对于在其他地方播放/转换正常的某些 mp3 失败。

基本上我想告诉它使用一个像样的编解码器。

4

1 回答 1

1

在后台,它调用acmFormatSuggest以尝试找到转换为 PCM 的方法。实际上,您可以在 Windows 中为每个已安装的 ACM 设置优先级。我曾经知道如何在 Windows XP 中实现这一点,但我不知道 Windows 7 将等效对话框保存在何处。有一些方法可以使用acmDriverEnumacmDriverOpen准确指定您想要的 ACM 驱动程序。

我确实为 ACM 过滤器(即效果不是编解码器)实现了此功能,并在类上使用了一个额外的构造函数AcmStream以允许传入驱动程序 ID 和 a WaveFilter。您可以尝试使用 null WaveFilter 和所选 ACM 的驱动程序 ID 调用它编解码器使用AcmDriver.EnumerateAcmDriversor AcmDriver.FindByShortName。恐怕我没有在上面放置一个构造函数WaveFormatConversionStream,让你自己传递AcmDriver,所以你必须制作自己的 mod。

另外,什么 MP3 失败了,错误信息是什么?这可能是 MP3 帧解析问题,而不是编解码器。此外,NAudio 有一个替代的 MP3 帧解码器 - DmoMp3FrameDecompressor,虽然在 XP 上不可用,但它可能会提供更好的结果。

于 2011-05-23T22:09:25.443 回答