Start · Sprachen · PHP · Referenz · openal_source_set

openal_source_set

Funktion

Setzt eine Eigenschaft einer OpenAL-Audioquelle, z. B. Position, Geschwindigkeit, Lautstärke oder Pitch.

Kategorie: misc

Signatur

openal_source_set(resource $source, int $property, mixed $value): bool

Beschreibung

openal_source_set weist einer OpenAL-Audioquelle einen Eigenschaftswert zu. OpenAL-Quellen repräsentieren Klangerzeuger im 3D-Audioraum und besitzen zahlreiche konfigurierbare Attribute wie Position, Orientierung, Lautstärke, Pitch und Looping-Verhalten.

Der Parameter $property wird als eine der OpenAL-Konstanten übergeben, z. B. AL_POSITION, AL_VELOCITY, AL_GAIN, AL_PITCH oder AL_LOOPING. Je nach Eigenschaft muss $value ein Skalar (Float, Int, Bool) oder ein Array mit drei Floats (für Vektoren wie Position oder Geschwindigkeit) sein.

Die Funktion gehört zur PECL-Erweiterung openal und ist nur verfügbar, wenn diese kompiliert und aktiviert ist. Sie wird typischerweise in Verbindung mit openal_source_create, openal_buffer_create und openal_source_play verwendet, um vollständige 3D-Audio-Szenen aufzubauen.

Diese Funktion ist besonders nützlich in Spielen oder Simulationen, bei denen sich Klangquellen dynamisch im Raum bewegen oder ihre Eigenschaften zur Laufzeit verändert werden müssen.

Parameter

Name Typ Default Beschreibung
$source Pflicht resource Eine gültige OpenAL-Quellenressource, erstellt mit openal_source_create().
$property Pflicht int Die zu setzende Eigenschaft als OpenAL-Konstante, z. B. AL_GAIN, AL_PITCH, AL_POSITION, AL_VELOCITY, AL_LOOPING oder AL_BUFFER.
$value Pflicht mixed Der zu setzende Wert. Für skalare Eigenschaften (z. B. AL_GAIN) ein float oder int, für Vektoreigenschaften (z. B. AL_POSITION) ein Array mit drei Floats [x, y, z], für AL_LOOPING ein bool.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Ressource oder nicht unterstützte Eigenschaft).

Beispiele

Lautstärke und Pitch einer Audioquelle setzen

<?php
// OpenAL-Gerät und Kontext initialisieren
$device  = openal_device_open();
$context = openal_context_create($device);
openal_context_current($context);

// Quelle erstellen
$source = openal_source_create();

// Lautstärke auf 80 % setzen
openal_source_set($source, AL_GAIN, 0.8);

// Pitch leicht erhöhen
openal_source_set($source, AL_PITCH, 1.2);

echo "Lautstärke und Pitch wurden gesetzt.\n";
?>
Lautstärke und Pitch wurden gesetzt.

Position einer 3D-Klangquelle und Looping aktivieren

<?php
$device  = openal_device_open();
$context = openal_context_create($device);
openal_context_current($context);

$source = openal_source_create();

// Quelle im 3D-Raum positionieren (x=5, y=0, z=-3)
openal_source_set($source, AL_POSITION, [5.0, 0.0, -3.0]);

// Bewegungsgeschwindigkeit setzen
openal_source_set($source, AL_VELOCITY, [0.0, 0.0, 0.0]);

// Dauerhafte Wiedergabe (Loop) aktivieren
openal_source_set($source, AL_LOOPING, true);

// Buffer laden und der Quelle zuweisen
$buffer = openal_buffer_create();
openal_buffer_loadfile($buffer, 'sound.wav');
openal_source_set($source, AL_BUFFER, $buffer);

// Wiedergabe starten
openal_source_play($source);

echo "3D-Audioquelle konfiguriert und gestartet.\n";
?>
3D-Audioquelle konfiguriert und gestartet.

// Wichtig · Fallstricke

PECL-Erweiterung: openal_source_set ist Teil der PECL-Erweiterung openal, die nicht standardmäßig in PHP enthalten ist. Sie muss separat installiert und in der php.ini aktiviert werden.

Werttypen beachten: Das Übergeben eines falschen Typs für $value (z. B. ein Skalar statt eines Arrays für AL_POSITION) kann zu einem Fehler oder unerwartetem Verhalten führen. Prüfe die OpenAL-Dokumentation für den erwarteten Typ jeder Eigenschaft.

Ressourcenlebenszyklus: Stelle sicher, dass die $source-Ressource gültig und nicht bereits freigegeben wurde, bevor du Eigenschaften setzt.