Bagikan melalui


Menangkap Audio TV

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine , dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Untuk mengambil audio dari televisi analog ke file, gunakan Filter Pengambilan Audio. Gunakan Enumerator Perangkat Sistem untuk membuat Filter Tangkapan Audio. Mungkin ada beberapa perangkat pengambilan audio pada sistem pengguna; pengguna harus memilih perangkat yang mewakili kartu suara.

Sambungkan pin output tangkapan audio ke filter 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.

Pin input tidak harus terhubung ke apa pun. Setiap pin input mewakili input fisik pada perangkat tangkapan audio. Gunakan antarmuka IAMAudioInputMixer untuk mengaktifkan input yang menerima aliran audio dari tuner. Pin input diidentifikasi berdasarkan nama, seperti "Line In" atau "CD Audio." Sayangnya, nama-nama tersebut dapat berubah dari satu perangkat ke perangkat berikutnya. Selain itu, kartu tuner TV yang berbeda menggunakan input yang berbeda ke kartu suara. Oleh karena itu, terserah pengguna untuk mengidentifikasi input mana yang akan digunakan.

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();

Audio Televisi Analog

Pengambilan Audio