将音频解码为 S/PDIF
[与此页面关联的功能 Windows Media Format 11 SDK 是一项旧功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用源读取器和接收器编写器,而不是 Windows Media 格式 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
使用 Windows Media Audio 9 专业编解码器编码的音频可以解码为 Sony/Philips 数字互连格式 (S/PDIF) 。 若要生成 S/PDIF 输出,请执行以下步骤:
- 通过调用 IWMReader::Open 方法打开包含 Windows Media Audio 9 Professional 流的文件。
- 确定所需的流的输出编号。 有关详细信息,请参阅 标识输出编号。
- 调用 IWMReaderAdvanced2::SetOutputSetting 方法以配置 S/PDIF 输出。 将 g_wszEnableWMAProSPDIFOutput 用作设置名称。 数据类型为 WMT_TYPE_BOOL;将值设置为 TRUE 以启用 S/PDIF 输出。
- 通过调用 IWMReader::GetOutputFormat 方法, (IWMOutputMediaProps) 所需输出格式获取输出属性接口。 有关枚举输出格式的详细信息,请参阅 分配输出格式。
- 通过调用 IWMReader::SetOutputProps 方法设置输出格式。 传入指向步骤 4 中获取的 IWMOutputMediaProps 接口的指针。
- 进行任何其他配置更改并开始播放。
注意
可以使用 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;
}
相关主题