7

我有一个使用 NAudio 将 mp3 转换为 wav 的项目。(使用WaveFormatConversionStream.CreatePcmStream()方法)

它在我的开发机器上运行良好,但现在我在一个全新的服务器上尝试它并抛出这个错误:

NAudio.MmException: NoDriver 在 NAudio.Wave.Compression.AcmStream.SuggestPcmFormat(WaveFormatcompressedFormat)在
NAudio.MmException.Try(MmResult result, String function)在 NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(WaveStream sourceStream ) 调用 acmFormatSuggest

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

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

4

3 回答 3

7

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

我通过以下方法解决了这个问题:https ://technet.microsoft.com/en-us/library/cc772567.aspx

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

以上将需要重新启动服务器。

一旦安装了上述内容,我不需要进一步启用,问题就解决了。

于 2016-02-25T21:31:27.407 回答
2

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

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

decompressor = new AcmMp3FrameDecompressor(this.Mp3WaveFormat); 

并将其替换为

decompressor = new DmoMp3FrameDecompressor(this.Mp3WaveFormat); 
于 2011-04-14T06:10:40.627 回答
0

感谢@Shiroy,我发现了@MarkHeath 提供的惊人的NLayer ( https://github.com/naudio/NLayer ) 库。如果您使用 NLayer.NAudioSupport 安装它,您可以使用额外的一行代码进行压缩(并且不需要安装编解码器)。

于 2017-08-12T14:19:35.750 回答