Acquisizione dell'audio TV

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Per acquisire audio dalla televisione analogica a un file, usare il filtro di acquisizione audio. Usare l'enumeratore dispositivo di sistema per creare il filtro di acquisizione audio. Potrebbero essere presenti diversi dispositivi di acquisizione audio nel sistema dell'utente; l'utente deve selezionare il dispositivo che rappresenta la scheda audio.

Connettere il pin di output di acquisizione audio al filtro 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.

I pin di input non devono essere connessi a nulla. Ogni pin di input rappresenta un input fisico nel dispositivo di acquisizione audio. Usare l'interfaccia IAMAudioInputMixer per abilitare l'input che riceve il flusso audio dal tuner. I pin di input sono identificati dal nome, ad esempio "Line In" o "CD Audio". Sfortunatamente, i nomi possono passare da un dispositivo all'altro. Inoltre, diverse schede di tuner TV usano input diversi per la scheda audio. Pertanto, spetta all'utente identificare l'input da usare.

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 televisore analogico

Acquisizione audio