Sintetizadores e coletores de ondas
O mecanismo de renderização tem duas partes:
O sintetizador, que usa mensagens MIDI e as converte em amostras de áudio de onda.
O coletor de ondas, que fornece um destino para os exemplos de onda e ajuda a sincronizar a saída.
Por padrão, um aplicativo DirectMusic usa o Sintetizador de Software da Microsoft (dmsynth.dll) como sintetizador e DirectSound como o dispositivo de saída de onda.
No DirectX 6.1 e no DirectX 7, um aplicativo DirectMusic pode substituir esses padrões. Por exemplo, o aplicativo pode usar o Sintetizador de Software da Microsoft, mas direcionar a saída para um arquivo .wav ou pode implementar um sintetizador personalizado que funciona com o coletor de ondas padrão. O último cenário é mais provável porque o coletor de ondas padrão deve funcionar bem para a maioria dos sintetizadores.
No DirectX 8 e posterior, o DirectMusic sempre usa seu coletor de ondas interno para gerar dados de um sintetizador do modo de usuário, mas um aplicativo pode substituir o sintetizador de software padrão. Isso significa que um aplicativo DirectMusic pode implementar um sintetizador personalizado do modo de usuário, mas o sintetizador deve usar o coletor de ondas interno do DirectMusic.
A figura a seguir mostra como a arquitetura DirectMusic incorpora sintetizadores de modo de usuário e coletores de ondas. Observe que o bloco rotulado como "Porta DirectMusic" na figura a seguir não deve ser confundido com o driver de porta DMus no modo kernel no módulo driver do sistema PortCls, portcls.sys. Uma porta DirectMusic é um objeto de modo de usuário com uma interface IDirectMusicPort (parte da API DirectMusic) e é implementada em dmusic.dll. Para obter mais informações sobre portas DirectMusic, consulte a documentação do SDK do Microsoft Windows.
Na figura anterior, o aplicativo envia dados para a porta DirectMusic no modo de usuário, que passa os dados (MIDI ou DLS) para o sintetizador de software (dmsynth.dll por padrão) para que ele possa renderizar as anotações em dados de onda. O coletor de ondas gerencia o tempo e entrega ao sintetizador um buffer para preencher quando estiver pronto para receber uma explosão de dados. O sintetizador preenche o buffer (um objeto IDirectSoundBuffer por padrão) com dados para que ele possa ser passado para DirectSound. O DirectSound reproduz os dados por meio do driver do sistema KMixer ou os reproduz por meio de um pino de renderização acelerada por hardware do DirectSound no dispositivo de áudio, se houver um disponível (consulte Visão geral da Aceleração de Hardware directSound).
Essa mesma arquitetura básica também se aplica a implementações no modo kernel, com exceção de que o coletor de ondas entrega o buffer de dados diretamente para o hardware ou para o driver do sistema KMixer. O driver de porta DMus implementa o coletor de ondas para um sintetizador de software no modo kernel. Para obter mais informações, consulte Um Coletor de Ondas para sintetizadores de software Kernel-Mode.
Quando essas etapas forem concluídas, a porta DirectMusic no modo de usuário deverá ser aberta e ativada para uso. Assim que grande parte do código do driver estiver funcionando, você poderá começar a implementar recursos. Use o código-fonte para o Microsoft Software Synthesizer no modo de usuário como um modelo e comece a adicionar a nova funcionalidade.
Um sintetizador de software no modo de usuário pode ser implementado como um objeto com uma interface IDirectMusicSynth. Um coletor de ondas no modo de usuário pode ser implementado como um objeto com uma interface IDirectMusicSynthSink. Para obter mais informações, consulte IDirectMusicSynth e IDirectMusicSynthSink.