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();
Tópicos relacionados