Code: Alles auswählen
procedure PlaySound(sound : string);
var
phnd : TProcess;
begin
if FileExists(sound) then
begin
phnd := TProcess.Create(nil);
phnd.CommandLine := 'omxplayer --vol 600 -o local ' + sound;
phnd.Options := []; // keine
phnd.Execute; // Player starten
phnd.Free; // wieder freigeben, Sound wird trotzdem komplett abgespielt
end;
end;
Starte ich das Programm allerdings im LXTerminal, bekomme ich immer die Rückmeldungen des Omxplayers ins Terminal. Das möchte ich vermeiden, da das Programm später im Hintergrund laufen soll und meines Wissens nach dann Ausgaben auf der SD-Karte gespeichert werden, was nicht sein soll.
Code: Alles auswählen
Audio codec mp3 channels 2 samplerate 44100 bitspersample 16
Subtitle count: 0, state: off, index: 1, delay: 0
have a nice day ;)
Gibt es einen Weg, diese Ausgabe zu unterdrücken? "--no-osd" bewirkt hier nichts, weil das nur das OSD auf bei Videoausgabe betrifft. Umleiten nach "dev/null" geht ja bei TProcess auch nicht.
Randbedingungen sind:
- Es soll der osxplayer sein, weil ich bei dem einfach auf "local" (an der analogen KH-Buchse hängt die "Hausklingel" dran) Sound ausgeben kann, während der Standardsound auf "hdmi" (die Lautsprecher zum Monitor für Internetradio...) verbleiben kann.
- Das Programm muss während der Soundausgabe unbedingt weiterlaufen, es wird also nur der omxplayer gestartet und sofort im Hauptprogramm weitergemacht.
- Fehlermeldungen vom omsplayer können ignoriert werden. Ist der Sound nicht abspielbar oder die Datei nicht vorhanden ist das halt Pech.