C# NAudio-控制ACM编解码器使用的

C# NAudio-控制ACM编解码器使用的,c#,windows,naudio,codec,C#,Windows,Naudio,Codec,我正在使用NAudio将mp3转换为WAV,使用waveformatConverversionStream.CreatePcmStream()方法 据我所知,这会询问操作系统可用的ACM编解码器,然后选择一个 如何控制使用哪些ACM,或为其设置优先级?在Windows操作系统或NAudio中有这样的选项吗 目前,它似乎使用的是Windows Media Player附带的MP3,而在其他地方播放/转换良好的某些MP3则无法使用 基本上,我想告诉它使用一个像样的编解码器。在它调用的引擎盖下,试图找

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

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

如何控制使用哪些ACM,或为其设置优先级?在Windows操作系统或NAudio中有这样的选项吗

目前,它似乎使用的是Windows Media Player附带的MP3,而在其他地方播放/转换良好的某些MP3则无法使用

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

在它调用的引擎盖下,试图找到转换到PCM的方法。实际上,您可以在Windows中为每个已安装的ACM设置优先级。我以前知道如何在WindowsXP中实现这一点,但我不知道Windows7在哪里保留了相同的对话框。有几种方法可以精确地指定要使用和的ACM驱动程序

我在
AcmStream
类上使用额外的构造函数实现了ACM过滤器(即效果而非编解码器)的此功能,以允许传入驱动程序Id和
波形过滤器。您可以尝试使用空的波形过滤器和所选ACM编解码器的驱动程序Id,使用
AcmDriver.enumerate acmdrivers
AcmDriver.FindByShortName
调用此函数。恐怕我没有在
波形转换流
上设置构造函数,让您可以传递自己的
AcmDriver
,所以您必须自己制作mod

此外,它失败的原因是什么?错误消息是什么?这可能是MP3帧解析问题,而不是编解码器问题。此外,NAudio还有一个可选的MP3帧解码器—
DmoMp3FrameDecompressor
,它可能会提供更好的结果,尽管在XP上不可用。

在它调用的引擎盖下,试图找到转换到PCM的方法。实际上,您可以在Windows中为每个已安装的ACM设置优先级。我以前知道如何在WindowsXP中实现这一点,但我不知道Windows7在哪里保留了相同的对话框。有几种方法可以精确地指定要使用和的ACM驱动程序

我在
AcmStream
类上使用额外的构造函数实现了ACM过滤器(即效果而非编解码器)的此功能,以允许传入驱动程序Id和
波形过滤器。您可以尝试使用空的波形过滤器和所选ACM编解码器的驱动程序Id,使用
AcmDriver.enumerate acmdrivers
AcmDriver.FindByShortName
调用此函数。恐怕我没有在
波形转换流
上设置构造函数,让您可以传递自己的
AcmDriver
,所以您必须自己制作mod


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

谢谢马克,我会研究一下你的建议。错误是
System.FormatException:在NAudio.Wave.Mp3Frame..ctor(流输入)处的NAudio.Wave.Mp3FileReader..ctor(流输入流)
处没有一个可识别的MP3块,但是MP3将在Foobar2000中正常播放,所以我想它一定是编解码器?大约每30个MP3中就有1个会发生这种情况,但我看不出这种模式是什么。在这种情况下,这不是编解码器的错误。你用的是什么版本的NAudio?我已经对Mp3FileReader进行了一些更新,使其更能容忍格式错误的块。如果你能向我提交一个失败的MP3示例,我可以将其作为NAudio测试的一部分使用(显然我不会公开发布)。可能值得使用NAudio 1.4进行测试,或者从源代码管理构建最新版本。从v1.4开始,MP3FileReader的使用更加简单,因为您不需要在以后进行波形转换流或块对齐还原流Hanks Mark,我将研究您的建议。错误是
System.FormatException:在NAudio.Wave.Mp3Frame..ctor(流输入)处的NAudio.Wave.Mp3FileReader..ctor(流输入流)
处没有一个可识别的MP3块,但是MP3将在Foobar2000中正常播放,所以我想它一定是编解码器?大约每30个MP3中就有1个会发生这种情况,但我看不出这种模式是什么。在这种情况下,这不是编解码器的错误。你用的是什么版本的NAudio?我已经对Mp3FileReader进行了一些更新,使其更能容忍格式错误的块。如果你能向我提交一个失败的MP3示例,我可以将其作为NAudio测试的一部分使用(显然我不会公开发布)。可能值得使用NAudio 1.4进行测试,或者从源代码管理构建最新版本。MP3FileReader从1.4版开始使用就简单多了,因为之后不需要进行波形转换流或BlockAlignReductionStream