Freigeben über


VoIP-Zuordnung

Die meisten Adaptertreiber, die einen Synthesizer-Miniporttreiber enthalten, enthalten auch die DirectSound-Hardwarebeschleunigung. Dies stellt sich die Frage der Sprachzuordnung zwischen Synthesizerstimme und hardwarebeschleunigten DirectSound-Puffern.

DirectMusic-Synths – sowohl Hardware als auch Software – sollten mehrere Instanzen unterstützen, um die Anzahl gleichzeitiger Clients zu maximieren. Ein Synthieautor ist möglicherweise versucht, Stimmen statisch zu Synths zuzuordnen, sollte aber wahrscheinlich alle verfügbaren Instanzen von Synths als Zeichnungen aus einem gemeinsamen, dynamischen Stimmpool betrachten. Jede instance meldet dann die verfügbare Anzahl von Stimmen als Gesamtanzahl, die im Pool verfügbar ist.

Bei dieser Implementierung kann selbst ein Hardwaresynthe mit einer begrenzten Anzahl physischer Stimmen zahlreiche Synthieinstanzen unterstützen. In Echtzeit informiert der STATS-Aufruf den Client darüber, wie viele Stimmen jeder instance derzeit verwendet. Wenn der dynamische Pool erschöpft ist und ein Synthie-instance eine neue Stimme erfordert, muss dieser Synthety-instance ein Voice-Stealing-Schema implementieren, um eine Stimme aus diesem instance zu befreien.

Das folgende Zuordnungsschema basiert auf der Idee, dass von einem Synthesizer verwendete Stimmen leichter freigegeben werden können als DirectSound-Puffer, da der Treiber die Kontrolle darüber hat, welche Daten in welcher Stimme übertragen werden, und entscheidungen über den Sprachdiebstahl treffen kann (wie in der DLS Level 1-Spezifikation beschrieben).

Alle für den Miniporttreiber verfügbaren Stimmen (Hardware, Software oder eine Kombination aus Hardware und Software) sind in zwei Pools unterteilt. Der erste Pool, der kostenlose Pool, besteht aus Stimmen, die an keiner Stelle committet werden. Der zweite Pool, der dynamische Pool, besteht aus Stimmen, die von Synthesizerinstanzen verwendet werden. Diese Stimmen werden möglicherweise derzeit von einem Synthesizer instance verwendet. Der dynamische Pool entspricht der maximalen Anzahl von Stimmen, die von einem Synthesizer instance angefordert werden, abhängig vom aktuellen Inhalt des freien Pools. DirectSound-Puffer werden bei der Zuordnung aus dem freien Pool entfernt und bei der Zuordnung zurückgegeben.

Die folgende Tabelle enthält eine Beispielsequenz von Sprachzuordnungen, die das Schema in der Praxis veranschaulichen.

Time Anforderung Kostenloser Pool Dynamischer Pool Miniport-Treiberaktion

T0

Einschalten

64

0

Initialisieren.

T1

DSound (4)

60

0

Ordnen Sie DirectSound-Puffern vier Stimmen statisch zu.

T2

Synth (32)

28

32

Erhöhen Sie den dynamischen Pool auf 32 Stimmen.

T3

Synth (24)

28

32

Keine Aktion. Es gibt bereits mehr als 24 Stimmen im dynamischen Pool.

T4

DSound (24)

4

32

Ordnen Sie DirectSound-Puffern statisch 24 Stimmen zu.

T5

Synth (48)

0

36

Erhöhen Sie den dynamischen Pool auf 36 Stimmen. (Die Methode, die den Port erstellt, gibt S_FALSE zurück und legt DMUS_PORTPARAMS fest. dwVoices = 36.)

T6

DSound (10)

0

36

Fehler. Keine Stimmen im kostenlosen Pool.

T7

DSound (-5)

5

36

Freie fünf Stimmen. Beachten Sie, dass diese nicht in den dynamischen Pool zurückkehren, obwohl die letzte Anforderung (zum Zeitpunkt von T5) für mehr als gewährt wurde.

Beachten Sie, dass DirectSound-Puffer tatsächlich einzeln zugeordnet und in der Tabelle zur Lesbarkeit gruppiert werden.

Unmittelbar nachdem ein Synthesizer-Pin instance erstellt wurde, sollten keine Stimmen basierend darauf zugeordnet werden. Kurz nach der Erstellung wird ein KSPROPERTY_SYNTH_PORTPARAMETERS Eigenschaftenelement empfangen. Dieses Eigenschaftselement gibt unter anderem die Anzahl der Stimmen an, die diesem instance zugeordnet werden sollen. Dieses Element gibt dem Miniporttreiber auch die Möglichkeit, die tatsächliche neue Größe des dynamischen Pools zu melden, falls nicht alle angeforderten Stimmen zugeordnet werden konnten.