Bezeichnung
FillMusicBuffer -- beliefert den Sound-Server mit neuen Audiodaten (V5.0)
Übersicht
FillMusicBuffer(id, type$, samples[, table])
Beschreibung
Dieser Befehl wird in Verbindung mit dynamischen Musik-Streams verwendet, die mit CreateMusic() initialisiert wurden. Diese dynamischen Musik-Streams müssen ständig neue Audiodaten zugeführt werden. Dies wird durch FillMusicBuffer() gehandhabt. FillMusicBuffer() wird die angegebenen Audiodaten an den Sound-Server von Hollywood senden, der diese wiederum an das Audio-Gerät senden wird. Diese Kette von Prozessen ermöglicht es, ununterbrochen dynamisch generierte Audiodaten von Ihrem Skript zu spielen.

Der Sound-Server von Hollywood entscheidet, wenn es mehr Audiodaten benötigt und somit ist der Sound-Server auch derjenige, der entscheidet, wenn Sie FillMusicBuffer() aufrufen müssen. Somit wird Hollywood Sie benachrichtigen, wenn es mehr Audiodaten benötigt und erhöht das FillMusicBuffer Ereignis, so dass die Callback-Funktion aufgerufen wird, die Sie mit dem Befehl InstallEventHandler() zur Verfügung gestellt haben. Innerhalb dieser Callback-Funktion müssen Sie jetzt den Befehl FillMusicBuffer() aufrufen, um neue Daten zu dem Sound-Server zu schicken. Es ist nicht erlaubt, an anderen Stellen im Skript den Befehl FillMusicBuffer() aufzurufen! Sie dürfen es nur innerhalb einer Callback-Funktion vom Typ FillMusicBuffer verwenden.

Dieser Befehl hat vier Argumente: In id geben Sie das zu verwendende Musik-Objekt an. Ihr Callback wird diese Information im Tag ID der Ereignismeldung anzeigen. Das dritte Argument samples gibt an, wie viele Samples (in PCM-Daten) Sie dem Audio-Server bereitstellen. Dies muss auf genau die gleiche Anzahl von PCM-Daten festgelegt werden, die von Ihnen durch den Callback-Handler angefordert werden. Sie erhalten die Anzahl der PCM-Daten im Tag Samples der Ereignismeldung. Das Argument table ist optional und muss nur für bestimmte Arten verwendet werden (siehe unten). Das Argument type$ gibt an, wie Sie die neuen PCM-Daten dem Audio-Server zur Verfügung stellen. Dies kann einer der folgenden Zeichenketten sein:

PCM
Sie stellen direkt die neuen PCM-Daten zur Verfügung. In diesem Fall müssen Sie eine Aufstellung übergeben, welches die neuen PCM-Daten im Tag Data des optionalen Argument table enthält (siehe unten).

Sample
Sie werden die neuen PCM-Datengrupppen in Form eines Samples zur Verfügung stellen. In diesem Fall müssen Sie die ID des Samples im Tag ID des optionalen Tabellenarguments setzen (siehe unten). Darüber hinaus können Sie die Tags Start, End, Offset und Loop zur Feinabstimmung des Verfahrens verwenden, sollte der Audio-Server neue PCM-Daten holen. Siehe unten für weitere Informationen.

Mute
Wenn Sie diesen Typ angeben, wird der Audio-Server den Audio-Ausgang stumm schalten, während die PCM-Daten übertragen werden. Wenn Sie Mute im type$ Tag übergeben, müssen Sie nichts anderes angeben.

End
Geben Sie diesen Typ an, wenn Sie die Wiedergabe Ihrer Musik stoppen möchten. Sobald der Audio-Server ein End-Paket empfängt, wird er warten, bis alle Pakete der Warteschlange gespielt wurden und die Wiedergabe Ihrer Musik danach stoppen.

Die Tags in dem optionalen Argument table hängen von dem in type$ angegebenen Typ ab. Die folgenden Tags können benutzt werden:

