Audio mit Scripten programmieren ed

Es gibt zwei Audio-Konzepte: Musik und Sound. Beide werden aus Dateien geladen und nur über ihre Indizes (Typ int) angesprochen.

Musik ed

Musik spielt im Hintergrund und ist nicht davon abhängig, von wo aus sie gehört wird. Musikdateien können in stereo sein.

Die Dateien dürfen länger sein, da sie beim Abspielen immer nur stückweise geladen werden.

VolumeMusic regelt die allgemeine Musik-Lautstärke.

Erlaubte Formate:

Beispiel:

void main()
    // ein Lied laden
    int m = MusicLoad("ein Lied.ogg")

    // Lied als Schleife abspielen
    MusicPlay(m, true)

Sound ed

Sounds sind punktförmige Geräuschquellen innerhalb der 3d-Welt. Sie werden leiser, je weiter der Zuhörer entfernt ist und unterliegen bei Bewegung der Quelle oder des Zuhörers einem Dopplereffekt (werden höher/schneller, wenn sich Quelle und Zuhörer aufeinander zubewegen und tiefer/langsamer, wenn sie sich von einander entfernen). Auch die Blickrichtung des Zuhörers beeinflusst den Klang.

Sound-Dateien dürfen nur in mono sein!

Außerdem sollten die Dateien eher klein sein, da sie komplett geladen werden Hauptspeicher. Dafür können mehrere Sounds derselben Datei parallel benutzt werden, wobei die Daten wiederverwendet werden.

Als Position, Geschwindigkeit und Blickrichtung des Zuhörers wird automatisch die Hauptkamera (Kaba/Variable/Cam) benutzt.

Oder einfacher:

VolumeSounds regelt die allgemeine Sound-Lautstärke.

Erlaubte Formate:

Beispiel:

#define _engine_sound        var_i[4]

// ein Auto als Geraeusch-Quelle
void OnInit(model this)

    // Motoren-Geraeusch laden
    this._engine_sound = SoundLoad("wroom.wav")

    // endlos abspielen
    SoundPlay(this._engine_sound, true)

void OnDelete(model this)

    // aufraeumen nicht vergessen!
    SoundDelete(this._engine_sound)

void OnIterate(model this)

    // Geraeusch platzieren
    SoundSetData(this._engine_sound, this.pos, this.vel, 100, 10000, 1, 1)

    // Leertaste -> Hupe
    if GetKeyDown(KeySpace)
        SoundEmit("honk.wav", this.pos, this.vel, 100, 10000, 1, 1, false)