Partilhar via


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:

  1. Abra um arquivo que contém 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 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.
  4. 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.
  5. Defina o formato de saída chamando o IWMReader::SetOutputProps método. Passe um ponteiro para o IWMOutputMediaProps interface obtido na etapa 4.
  6. 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 Avançados

Lendo arquivos ASF

Interface IWMReader

Interface IWMReaderAdvanced2

Interface IWMSyncReader