Umgang mit Soundeffekten

Entity target_speaker mit Key targetname und Spawnflag global aktiviert

In diesem Tutorial möchte ich dir den Umgang mit Soundeffekte vermitteln. Bevor du aber loslegst, solltest du sicherstellen, dass du World of Padman in der aktuellen Version korrekt installiert hast. Mit älteren Versionen könnte es bei der Anwendung dieses Tutorials zu Fehlern kommen.

Unterstützte Dateiformate

Eigentlich unterstützt die in Quake 3 Arena verwendete id-Tech3-Engine nur Sounddateien im WAV-Format. Dabei handelt es sich um ein Containerformat, welches sogenannte PCM-Rohdaten enthält und somit die Abtastwerte des Audiosignals unkomprimiert digital darstellen kann. Dazu müssen die WAV-Dateien der folgenden Spezifikation entsprechen:

  • Anzahl der Kanäle: 1 (entspricht Mono)
  • Abtastrate pro Sekunde: 22.050 Hz
  • Bits pro Sample: 8 bit oder 16 bit

Sicherlich entspricht diese Spezifikation nicht der gewohnten CD-Qualität (44.100 Hz, 16 bit, Stereo), jedoch kann das unkomprimierte WAV-Dateiformat schnell zu größerem Bedarf an Rechen- bzw. Arbeitsspeicherkapazität und Festplattenspeicherplatz führen. Vermutlich aus diesem Grund ist man damals bei der Fülle von gleichzeitig abzuspielenden Sounds einen Kompromiss in Sachen Soundqualität eingegangen. Sounddateien konnten zwar grundsätzlich in 44.100 Hz abgespeichert sein, diese wurden dann in Quake 3 Arena trotzdem, je nach gewählter Qualitätseinstellung des Nutzers, nur mit 22.050 Hz (high) oder 11.025 Hz (low) wiedergegeben.

Seit der Weiterentwicklung der id-Tech3-Engine im Rahmen des ioquake3-Projekts wird zusätzlich der Audiocodec Ogg Vorbis unterstützt. Bei dem OGG-Dateiformat handelt es sich um ein Containerformat für verlustbehaftet komprimierte Audiodateien, welches jedoch ein patentfreies Audioformat darstellt und somit im Gegensatz zum weit verbreiteten MP3-Format ohne Lizenz verwendet werden darf. Da es sich dabei nur um ein alternatives Containerformat handelt, unterliegt es innerhalb der ioquake3-Engine grundsätzlich den gleichen Einschränkungen wie das WAV-Dateiformat.

Erst mit der Unterstützung von OpenAL wurden diese Qualitätseinschränkungen für Sounddateien aufgehoben. Wir haben zusätzlich die ioquake3-Engine so modifiziert, sodass jetzt auch Sounddateien mit einer Abtastrate von 44.100 Hz nativ unterstützt werden, auch wenn OpenAL nicht aktiviert ist. Es empfiehlt sich daher aufgrund der zu erwartenden Größe von WAV-Dateien generell auf das OGG-Dateiformat umzusteigen. Trotz der Audiokomprimierung ist jetzt eine verbesserte Klangqualität zu erwarten. Dazu müssen die OGG-Dateien der folgenden Spezifikation entsprechen:

  • Anzahl der Kanäle: 1 (entspricht Mono)
  • Abtastrate pro Sekunde: 44.100 Hz
  • Bits pro Sample: 16 bit
oggdropXPd

oggdropXPd

Bitte beachte, die Komprimierung kann individuell erfolgen, jedoch hat sich für uns im Rahmen von World of Padman für Soundeffekte die Qualitätsstufe 2 als guter Kompromiss zwischen Soundqualität und Dateigröße herausgestellt. Dies entspricht einer mittleren Bitrate von 96 kbit/s. Um WAV-Dateien in OGG-Dateien umzuwandeln, gibt es kleines Tool namens oggdropXPd.

