Start · Sprachen · PHP · Referenz · openal_context_suspend

openal_context_suspend

Funktion

Setzt einen OpenAL-Audiokontext aus (pausiert die Verarbeitung), ohne ihn zu zerstören.

Kategorie: misc

Signatur

openal_context_suspend(resource $context): bool

Beschreibung

openal_context_suspend hält die Verarbeitung eines OpenAL-Kontexts vorübergehend an. Der Kontext bleibt dabei erhalten und kann später mit openal_context_process wieder fortgesetzt werden. Dies ist nützlich, um den Ressourcenverbrauch zu senken, wenn die Audio-Ausgabe kurzzeitig nicht benötigt wird.

Ein ausgesetzter Kontext verarbeitet keine weiteren Audio-Ereignisse und blockiert keine Threads, die auf den Kontext warten. Die im Kontext enthaltenen Quellen und Puffer bleiben jedoch unverändert erhalten.

Typischerweise wird diese Funktion eingesetzt, wenn eine Anwendung kurzzeitig in den Hintergrund wechselt oder der Benutzer das Spiel pausiert, um CPU-Zyklen zu sparen und dennoch den Audiostatus zu bewahren.

Parameter

Name Typ Default Beschreibung
$context Pflicht resource Ein gültiger OpenAL-Kontext-Ressource-Handle, der zuvor mit openal_context_create erstellt wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Kontext erfolgreich ausgesetzt wurde, andernfalls false (z. B. wenn ein ungültiger Kontext übergeben wurde).

Beispiele

Kontext aussetzen und wieder fortsetzen

<?php
// OpenAL-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);

// Audio initialisieren ...
// ... (Quellen, Puffer etc. einrichten)

// Kontext aussetzen (z. B. beim Pausieren der Anwendung)
if (openal_context_suspend($context)) {
    echo "Kontext erfolgreich ausgesetzt." . PHP_EOL;
} else {
    echo "Fehler beim Aussetzen des Kontexts." . PHP_EOL;
}

// Später: Kontext wieder fortsetzen
openal_context_process($context);
echo "Kontext wieder aktiv." . PHP_EOL;

// Aufräumen
openal_context_destroy($context);
openal_device_close($device);
?>
Kontext erfolgreich ausgesetzt. Kontext wieder aktiv.

Pausieren aller Audio-Aktivitäten in einer Spielpause

<?php
function pauseAudio(resource $context): void {
    if (!openal_context_suspend($context)) {
        trigger_error('Audio-Kontext konnte nicht ausgesetzt werden.', E_USER_WARNING);
    }
}

function resumeAudio(resource $context): void {
    openal_context_process($context);
}

$device  = openal_device_open();
$context = openal_context_create($device);
openal_context_current($context);

// Spielpause beginnt
pauseAudio($context);
echo "Spiel pausiert – Audio ausgesetzt." . PHP_EOL;

// Spielpause endet
resumeAudio($context);
echo "Spiel fortgesetzt – Audio wieder aktiv." . PHP_EOL;

openal_context_destroy($context);
openal_device_close($device);
?>
Spiel pausiert – Audio ausgesetzt. Spiel fortgesetzt – Audio wieder aktiv.

// Wichtig · Fallstricke

Hinweis: Die OpenAL-Erweiterung für PHP (ext/openal) ist nicht Teil der Standard-PHP-Distribution und muss separat installiert werden. Sie ist zudem als experimentell eingestuft, weshalb die API ohne vorherige Ankündigung geändert werden kann.

Achtung: Nach dem Aussetzen des Kontexts mit openal_context_suspend sollte kein weiterer Kontext als aktiv gesetzt werden, bevor der ausgesetzte Kontext entweder fortgesetzt oder zerstört wird, um unvorhersehbare Verhaltensweisen zu vermeiden.