DMus Miniport Driver
Um driver de miniporto DMus gerencia as funções dependentes de hardware de dispositivos MIDI avançados. Esses dispositivos dão suporte a recursos do DirectMusic, como tempo do sequenciador de precisão, DLS (sons baixáveis) e grupos de canais. Os drivers de miniporto DMus podem obter alto desempenho com dispositivos como MPU-401. O tempo pode ser tratado pelo driver de miniporto ou pelo driver de porta, dependendo dos recursos do hardware. Um driver de miniporto DMus também pode dar suporte a um sintetizador de software que gera um fluxo de saída de onda.
Um driver de miniporto DMus para um dispositivo de hardware MIDI deve dar suporte a duas interfaces:
A interface de miniporto inicializa o objeto miniport e cria fluxos MIDI.
A interface de fluxo gerencia um fluxo MIDI e expõe a maior parte da funcionalidade do driver de miniport.
A interface de miniport, IMiniportDMus, herda os métodos na interface IMiniport . IMiniportDMus fornece os seguintes métodos adicionais:
Inicializa o objeto miniport.
Cria um novo objeto de fluxo.
Notifica o driver de miniporto de uma solicitação de serviço.
A interface de fluxo, IMXF, herda os métodos na interface IUnknown . O IMXF fornece os seguintes métodos adicionais:
Conecta esse objeto de fluxo, que é uma fonte de dados, à interface IMXF de outro objeto de fluxo, que é um coletor de dados.
Desconecta esse objeto de fluxo da interface IMXF de outro objeto de fluxo que é um coletor de dados.
Passa uma estrutura DMUS_KERNEL_EVENT para o coletor de dados.
Define o estado do fluxo.
Além disso, a interface ISynthSinkDMus do driver de miniport do DMus fornece funcionalidade DLS para sintetizadores de software. ISynthSinkDMus herda os métodos no IMXF da interface base. ISynthSinkDMus fornece os seguintes métodos adicionais:
ISynthSinkDMus::RefTimeToSample
Converte um tempo de referência em um tempo de exemplo.
Renderiza dados de onda em um buffer para o coletor de ondas.
ISynthSinkDMus::SampleToRefTime
Converte um tempo de exemplo em um tempo de referência.
Sincroniza o relógio de exemplo com o relógio master.
O coletor de ondas do driver de porta chama ISynthSinkDMus::Render para ler os dados do PCM de onda gerados pelo sintetizador de seu fluxo de entrada MIDI. Para obter mais informações sobre o coletor de ondas, consulte A Wave Sink for Kernel-Mode Software Synthesizers.
O driver de miniporto chama as seguintes interfaces no driver de porta DMus:
PortCls contém um driver de miniporto DMus interno para um dispositivo MIDI com uma função UART. Para obter mais informações, consulte PcNewMiniport.