Partilhar via


Driver de miniporta DMus

Um driver de miniporta DMus gerencia as funções dependentes de hardware de dispositivos MIDI avançados. Esses dispositivos suportam recursos DirectMusic, como sequenciamento preciso, sons transferíveis (DLS) e grupos de canais. Os drivers de miniporta DMus podem alcançar alto desempenho com dispositivos como MPU-401. A temporização pode ser manipulada pelo driver da miniporta ou pelo driver da porta, dependendo das capacidades do hardware. Um driver de miniporta DMus também pode suportar um sintetizador de software que gera um fluxo de saída de onda.

Um driver de miniporta DMus para um dispositivo de hardware MIDI deve suportar duas interfaces:

  • A interface de miniporta inicializa o objeto de miniporta e cria fluxos MIDI.

  • A interface de fluxo gerencia um fluxo MIDI e expõe a maioria das funcionalidades do driver de miniporta.

A interface de miniporta, 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 stream.

IMiniportDMus::Serviço

Notifica o controlador de miniporta de uma solicitação de serviço.

A interface de fluxo IMXF herda os métodos da 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::DisconnectOutput

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

IMXF::PutMessage

Passa uma estrutura DMUS_KERNEL_EVENT para o recetor de dados.

IMXF::SetState

Define o estado do fluxo.

Além disso, a interface ISynthSinkDMus do driver de miniporta DMus fornece funcionalidade DLS para sintetizadores de software. ISynthSinkDMus herda os métodos na interface base IMXF. ISynthSinkDMus fornece os seguintes métodos adicionais:

ISynthSinkDMus::RefTimeToSample

Converte um tempo de referência em um tempo de amostra.

ISynthSinkDMus::Renderizar

Renderiza dados de onda em um buffer para o coletor de onda.

ISynthSinkDMus::SampleToRefTime

Converte um tempo de amostra em um tempo de referência.

ISynthSinkDMus::SyncToMaster

Sincroniza o relógio de amostra com o relógio mestre.

O coletor de onda do driver de porta chama ISynthSinkDMus::Render para ler os dados de onda PCM que o sintetizador gera a partir de seu fluxo de entrada MIDI. Para obter mais informações sobre o coletor de ondas, consulte Um coletor de onda para sintetizadores de software Kernel-Mode.

O miniport driver chama as seguintes interfaces no driver de porta DMus:

IPortDMus

IAllocatorMXF

#B0 IMasterClock #C1

PortCls contém um driver de miniporta DMus integrado para um dispositivo MIDI com uma função UART. Para obter mais informações, consulte PcNewMiniport.