處理音訊資料

[與此頁面相關聯的功能Windows 媒體播放機 SDK是舊版功能。 它已被 MediaPlayer 取代MediaPlayer已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用MediaPlayer,而不是Windows 媒體播放機 SDK。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

DoProcessOutput的預設實作會從擷取有效之其其之的其指標開始,就像在AllocateStreamingResources中所做的一樣。 然後,它會使用該結構中的資訊來計算輸入緩衝區中等候處理的樣本數目。 下列程式碼來自預設實作:

// Get a pointer to the valid WAVEFORMATEX structure
// for the current media type.
WAVEFORMATEX *pWave = ( WAVEFORMATEX * ) m_mtInput.pbFormat;

// Calculate the number of samples to process.
DWORD dwSamplesToProcess = (*cbBytesProcessed / pWave->nBlockAlign) * pWave->nChannels;

然後,程式碼會檢查 wBitsPerSample 成員,以判斷音訊的位深度。 這個值用於 switch 語句,以提供 8 位和 16 位音訊的個別處理。

8 位和 16 位音訊之間的差異

8 位和 16 位音訊之間有重要的差異。 因此,建立回應效果的處理常式不同。 這兩種格式有下列不同:

  • 每個格式都有不同的樣本大小:8 位樣本分別佔用一個位元組的記憶體,而 16 位樣本則各自佔用兩個位元組。
  • 每個格式都以不同的方式代表音訊幅度。 8 位音訊是以範圍從 0 到 255 的不帶正負號整數來表示;值為 128 代表無聲。 16 位音訊是以帶正負號的整數來表示,範圍從 -32768 到 32767;值為零表示無聲。

雖然每個格式建立回應效果的程式基本上都相同,但詳細資料必須稍有不同。

實作 CEcho::D oProcessOutput