alDopplerFactor
Inhaltsverzeichnis
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
Falls man mit alDopplerFactor den Wert 0 setzt, so ist der Dopplereffekt faktisch deaktiviert.
Ä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))