C# NAudio错误:“;NoDriver调用acmFormatSuggest“;

C# NAudio错误:“;NoDriver调用acmFormatSuggest“;,c#,dependencies,naudio,C#,Dependencies,Naudio,我有一个项目,使用NAudio将mp3转换为wav。(使用波形转换流.CreatePcmStream()方法) 它在我的开发机器上运行得很好,但现在我正在一台新的服务器上尝试它,它抛出了以下错误: NAudio.MmException:NoDriver调用acmFormatSuggest 在NAudio.MmException.Try(MmResult,String函数) 在NAudio.Wave.Compression.AcmStream.SuggestPcmFormat(波形压缩格式) 在N

我有一个项目,使用NAudio将mp3转换为wav。(使用
波形转换流.CreatePcmStream()
方法)

它在我的开发机器上运行得很好,但现在我正在一台新的服务器上尝试它,它抛出了以下错误:

NAudio.MmException:NoDriver调用acmFormatSuggest
在NAudio.MmException.Try(MmResult,String函数)
在NAudio.Wave.Compression.AcmStream.SuggestPcmFormat(波形压缩格式)
在NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(WaveStream sourceStream)上

我假设NAudio在这里需要一些不在新服务器上的依赖项。它是什么?我应该从哪里安装它


服务器是一个新孵化的Amazon EC2 Windows 2008 32位实例,安装了“web服务器”和“应用程序服务器”角色。

WaveFormatConversionStream使用您机器上安装的ACM编解码器。它首先询问是否安装了可以从源格式转换为目标格式的ACM编解码器。看起来目标机器上缺少MP3编解码器

NAudio确实提供了一种不同的方式来解码MP3,使用DMO MP3解码器(DirectX媒体对象),它也可能在您的目标机器上。要使用此功能,您需要从Codeplex和MP3FileReader(现在为您转换为PCM)中获取最新的NAudio源代码,请执行以下命令:

decompressor = new AcmMp3FrameDecompressor(this.Mp3WaveFormat); 
并将其替换为

decompressor = new DmoMp3FrameDecompressor(this.Mp3WaveFormat); 

运行Windows2008R2,使用Naudio检测Wav和Mp3文件的长度,我遇到了同样的问题

我通过以下方式解决了这个问题:

基本上,安装“桌面体验”功能

上述操作需要重新启动服务器


一旦安装了上述内容,我就不需要再启用任何东西,问题就解决了。

多亏了@Shiroy,我找到了@MarkHeath提供的令人惊叹的NLayer()库。如果您使用NLayer.NAudioSupport安装它,您可以使用一行额外的代码进行压缩(并且不需要安装编解码器)。

这对我不起作用。该代码显然试图加载一个也未安装在Windows2008服务器上的DMO。据称这个DMO在Windows SDK中,但我安装了它,但它仍然不在那里。我还没有得到.wav文件。我正在将mp3转换为wav文件。您需要安装Windows Server的桌面体验组件。您无法在Windows Azure网站上安装桌面体验包。我也尝试过NLayer,但它将WAV文件转换为32位浮点文件,这使它更难阅读。@Shiroy回想起来,你可以使用
WaveLoatto16Provider回到16位,这可能也是我最终解决这个问题的方法。当你拥有服务器时,这个解决方案非常好,而当你不拥有服务器时(就像Azure网站一样),你不能安装这个。也可以尝试在Windows Server 2012上使用NLayer Works。“桌面体验”功能在这里隐藏得稍微多一些,请使用此功能查找它: