Para decodificar áudio para S/PDIF
[O recurso associado a esta página, Windows Media Format 11 SDK, é um recurso herdado. Ele foi substituído por Leitor de Origem e Gravador de Coletor. O Leitor de Origem e o Gravador de Coletor foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o Leitor de Origem e o Gravador de Coletor em vez do SDK do Windows Media Format 11, 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.]
O áudio codificado com o codec Windows Media Audio 9 Professional pode ser decodificado para o Formato de Interconexão Digital da Sony/Philips (S/PDIF). Para gerar a saída S/PDIF, execute as seguintes etapas:
- Abra um arquivo que contenha um fluxo do Windows Media Audio 9 Professional chamando o método IWMReader::Open .
- Identifique o número de saída do fluxo desejado. Para obter mais informações, consulte Para identificar números de saída.
- Chame o método IWMReaderAdvanced2::SetOutputSetting para configurar a saída S/PDIF. Use g_wszEnableWMAProSPDIFOutput para o nome da configuração. O tipo de dados é WMT_TYPE_BOOL; defina o valor como TRUE para habilitar a saída S/PDIF.
- Obtenha a interface de propriedades de saída (IWMOutputMediaProps) do formato de saída desejado chamando o método IWMReader::GetOutputFormat . Para obter mais informações sobre como enumerar formatos de saída, consulte Atribuindo formatos de saída.
- Defina o formato de saída chamando o método IWMReader::SetOutputProps . Passe um ponteiro para a interface IWMOutputMediaProps obtida na etapa 4.
- Faça outras alterações de configuração e comece a reprodução.
Observação
Você pode executar as etapas anteriores no leitor síncrono usando os métodos correspondentes da interface IWMSyncReader .
O código de exemplo a seguir demonstra como definir um fluxo de áudio para gerar áudio como dados S/PDIF. Essa função pressupõe que um arquivo já tenha sido carregado no leitor e que o número de saída tenha sido identificado. Para obter mais informações sobre como usar esse código, consulte Usando os exemplos de código.
HRESULT SetSPDIF(DWORD dwOutputNum, IWMReader* pReader)
{
HRESULT hr = S_OK;
IWMReaderAdvanced2* pReaderAdv = NULL;
IWMOutputMediaProps* pOutputProps = NULL;
BOOL fValue = TRUE;
// Get the advanced reader interface.
hr = pReader->QueryInterface(IID_IWMReaderAdvanced2,
(void**)&pReaderAdv);
GOTO_EXIT_IF_FAILED(hr);
// Set S/PDIF output.
hr = pReaderAdv->SetOutputSetting(dwOutputNum,
g_wszEnableWMAProSPDIFOutput,
WMT_TYPE_BOOL,
(BYTE*)&fValue,
sizeof(BOOL));
GOTO_EXIT_IF_FAILED(hr);
// Get the first output format for the stream.
// NOTE: You could also enumerate the available output formats
// and pick one to use.
hr = pReader->GetOutputFormat(dwOutputNum, 0, &pOutputProps);
GOTO_EXIT_IF_FAILED(hr);
// Set the output properties back on the reader.
hr = pReader->SetOutputProps(dwOutputNum, pOutputProps);
Exit:
SAFE_RELEASE(pReaderAdv);
SAFE_RELEASE(pOutputProps);
return hr;
}
Tópicos relacionados