Start · Sprachen · PHP · Referenz · openal_source_create

openal_source_create

Funktion

Erzeugt eine neue OpenAL-Quellen-Ressource, die für die Wiedergabe von Audiopuffern verwendet werden kann.

Kategorie: misc

Signatur

openal_source_create(): resource|false

Beschreibung

openal_source_create() ist Teil der OpenAL-Erweiterung für PHP und erzeugt eine neue Audio-Quelle (Source) innerhalb des aktuellen OpenAL-Kontexts. Eine Quelle repräsentiert einen virtuellen Lautsprecher in der 3D-Audiowelt und legt fest, wo und wie ein Klang wiedergegeben wird.

Bevor eine Quelle verwendet werden kann, muss ein gültiger OpenAL-Kontext mit openal_context_create() erstellt und über openal_context_current() als aktiver Kontext gesetzt worden sein. Ohne aktiven Kontext schlägt die Quellerstellung fehl.

Nach der Erstellung kann die Quelle mit Eigenschaften wie Position, Geschwindigkeit und Lautstärke konfiguriert werden (via openal_source_set()). Ein zuvor erzeugter Audiopuffer wird mit openal_source_set() an die Quelle gebunden, bevor die Wiedergabe mit openal_source_play() gestartet wird.

Nicht mehr benötigte Quellen sollten mit openal_source_destroy() freigegeben werden, um Ressourcen zu schonen.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine OpenAL-Quellen-Ressource zurück, wenn die Erstellung erfolgreich war, oder false im Fehlerfall (z. B. kein aktiver OpenAL-Kontext oder das Limit an gleichzeitigen Quellen ist erreicht).

Beispiele

Einfache OpenAL-Quelle erstellen und Puffer zuweisen

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

// Kontext erstellen und als aktuell setzen
$context = openal_context_create($device);
if (!$context) {
    die('OpenAL-Kontext konnte nicht erstellt werden.');
}
openal_context_current($context);

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

// Audiodaten in den Puffer laden (16-Bit Mono, 44100 Hz)
$wavData = file_get_contents('audio.raw');
openal_buffer_data($buffer, AL_FORMAT_MONO16, $wavData, 44100);

// Puffer an die Quelle binden und Eigenschaften setzen
openal_source_set($source, AL_BUFFER, $buffer);
openal_source_set($source, AL_LOOPING, false);

// Wiedergabe starten
openal_source_play($source);

echo 'Wiedergabe gestartet.' . PHP_EOL;

// Warten bis Wiedergabe beendet
while (openal_source_get($source, AL_SOURCE_STATE) === AL_PLAYING) {
    usleep(50000);
}

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

Mehrere Quellen für gleichzeitige Klänge erstellen

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

$sources = [];
for ($i = 0; $i < 4; $i++) {
    $src = openal_source_create();
    if ($src === false) {
        echo "Quelle $i konnte nicht erstellt werden." . PHP_EOL;
        continue;
    }
    // Position im 3D-Raum setzen
    openal_source_set($src, AL_POSITION, [$i * 2.0, 0.0, 0.0]);
    $sources[] = $src;
}

echo 'Erstellte Quellen: ' . count($sources) . PHP_EOL;

// Aufräumen
foreach ($sources as $src) {
    openal_source_destroy($src);
}
openal_context_destroy($context);
openal_device_close($device);
Erstellte Quellen: 4

// Wichtig · Fallstricke

Hinweis zur Verfügbarkeit: Die OpenAL-Erweiterung für PHP (ext/openal) ist nicht standardmäßig in PHP enthalten und muss separat installiert bzw. kompiliert werden. Sie ist nur auf Systemen verfügbar, auf denen die OpenAL-Bibliothek installiert ist.

Ressourcenverwaltung: Die Anzahl gleichzeitig erstellbarer Quellen ist hardwareabhängig und begrenzt. Nicht mehr benötigte Quellen sollten stets mit openal_source_destroy() explizit freigegeben werden, da das automatische Aufräumen durch PHP nicht garantiert ist.

Kontext: Ein aktiver OpenAL-Kontext muss vor dem Aufruf mit openal_context_current() gesetzt sein, andernfalls gibt die Funktion false zurück.