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

После определения топологии для представления путей к данным и узлов управления на устройствах необходимо определить диапазоны данных для каждого настраиваемого пин-кода. Настраиваемый пин-код можно создать, настроить и подключить к волне или потоку MIDI под управлением программного обеспечения. В отличие от этого, физическое соединение или штырь неявно присутствует и не может быть ни создано, ни настроено программным обеспечением.

Перед подключением настраиваемого пина для использования в качестве приемника или источника для потока аудиофайлов или MIDI его необходимо настроить для обработки соответствующего формата данных. Как правило, пин-код можно настроить для принятия одного из нескольких форматов потока. Например, выходной контакт PCM может принимать следующие диапазоны параметров потока PCM:

  • Частота выборки 11,025 кГц, 22,05 кГц, 44,1 кГц и 48 кГц

  • Размер выборки 8, 16, 24 и 32 бита

  • Любое количество каналов от 1 до 8

Для каждого типа настраиваемого пин-кода драйвер минипорта описывает различные форматы потоковых данных, которые может обрабатывать пин-код. Эти диапазоны параметров можно указать в виде массива дескрипторов диапазона данных, как показано в следующем примере кода.

static KSDATARANGE_AUDIO PinDataRangesPcm[] =
{
    {
        {
            sizeof(KSDATARANGE_AUDIO),
            0,
            0,
            0,
            STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
            STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
            STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
        },
        8,       // Maximum number of channels
        8,       // Minimum number of bits-per-sample
        32,      // Maximum number of bits-per-channel
        11025,   // Minimum rate
        48000    // Maximum rate
    }
};

Обратите внимание, что PinDataRangesPcm массив в предыдущем примере содержит один дескриптор диапазона данных типа KSDATARANGE_AUDIO. В целом массив диапазона данных может содержать произвольное количество дескрипторов. Например, выходной пин, отличный от PCM, может поддерживать форматы AC-3-over-S/PDIF и WMA Pro-over-S/PDIF. Каждый из этих двух форматов определяется отдельным дескриптором диапазона данных. Таким образом, массив диапазона данных пина будет содержать по крайней мере две структуры KSDATARANGE_AUDIO.

Настраиваемый пин-код, поддерживающий формат потока музыки из приложения, использующего DirectMusic или мультимедиа Windows midiInXxx и midiOutXxx , использует дескриптор диапазона данных типа KSDATARANGE_MUSIC.

Драйвер порта получает сведения о диапазоне данных от мини-драйвера и использует эти сведения, где это возможно, для обработки запросов на получение сведений о форматах данных, которые могут поддерживать каждый пин-код. В случае пин-кода с простым диапазоном данных PCM драйвер порта может обрабатывать запросы на пересечение для этого пин-кода. В запросе на пересечение клиент предоставляет набор диапазонов данных, представляющих возможные форматы данных для потока. По возможности обработчик пересечения диапазонов драйвера порта выбирает определённый формат данных из диапазонов данных в запросе, который также попадает в диапазоны данных контактного гнезда. Этот формат представляет собой пересечение двух наборов диапазонов данных. Таким образом, клиент и пин-код могут обрабатывать поток с помощью этого формата. Для более сложных диапазонов данных драйвер минипорта может предоставить собственный обработчик пересечения, который драйвер портов затем использует вместо собственного обработчика по умолчанию. Обработчик пересечений драйвера минипорта может учитывать любые требования к формату, которые трудно представить драйверу порта в виде массива диапазонов данных. Дополнительные сведения см. в разделе Data-Intersection Handlers and Multiple Channel Audio Data and WAVE Files.