Freigeben über


Synthesizer und Wellensenken

Die Rendering-Engine umfasst zwei Teile:

  • Der Synthesizer, der MIDI-Nachrichten akzeptiert und in Wave-Audiobeispiele konvertiert.

  • Die Wellensenke, die ein Ziel für die Wellenbeispiele bereitstellt und die Ausgabe synchronisiert.

Standardmäßig verwendet eine DirectMusic-Anwendung den Microsoft Software Synthesizer (dmsynth.dll) als Synthesizer und DirectSound als Wellenausgabegerät.

In DirectX 6.1 und DirectX 7 kann eine DirectMusic-Anwendung diese Standardwerte überschreiben. Beispielsweise kann die Anwendung den Microsoft-Softwaresynthetizer verwenden, aber die Ausgabe an eine WAV-Datei weiterleiten, oder sie könnte einen benutzerdefinierten Synthesizer implementieren, der mit der Standardmäßigen Wellensenke funktioniert. Letzteres Szenario ist wahrscheinlicher, da die Standardwellensenke für die meisten Synthesizer gut funktionieren sollte.

In DirectX 8 und höher verwendet DirectMusic immer seine integrierte Wellensenke, um Daten aus einem Benutzermodus-Synth auszugeben, aber eine Anwendung kann den Standardsoftwaresynth überschreiben. Dies bedeutet, dass eine DirectMusic-Anwendung einen benutzerdefinierten Benutzermodus-Synthesizer implementieren kann, der Synthesizer jedoch die integrierte Wellensenke von DirectMusic verwenden muss.

Die folgende Abbildung zeigt, wie die DirectMusic-Architektur Synthesizer im Benutzermodus und Wellensenken integriert. Beachten Sie, dass der Block mit der Bezeichnung "DirectMusic Port" in der folgenden Abbildung nicht mit dem DMus-Porttreiber im Kernelmodus im PortCls-Systemtreibermodul portcls.sys verwechselt werden sollte. Ein DirectMusic-Port ist ein Benutzermodusobjekt mit einer IDirectMusicPort-Schnittstelle (Teil der DirectMusic-API) und wird in dmusic.dll implementiert. Weitere Informationen zu DirectMusic-Ports finden Sie in der Dokumentation zu Microsoft Windows SDK.

Diagramm zur Veranschaulichung der DirectMusic-Architektur für Synthesizer im Benutzermodus und Wellensenken.

In der vorherigen Abbildung sendet die Anwendung Daten an den DirectMusic-Port im Benutzermodus, der die Daten (MIDI oder DLS) an den Softwaresynth (standardmäßig dmsynth.dll) übergibt, damit die Notizen in Wellendaten gerendert werden können. Die Wellensenke verwaltet die Zeitsteuerung und übergibt dem Synth einen Puffer, der gefüllt werden soll, wenn er bereit ist, einen Datenschub zu empfangen. Der Synth füllt den Puffer (standardmäßig ein IDirectSoundBuffer-Objekt ) mit Daten auf, damit er an DirectSound übergeben werden kann. DirectSound gibt die Daten entweder über den KMixer-Systemtreiber oder über einen DirectSound-Hardwarebeschleunigungs-Rendering-Pin auf dem Audiogerät wieder, sofern verfügbar (siehe Übersicht über die DirectSound-Hardwarebeschleunigung).

Diese grundlegende Architektur gilt auch für Kernelmodusimplementierungen, mit der Ausnahme, dass die Wellensenke den Datenpuffer direkt an die Hardware oder den KMixer-Systemtreiber übergibt. Der DMus-Porttreiber implementiert die Wellensenke für einen Kernelmodus-Softwaresynthesizer. Weitere Informationen finden Sie unter Eine Wellensenke für Kernel-Mode Softwaresynthesizer.

Wenn diese Schritte abgeschlossen sind, sollte der DirectMusic-Port im Benutzermodus geöffnet und zur Verwendung aktiviert werden. Sobald dieser Großteil des Treibercodes funktioniert, können Sie mit der Implementierung von Features beginnen. Verwenden Sie den Quellcode für den Microsoft Software Synthesizer im Benutzermodus als Vorlage, und beginnen Sie mit dem Hinzufügen der neuen Funktionalität.

Ein Benutzermodus-Softwaresynthesizer kann als Objekt mit einer IDirectMusicSynth-Schnittstelle implementiert werden. Eine Wellensenke im Benutzermodus kann als Objekt mit einer IDirectMusicSynthSink-Schnittstelle implementiert werden. Weitere Informationen finden Sie unter IDirectMusicSynth und IDirectMusicSynthSink.