Compartilhar via


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:

  1. Abra um arquivo que contenha um fluxo do Windows Media Audio 9 Professional chamando o método IWMReader::Open .
  2. Identifique o número de saída do fluxo desejado. Para obter mais informações, consulte Para identificar números de saída.
  3. 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.
  4. 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.
  5. Defina o formato de saída chamando o método IWMReader::SetOutputProps . Passe um ponteiro para a interface IWMOutputMediaProps obtida na etapa 4.
  6. 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 Avançados

Lendo arquivos ASF

IWMReader Interface

IWMReaderAdvanced2 Interface

IWMSyncReader Interface