Compartilhar via


Capturando áudio de TV

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Para capturar áudio da televisão analógica para um arquivo, use o Filtro de Captura de Áudio. Use o Enumerador de Dispositivo do Sistema para criar o Filtro de Captura de Áudio. Pode haver vários dispositivos de captura de áudio no sistema do usuário; o usuário deve selecionar o dispositivo que representa o cartão de som.

Conecte o pino de saída de captura de áudio ao 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.

Os pinos de entrada não precisam ser conectados a nada. Cada pino de entrada representa uma entrada física no dispositivo de captura de áudio. Use a interface IAMAudioInputMixer para habilitar a entrada que recebe o fluxo de áudio do sintonizador. Os pinos de entrada são identificados pelo nome, como "Line In" ou "CD Audio". Infelizmente, os nomes podem mudar de um dispositivo para o próximo. Além disso, diferentes cartões de sintonizador de TV usam entradas diferentes para a cartão de som. Portanto, cabe ao usuário identificar qual entrada usar.

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

Áudio analógico de televisão

Captura de áudio