Ошибка NAudio: "NoDriver вызывает acmFormatSuggest" - PullRequest
7 голосов
/ 13 апреля 2011

У меня есть проект, который использует NAudio для конвертации из mp3 в wav. (используя метод WaveFormatConversionStream.CreatePcmStream())

Он отлично работал на моей машине для разработки, но сейчас я пробую его на новом новом сервере и выдает эту ошибку:

NAudio.MmException: NoDriver вызывает acmFormatSuggest
в NAudio.MmException.Try (результат MmResult, функция String)
в NAudio.Wave.Compression.AcmStream.SuggestPcmFormat (сжатый формат WaveFormat)
в NAudio.Wave.WaveFormatConversionStream.CreatePcmStream (WaveStream sourceStream)

Я предполагаю, что есть некоторая зависимость, в которой нуждается NAudio, которой нет на новом сервере. Что это и откуда мне установить?

Сервер - это обновленный 32-разрядный экземпляр Amazon EC2 Windows 2008 с установленными ролями «веб-сервер» и «сервер приложений».

Ответы [ 3 ]

7 голосов
/ 26 февраля 2016

Запустив Windows 2008 R2, используя Naudio для определения длины файлов Wav и Mp3, я столкнулся с той же проблемой.

Я решил эту проблему следующим образом: https://technet.microsoft.com/en-us/library/cc772567.aspx

По существу, установите функцию «Desktop Experience».

Для выполнения вышеизложенного потребуется перезапустить сервер.

После установки вышеуказанного мне ничего не нужно было включать, проблема была решена.

2 голосов
/ 14 апреля 2011

WaveFormatConversionStream использует кодеки ACM, установленные на вашем компьютере. Он начинается с вопроса о том, установлен ли какой-либо кодек ACM, который можно преобразовать из исходного в целевой формат. Может показаться, что на целевом компьютере отсутствует кодек MP3.

NAudio предлагает другой способ декодирования MP3, используя DMO MP3 Decoder (DirectX Media Object), который также может быть на вашей целевой машине. Чтобы использовать это, вам нужно получить последний источник NAudio от Codeplex и в MP3FileReader (который теперь выполняет преобразование в PCM для вас), вы берете следующую строку:

decompressor = new AcmMp3FrameDecompressor(this.Mp3WaveFormat); 

и замените его на

decompressor = new DmoMp3FrameDecompressor(this.Mp3WaveFormat); 
0 голосов
/ 12 августа 2017

Благодаря @Shiroy я нашел удивительную библиотеку NLayer (https://github.com/naudio/NLayer) от @MarkHeath. Если вы установите ее с помощью NLayer.NAudioSupport, вы можете сжать еще одну строку кода (без необходимости установки кодеков) .

...