Поделиться через


Декодирование звука в S/PDIF

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Он был заменен средством чтения исходного кода и модуля записи приемника. Средство чтения исходного кода и модуль записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код по возможности использовал средство чтения исходного кода и модуль записи приемника вместо пакета SDK для Windows Media Format 11. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Аудио, закодированный с помощью кодека Windows Media Audio 9 Professional, можно декодировать в формат Sony/Philips Digital Interconnect Format (S/PDIF). Чтобы создать выходные данные S/PDIF, выполните следующие действия.

  1. Откройте файл, содержащий поток Windows Media Audio 9 Professional, вызвав метод IWMReader::Open .
  2. Определите выходной номер нужного потока. Дополнительные сведения см. в разделе Определение выходных номеров.
  3. Вызовите метод IWMReaderAdvanced2::SetOutputSetting , чтобы настроить выходные данные S/PDIF. Используйте g_wszEnableWMAProSPDIFOutput для имени параметра. Тип данных — WMT_TYPE_BOOL; Установите значение TRUE , чтобы включить выходные данные S/PDIF.
  4. Получите интерфейс свойств вывода (IWMOutputMediaProps) нужного формата вывода, вызвав метод IWMReader::GetOutputFormat . Дополнительные сведения о перечислении форматов вывода см. в разделе Назначение форматов вывода.
  5. Задайте формат вывода, вызвав метод IWMReader::SetOutputProps . Передайте указатель на интерфейс IWMOutputMediaProps, полученный на шаге 4.
  6. Внесите другие изменения в конфигурацию и начните воспроизведение.

Примечание

Описанные выше действия можно выполнить в синхронном средстве чтения с помощью соответствующих методов интерфейса IWMSyncReader .

 

В следующем примере кода показано, как настроить аудиопоток для вывода звука в виде данных S/PDIF. Эта функция предполагает, что файл уже загружен в средство чтения и определен выходной номер. Дополнительные сведения об использовании этого кода см. в разделе Использование примеров кода.

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;
}

Дополнительные разделы

Чтение ФАЙЛОВ ASF

Интерфейс IWMReader

Интерфейс IWMReaderAdvanced2

Интерфейс IWMSyncReader