NAudio - управление тем, какой кодек ACM используется - PullRequest
1 голос
/ 24 мая 2011

Я использую NAudio для конвертации mp3 в WAV, используя метод WaveFormatConversionStream.CreatePcmStream().

Насколько я понимаю, это запрашивает у ОС информацию о доступных кодеках ACM, а затем выбирает один.

Как мне контролировать, какие ACM используются, или устанавливать для них приоритет? Есть ли вариант для этого в ОС Windows или в NAudio?

В настоящее время, похоже, используются те, которые поставляются с Windows Media Player, и они не работают для определенных mp3-файлов, которые хорошо воспроизводятся / конвертируются в других местах.

По сути, я хочу сказать, чтобы он использовал приличный кодек.

1 Ответ

1 голос
/ 24 мая 2011

Под капотом он вызывает acmFormatSuggest , чтобы попытаться найти способ перехода на PCM.Вы можете фактически установить приоритет в Windows для каждого установленного ACM.Раньше я знал, как добраться до этого в Windows XP, но я не знаю, где Windows 7 хранит аналогичный диалог.Есть способы точно указать, какой драйвер ACM вы хотите использовать, используя acmDriverEnum и acmDriverOpen .

Я реализовал эту возможность для фильтров ACM (то есть эффектов, а не кодеков) с помощью дополнительного конструктора в классе AcmStream, позволяющего передавать идентификатор драйвера и WaveFilter.с нулевым WaveFilter и идентификатором драйвера выбранного ACM-кодека, используя AcmDriver.EnumerateAcmDrivers или AcmDriver.FindByShortName.Боюсь, я не поместил конструктор на WaveFormatConversionStream, который позволял бы вам передавать свой собственный AcmDriver, поэтому вам придется создать свой собственный мод.

Кроме того, что делает MP3сбой, и что за сообщение об ошибке?Это может быть проблема разбора кадра MP3, а не кодека.Кроме того, NAudio имеет альтернативный MP3-декодер кадров - DmoMp3FrameDecompressor, который может дать лучшие результаты, хотя недоступен в XP.

...