Signatur
Beschreibung
openal_buffer_data() befüllt einen zuvor mit openal_buffer_create() erzeugten OpenAL-Puffer mit Rohdaten. Die Daten werden zusammen mit einem Format und einer Abtastrate (Samplerate) übergeben, sodass OpenAL die Samples korrekt interpretieren kann.
Die Funktion ist Teil der PHP-OpenAL-Erweiterung (pecl/openal), die eine Schnittstelle zur OpenAL-Bibliothek für 3D-Audioausgabe darstellt. Typische Anwendungsfälle sind Spieleprogrammierung, Audio-Tools und Demos, die direkten Zugriff auf Soundhardware benötigen.
Als Format stehen die OpenAL-Konstanten AL_FORMAT_MONO8, AL_FORMAT_MONO16, AL_FORMAT_STEREO8 und AL_FORMAT_STEREO16 zur Verfügung. Die Rohdaten müssen in exakt dem gewählten Format vorliegen – falsche Kombinationen führen zu Rauschen oder Stille.
Nachdem ein Puffer mit Daten befüllt wurde, kann er an eine Quelle (Source) gebunden werden, um die Wiedergabe zu starten. Es empfiehlt sich, die Audiodaten aus einer WAV-Datei oder einem anderen Rohformat zu laden und erst dann an den Puffer zu übergeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $buffer Pflicht | resource | Ein OpenAL-Puffer-Ressource, erzeugt mit openal_buffer_create(). |
|
| $format Pflicht | int | Das Audioformat der Daten. Gültige Werte sind die Konstanten AL_FORMAT_MONO8, AL_FORMAT_MONO16, AL_FORMAT_STEREO8 oder AL_FORMAT_STEREO16. |
|
| $data Pflicht | string | Die Rohdaten des Audiosignals als binärer String. Das Format muss zum format-Parameter passen. |
|
| $freq Pflicht | int | Die Abtastrate (Samplerate) der Audiodaten in Hz, z. B. 44100 für CD-Qualität oder 22050 für halbe Auflösung. |
Rückgabewert
true bei Erfolg zurück, false wenn die Daten nicht in den Puffer geladen werden konnten (z. B. bei ungültigem Format oder fehlerhafter Ressource).Beispiele
WAV-Datei in einen OpenAL-Puffer laden und abspielen
<?php
// OpenAL-Gerät öffnen und Kontext erstellen
$device = openal_device_open();
$context = openal_context_create($device);
openal_context_current($context);
// Puffer und Quelle anlegen
$buffer = openal_buffer_create();
$source = openal_source_create();
// WAV-Rohdaten lesen (PCM-Mono, 16 Bit, 44100 Hz)
// Für echte WAV-Dateien muss der Header (44 Bytes) übersprungen werden
$wavFile = file_get_contents('sound.wav');
$pcmData = substr($wavFile, 44); // PCM-Nutzdaten ohne WAV-Header
// Daten in den Puffer laden
$success = openal_buffer_data($buffer, AL_FORMAT_MONO16, $pcmData, 44100);
if ($success) {
// Puffer an Quelle binden und abspielen
openal_source_set($source, AL_BUFFER, $buffer);
openal_source_play($source);
echo "Wiedergabe gestartet.\n";
} else {
echo "Fehler beim Laden der Audiodaten.\n";
}
?>
Synthetisches Rauschen als Stereo-Puffer erzeugen
<?php
$device = openal_device_open();
$context = openal_context_create($device);
openal_context_current($context);
$buffer = openal_buffer_create();
// 1 Sekunde Stereo-Rauschen bei 22050 Hz, 8 Bit (2 Kanäle * 22050 Samples)
$sampleCount = 22050;
$rawData = '';
for ($i = 0; $i < $sampleCount * 2; $i++) {
$rawData .= chr(rand(0, 255)); // zufälliger 8-Bit-Wert pro Sample/Kanal
}
$result = openal_buffer_data($buffer, AL_FORMAT_STEREO8, $rawData, 22050);
echo $result ? "Puffer erfolgreich befüllt." : "Fehler beim Befüllen.";
?>
// Wichtig · Fallstricke
PECL-Erweiterung: Die OpenAL-Erweiterung ist nicht im PHP-Kern enthalten und muss über PECL installiert werden (pecl install openal). Zudem muss die native OpenAL-Bibliothek auf dem System vorhanden sein.
Datenformat beachten: Die Rohdaten müssen exakt dem angegebenen Format entsprechen. Wird z. B. AL_FORMAT_MONO16 angegeben, erwartet OpenAL 16-Bit-signed-Integer-Samples in Little-Endian-Reihenfolge. Ein falsches Format führt zu verzerrter oder gar keiner Ausgabe, ohne dass eine Fehlermeldung erzeugt wird.
WAV-Header: Beim Einlesen von WAV-Dateien muss der Datei-Header (in der Regel 44 Bytes) manuell übersprungen werden, da openal_buffer_data() ausschließlich Rohdaten (PCM) erwartet und keine Dateiformat-Dekodierung vornimmt.