alDopplerFactor

Aus DGL Wiki
Wechseln zu: Navigation, Suche

alDopplerFactor

Name

alDopplerFactor - Setzt den Dopplerfaktor, um den Dopplereffekt zu verstärken.


Delphi-Spezifikation

procedure alDopplerFactor(value: TALfloat);


Parameter

value der zu setzende Skalierungsfaktor


Beschreibung

Die Funktion alDopplerFactor setzt den Skalierungsfaktor für den geschwindigkeitsabhängigen Dopplereffekt. Der Dopplereffekt hängt von den Geschwindigkeiten der Source-Objekte und des Listener-Objektes sowie der Schallgeschwindigkeit im jeweiligen Medium (Luft, Wasser, usw.) ab. Eine Anwendung kann diesen Effekt mit Hilfe von alDopplerFactor verstärken oder abschwächen, falls die physikalisch korrekte Berechnung nicht die gewünschten Ergebnisse erzielt. Der Vorgabewert ist 1.

Der von OpenAL implementierte Dopplereffekt wird nach den weiter unten folgenden Formeln berechnet.

SL: Vektor vom Source- zum Listener-Objekt
LV: Geschwindigkeitsvektor des Listener-Objektes
SV: Geschwindigkeitsvektor des Source-Objektes
f: Frequenz des Samples
f': effektive, durch Dopplereffekt erzeugte Frequenz

Länge(Vektor) := sqrt(Vektor.x*Vektor.x+Vektor.y*Vektor.y+Vektor.z*Vektor.z)
Skalarprodukt(v1, v2) := (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z)

vls = Skalarprodukt(SL, LV) / Länge(SL)

vss = Skalarprodukt(SL, SV) / Länge(SL)

vls = min(vls, AL_SPEED_OF_SOUND/AL_DOPPLER_FACTOR)

vss = min(vss, AL_SPEED_OF_SOUND/AL_DOPPLER_FACTOR)

f' = f*(AL_SPEED_OF_SOUND - AL_DOPPLER_FACTOR*vls)/ (AL_SPEED_OF_SOUND - AL_DOPPLER_FACTOR*vss)


Hinweise

Wenn man mit alDopplerFactor den Wert 0 setzt, so ist der Dopplereffekt faktisch deaktiviert.

Falls bei der Ausführung ein Fehler aufgetreten ist, kann dieser mit alGetError abgefragt werden.


Änderungen

Folgende Erweiterungen hat die Funktion erfahren:

Ab OpenAL-Version 1.1

Die Implementierung des Dopplereffekts in OpenAL 1.1 unterscheidet sich von der Implementierung in OpenAL 1.0, da diese teilweise verwirrend war. Falls der in OpenAL 1.1 weggefallene Parameter AL_DOPPLER_VELOCITY unterstützt werden soll (der Einstiegspunkt für die Funktion alDopplerVelocity bleibt auch in OpenAL 1.1 erhalten, damit für OpenAL 1.0 geschriebene Anwendungen auf gegen eine OpenAL 1.1-Bibliothek verlinken können), müssen die oben genannten Formeln wie folgt geändert werden:

vls = min(vls, AL_SPEED_OF_SOUND*AL_DOPPLER_VELOCITY/AL_DOPPLER_FACTOR)

vss = min(vss, AL_SPEED_OF_SOUND*AL_DOPPLER_VELOCITY/AL_DOPPLER_FACTOR)

f' = f*(AL_SPEED_OF_SOUND*AL_DOPPLER_VELOCITY - AL_DOPPLER_FACTOR*vls)/ (AL_SPEED_OF_SOUND*AL_DOPPLER_VELOCITY - AL_DOPPLER_FACTOR*vss)

In OpenAL 1.1 sollte AL_DOPPLER_VELOCITY (dessen Vorgabewert 1,0 ist) niemals verwendet werden.


Fehlermeldungen

AL_INVALID_VALUE wird generiert, wenn der angegebene Wert value nicht zulässig ist. Dies passiert bei allen negativen Werten.

AL_INVALID_OPERATIION wird generiert, wenn es keinen aktuellen Kontext gibt. (Siehe auch alcMakeContextCurrent.)


Zugehörige Wertrückgaben

alGet mit Token AL_DOPPLER_FACTOR


Siehe auch

alSpeedOfSound (für OpenAL 1.0 auch die veraltete Funktion alDopplerVelocity))