Start · Sprachen · PHP · Referenz · openal_context_create

openal_context_create

Funktion

Erstellt einen OpenAL-Audioverarbeitungskontext für ein geöffnetes Audio-Gerät.

Kategorie: misc

Signatur

openal_context_create(resource $device): resource|false

Beschreibung

openal_context_create() erzeugt einen neuen Audioverarbeitungskontext, der einem zuvor mit openal_device_open() geöffneten Gerät zugeordnet ist. Ein Kontext ist notwendig, um Audio-Quellen, Buffer und Listener zu verwalten sowie Sounds abzuspielen.

OpenAL arbeitet mit einem gerätebasierten Modell: Zunächst wird ein Ausgabegerät geöffnet, anschließend wird ein Kontext auf diesem Gerät erstellt und aktiviert. Erst nach dem Aktivieren des Kontexts mit openal_context_current() können Audioobjekte erzeugt und verwendet werden.

Typischerweise wird für einfache Anwendungen genau ein Kontext pro Gerät benötigt. Mehrere Kontexte auf einem Gerät sind möglich, aber nur einer kann gleichzeitig aktiv sein. Nach der Verwendung sollte der Kontext mit openal_context_destroy() freigegeben werden, um Ressourcen zu vermeiden.

Hinweis: Die OpenAL-Erweiterung für PHP ist nicht standardmäßig enthalten und muss separat installiert werden (PECL-Paket openal).

Parameter

Name Typ Default Beschreibung
$device Pflicht resource Eine gültige OpenAL-Geräte-Ressource, wie sie von openal_device_open() zurückgegeben wird.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine OpenAL-Kontext-Ressource zurück, die für weitere Operationen verwendet werden kann, oder false im Fehlerfall (z. B. wenn das Gerät ungültig ist oder kein Kontext erstellt werden konnte).

Beispiele

Grundlegende Initialisierung: Gerät öffnen, Kontext erstellen und aktivieren

<?php
// Standardmäßiges Audio-Ausgabegerät öffnen
$device = openal_device_open();
if ($device === false) {
    die('Konnte kein OpenAL-Gerät öffnen.');
}

// Audioverarbeitungskontext erstellen
$context = openal_context_create($device);
if ($context === false) {
    die('Konnte keinen OpenAL-Kontext erstellen.');
}

// Kontext aktivieren (als aktuellen setzen)
if (!openal_context_current($context)) {
    die('Konnte den Kontext nicht aktivieren.');
}

echo 'OpenAL-Kontext erfolgreich erstellt und aktiviert.' . PHP_EOL;

// ... hier Audio-Operationen durchführen ...

// Kontext zerstören und Gerät schließen
openal_context_destroy($context);
openal_device_close($device);
?>
OpenAL-Kontext erfolgreich erstellt und aktiviert.

Audio-Quelle erstellen und Buffer abspielen

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

// Audio-Buffer erzeugen und mit PCM-Daten füllen
$buffer = openal_buffer_create();
// Beispiel: Stille (leere PCM-Daten) laden
openal_buffer_loadwav($buffer, '/pfad/zur/audiodatei.wav');

// Audio-Quelle erzeugen und Buffer zuweisen
$source = openal_source_create();
openal_source_set($source, AL_BUFFER, $buffer);

// Quelle abspielen
openal_source_play($source);

echo 'Wiedergabe gestartet.' . PHP_EOL;

// Ressourcen freigeben
openal_source_destroy($source);
openal_buffer_destroy($buffer);
openal_context_destroy($context);
openal_device_close($device);
?>
Wiedergabe gestartet.

// Wichtig · Fallstricke

Ressourcenverwaltung: Jeder erstellte Kontext muss am Ende explizit mit openal_context_destroy() freigegeben werden. Das Vergessen kann zu Speicherlecks führen, insbesondere in lang laufenden PHP-Prozessen (z. B. CLI-Skripte oder Daemons).

Verfügbarkeit: Die OpenAL-Erweiterung ist ein PECL-Paket und in vielen Standard-PHP-Installationen nicht enthalten. Sie muss über PECL oder die Paketverwaltung des Betriebssystems nachinstalliert werden. Auf modernen Systemen und aktuellen PHP-Versionen kann die Verfügbarkeit und Unterstützung variieren.

Nur ein aktiver Kontext: Es kann immer nur ein Kontext gleichzeitig aktiv sein. Das Aktivieren eines neuen Kontexts deaktiviert den vorherigen automatisch.