Para decodificar áudio para S/PDIF
[A funcionalidade associada a esta página, Windows Media Format 11 SDK, é uma funcionalidade herdada. Foi substituído por Source Reader e Sink Writer. Source Reader e Sink Writer foram otimizados para o Windows 10 e o Windows 11. A Microsoft recomenda vivamente que o novo código utilize Leitor de Origem e Gravador de Destino em vez de SDK do Windows Media Format 11, sempre que 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 descodificado para Sony/Philips Digital Interconnect Format (S/PDIF). Para gerar a saída S/PDIF, execute as seguintes etapas:
- Abra um arquivo que contém 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 de IWMReaderAdvanced2::SetOutputSetting para configurar a saída S/PDIF. Utilize 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 IWMReader::GetOutputFormat método. 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 IWMReader::SetOutputProps método. Passe um ponteiro para o IWMOutputMediaProps interface obtido na etapa 4.
- Faça quaisquer 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 interfaceIWMSyncReader.
O código de exemplo a seguir demonstra como definir um fluxo de áudio para saída de áudio como dados S/PDIF. Esta função assume que um ficheiro já foi carregado no leitor e que o número de saída foi 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