Signatur
Beschreibung
openal_device_close() beendet die Verbindung zu einem OpenAL-Audiogerät, das zuvor mit openal_device_open() geöffnet wurde. Nach dem Aufruf ist das übergebene Ressource-Handle ungültig und darf nicht weiter verwendet werden.
Die Funktion sollte aufgerufen werden, wenn das Audiogerät nicht mehr benötigt wird, um Systemressourcen ordnungsgemäß freizugeben. Typischerweise wird sie am Ende des Audio-Lebenszyklus einer Anwendung aufgerufen, nachdem alle Kontexte, Quellen und Puffer bereits freigegeben wurden.
Es empfiehlt sich, vor dem Schließen des Geräts alle damit verknüpften OpenAL-Kontexte (openal_context_destroy()) sowie Puffer und Quellen explizit freizugeben, da sonst Ressourcenlecks entstehen können.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $device Pflicht | resource | Eine OpenAL-Geräte-Ressource, die zuvor von openal_device_open() zurückgegeben wurde. |
Rückgabewert
true zurück, wenn das Gerät erfolgreich geschlossen wurde, oder false bei einem Fehler (z. B. wenn das Handle ungültig ist oder das Gerät bereits geschlossen wurde).Beispiele
OpenAL-Gerät öffnen und ordnungsgemäß schließen
<?php
// OpenAL-Gerät öffnen
$device = openal_device_open();
if ($device === false) {
echo 'Gerät konnte nicht geöffnet werden.';
exit;
}
// Kontext erstellen und verwenden
$context = openal_context_create($device);
openal_context_current($context);
// ... Audio-Operationen ...
// Kontext freigeben
openal_context_destroy($context);
// Gerät schließen
if (openal_device_close($device)) {
echo 'Gerät erfolgreich geschlossen.';
} else {
echo 'Fehler beim Schließen des Geräts.';
}
Vollständiger Audio-Lebenszyklus mit Ressourcenfreigabe
<?php
$device = openal_device_open();
$context = openal_context_create($device);
openal_context_current($context);
$buffer = openal_buffer_create();
$source = openal_source_create();
// Audiodaten laden und abspielen
openal_buffer_loadwav($buffer, 'sound.wav');
openal_source_set($source, AL_BUFFER, $buffer);
openal_source_play($source);
// Warten bis Wiedergabe beendet
while (openal_source_get($source, AL_SOURCE_STATE) === AL_PLAYING) {
usleep(10000);
}
// Ressourcen in umgekehrter Reihenfolge freigeben
openal_source_stop($source);
openal_source_destroy($source);
openal_buffer_destroy($buffer);
openal_context_destroy($context);
openal_device_close($device);
echo 'Alle OpenAL-Ressourcen freigegeben.';
// Wichtig · Fallstricke
Reihenfolge der Freigabe: OpenAL-Ressourcen sollten stets in umgekehrter Erstellungsreihenfolge freigegeben werden: zuerst Quellen (sources), dann Puffer (buffers), dann Kontexte (contexts) und zuletzt das Gerät. Ein vorzeitiges Schließen des Geräts kann zu undefiniertem Verhalten führen.
Die OpenAL-Erweiterung für PHP ist nicht standardmäßig gebündelt und muss über PECL installiert werden (pecl install openal). Sie ist in modernen PHP-Versionen (ab PHP 8.x) möglicherweise nicht verfügbar oder nicht aktiv gepflegt.