NAudio - 控制使用哪个ACM编解码器

时间:2011-05-23 21:28:28

标签: c# windows codec naudio acm

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

在引擎盖下,它会调用acmFormatSuggest来尝试找到转换为PCM的方式。实际上,您可以在Windows中为每个已安装的ACM设置优先级。我曾经知道如何在Windows XP中实现这一目标,但我不知道Windows 7在哪里保留了等效的对话框。有一些方法可以使用acmDriverEnumacmDriverOpen准确指定所需的ACM驱动程序。

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

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