2010-07-07 59 views
1

我需要將多達16個通道的PCM音頻流分成幾個立體聲流。 因爲我還沒有找到任何能夠做到的事情,所以我試圖編寫我的第一個directshow過濾器。能夠分裂音頻如何分割音頻或在directshow中寫入分路器濾波器?

任何將非常歡迎,但我假設,所以有我做了什麼我必須這樣做:

起初,我試圖創建一個基於ITransformFilter的過濾器。但是,它似乎只考慮了只有一個輸入引腳和一個輸出引腳的濾波器。因爲我需要幾個輸出引腳,所以我忽略了它,但也許它可以比我想象的更容易調整,所以任何建議都非常感謝。

然後,我開始基於IBaseFilter。我設法做了一些事情。當輸入引腳連接時,我創建必要的輸出引腳,並在輸入斷開連接時銷燬它們。但是,當我將任何輸出引腳連接到ACM Wrapper(僅用於測試它)時,輸入會嘗試重新連接,破壞所有輸出引腳。 我試圖只是不摧毀他們,但後來我檢查了我的輸入引腳的媒體類型,它已經改變爲立體聲流。我沒有從我的代碼中調用QueryAccept。

我怎樣才能避免重新連接,或者什麼是正確的方法來做分路器濾波器?

編輯2010-07-09: 我已經回到ITransformFilter,但我正在創建必要的引腳。但是我遇到了與IBaseFilter相同的問題:當我將輸出引腳連接到ACM Wrapper時,輸入引腳將其媒體類型更改爲2個通道。 不知道現在該怎麼做......

回答

1

您可以看看Windows Server 2003 R2平臺SDK中的DMOSample。它也包含在較早的directx sdk中,但不包含在較新的Windows sdk中。您可以在Samples \ Multimedia \ DirectShow \ DMO \ DMOSample中找到它。 Here是本示例的文檔。

我看到有人創建了一個基於此的過濾器,它有一個立體聲輸入和兩個單聲道輸出。不幸的是,我無法發佈源代碼。

+0

非常感謝!我會看看它。 – raven 2010-07-13 16:50:36

+0

我不確定這是我需要的。看來輸出引腳必須預先聲明。能夠實時創建它們會很好,因爲我不知道在輸入連接之前有多少頻道。如果沒有人在一兩天內回答,你會選擇你的答案。 – raven 2010-07-13 17:28:56

+0

您可以創建16個輸出引腳,並只使用所需的引腳。 – wimh 2010-07-15 06:02:27