我正在使用NAudio将mp3转换为WAV,使用WaveFormatConversionStream.CreatePcmStream()
方法。
据我所知,这会向操作系统询问可用的ACM编解码器,然后选择一个。
如何控制使用哪些ACM,或为它们设置优先级?在Windows操作系统或NAudio中是否有选项?
目前它似乎正在使用Windows Media Player附带的那些,并且它们在其他地方播放/转换的某些mp3失败。
基本上我想告诉它使用一个不错的编解码器。
答案 0 :(得分:1)
在引擎盖下,它会调用acmFormatSuggest来尝试找到转换为PCM的方式。实际上,您可以在Windows中为每个已安装的ACM设置优先级。我曾经知道如何在Windows XP中实现这一目标,但我不知道Windows 7在哪里保留了等效的对话框。有一些方法可以使用acmDriverEnum和acmDriverOpen准确指定所需的ACM驱动程序。
我确实为ACM过滤器(即效果而非编解码器)实现了此功能,并在AcmStream
类上添加了额外的构造函数,以允许传入驱动程序ID和WaveFilter
。您可以尝试调用使用AcmDriver.EnumerateAcmDrivers
或AcmDriver.FindByShortName
,使用null WaveFilter和所选ACM编解码器的驱动程序ID。我担心我没有把一个构造函数放到WaveFormatConversionStream
上让你自己传递AcmDriver
,所以你必须自己制作mod。
此外,它失败了什么MP3,错误信息是什么?它可能是MP3帧解析问题而不是编解码器。此外,NAudio有一个替代的MP3帧解码器 - DmoMp3FrameDecompressor
,虽然在XP上不可用,但可能会提供更好的结果。