Configuración de codificación de audio estándar, profesional o sin pérdida

Cuando el codificador De audio de Windows Media enumera los tipos de salida, identifica cada tipo enumerado como Estándar, Professional o Sin pérdidas. Puede determinar si un tipo de salida es Standard, Professional o Lossless mediante los pasos siguientes.

  1. Llame a IMFTransform::GetOutputAvailableType para obtener una interfaz IMFMediaType que represente el tipo de salida.
  2. Llame a IMFMediaType::GetRepresentation para obtener una estructura de AM_MEDIA_TYPE que contiene información sobre el tipo de salida.
  3. El miembro pbFormat de la estructura AM_MEDIA_TYPE apunta a una estructura WAVEFORMATEX que contiene información adicional sobre el tipo de salida. Inspeccione el miembro wFormatTag de la estructura WAVEFORMATEX . Un valor de 0x161 indica Standard, un valor de 0x162 indica Professional y un valor de 0x163 indica Lossless.

Si establece propiedades en el codificador audio de Windows Media antes de enumerar los tipos de salida, puede limitar el número de tipos de salida enumerados. Por ejemplo, si establece adecuadamente las propiedades de VBR, puede limitar los tipos de salida enumerados a los que se encuentran en la categoría Lossless.

Codificación de audio estándar

Puede usar los pasos siguientes para configurar la codificación de audio estándar.

  1. Establezca las propiedades que prefiera en el codificador.
  2. Enumerar los posibles tipos de salida.
  3. Inspeccione los tipos enumerados y elija uno que tenga una etiqueta de formato de audio de 0x161.
  4. Establezca el tipo de salida en el tipo elegido llamando a IMFTransform::SetOutputType.

Codificación de audio profesional

Puede usar los pasos siguientes para configurar la codificación de audio Professional.

  1. Establezca las propiedades que prefiera en el codificador.
  2. Enumerar los posibles tipos de salida.
  3. Inspeccione los tipos enumerados y elija uno que tenga una etiqueta de formato de audio de 0x162.
  4. Establezca el tipo de salida en el tipo elegido llamando a IMFTransform::SetOutputType.

Codificación de audio sin pérdida

Puede usar los pasos siguientes para configurar la codificación de audio sin pérdida.

  1. Establezca la propiedad MFPKEY_VBRENABLEDen VARIANT_TRUE.
  2. Establezca la propiedad MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITYen VARIANT_TRUE.
  3. Establezca la propiedad MFPKEY_DESIRED_VBRQUALITY en 100.
  4. Enumerar los tipos de salida.
  5. Establezca el tipo de salida en uno de los tipos enumerados en el paso 4 llamando a IMFTransform::SetOutputType.

En el código siguiente se enumeran todos los tipos de salida sin pérdida para el codificador de audio de Windows Media. El código imprime el valor de la etiqueta de formato de audio para cada tipo enumerado. Dado que todos los tipos enumerados no tienen pérdida, todas esas etiquetas de formato tienen un valor de 0x163. Supongamos que pIMT es un puntero a una interfaz IMFTransform en un objeto codificador de audio de Windows Media y que pStore es un puntero a una interfaz IPropertyStore en el mismo objeto. Suponga también que hr es una variable de tipo HRESULT que se declaró anteriormente en el código.

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

Configuración de la codificación de audio