Bücher online kostenlos Kostenlos Online Lesen
Erfolgreiche Spieleentwicklung

Erfolgreiche Spieleentwicklung

Titel: Erfolgreiche Spieleentwicklung
Autoren: Alexander Rudolph
Vom Netzwerk:
Sound-Buffer-Objekt zum Speichern eines Sound Samples angelegt. Im Anschluss daran können die Daten einer Audiodatei im wav -Format eingelesen und im Sound Buffer gespeichert werden:
    ALuint SoundBuffer;
alGenBuffers(1, &SoundBuffer);
ALFWLoadWaveToBuffer(“SoundSample.wav”, SoundBuffer);
    Im dritten Schritt wird ein Source-Objekt (eine Soundquelle) zum Abspielen des Sound-Beispiels erzeugt und mit dem betreffenden Sound-Buffer-Objekt verbunden:
    ALuint SoundSource;
alGenSources(1, &SoundSource);
alSourcei(SoundSource, AL_BUFFER, SoundBuffer);
    Im Anschluss daran kann das Sound-Beispiel abgespielt werden:
    alSourcePlay(SoundSource);
    Bevor die OpenAL-Anwendung beendet werden kann, müssen sowohl der Abspielvorgang unterbrochen als auch die verwendeten OpenAL-Objekte freigegeben werden:
    alSourceStop(SoundSource);

alDeleteSources(1, &SoundSource);
alDeleteBuffers(1, &SoundBuffer);

ALFWShutdownOpenAL();
ALFWShutdown();
    Eigenschaften des OpenAL-Listener-Objekts
    Listing 3.1 zeigt die wichtigsten Parameter, mit denen das Listener-Objekt seitens des OpenAL-APIs bei jedem Programmstart initialisiert wird. Im Prinzip ist es nicht erforderlich, diese Einstellungen zu ändern, da das Resultat der Raumklangberechnungen lediglich davon abhängt, welche Positionen, Geschwindigkeiten und Orientierungen die aktiven Soundquellen relativ zum Zuhörer einnehmen. Absolute Werte – beispielsweise die Positionen des Listeners und der Soundquellen in der Spielewelt – werden im Zuge der Berechnungen nicht benötigt. Die Position des Zuhörers definiert den Ursprung des sogenannten Listener-Koordinatensystems. Die Position einer Soundquelle im Listener-Koordinatensystem entspricht gleichsam ihrer Position im Kamerakoordinatensystem, sofern man die Abstände zwischen den Augen und Ohren des Spielers vernachlässigt.
    alListener3f(AL_POSITION, 0.0f, 0.0f, 0.0f);
alListener3f(AL_VELOCITY, 0.0f, 0.0f, 0.0f);

ALfloat Orientation[] = {0.0f, 0.0f, -1.0f,
/* Blickrichtung */
0.0f, 1.0f, 0.0f };
/* Kopfneigung */

alListenerfv(AL_ORIENTATION, Orientation);
    Listing 3.1: Eigenschaften des Listener-Objekts
    Eigenschaften eines OpenAL-Source-Objekts
    Mithilfe der alSource() -Funktionen lassen sich in Abhängigkeit vom gewählten Parameter die einzelnen Eigenschaften einer Soundquelle festlegen. Die wichtigsten Parameter werden wir im Folgenden besprechen.
    Für Soundeffekte, die mehrfach abgespielt werden sollen, muss für den AL_LOOPING -Parameter der Wert AL_TRUE gesetzt werden. Der Parameter AL_MAX_DISTANCE wird benötigt, um die maximale Entfernung festzulegen, innerhalb derer eine Soundquelle noch hörbar ist. Der Parameter AL_ROLLOFF_FACTOR kommt zum Einsatz, um die Intensitätsabnahme mit zunehmender Entfernung im Rahmen des gewählten Distanzmodells einzustellen. Mithilfe der Parameter AL_POSITION , AL_VELOCITY und AL_DIRECTION werden die Position, Geschwindigkeit und Orientierung einer Soundquelle festgelegt. Sollen diese Daten relativ zur Position, Geschwindigkeit und Orientierung des Zuhörers interpretiert werden, muss für den Parameter AL_SOURCE_RELATIVE der Wert AL_TRUE gesetzt werden. Die Tonhöhe, bzw. die Abspielgeschwindigkeit, lässt sich mithilfe des Parameters AL_PITCH beeinflussen. Bei Pitch-Werten über 1 wird der Sound schneller abgespielt und klingt dabei höher. Der Parameter AL_GAIN wird zum Einstellen der richtungsunabhängigen Lautstärke benötigt. Sofern die Intensität einer Soundquelle richtungsabhängig ist (ein typisches Beispiel wäre ein Lautsprecher), kommt bei der Intensitätsberechnung ein zweiter Lautstärkewert zum Einsatz, dessen Wert sich mithilfe des AL_CONE_OUTER_GAIN -Parameters setzen lässt. Dieser Wert entspricht der minimalen Lautstärke, die man außerhalb des sogenannten äußeren Klangtrichters (der Öffnungswinkel wird mithilfe des Parameters AL_CONE_ OUTER _ANGLE festgelegt) wahrnehmen kann. Innerhalb des inneren Klangtrichters (der Öffnungswinkel wird mithilfe des Parameters AL_CONE_INNER_ANGLE eingestellt) wird die Klangintensität mithilfe des richtungsunabhängigen Lautstärkewerts berechnet und bleibt dementsprechend konstant. Im Übergangsbereich vom inneren zum äußeren Klangtrichter verringert sich die Lautstärke kontinuierlich (Listing 3.2).
    // Position und Geschwindigkeit relativ zum Listener
// festlegen:
Multiply3DVectorWithRotationMatrix(&TransformedPosition, &SourcePosition, &ViewMatrix);
Multiply3DVectorWithRotationMatrix(&TransformedVelocity, &SourceVelocity,
Vom Netzwerk:

Weitere Kostenlose Bücher