2011-05-23 12 views
1

我正在使用NAudio將mp3轉換爲WAV,使用WaveFormatConversionStream.CreatePcmStream()方法。NAudio - 控制哪個ACM編解碼器使用

據我所知,這要求操作系統瞭解可用的ACM編解碼器,然後選擇一個。

如何控制使用哪些ACM或爲其設置優先級?在Windows操作系統或NAudio中有沒有這個選項?

目前它似乎使用Windows媒體播放器附帶的那些,並且它們在某些播放/轉換在其他地方罰款的MP3失敗。

基本上我想告訴它使用一個體面的編解碼器。

回答

1

在引擎蓋下,它呼叫acmFormatSuggest嘗試找到轉換到PCM的方式。您可以爲每個安裝的ACM實際設置Windows的優先級。我曾經知道如何在Windows XP中實現這一點,但我不知道Windows 7在何處保留等效對話框。有多種方法可以使用acmDriverEnumacmDriverOpen確切指定您想要的ACM驅動程序。

我沒有實現與上AcmStream類的額外構造這個能力ACM過濾器(即效果不編解碼器),以允許駕駛員Id和WaveFilter在傳遞,你可以嘗試用空WaveFilter並調用這個使用AcmDriver.EnumerateAcmDriversAcmDriver.FindByShortName所選的ACM編解碼器的驅動程序ID。恐怕我沒有把一個構造函數放到WaveFormatConversionStream上,它可以讓你通過自己的AcmDriver,所以你不得不做出自己的mod。

此外,什麼MP3失敗,什麼是錯誤信息?它可能是一個MP3幀解析問題,而不是編解碼器。另外,NAudio有一個替代的MP3幀解碼器 - DmoMp3FrameDecompressor,這可能會給出更好的結果,儘管在XP上不可用。

+0

謝謝馬克,我會研究你的建議。錯誤是'System.FormatException:NAudio.Wave.Mp3Frame..ctor(流輸入)在NAudio.Wave.Mp3FileReader..ctor(Stream inputStream)不是一個可識別的MP3塊',但是mp3會在Foobar2000中正常播放例如,所以我認爲它一定是編解碼器?大約有30個mp3會發生這種情況,但我無法看到這種模式。 – codeulike 2011-05-23 22:29:28

+0

在這種情況下,這不是編解碼器的錯誤。你使用的是哪種版本的NAudio?我已經對Mp3FileReader進行了一些更新,以更好地容納格式不正確的塊。如果您可以提交一個不適合我的示例MP3,我可以將它用作NAudio測試的一部分(顯然我不會公開發布它)。 – 2011-05-23 22:33:44

+0

我在1.3.8.0。好吧,我會給你發一些mp3 ... – codeulike 2011-05-23 22:40:04

相關問題