Signatur
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
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 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);
// 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.