Ошибка NAudio: NoDriver вызывает acmFormatSuggest

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

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

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

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

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


person codeulike    schedule 13.04.2011    source источник


Ответы (3)


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

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

По сути, установите функцию «Впечатления от рабочего стола».

Вышеупомянутое потребует перезагрузки сервера.

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

person Wendell Urth    schedule 25.02.2016
comment
Оглядываясь назад, возможно, именно так я в конечном итоге и решил это. - person codeulike; 26.02.2016
comment
Это решение отлично подходит, когда вы владеете сервером, а когда у вас его нет (как в случае с веб-сайтами Azure), вы не можете его установить. Попробуйте использовать NLayer nlayer.codeplex.com - person Shiroy; 08.09.2016
comment
Работает и на Windows Server 2012. Функция Desktop Experience немного более скрыта, используйте это, чтобы найти ее: yellowduckguy.wordpress.com/2012/12/21/ - person Jan Šotola; 04.08.2017

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); 
person Mark Heath    schedule 14.04.2011
comment
Это не сработало для меня. Этот код, очевидно, пытается загрузить DMO, который ТАКЖЕ не установлен на Windows 2008 Server. Якобы этот DMO находится в Windows SDK, но я его установил, а его там все еще нет. - person Lavamantis; 19.06.2012
comment
Я также все еще не получаю файл .wav. Я просто конвертирую свой mp3 в wav файл. - person Illaya; 31.03.2014
comment
вам необходимо установить компонент рабочего стола Windows Server. - person Mark Heath; 01.04.2014
comment
Вы не можете установить Desktop Experience Pack на веб-сайтах Windows Azure. Я также пробовал NLayer, но он преобразует файл WAV в 32-битный файл с плавающей запятой, что затрудняет чтение. - person Shiroy; 08.09.2016
comment
@Shiroy Вы можете вернуться к 16 битам с WaveFloatTo16Provider - person Mark Heath; 08.09.2016
comment
Не могли бы вы помочь с кодом? См. мой связанный вопрос по адресу: stackoverflow .com/questions/39398668/ - person Shiroy; 08.09.2016

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

person ulu    schedule 12.08.2017