Start · Sprachen · PHP · Referenz · openal_buffer_create

openal_buffer_create

Funktion

Erstellt einen neuen OpenAL-Puffer, der Audiodaten aufnehmen kann, und gibt eine Ressource zurück.

Kategorie: misc

Signatur

openal_buffer_create(): resource

Beschreibung

openal_buffer_create() erzeugt einen neuen OpenAL-Puffer-Ressource. Ein Puffer ist ein Speicherbereich in OpenAL, in dem Audiodaten (PCM-Samples) abgelegt werden, bevor sie einer Audioquelle (Source) zugewiesen und abgespielt werden.

Der typische Arbeitsablauf in OpenAL ist: zuerst ein Gerät (openal_device_open()) und einen Kontext (openal_context_create()) öffnen, dann einen Puffer mit openal_buffer_create() erzeugen, diesen mit Audiodaten befüllen (openal_buffer_data()) und schließlich eine Quelle erstellen, die den Puffer verwendet, um Klang auszugeben.

Der zurückgegebene Puffer muss nach Gebrauch mit openal_buffer_destroy() freigegeben werden, um Ressourcenlecks zu vermeiden. Die OpenAL-Erweiterung für PHP ist nicht standardmäßig gebündelt und muss separat kompiliert bzw. installiert werden.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine OpenAL-Puffer-Ressource zurück, die Audiodaten aufnehmen kann. Bei einem Fehler (z. B. kein aktiver OpenAL-Kontext) wird false zurückgegeben.

Beispiele

Einfacher OpenAL-Puffer erstellen und Audiodaten laden

<?php
// Gerät öffnen
$device = openal_device_open();
if (!$device) {
    die('OpenAL-Gerät konnte nicht geöffnet werden.');
}

// Kontext erstellen und aktivieren
$context = openal_context_create($device);
openal_context_current($context);

// Puffer erzeugen
$buffer = openal_buffer_create();
if (!$buffer) {
    die('OpenAL-Puffer konnte nicht erstellt werden.');
}

// Audiodaten (8-Bit Mono, 22050 Hz) in den Puffer laden
$sampleRate = 22050;
$samples = str_repeat("\x7f", $sampleRate); // 1 Sekunde Stille
openal_buffer_data($buffer, AL_FORMAT_MONO8, $samples, $sampleRate);

echo 'Puffer erfolgreich erstellt und befüllt.' . PHP_EOL;

// Ressourcen freigeben
openal_buffer_destroy($buffer);
openal_context_destroy($context);
openal_device_close($device);
Puffer erfolgreich erstellt und befüllt.

Puffer mit Quelle verknüpfen und Ton abspielen

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

// Puffer und Quelle erstellen
$buffer = openal_buffer_create();
$source = openal_source_create();

// Stereo-16-Bit-Audiodaten mit 44100 Hz simulieren
$sampleRate = 44100;
$data = str_repeat("\x00\x00", $sampleRate * 2); // 1 Sekunde Stille, Stereo 16-Bit
openal_buffer_data($buffer, AL_FORMAT_STEREO16, $data, $sampleRate);

// Puffer der Quelle zuweisen
openal_source_set($source, AL_BUFFER, $buffer);

// Ton abspielen
openal_source_play($source);
echo 'Ton wird abgespielt.' . PHP_EOL;

// Warten bis der Ton fertig ist (vereinfacht)
sleep(1);

// Ressourcen freigeben
openal_source_stop($source);
openal_source_destroy($source);
openal_buffer_destroy($buffer);
openal_context_destroy($context);
openal_device_close($device);
Ton wird abgespielt.

// Wichtig · Fallstricke

Voraussetzungen: Die PHP-OpenAL-Erweiterung (ext/openal) ist nicht im PHP-Kern enthalten und muss über PECL oder manuell kompiliert werden. Ohne aktiven OpenAL-Kontext schlägt openal_buffer_create() fehl.

Ressourcenverwaltung: Jeder mit openal_buffer_create() erstellte Puffer muss explizit mit openal_buffer_destroy() freigegeben werden, da er nicht automatisch vom PHP-Garbage-Collector verwaltet wird, solange er einer Quelle zugewiesen ist.

Reihenfolge: Ein Puffer darf erst zerstört werden, nachdem er von allen Quellen getrennt wurde, da OpenAL sonst einen Fehler erzeugt.