Signatur
Beschreibung
openal_source_create() ist Teil der OpenAL-Erweiterung für PHP und erzeugt eine neue Audio-Quelle (Source) innerhalb des aktuellen OpenAL-Kontexts. Eine Quelle repräsentiert einen virtuellen Lautsprecher in der 3D-Audiowelt und legt fest, wo und wie ein Klang wiedergegeben wird.
Bevor eine Quelle verwendet werden kann, muss ein gültiger OpenAL-Kontext mit openal_context_create() erstellt und über openal_context_current() als aktiver Kontext gesetzt worden sein. Ohne aktiven Kontext schlägt die Quellerstellung fehl.
Nach der Erstellung kann die Quelle mit Eigenschaften wie Position, Geschwindigkeit und Lautstärke konfiguriert werden (via openal_source_set()). Ein zuvor erzeugter Audiopuffer wird mit openal_source_set() an die Quelle gebunden, bevor die Wiedergabe mit openal_source_play() gestartet wird.
Nicht mehr benötigte Quellen sollten mit openal_source_destroy() freigegeben werden, um Ressourcen zu schonen.
Rückgabewert
false im Fehlerfall (z. B. kein aktiver OpenAL-Kontext oder das Limit an gleichzeitigen Quellen ist erreicht).Beispiele
Einfache OpenAL-Quelle erstellen und Puffer zuweisen
<?php
// OpenAL-Gerät öffnen
$device = openal_device_open();
if (!$device) {
die('OpenAL-Gerät konnte nicht geöffnet werden.');
}
// Kontext erstellen und als aktuell setzen
$context = openal_context_create($device);
if (!$context) {
die('OpenAL-Kontext konnte nicht erstellt werden.');
}
openal_context_current($context);
// Puffer und Quelle erzeugen
$buffer = openal_buffer_create();
$source = openal_source_create();
if (!$source) {
die('OpenAL-Quelle konnte nicht erstellt werden.');
}
// Audiodaten in den Puffer laden (16-Bit Mono, 44100 Hz)
$wavData = file_get_contents('audio.raw');
openal_buffer_data($buffer, AL_FORMAT_MONO16, $wavData, 44100);
// Puffer an die Quelle binden und Eigenschaften setzen
openal_source_set($source, AL_BUFFER, $buffer);
openal_source_set($source, AL_LOOPING, false);
// Wiedergabe starten
openal_source_play($source);
echo 'Wiedergabe gestartet.' . PHP_EOL;
// Warten bis Wiedergabe beendet
while (openal_source_get($source, AL_SOURCE_STATE) === AL_PLAYING) {
usleep(50000);
}
// Ressourcen freigeben
openal_source_destroy($source);
openal_buffer_destroy($buffer);
openal_context_destroy($context);
openal_device_close($device);
Mehrere Quellen für gleichzeitige Klänge erstellen
<?php
$device = openal_device_open();
$context = openal_context_create($device);
openal_context_current($context);
$sources = [];
for ($i = 0; $i < 4; $i++) {
$src = openal_source_create();
if ($src === false) {
echo "Quelle $i konnte nicht erstellt werden." . PHP_EOL;
continue;
}
// Position im 3D-Raum setzen
openal_source_set($src, AL_POSITION, [$i * 2.0, 0.0, 0.0]);
$sources[] = $src;
}
echo 'Erstellte Quellen: ' . count($sources) . PHP_EOL;
// Aufräumen
foreach ($sources as $src) {
openal_source_destroy($src);
}
openal_context_destroy($context);
openal_device_close($device);
// Wichtig · Fallstricke
Hinweis zur Verfügbarkeit: Die OpenAL-Erweiterung für PHP (ext/openal) ist nicht standardmäßig in PHP enthalten und muss separat installiert bzw. kompiliert werden. Sie ist nur auf Systemen verfügbar, auf denen die OpenAL-Bibliothek installiert ist.
Ressourcenverwaltung: Die Anzahl gleichzeitig erstellbarer Quellen ist hardwareabhängig und begrenzt. Nicht mehr benötigte Quellen sollten stets mit openal_source_destroy() explizit freigegeben werden, da das automatische Aufräumen durch PHP nicht garantiert ist.
Kontext: Ein aktiver OpenAL-Kontext muss vor dem Aufruf mit openal_context_current() gesetzt sein, andernfalls gibt die Funktion false zurück.