Start · Sprachen · PHP · Referenz · openal_buffer_get

openal_buffer_get

Funktion

Ruft eine Eigenschaft eines OpenAL-Pufferobjekts ab und gibt den entsprechenden Wert zurück.

Kategorie: misc

Signatur

openal_buffer_get(resource $buffer, int $property): mixed

Beschreibung

openal_buffer_get() liest eine bestimmte Eigenschaft eines OpenAL-Puffers aus, der zuvor mit openal_buffer_create() erzeugt wurde. OpenAL-Puffer sind Speicherbereiche, in denen Audiodaten für die Wiedergabe gehalten werden.

Als Eigenschaft ($property) werden die OpenAL-Konstanten verwendet, die Metainformationen zum Puffer beschreiben — etwa die Frequenz, die Bittiefe, die Anzahl der Kanäle oder die Größe der gespeicherten Daten. Diese Informationen sind nützlich, um Audiodaten zu validieren oder Wiedergabeparameter korrekt zu setzen.

Die Funktion ist Teil der OpenAL-Erweiterung für PHP, die 3D-Audio-Ausgabe über die OpenAL-Bibliothek ermöglicht. Sie ist vor allem in experimentellen Audio- oder Spielprojekten auf Basis von PHP sinnvoll.

  • AL_FREQUENCY – Abtastrate des Puffers in Hz
  • AL_BITS – Bittiefe (z. B. 8 oder 16)
  • AL_CHANNELS – Anzahl der Audiokanäle (1 = Mono, 2 = Stereo)
  • AL_SIZE – Größe der im Puffer gespeicherten Daten in Bytes

Parameter

Name Typ Default Beschreibung
$buffer Pflicht resource Eine gültige OpenAL-Puffer-Ressource, die zuvor mit openal_buffer_create() erzeugt und mit openal_buffer_data() befüllt wurde.
$property Pflicht int Eine der OpenAL-Konstanten zur Puffereigenschaft: AL_FREQUENCY, AL_BITS, AL_CHANNELS oder AL_SIZE.

Rückgabewert

Typ
mixed
Beschreibung
Gibt den Wert der abgefragten Eigenschaft zurück (in der Regel ein int), oder false bei einem Fehler (z. B. ungültige Ressource oder unbekannte Eigenschaft).

Beispiele

Puffereigenschaften nach dem Laden einer WAV-Datei ausgeben

<?php
// OpenAL-Gerät und Kontext öffnen
$device = openal_device_open();
$context = openal_context_create($device);
openal_context_current($context);

// Puffer erstellen und mit PCM-Daten füllen
$buffer = openal_buffer_create();
$pcmData = file_get_contents('sound.raw'); // Rohe 16-Bit Mono PCM-Daten
openal_buffer_data($buffer, AL_FORMAT_MONO16, $pcmData, 44100);

// Puffereigenschaften abfragen
$frequency = openal_buffer_get($buffer, AL_FREQUENCY);
$bits      = openal_buffer_get($buffer, AL_BITS);
$channels  = openal_buffer_get($buffer, AL_CHANNELS);
$size      = openal_buffer_get($buffer, AL_SIZE);

echo "Frequenz: {$frequency} Hz\n";
echo "Bittiefe: {$bits} Bit\n";
echo "Kanäle:   {$channels}\n";
echo "Größe:    {$size} Bytes\n";

// Aufräumen
openal_buffer_destroy($buffer);
openal_context_destroy($context);
openal_device_close($device);
?>
Frequenz: 44100 Hz Bittiefe: 16 Bit Kanäle: 1 Größe: 88200 Bytes

Überprüfen ob ein Puffer Stereo-Audio enthält

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

$buffer = openal_buffer_create();
// Stereo-PCM-Daten laden
$pcmData = file_get_contents('stereo_sound.raw');
openal_buffer_data($buffer, AL_FORMAT_STEREO16, $pcmData, 44100);

$channels = openal_buffer_get($buffer, AL_CHANNELS);

if ($channels === 2) {
    echo "Der Puffer enthält Stereo-Audio.\n";
} elseif ($channels === 1) {
    echo "Der Puffer enthält Mono-Audio.\n";
} else {
    echo "Unbekannte Kanalanzahl: {$channels}\n";
}

openal_buffer_destroy($buffer);
openal_context_destroy($context);
openal_device_close($device);
?>
Der Puffer enthält Stereo-Audio.

// Wichtig · Fallstricke

Hinweis zur Verfügbarkeit: Die OpenAL-Erweiterung für PHP ist experimentell und nicht standardmäßig aktiviert. Sie muss beim Kompilieren von PHP mit --with-openal eingebunden werden und erfordert die installierte OpenAL-Bibliothek auf dem System.

Vorsicht: Das Abfragen von Eigenschaften eines noch nicht mit openal_buffer_data() befüllten Puffers kann zu undefinierten Ergebnissen oder false als Rückgabewert führen. Der Rückgabewert sollte daher stets mit === false auf Fehler geprüft werden.

Diese Erweiterung wird in modernen PHP-Versionen kaum noch genutzt und ist in vielen Distributions-Paketen nicht enthalten. Für produktiven Audioeinsatz empfehlen sich externe Bibliotheken oder Lösungen über CLI-Programme.