TV オーディオのキャプチャ
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
アナログ テレビからファイルにオーディオをキャプチャするには、 オーディオ キャプチャ フィルターを使用します。 システム デバイス列挙子を使用して、オーディオ キャプチャ フィルターを作成します。 ユーザーのシステムには、複数のオーディオ キャプチャ デバイスが存在する場合があります。ユーザーは、サウンド カードを表すデバイスを選択する必要があります。
オーディオ キャプチャ出力ピンを mux フィルターに接続します。
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();
関連トピック