Standard、Professional、または Lossless オーディオ エンコードの構成

Windows Media Audio エンコーダーは、出力の種類を列挙するときに、各列挙型を Standard、Professional、または Lossless として識別します。 次の手順を実行して、出力の種類が Standard、Professional、または Lossless かどうかを確認できます。

  1. IMFTransform::GetOutputAvailableTypeを呼び出して、出力の種類を表す IMFMediaTypeインターフェイスを取得します。
  2. IMFMediaType::GetRepresentationを呼び出して、出力の種類に関する情報を含む AM _ MEDIA _ TYPE構造体を取得します。
  3. AM _ MEDIA _ TYPE構造体の pbFormat メンバーは、出力の種類に関する追加情報を含む 、FORMATATEX構造体をポイントします。 FORMATATEX 構造体の wFormatTag メンバーを検査 します。 値 0x161 Standard を示し、 0x162 は Professional を示し、 0x163 は Lossless を示します。

出力の種類を列挙する前に Windows Media Audio エンコーダーでプロパティを設定する場合は、列挙される出力の種類の数を制限できます。 たとえば、VBR プロパティを適切に設定した場合は、列挙された出力の種類を Lossless カテゴリに含む出力の種類に制限できます。

標準オーディオ エンコード

次の手順を使用して、標準オーディオ エンコードを構成できます。

  1. エンコーダーで選択したプロパティを設定します。
  2. 可能な出力の種類を列挙します。
  3. 列挙された型を調し、オーディオ形式タグが 1 つ含0x161。
  4. IMFTransform::SetOutputTypeを呼び出して、出力の種類を選択した型に設定します。

Professionalオーディオ エンコード

次の手順を使用して、オーディオ エンコードProfessional構成できます。

  1. エンコーダーで選択したプロパティを設定します。
  2. 可能な出力の種類を列挙します。
  3. 列挙された型を調し、オーディオ形式タグが 1 つ含0x162。
  4. IMFTransform::SetOutputTypeを呼び出して、出力の種類を選択した型に設定します。

無損失オーディオ エンコード

次の手順を使用して、損失のないオーディオ エンコードを構成できます。

  1. MFPKEY _ VBRENABLED プロパティを VARIANT TRUE に設定 _ します
  2. MFPKEY _ CONSTRAIN _ ENUMERATED _ VBRQUALITY プロパティをVARIANT TRUE に 設定 _ します
  3. MFPKEY _ DESIRED _ VBRQUALITY プロパティを 100 に設定します。
  4. 出力の種類を列挙します。
  5. IMFTransform::SetOutputTypeを呼び出して、手順 4. で列挙した型の 1 つを出力の種類に設定します。

次のコードは、Media Audio エンコーダーを使用して、Windows出力の種類を列挙します。 このコードは、列挙型ごとにオーディオ形式タグの値を出力します。 列挙型はすべて無損失なので、これらの書式タグの値はすべて 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                 
      }                                
   } 
}

オーディオ エンコードの構成