Compartilhar via


DirectMusic Miniport Driver Interface

A interface do driver de miniporta DMus baseia-se na interface do driver de miniporto MIDI, mas adiciona as seguintes extensões para dar suporte a sintetizadores avançados:

  • Downloads de DLS maiores que 16 canais por instância

  • Sequenciamento de eventos de anotação no hardware

A interface do driver de miniporto DMus difere da interface do driver de miniporto MIDI de várias maneiras. Um driver de miniporto DMus implementa a interface IMiniportDMus em vez de IMiniportMidi. Essa interface é semelhante a IMiniportMidi, mas o método IMiniportDMus::NewStream cria uma interface IMXF (filtro de transformação MIDI) e se conecta a uma interface IAllocatorMXF no driver de porta DMus, em vez de implementar uma interface IMiniportMidiStream . IAllocatorMXF e IMXF encapsulam as chamadas Padrão GetMessage e PutMessage (consulte IAllocatorMXF::GetMessage e IMXF::P utMessage). Essas chamadas lidam com eventos empacotados em vez de bytes MIDI brutos.

O driver de miniporto DMus para um sintetizador pode implementar algumas ou todas as propriedades directmusic. Essas propriedades permitem que o sistema gerencie downloads de DLS e alocações de canal para o dispositivo. O arquivo de cabeçalho dmusprop.h define itens de propriedade específicos do DirectMusic. Para obter uma lista dessas propriedades, consulte KSPROPSETID_Synth e KSPROPSETID_Synth_Dls.

Espera-se que os drivers de miniporto DMus permitam a criação de várias instâncias de pino. Cada instância de pino atua como um sintetizador virtual e contém um conjunto de canais e downloads de DLS independentemente das outras instâncias de pino.

Algumas das propriedades de sintetização descritas em Conjuntos de Propriedades de Drivers de Áudio atuam em uma instância de pino e outras são globais. Para processar as propriedades globais, o sintetizador deve ter um nó sintetizador em sua topologia. A descrição de cada item de propriedade indica se esse item é enviado para o nó do sintetizador ou para uma instância de pino. Para cada parte do hardware que dá suporte à síntese, existe um objeto de driver de porta e um objeto de driver de miniport, conforme mostrado na figura a seguir.

Diagrama ilustrando a relação entre drivers de porta e miniporta para um sintetizador DirectMusic.

O objeto de driver de porta expõe uma instância de uma interface IPortDMus , que é mantida pelo objeto de driver de miniport. O driver de miniporta exporta uma instância de uma interface IMiniportDMus , que é mantida pelo driver de porta. Para cada pino instanciado, o driver de porta solicita uma interface IMXF correspondente. A comunicação entre o sistema e essa instância é a combinação de solicitações de propriedade endereçadas ao pino e eventos que fluem de ou para a interface de fluxo IMXF .

Dois objetos devem ser passados para o driver de miniporto quando ele é criado:

  • Relógio

  • Objeto Allocator

O relógio é muito importante para operações de renderização e captura. O driver de miniporta precisa renderizar anotações em seus horários especificados; quando o driver de miniporta lê dados MIDI, ele precisa saber a hora para que possa carimbar o evento de kernel. Para obter mais informações, consulte Relógios de latência.

O objeto allocator , que tem uma interface IAllocatorMXF , é usado como um pool de memória para reciclar a memória. Todas as mensagens MIDI no sistema são alocadas desse pool comum. O objeto alocador deve ser usado para criar ou destruir as mensagens individuais.

Esta seção inclui:

Transporte MIDI

Relógios de latência

Solicitações de item de propriedade do driver de miniport

Tornando PortDMus o driver de porta DirectMusic padrão

Expondo seu sintetizador como um dispositivo herdado