Konfigurieren von Standard-, Professional- oder Verlustlosen Audiocodierung

Wenn der Windows Media Audio-Encoder Ausgabetypen aufzählt, identifiziert er jeden aufgezählten Typ als Standard-, Professional- oder Lossless-Typ. Sie können bestimmen, ob ein Ausgabetyp Standard, Professional oder Lossless ist, indem Sie die folgenden Schritte ausführen.

  1. Rufen Sie IMFTransform::GetOutputAvailableType auf, um eine IMFMediaType-Schnittstelle abzurufen, die den Ausgabetyp darstellt.
  2. Rufen Sie IMFMediaType::GetRepresentation auf, um eine AM_MEDIA_TYPE Struktur abzurufen, die Informationen zum Ausgabetyp enthält.
  3. Das PbFormat-Element der AM_MEDIA_TYPE Struktur verweist auf eine WAVEFORMATEX-Struktur , die zusätzliche Informationen zum Ausgabetyp enthält. Überprüfen Sie das wFormatTag-Element der WAVEFORMATEX-Struktur . Ein Wert von 0x161 gibt Standard an, ein Wert von 0x162 gibt Professional an, und ein Wert von 0x163 gibt Lossless an.

Wenn Sie Eigenschaften für den Windows Media Audio-Encoder festlegen, bevor Sie Ausgabetypen aufzählen, können Sie die Anzahl der Ausgabetypen einschränken, die aufgezählt werden. Wenn Sie beispielsweise die VBR-Eigenschaften entsprechend festlegen, können Sie die aufgezählten Ausgabetypen auf diejenigen beschränken, die sich in der Kategorie "Verlustlos" befinden.

Standard-Audiocodierung

Sie können die folgenden Schritte verwenden, um die Standard-Audiocodierung zu konfigurieren.

  1. Legen Sie die Eigenschaften Ihrer Wahl auf dem Encoder fest.
  2. Aufzählen der möglichen Ausgabetypen.
  3. Überprüfen Sie die aufgezählten Typen, und wählen Sie einen aus, der über ein Audioformattag von 0x161 verfügt.
  4. Legen Sie den Ausgabetyp auf Ihren ausgewählten Typ fest , indem Sie IMFTransform::SetOutputType aufrufen.

Professional Audiocodierung

Sie können die folgenden Schritte verwenden, um Professional Audiocodierung zu konfigurieren.

  1. Legen Sie die Eigenschaften Ihrer Wahl auf dem Encoder fest.
  2. Aufzählen der möglichen Ausgabetypen.
  3. Überprüfen Sie die aufgezählten Typen, und wählen Sie einen aus, der über ein Audioformattag von 0x162 verfügt.
  4. Legen Sie den Ausgabetyp auf Ihren ausgewählten Typ fest , indem Sie IMFTransform::SetOutputType aufrufen.

Verlustlose Audiocodierung

Sie können die folgenden Schritte verwenden, um die Verlustlose Audiocodierung zu konfigurieren.

  1. Legen Sie die MFPKEY_VBRENABLED-Eigenschaft auf VARIANT_TRUE fest.
  2. Legen Sie die MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY-Eigenschaft auf VARIANT_TRUE fest.
  3. Legen Sie die MFPKEY_DESIRED_VBRQUALITY-Eigenschaft auf 100 fest.
  4. Aufzählen von Ausgabetypen.
  5. Legen Sie den Ausgabetyp in Schritt 4 fest, indem Sie IMFTransform::SetOutputType aufrufen.

Im folgenden Code werden alle verlustlosen Ausgabetypen für den Windows Media Audio-Encoder aufgezählt. Der Code druckt den Wert des Audioformattags für jeden aufgezählten Typ. Da alle aufgezählten Typen verlustlos sind, haben alle diese Formattags einen Wert von 0x163. Angenommen, pIMT ist ein Zeiger auf eine IMFTransform-Schnittstelle auf einem Windows Media Audio-Encoderobjekt und dass pStore ein Zeiger auf eine IPropertyStore-Schnittstelle auf demselben Objekt ist. Angenommen, hr ist eine Variable vom Typ HRESULT , die zuvor im Code deklariert wurde.

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                 
      }                                
   } 
}

Konfigurieren der Audiocodierung