Compartilhar via


Especificando intervalos de dados do WMA Pro

O arquivo de cabeçalho Mmreg.h define o valor 0x0164 para ser a marca de formato de onda para WMA Pro-over-S/PDIF:

  #define WAVE_FORMAT_WMASPDIF  0x0164

O GUID de formato-subtipo correspondente pode ser especificado em termos da marca de formato de onda usando a macro DEFINE_WAVEFORMATEX_GUID do arquivo de cabeçalho Ksmedia.h da seguinte maneira:

  #define KSDATAFORMAT_SUBTYPE_WMA_SPDIF    \
                      DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_WMASPDIF)

O exemplo de código a seguir mostra como um driver de miniporta WaveCyclic ou WavePci pode especificar as entradas da tabela KSDATARANGE_AUDIO para um pin que dá suporte aos formatos Pro-over-S/PDIF e AC-3-over-S/PDIF do WMA:

static KSDATARANGE_AUDIO PinDataRangesSpdifOut[] =
{
  // 48-kHz WMA Pro over S/PDIF
  {
    {
      sizeof(KSDATARANGE_AUDIO),
      0,
      0,
      0,
      STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
      STATICGUIDOF(KSDATAFORMAT_SUBTYPE_WMA_SPDIF),
      STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
    },
    2,       // Max number of channels
    16,      // Minimum number of bits per sample
    16,      // Maximum number of bits per channel
    48000,   // Minimum rate
    48000    // Maximum rate
  },

  // 44.1-kHz WMA Pro over S/PDIF
  {
    {
      sizeof(KSDATARANGE_AUDIO),
      0,
      0,
      0,
      STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
      STATICGUIDOF(KSDATAFORMAT_SUBTYPE_WMA_SPDIF),
      STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
    },
    2,       // Max number of channels
    16,      // Minimum number of bits per sample
    16,      // Maximum number of bits per channel
    44100,   // Minimum rate
    44100    // Maximum rate
  },

  // 48-kHz AC-3 over S/PDIF
  {
    {
      sizeof(KSDATARANGE_AUDIO),
      0,
      0,
      0,
      STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
      STATICGUIDOF(KSDATAFORMAT_SUBTYPE_AC3_SPDIF),
      STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
    },
    2,       // Max number of channels
    16,      // Minimum number of bits per sample
    16,      // Maximum number of bits per channel
    48000,   // Minimum rate
    48000    // Maximum rate
  },
};

Neste exemplo de código, o primeiro e o segundo intervalos de dados especificam formatos de dados WMA Pro-over-S/PDIF com taxas de exemplo de 48 kHz e 44,1 kHz. Com essas duas opções, um aplicativo de áudio pode reproduzir um fluxo de áudio WMA Pro gravado em qualquer uma dessas duas taxas de exemplo, supondo que o decodificador externo também possa lidar com a taxa de amostragem.

O tamanho do quadro de sincronização do WMA Pro é o mesmo em 48 kHz e 44,1 kHz, e ambos os intervalos de dados usam os mesmos valores de parâmetro PCM – dois canais e 16 bits por canal. Para obter informações sobre o uso de parâmetros PCM para especificar intervalos de dados para formatos WMA Pro-over-S/PDIF e AC-3-over-S/PDIF, consulte S/PDIF Pass-Through Transmissão de fluxos não PCM.

O terceiro intervalo de dados especifica um formato de dados AC-3-over-S/PDIF. Para obter mais informações, consulte Especificando intervalos de dados AC-3.

O exemplo anterior não permite que o DirectSound manipule os formatos Pro-over-S/PDIF e AC-3-over-S/PDIF não PCM no Microsoft Windows 2000 SP2 e Windows 98 SE + hotfix. Para habilitar essa funcionalidade, o código de exemplo precisaria ser modificado para que, para cada um dos três intervalos de dados que usa o especificador KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, um segundo intervalo de dados deve ser incluído idêntico, exceto pelo fato de que ele usa o especificador KSDATAFORMAT_SPECIFIER_DSOUND. Para obter um exemplo, consulte Especificando intervalos de dados AC-3.