擷取電視音訊
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
若要從類比電視擷取音訊到檔案,請使用 音訊擷取篩選器。 使用系統裝置列舉值來建立音訊擷取篩選器。 使用者系統上可能有數個音訊擷取裝置;使用者必須選取代表音效卡的裝置。
將音訊擷取輸出釘選連接到多工篩選器:
hr = pBuild->RenderStream(
&PIN_CATEGORY_CAPTURE, // Capture pin.
&MEDIATYPE_Audio, // Audio media type.
pAudioCap, // Pointer to the audio capture filter.
NULL, // Optional audio compressor filter.
pMux); // Pointer to the mux filter.
輸入針腳不需要連接到任何專案。 每個輸入針腳都代表音訊擷取裝置上的實體輸入。 使用 IAMAudioInputMixer 介面來啟用從微調器接收音訊資料流程的輸入。 輸入針腳會依名稱識別,例如「Line In」 或 「CD Audio」。不幸的是,名稱可以從一個裝置變更為下一個裝置。 此外,不同的電視調音卡會使用不同的輸入到聲音卡。 因此,由使用者識別要使用的輸入。
IEnumPins *pEnum = NULL;
hr = pAudioCap->EnumPins(&pEnum);
if (SUCCEEDED(hr))
{
IPin *pPin = NULL;
while (S_OK == pEnum->Next(1, &pPin, NULL))
{
IAMAudioInputMixer *pMix;
hr = pPin->QueryInterface(IID_IAMAudioInputMixer, (void**)&pMix);
if (SUCCEEDED(hr))
{
// Use IPin::QueryPinInfo to get the pin name.
pPin->Release();
if (...) // If the user selects this pin:
{
pMix->put_Enable(TRUE);
pMix->put_MixLevel(1.0);
pMix->Release();
break;
}
pMix->Release();
}
}
}
pEnum->Release();
相關主題