Standard、Professional、または Lossless オーディオ エンコードの構成
Windows Media Audio エンコーダーは、出力の種類を列挙するときに、列挙された各型を Standard、Professional、または Lossless として識別します。 次の手順を実行して、出力の種類が Standard、Professional、または Lossless のどちらであるかを判断できます。
- IMFTransform::GetOutputAvailableType を呼び出して、出力の種類を表す IMFMediaType インターフェイスを取得します。
- IMFMediaType::GetRepresentation を呼び出して、出力の種類に関する情報を含むAM_MEDIA_TYPE構造体を取得します。
- AM_MEDIA_TYPE構造体の pbFormat メンバーは、出力の種類に関する追加情報を含む WAVEFORMATEX 構造体を指します。 WAVEFORMATEX 構造体の wFormatTag メンバーを調べます。 0x161 の値は Standard を示し、0x162 の値は Professional を示し、0x163 の値はロスレスを示します。
出力の種類を列挙する前に Windows Media Audio エンコーダーでプロパティを設定した場合は、列挙する出力の種類の数を制限できます。 たとえば、VBR プロパティを適切に設定した場合、列挙された出力の種類を [ロスレス] カテゴリに含まれるものに制限できます。
標準オーディオ エンコード
次の手順を使用して、Standard オーディオ エンコードを構成できます。
- エンコーダーで任意のプロパティを設定します。
- 使用可能な出力の種類を列挙します。
- 列挙された型を調べて、オーディオ形式タグが 0x161 の型を選択します。
- IMFTransform::SetOutputType を呼び出して、選択した型に出力の種類を設定します。
プロフェッショナル オーディオ エンコード
次の手順を使用して、Professional オーディオ エンコードを構成できます。
- エンコーダーで任意のプロパティを設定します。
- 使用可能な出力の種類を列挙します。
- 列挙された型を調べて、オーディオ形式タグが 0x162 の型を選択します。
- IMFTransform::SetOutputType を呼び出して、選択した型に出力の種類を設定します。
ロスレス オーディオ エンコード
次の手順を使用して、ロスレス オーディオ エンコードを構成できます。
- MFPKEY_VBRENABLED プロパティを VARIANT_TRUE に設定します。
- MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY プロパティを VARIANT_TRUE に設定します。
- MFPKEY_DESIRED_VBRQUALITY プロパティを 100 に設定します。
- 出力の種類を列挙します。
- IMFTransform::SetOutputType を呼び出して、出力の種類を手順 4 で列挙した型のいずれかに設定します。
次のコードは、Windows Media Audio エンコーダーのすべてのロスレス出力の種類を列挙します。 このコードは、列挙された各種類のオーディオ形式タグの値を出力します。 列挙されたすべての型はロスレスであるため、これらの書式タグはすべて 0x163 の値を持ちます。 pIMT が Windows Media Audio エンコーダー オブジェクトの IMFTransform インターフェイスへのポインターであり、pStore が同じオブジェクトの IPropertyStore インターフェイスへのポインターであるとします。 また、hr は、コードで以前に宣言された HRESULT 型の変数であると仮定します。
PROPVARIANT prop;
prop.vt = VT_BOOL;
prop.boolVal = VARIANT_TRUE;
hr = pStore->SetValue(MFPKEY_VBRENABLED, prop);
if(SUCCEEDED(hr))
{
hr = pStore->SetValue(MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY, prop);
if(SUCCEEDED(hr))
{
prop.vt = VT_UI4;
prop.ulVal = 100;
hr = pStore->SetValue(MFPKEY_DESIRED_VBRQUALITY, prop);
if(SUCCEEDED(hr))
{
HRESULT hrAvailableType = S_OK;
LONG j = 0;
while(MF_E_NO_MORE_TYPES != hrAvailableType)
{
IMFMediaType* pOutputType = NULL;
hrAvailableType = pIMFT->GetOutputAvailableType(
0, j, &pOutputType);
if(SUCCEEDED(hrAvailableType))
{
AM_MEDIA_TYPE* pTypeRep = NULL;
hr = pOutputType->GetRepresentation(
AM_MEDIA_TYPE_REPRESENTATION, (VOID**)&pTypeRep);
if(SUCCEEDED(hr))
{
WAVEFORMATEX* pwfex = (WAVEFORMATEX*)pTypeRep->pbFormat;
printf_s("%x\n", pwfex->wFormatTag);
pOutputType->FreeRepresentation(
AM_MEDIA_TYPE_REPRESENTATION, (VOID*)pTypeRep);
}
pOutputType->Release();
++j;
}
} // while
}
}
}
関連トピック
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示