Поделиться через


Указание диапазонов данных WMA Pro

Файл заголовка Mmreg.h определяет значение, 0x0164 быть тегом формата волны для WMA Pro-over-S/PDIF:

  #define WAVE_FORMAT_WMASPDIF  0x0164

Соответствующий GUID подтипа формата можно указать в виде тега wave-format с помощью макроса DEFINE_WAVEFORMATEX_GUID из файла заголовка Ksmedia.h следующим образом:

  #define KSDATAFORMAT_SUBTYPE_WMA_SPDIF    \
                      DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_WMASPDIF)

В следующем примере кода показано, как драйвер miniport WaveCyclic или WavePci может указать записи таблицы KSDATARANGE_AUDIO для закрепления, поддерживающего форматы WMA Pro-over-S/PDIF и AC-3-over-S/PDIF:

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

В этом примере кода первый и второй диапазоны данных указывают форматы данных WMA Pro-over-S/PDIF с частотой выборки 48 кГц и 44,1 кГц. С помощью этих двух вариантов звуковое приложение может воспроизводить аудиопоток WMA Pro, записанный с любой из этих двух частот выборки, при условии, что внешний декодер также может обрабатывать частоту выборки.

Размер кадра синхронизации WMA Pro одинаков на 48 кГц и 44,1 кГц, и оба диапазона данных используют одни и те же значения параметров PCM — два канала и 16 бит на канал. Сведения об использовании параметров PCM для указания диапазонов данных для форматов WMA Pro-over-S/PDIF и AC-3-over-S/PDIF см. в статье S/PDIF Pass-Through передачи потоков, отличных от PCM.

Третий диапазон данных задает формат данных AC-3-over-S/PDIF. Дополнительные сведения см. в разделе Указание диапазонов данных AC-3.

Предыдущий пример не позволяет DirectSound обрабатывать форматы WMA pro-over-S/PDIF и AC-3-over-S/PDIF в Microsoft Windows 2000 с пакетом обновления 2 (SP2) и Windows 98 SE + исправление . Чтобы включить эту возможность, необходимо изменить пример кода, чтобы для каждого из трех диапазонов данных, использующих описатель KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, должен быть включен второй диапазон данных, идентичный, за исключением того, что вместо него используется описатель KSDATAFORMAT_SPECIFIER_DSOUND. Пример см. в разделе Указание диапазонов данных AC-3.