Transporte MIDI
O driver de porta DMus está envolvido nos lados frontal e traseiro do trabalho do sintetizador do miniportor DMus. O driver de porta inseriu um fluxo MIDI que consiste em dados MIDI com carimbo de data/hora e roteia o fluxo para o sequenciador. O sequenciador remove os carimbos de data/hora e passa as mensagens MIDI brutas para o driver de miniporto quando os carimbos de data/hora são devidos. (Os dados DLS passam diretamente pelo driver de porta para o driver de miniporte sem pré-processamento.)
Quando o fluxo de entrada MIDI do driver de miniport de DMus é convertido em dados de onda, sua saída é gerenciada pelo coletor de ondas (também chamado de "coletor de sintetizador" ou "coletor de renderização").
O driver de porta DMus implementa um filtro de streaming de kernel com um pin de entrada que aceita dados DirectMusic do componente do modo de usuário DirectMusic, dmusic.dll. O driver de porta também tem um pino de saída de onda que emite o fluxo de áudio sintetizado. O coletor de ondas gerencia esse pino e informa ao sintetizador onde na memória gravar seus dados. Essa disposição isola o sintetizador dos detalhes do streaming de kernel. O driver de miniporto DMus só precisa lidar com os detalhes da sintetização de dados de onda do fluxo MIDI de entrada. O driver de porta envia os dados de onda para o sistema e o grafo de filtro do SysAudio conecta os filtros para fazer tudo fluir corretamente. Conforme mostrado no diagrama a seguir, os dados MIDI entram no driver de porta DMus e, após o sequenciamento, são passados para o driver de miniporto DMus.
O driver de miniporto converte os dados MIDI em formato de onda, que é renderizado em um buffer designado por outra parte do driver de porta: o coletor de ondas. Em seguida, em vez de ir para o DirectSound como faz no modo de usuário, a saída de onda vai para o hardware de áudio por meio do driver do sistema KMixer. O DirectSound é realmente apenas uma API que expõe o KMixer, e a aceleração do DirectSound consiste nas funções do mixer sendo aceleradas no hardware em vez de emuladas no software pelo KMixer.
O driver do sistema SysAudio, que cria o grafo de filtro de áudio, conecta o driver de porta DMus a uma parte do hardware. A parte do coletor de ondas do driver de porta distribui os dados por meio de seu pino de onda, que SysAudio pode se conectar ao dispositivo de hardware. Ele extrai dados de onda do driver de miniporto DMus (sem considerar se é um sintetizador de hardware ou software) e lida com todos os problemas de tempo. Em comparação com o modo de usuário, o driver de miniporto é análogo ao sintetizador, enquanto o coletor de ondas é apenas parte do driver de porta.
Se um driver de miniporto DMus puder fornecer sua saída de volta ao host, ele exporá um pino de onda com uma direção de dados de KSPIN_DATAFLOW_OUT (consulte KSPIN), que SysAudio reconhece e conecta ao KMixer.
Para obter mais informações sobre o coletor de ondas, consulte A Wave Sink for Kernel-Mode Software Synthesizers.
Esta seção também inclui: