オーディオを S/PDIF にデコードするには
[このページに関連付けられている機能である Windows Media Format 11 SDK は、レガシ機能です。 これは、ソース リーダーとシンク ライターによって置き換えられます。 ソース リーダーとシンク ライターは、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、Windows Media Format 11 SDK ではなくソース リーダーとシンク ライターを使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
Windows Media Audio 9 Professional コーデックでエンコードされたオーディオは、Sony/Philips Digital Interconnect Format (S/PDIF) にデコードできます。 S/PDIF 出力を生成するには、次の手順に従います。
- IWMReader::Open メソッドを呼び出して、Windows Media Audio 9 Professional ストリームを含むファイルを開きます。
- 目的のストリームの出力番号を特定します。 詳細については、「 出力番号を識別するには」を参照してください。
- S/PDIF 出力を構成するには、 IWMReaderAdvanced2::SetOutputSetting メソッドを呼び出します。 設定名にはg_wszEnableWMAProSPDIFOutputを使用します。 データ型は WMT_TYPE_BOOL。S/PDIF 出力を有効にするには、 値を TRUE に 設定します。
- 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;
}
関連トピック