Data:
Wenn das Argument type$ auf PCM eingestellt ist, müssen Sie eine Reihe von PCM-Daten in diesem Tag angeben. Die Aufstellung sollten so viele Daten enthalten, wie er durch den Audio-Server im Tag Samples anfordert. Die PCM-Daten müssen als signierte ganze Zahlen übergeben werden. Für 8-Bit-Daten läuft der gültige Samplebereich von -128 bis 127 und für 16-Bit-Daten reicht der gültige Samplebereich von -32768 bis 32767. Wenn Sie den Stereo-Modus verwenden, müssen Sie verschachtelte PCM-Daten übergeben, d.h. dem linken Kanalsample folgt das rechte Kanalsample und diesem folgt wieder das linke Kanalsample und so weiter.

ID:
Wenn type$ auf Sample gesetzt ist, müssen Sie die ID eines Samples übergeben, von dem der Audio-Server die PCM-Daten holen soll. Sie können die Art und Weise der Feinabstimmung, wie der Audioserver die PCM-Daten von diesem Sample holt, mit den Tags Start, End, Offset und Loop festlegen. Siehe unten für weitere Informationen.

Start, End:
Wenn type$ auf Sample eingestellt ist, können Sie mit diesen beiden Tags den Bereich im Quellensample angegeben, die der Audio-Server zum holen der Daten verwenden soll. Dies ist nützlich, wenn Sie vom Audio-Server nur einen Teil der Daten des Samples benutzen wollen. Beide Werte müssen in PCM-Daten festgelegt werden. Diese Tags sind standardmäßig auf 0 für Start und auf die Länge des angegebenen Samples für End eingestellt. Dies bedeutet, dass für das Abrufen der PCM-Daten standardmäßig das gesamte Sample verwendet wird.

Offset:
In Offset können Sie den Versatz des Samples angeben, ab dem der Audio-Server den PCM-Datenabruf starten soll. Diesen Versatz müssen Sie in PCM-Daten festlegen und bezieht sich auf die Position, welche in Start angegeben wurde. Zum Beispiel wird, wenn Sie 10000 in Start und 100 in Offset übergeben, der Audio-Server die PCM-Daten ab der Position 10100 abrufen. Standardmäßig ist dieser Tag auf 0 eingestellt, womit die PCM-Daten ab dem Anfang des Samples abgerufen werden.

Loop:
Gibt an, ob FillMusicBuffer() an den Anfang der PCM-Daten des Quellensamples springen soll, wenn das Ende erreicht worden ist oder nicht. Der Standardwert ist True, was bedeutet, FillMusicBuffer() wird automatisch an den Anfang des Samples zurückspringen, wenn ihr Ende erreicht worden ist und mehr PCM-Daten erforderlich sind. Der Beginn des Samples wird durch den Wert im Tag Start definiert.

Bitte beachten Sie, dass Sie den Befehl FlushMusicBuffer() verwenden müssen, wenn Sie die Audiodaten mit einer sehr geringen Latenz aktualisieren müssen. FillMusicBuffer() wird immer etwa 1 Sekunde Musikdaten puffern. Dies bedeutet, dass es etwa 1 Sekunde seit dem Aufruf von FillMusicBuffer() dauert, bis Sie tatsächlich die Audiodaten hören, die Sie gerade gesendet haben. Wenn Sie die Audiodaten in Echtzeit aktualisieren möchten, z.B. um auf eine neue Position im Stream zu springen, werden Sie den Musik-Puffer zuerst leeren müssen. Siehe FlushMusicBuffer für Details.

Eingaben
id
Identifikator des Musikobjekts
type$
gewünschte Weise, wie die neuen Audiodaten dem Audio-Server zur Verfügung stehen (siehe oben)
samples
Anzahl der angebotenen Samples in PCM-Daten; muss mit der Anzahl Samples identisch sein, die vom Ereignis FillMusicBuffer verlangt wird
table
optional: Tabellenargument für weitere Optionen (siehe oben)

Navigation zeigen