std.audio.playback — Wiedergabe-Fassade

→ std.audio Übersicht · std.audio.alsa · std.audio.mpg123 · Guide: Audio & Video

Vereinheitlichte Wiedergabe-Schnittstelle über ALSA (WP-05). Die Unit nimmt dem Aufrufer die ALSA-Konfiguration ab: Format, Samplerate und Kanalanzahl werden aus dem WAV-Header bzw. aus dem MP3-Stream übernommen. Zwei Ebenen: AudioOpen + AudioPlay* + AudioClose für mehrere Wiedergaben auf einem Handle, und PlayWAV / PlayMP3 als Einzeiler.

Geeignet für Soundeffekte, Systembenachrichtigungen, Alarme und einfache Player.

Quelle: std/audio/playback.lyx

<WRAP center round important 90%> Die Wiedergabe arbeitet (#1930, nachgemessen mit lyxc 1.2.2B). Frühere Fassungen dieser Seite meldeten das Gegenteil: ALSASetFormat galt als dauerhaft defekt und damit die ganze Fassade. Ursache war die Fehlerprüfung in std.audio.alsa (!= 0 statt < 0) — ALSA meldet Fehler negativ, und positive Rückgaben sind Erfolg mit Zusatzinformation. </WRAP>


Imports

import std.audio.playback;

Zieht std.audio, std.audio.alsa und std.audio.mpg123 mit. MP3-Wiedergabe setzt daher zusätzlich libmpg123 voraus, WAV-Wiedergabe nur libasound.so.2.

@capabilities([fs.meta, fs.read, fs.write])


Funktionen

Signatur Sichtbarkeit Beschreibung
AudioOpen(device: pchar): int64 pub Öffnet das Standard-PCM-Gerät. Rückgabe: ALSA-Handle, 0 bei Fehler (kein negativer Wert). Der Parameter device wird derzeit ignoriert — intern wird immer ALSAAudioOpen() aufgerufen
AudioPlayWAV(handle: int64, path: pchar): int64 pub Parst den WAV-Header, setzt Format, liest die PCM-Daten und schreibt sie ans Gerät. Gibt den Puffer selbst wieder frei. AUDIO_OK oder negativer Fehlercode
AudioPlayPCM(handle: int64, buffer: int64, dataSize: int64, sampleRate: int64, channels: int64, bitsPerSample: int64): int64 pub Gibt rohe PCM-Daten aus (interleaved, Little-Endian). bitsPerSample: 8 oder 16. Der Puffer bleibt Eigentum des Aufrufers
AudioPlayMP3(handle: int64, path: pchar): int64 pub Dekodiert die Datei über libmpg123 und schreibt blockweise (16 KB) ans Gerät. Format kommt aus MP3GetFormatFull; Rückfall auf 44100 Hz / 2 Kanäle / 16 Bit, wenn der Stream nichts meldet
AudioClose(handle: int64) pub Schließt das Gerät (ALSAClose, drained vorher)
PlayWAV(path: pchar): int64 pub Öffnen, WAV abspielen, schließen — in einem Aufruf
PlayMP3(path: pchar): int64 pub Öffnen, MP3 abspielen, schließen — in einem Aufruf

Fehlercodes sind die Konstanten aus std.audio (AUDIO_OK, AUDIO_ERROR).


Codebeispiel

unit main;
import std.audio.playback;
import std.io;

fn main(): int64 {
    // Einzeiler
    if (PlayWAV("ton.wav"c) != AUDIO_OK) {
        PrintLn("Wiedergabe fehlgeschlagen");
    }

    // Mehrere Dateien auf einem Handle
    var h: int64 := AudioOpen("default"c);
    if (h == 0) { return 1; }          // 0 = Fehler, nicht -1
    AudioPlayWAV(h, "eins.wav"c);
    AudioPlayMP3(h, "zwei.mp3"c);
    AudioClose(h);
    return 0;
}


Fallstricke

Thema Details
Fehlerwert von AudioOpen 0 bedeutet Fehler — die Prüfung < 0 greift nicht
device-Parameter wirkungslos Es wird immer das ALSA-Standardgerät geöffnet
Kein PlayWAVSystem Eine Variante über den aplay-Systemaufruf existiert in der Unit nicht; frühere Fassungen dieser Seite führten sie fälschlich auf
Format je Aufruf neu gesetzt Jedes AudioPlay* ruft ALSASetFormat + ALSAPrepare — Wechsel zwischen Dateien mit unterschiedlicher Samplerate ist damit erlaubt
MP3 nur 16 Bit AudioPlayMP3 setzt das Ausgabeformat fest auf 16 Bit
Linux only ALSA bzw. PipeWire-ALSA-Brücke vorausgesetzt

Letzte Aktualisierung: 2026-09-05 (#1930, nachgemessen mit lyxc 1.2.2B) — Defektkasten ersetzt: die Wiedergabe arbeitet.

Vorherige letzte Aktualisierung: 2026-09-02 — Seite gegen std/audio/playback.lyx abgeglichen: AudioOpen, AudioPlayWAV, AudioPlayPCM, AudioPlayMP3, AudioClose und PlayMP3 ergänzt, das nicht existierende PlayWAVSystem und der falsche std.os-Import entfernt.