2010-02-03 48 views
2

我想將很多音頻從其源格式轉碼爲PCM,而無需重新採樣或調整樣本大小。我想如果Windows Media Player可以播放該文件,並且它不使用傳統的ACM編解碼器,則必須使用DirectSound才能這樣做(這是在Windows XP和Windows Server 2k3上)。那麼是否有可能從C#訪問DirectSound並執行此操作?我試過在網上搜索,但所有的例子都是關於播放的,我沒有興趣去做。是否有可能使用DirectSound在C#中轉碼音頻?

回答

1

DirectSound是一個音頻播放API,您的意思是DirectShow。 Windows Media Player確實使用DirectShow播放音頻文件。從理論上講,您需要做的只是構建與媒體播放器使用的播放圖形相同的播放圖形,但使用.WAV寫入器過濾器替換音頻驅動程序。

由於DirectShow圖形對象實際上是從C++調用的,但是有一組好的interop定義,您可以在C#中執行此操作,這在C++代碼中更容易實現。

因爲在.NET中對DirectShow進行了嚴重的黑客攻擊,所以有http://directshownet.sourceforge.net/,但這可能是針對您的問題的矯枉過正。

如果您還沒有,我會建議您獲取GraphEdit的副本。您可以使用它以交互方式「直接」顯示直接顯示圖形。將文件放入圖片。然後刪除最後的過濾器並將其替換爲文件寫入器過濾器。

您將遇到的一個問題是,默認的DirectShow過濾器組中沒有.WAV文件寫入器過濾器,您將不得不查找或寫入一個。

如果你只是想轉換文件,並且不太關心如何使用DirectShow編寫代碼,我建議你只需要獲得Sound Forge(甚至可能是演示版本)的副本。它有一種腳本語言(C#,vb),可用於批量處理大多數音頻文件格式。

1

轉換爲WAV可以使用SoX(Sound eXchange,http://sox.sourceforge.net/)從Windows命令行完成。您可以編寫一個批處理文件或一個C#應用程序,該應用程序使用正確的屬性調用SoX。我不確定WinAMP的功能是如何工作的,但它也有內置的文件寫入器輸出選項。您可以將整個播放列表串流成波形文件。

相關問題