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:

// ein Auto als Geräusch-Quelle
class Car : Model
    int engine_sound

    overwrite void OnInit()

        // Motoren-Geräusch laden
        engine_sound = SoundLoad("wroom.wav")

        // endlos abspielen
        SoundPlay(engine_sound, true)

    overwrite void OnDelete()

        // aufräumen nicht vergessen!
        SoundDelete(engine_sound)
    overwrite void OnIterate()
void OnIterate(model this)
        // Geräusch platzieren
        SoundSetData(engine_sound, pos, vel, 100, 10000, 1, 1)
    SoundSetData(this._engine_sound, this.pos, this.vel, 100, 10000, 1, 1)
        // Leertaste -> Hupe
        if GetKeyDown(KeySpace)
            SoundEmit("honk.wav", pos, vel, 100, 10000, 1, 1, false)
        SoundEmit("honk.wav", this.pos, this.vel, 100, 10000, 1, 1, false)