Soundeffekte einfügen

Im Radiant werden Soundeffekte mithilfe des Entitys target_speaker in eine Map eingebunden, welches du über das Kontextmenü (Rechtsklick) unter target findest. Nachdem du das Entity ausgewählt kannst du über die Taste [N] das Enities-Menüfenster aufrufen. Durch Angabe von noise im Key-Feld musst du nun im Value-Feld den Pfad zu einer Sounddatei zuweisen (hier: sounds/maps/animal/cricket_chirping2). Bestätige die Eingabe mit der Taste [ENTER]. Damit der Soundeffekt jetzt ohne weiteres Zutun überhaupt abgespielt werden kann, musst du zumindest den Spawnflag looped_on aktivieren. Weitere Informationen zu Spawnflags findest du im nächsten Abschnitt.

Entity target_speaker mit Key noise und Spawnflag looped_on aktiviert

Entity target_speaker mit Key noise und Spawnflag looped_on aktiviert

Bitte beachte, dass die Pfadangabe immer mit einem Schrägstrich anstelle eines Rückstrichs erfolgen muss, wie es bei Unix-Systemen üblich ist. Eine Übersicht über in World of Padman vorhandene Soundeffekte und deren Pfadangaben erhältst du im Katalog: Soundeffekte. Im Gegensatz zur früheren Handhabung bei Quake 3 Arena, muss jetzt die Pfadangabe ohne das Dateisuffix (WAV) erfolgen, wenn Sounds auch im OGG-Dateiformat verwendet werden sollen. Die ioquake3-Engine ergänzt automatisch das richtige Dateisuffix und springt auf WAV zurück, wenn keine OGG-Datei vorhanden ist. Siehe folgende Beispiele:

  • OGG oder WAV: sounds/maps/ambient/car_crash
  • nur WAV: sounds/maps/ambient/car_crash.wav

Spawnflags und ihre Bedeutung

Mittels sogenannter Spawnflags kannst du verschiedene Einstellungen für das Entity target_speaker vornehmen. Diese kannst du auch miteinander kombiniert, wobei nicht alle Kombinationen einen Sinn ergeben oder auch funktionieren.

  1. looped_on ermöglicht es einen Soundeffekt ohne Pause in einer Endlosschleife ab dem Start der Map abzuspielen. Über einen Auslöser kann der Sound aus- und wieder eingeschaltet werden.
  2. looped_off ermöglicht es einen Soundeffekt ohne Pause in einer Endlosschleife abzuspielen, startet jedoch nicht ab dem Start der Map. Ein Auslöser kann den Sound ein- und wieder ausschalten. Damit der Soundeffekt überhaupt abgespielt wird, muss er in jedem Fall über einen Auslöser gestartet werden.
  3. global ermöglicht es einen Soundeffekt durch die gesamte Map und unabhängig von der eigentlichen Position mit voller Lautstärke abzuspielen. Dieser Spawnflag kann nicht mit einem der oben beschriebenen looped-Spawnflags kombiniert werden und muss in jedem Fall über einen Auslöser gestartet werden.
  4. activator ermöglicht es ein Soundeffekt nur für den Spieler hörbar abzuspielen, der ihn selbst ausgelöst hat. Damit der Soundeffekt überhaupt abgespielt wird, muss er in jedem Fall über einen Auslöser gestartet werden.

Soundeffekte zufällig verzögern

Mit den Keys wait und random kannst du das Abspielen eines Soundeffekts zeitlich zufällig verzögern. Zum Beispiel wird bei der Angabe von wait (hier: 15) erst 15 Sekunden gewartet, bis der Soundeffekt abgespielt werden kann. Durch die Angabe von random (hier: 5) kann diese Wartezeit durch eine zufällig ermittelte Zeit zwischen 0 und 5 Sekunden verkürzt oder verlängert werden. So können zum Beispiel Umgebungsgeräusche, die zur Atmosphäre in der Map beitragen sollen, ab dem Start der Map zeitlich variiert abgespielt werden, ohne dass zum Beispiel ein func_timer als Auslöser benötigt wird. Das Spawnflag looped_on darf bei dieser Methode jedoch nicht mehr aktiviert sein!

