Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eine wichtige Aufgabe für die Wellenspüle besteht darin, die Zeitabweichung zwischen Referenzuhr und Sampleuhrkristallen aufzulösen. Dies geschieht mit der Software-Entsprechung einer phasen-gesperrten Schleife.
Der Wave Sink verfolgt, auf welche Sample-Nummer im Puffer er als nächstes schreiben kann. Auch wenn es weiß, dass es eingeschaltet ist, z. B. Beispiel 20, muss die Wellenspüle trotzdem die Masteruhr überprüfen, um eine Referenzzeit zu erhalten. Es verfügt über einen Thread, der ungefähr alle 20 Millisekunden aufwacht und die Masteruhr zur aktuellen Zeit fragt. Die Masteruhr meldet möglicherweise zurück, dass die aktuelle Uhrzeit (in Millisekunden) beispielsweise 420 ist.
Die Wellenspüle behält auch eine Latenzuhr bei, die den Offset zwischen der aktuellen Zeit entsprechend der Masteruhr und der Beispielzeit anzeigt. Diese Informationen werden verwendet, um die erwartete Zeit der Masteruhr zu berechnen und diese mit dem tatsächlichen Wert der Masteruhr zu vergleichen, um festzustellen, ob die beiden Uhren auseinander gedriftet sind.
Die Wellenspüle verwendet eine phasensperrte Schleife, um die Probenzeit anzupassen. Bei der Überprüfung auf Drift passt sich der Wellenabsorber nicht um den gesamten Betrag an, da die Messwerte einen gewissen Jitter enthalten. Stattdessen wird die Beispieluhr um einen Bruchteil des Abstands zur Masteruhr verschoben. Auf diese Weise glättet der Wellensenker Jitterfehler, während er ungefähr synchron bleibt. Es nimmt auch diese Zeit und konvertiert sie in eine Latenzzeit, die relativ zur Hauptuhr ist. Dies ist wichtig, da die Anwendung möglicherweise wissen muss, wo der Synthesizer zu einem beliebigen Zeitpunkt gerendert wird.
Der Latenz-Timer teilt der Anwendung die früheste Zeit mit, zu der ein neuer Ton für die Wiedergabe geplant werden kann. Die Latenzuhrzeit ist die Masteruhrzeit sowie ein Offset, der die Latenz des Synthesizers darstellt. Diese Latenz stellt die minimale Verzögerung ab dem Zeitpunkt dar, zu dem die Anwendung eine neue Note zur Wiedergabe einreicht, bis zu dem Zeitpunkt, an dem der Synthesizer die Note tatsächlich spielt. Zu jedem Zeitpunkt kann die Anwendung einen Ton planen, der bei oder später als die aktuelle Latenzzeituhrzeit wiedergegeben wird, jedoch nicht früher.
Wenn die Masteruhr beispielsweise bei Zeit 420 ist und die Anwendung eine Note hat, die so schnell wie möglich gespielt werden möchte, teilt die Latenzuhr die früheste Zeit mit, zu der die Note gespielt werden kann. Wenn der Softwaresynthesizer eine Latenz von 100 Millisekunden hat, liegt die nächste Wiedergabe einer Notiz bei 520.
Angenommen, ein Ereignis ist zur Zeit 520 in Referenzzeit für die Wiedergabe markiert. Der Synthesizer erledigt seine Arbeit, indem Noten in Samples gerendert und alle Berechnungen in Sample-Zeit ausgeführt werden. Daher muss sie wissen, was eine Referenzzeit von 520 in der Stichprobenzeit bedeutet. Im Benutzermodus bietet die Wellenspüle zwei Funktionen, die der Synth verwendet:
IDirectMusicSynthSink::SampleToRefTime und IDirectMusicSynthSink::RefTimeToSample**
Um die Umwandlung in diesem Fall durchzuführen, ruft der Synth IDirectMusicSynthSink::RefTimeToSample auf dem Wave-Sink auf.
Die Wellenspüle gibt dann eine Probezeit zurück (z. B. 600). Die fragliche Notiz wird zur Beispielzeit 600 gerendert. Wenn dann die Synthesizer-Methode IDirectMusicSynth::Render von der Wellensenke aufgerufen wird, um den nächsten Teil des Datenstroms zu rendern (z. B. von der Sample-Zeit 600 bis 800), wird die Note bei Sample-Zeit 600 in den Puffer gerendert.
Anmerkung Die Beispielzeit wird als 64-Bit-Zahl beibehalten, um einen Rollover zu vermeiden. (Ein DWORD-Wert wird in 27 Stunden überrollt.)
Zusammenfassend führt der Synth alle internen Mathematischen Berechnungen in der Beispielzeit durch, und die Wellenspüle führt die Konvertierung aus der Beispielzeit aus der Referenzzeit aus und umgekehrt. Die Wellenspüle verwaltet auch die Synchronisierung mit der Masteruhr und stellt Latenzinformationen bereit. Das Ausblenden dieser Funktionalität in der Wellenspüle erleichtert das Schreiben des Synth.