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