====== std.audio.playback — Wiedergabe-Fassade ======
→ [[lyx_-_programmiersprache:units:audio|std.audio Übersicht]] · [[lyx_-_programmiersprache:units:audio:alsa|std.audio.alsa]] · [[lyx_-_programmiersprache:units:audio:mpg123|std.audio.mpg123]] · [[lyx_-_programmiersprache:guides:audio-und-video|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''
**Die Wiedergabe arbeitet** ([[https://github.com/SEOLizer/LyX-Compiler/issues/1930|#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 [[lyx_-_programmiersprache:units:audio:alsa|std.audio.alsa]] (''!= 0'' statt ''< 0'') — ALSA meldet Fehler negativ, und positive Rückgaben sind Erfolg mit Zusatzinformation.
----
===== 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 [[lyx_-_programmiersprache:units:audio|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 ([[https://github.com/SEOLizer/LyX-Compiler/issues/1930|#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.