→ 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>
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])
| 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).
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;
}
| 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.