Compartilhar via


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:

IMiniportDMus::Init

Inicializa o objeto miniport.

IMiniportDMus::NewStream

Cria um novo objeto de fluxo.

IMiniportDMus::Service

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:

IMXF::ConnectOutput

Conecta esse objeto de fluxo, que é uma fonte de dados, à interface IMXF de outro objeto de fluxo, que é um coletor de dados.

IMXF::D isconnectOutput

Desconecta esse objeto de fluxo da interface IMXF de outro objeto de fluxo que é um coletor de dados.

IMXF::P utMessage

Passa uma estrutura DMUS_KERNEL_EVENT para o coletor de dados.

IMXF::SetState

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.

ISynthSinkDMus::Render

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.

ISynthSinkDMus::SyncToMaster

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:

IPortDMus

IAllocatorMXF

IMasterClock

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.