FillMusicBuffer(id, type$, samples[, table])
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:
Data
des optionalen Argument
table
enthält (siehe unten).
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
im type$
Tag übergeben, müssen Sie nichts anderes angeben.
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:
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:
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:
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:
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:
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.
FillMusicBuffer
verlangt wird