Configurando a codificação de áudio padrão, profissional ou sem perda

Quando o codificador de áudio do Windows Media enumera tipos de saída, ele identifica cada tipo enumerado como Standard, Professional ou Lossless. Você pode determinar se um tipo de saída é Standard, Professional ou Lossless executando as etapas a seguir.

  1. Chame IMFTransform::GetOutputAvailableType para obter uma interface IMFMediaType que representa o tipo de saída.
  2. Chame IMFMediaType::GetRepresentation para obter uma estrutura AM_MEDIA_TYPE que contenha informações sobre o tipo de saída.
  3. O membro pbFormat da estrutura AM_MEDIA_TYPE aponta para uma estrutura WAVEFORMATEX que contém informações adicionais sobre o tipo de saída. Inspecione o membro wFormatTag da estrutura WAVEFORMATEX . Um valor de 0x161 indica Standard, um valor de 0x162 indica Professional e um valor de 0x163 indica Lossless.

Se você definir propriedades no codificador de áudio do Windows Media antes de enumerar tipos de saída, poderá limitar o número de tipos de saída que são enumerados. Por exemplo, se você definir as propriedades da VBR adequadamente, poderá limitar os tipos de saída enumerados àqueles que estão na categoria Sem perda.

Codificação de áudio padrão

Você pode usar as etapas a seguir para configurar a codificação de áudio Standard.

  1. Defina as propriedades de sua escolha no codificador.
  2. Enumerar os tipos de saída possíveis.
  3. Inspecione os tipos enumerados e escolha um que tenha uma marca de formato de áudio de 0x161.
  4. Defina o tipo de saída como o tipo escolhido chamando IMFTransform::SetOutputType.

Codificação de áudio profissional

Você pode usar as etapas a seguir para configurar a codificação de áudio profissional.

  1. Defina as propriedades de sua escolha no codificador.
  2. Enumerar os tipos de saída possíveis.
  3. Inspecione os tipos enumerados e escolha um que tenha uma marca de formato de áudio de 0x162.
  4. Defina o tipo de saída como o tipo escolhido chamando IMFTransform::SetOutputType.

Codificação de áudio sem perda

Você pode usar as etapas a seguir para configurar a codificação de áudio sem perda.

  1. Defina a propriedade MFPKEY_VBRENABLED como VARIANT_TRUE.
  2. Defina a propriedade MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY como VARIANT_TRUE.
  3. Defina a propriedade MFPKEY_DESIRED_VBRQUALITY como 100.
  4. Enumerar tipos de saída.
  5. Defina o tipo de saída como um dos tipos enumerados na etapa 4 chamando IMFTransform::SetOutputType.

O código a seguir enumera todos os tipos de saída sem perda para o codificador de áudio do Windows Media. O código imprime o valor da marca de formato de áudio para cada tipo enumerado. Como todos os tipos enumerados são sem perda, todas essas marcas de formato têm um valor de 0x163. Suponha que pIMT seja um ponteiro para uma interface IMFTransform em um objeto codificador de áudio do Windows Media e que pStore seja um ponteiro para uma interface IPropertyStore no mesmo objeto. Suponha também que hr seja uma variável do tipo HRESULT que foi declarada anteriormente no 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                 
      }                                
   } 
}

Configurando a codificação de áudio