====== 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.