Декодирование звука в S/PDIF
[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей. Он был заменен Источник Чтения и Приемник Записи. средства чтения источников и записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал средство чтения исходных данных и средство записи принимающего устройства вместо пакета SDK Windows Media Format 11, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Звук, закодированный с помощью аудиокодека Windows Media Audio 9 Профессиональный, можно декодировать в формате Sony/Philips Digital Interconnect (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;
}
Связанные разделы