Start · Sprachen · PHP · Referenz · openal_device_close

openal_device_close

Funktion

Schließt ein zuvor geöffnetes OpenAL-Audiogerät und gibt die zugehörigen Ressourcen frei.

Kategorie: misc

Signatur

openal_device_close(resource $device): bool

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

Typ
bool
Beschreibung
Gibt 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.';
}
Gerät erfolgreich geschlossen.

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.';
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.