Entity target_speaker nur mit Keys noise, wait und random

Entity target_speaker nur mit Keys noise, wait und random

Soundeffekte mit Auslöser

Soundeffekte können durch Auslöser, sogenannte Trigger, ein- oder ausgeschaltet werden. Diese Auslöser können alles mögliche sein, wie z.B. ein trigger_multiple, ein func_timer, ein func_button, ein func_door oder auch Items wie Waffen oder Powerups.

In der TrashMap wird zum Beispiel beim Aufnehmen der iMPERiUS der Sound „Give it to me baby“ global in der ganzen Map abgespielt. Um so etwas selbst umzusetzen, wählst du zuerst das Entity weapon_imperius und dann das Entity target_speaker aus. Sind beide Entities in der beschriebenen Reihenfolge ausgewählt, drücke die Tastenkombination [Strg+K], um das Entity weapon_imperius mit dem Entity target_speaker zu verknüpfen. Die Reihenfolge der Auswahl ist dabei entscheidend!

Alternativ kannst du auch direkt bei jedem einzelnen Entity im Entities-Menüfenster entsprechend die Keys target für das Entity weapon_imperius und targetname für das Entity target_speaker eingeben, um eine Verknüpfung zwischen beiden herzustellen. Die Keys target und targetname müssen dabei den gleichen Wert im Value-Feld erhalten (hier: target_speaker25), damit die Zuordnung richtig funktioniert. Dieser Wert muss dann aber in der ganzen Map einmalig sein, daher ist die automatische Zuordnung wie oben beschrieben sehr zu empfehlen, die genau das sicherstellt.

Entity target_speaker mit Key targetname und Spawnflag global aktiviert

Entity target_speaker mit Key targetname und Spawnflag global aktiviert

In einem weiteren, eher klassischem Beispiel, wird in der TrashMap ein Soundeffekt abgespielt, sobald der Spieler durch ein Grasbüschel hindurch läuft. Dazu wurde um das Grasbüschel ein einfacher Brush in etwa gleichen Abmessungen erstellt und vollständig mit der Textur common/trigger belegt. Der Brush bleibt ausgewählt und wird über das Kontextmenü (Rechtsklick) zu einem trigger/trigger_multiple gemacht. Anschließend wird das Entity target_speaker der Auswahl hinzugefügt. Sind beide Entitys in der beschriebenen Reihenfolge ausgewählt, drücke die Tastenkombination [Strg+K], um den trigger_multiple mit dem Entity target_speaker zu verknüpfen. Die Keys target und targetname erhalten dabei den gleichen Wert im Value-Feld (hier: target_speaker22).

Entity target_speaker mit Key targetname

Entity target_speaker mit Key targetname

Damit nun der Sound nicht ununterbrochen abgespielt wird, falls jemand zufällig im Grasbüschel stehen bleiben sollte, wird zusätzlich der trigger_multiple über das Entities-Menüfenster mit dem Key wait um einige Sekunden verzögert.

Entity target_multiple mit den Keys targetname und wait

Entity target_multiple mit den Keys targetname und wait

Die Lautstärke beeinflussen

Es gibt grundsätzlich keinen Parameter, um die Lautstärke oder die Reichweite eines Soundeffekts in der Map zu beeinflussen. Du kannst jedoch durch den vermehrten Einsatz des gleichen taget_speaker in gewählten räumlichen Abständen einen Soundeffekt an bestimmten Stellen einer Map konzentrieren. Zum Duplizieren wählst du das Entity taget_speaker aus und drückst die Leertaste. Alle von dir bereits definierten Keys und zugehörige Values bleiben im duplizierten Entity erhalten.