Audiodatei abspielen Platformübergreifend
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Audiodatei abspielen Platformübergreifend
Hallo,
ich möchte eine Art Daemon bauen der bei einem bestimmten UDP Paket eine Audiodatei im Hintergrund abspielt ohne einen sichtbaren Player.
Wie kann ich eine Audiodatei .ogg oder mp3 platformübergreifend im Hintergrund abspielen ?
Gruß
Frank
ich möchte eine Art Daemon bauen der bei einem bestimmten UDP Paket eine Audiodatei im Hintergrund abspielt ohne einen sichtbaren Player.
Wie kann ich eine Audiodatei .ogg oder mp3 platformübergreifend im Hintergrund abspielen ?
Gruß
Frank
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Audiodatei abspielen Platformübergreifend
z.B. mit Freds UOS.
https://github.com/fredvs/uos
https://github.com/fredvs/uos
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Audiodatei abspielen Platformübergreifend
... hmmm da sind jede menge Dateien
soll das ein Paket sein das installiert werden muss ?
Wie spiele ich denn nun eine Sounddatei ab ?

soll das ein Paket sein das installiert werden muss ?
Wie spiele ich denn nun eine Sounddatei ab ?
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Audiodatei abspielen Platformübergreifend
Im "examples" Verzeichnis sind viele Beispiele, z.B.
In Funktion sieht man UOS auch in diesem Projekt:
http://www.lazarusforum.de/viewtopic.php?f=53&t=11100
Code: Alles auswählen
program consoleplay;
///WARNING : if FPC version < 2.7.1 => Do not forget to uncoment {$DEFINE consoleapp} in define.inc !
{$mode objfpc}{$H+}
{$DEFINE UseCThreads}
uses
{$IFDEF UNIX}
cthreads,
cwstring, {$ENDIF}
Classes,
SysUtils,
CustApp,
uos_flat;
type
{ TUOSConsole }
TuosConsole = class(TCustomApplication)
private
procedure ConsolePlay;
protected
procedure doRun; override;
public
constructor Create(TheOwner: TComponent); override;
end;
var
res: integer;
ordir, opath, SoundFilename, PA_FileName, SF_FileName, MP_FileName: string;
PlayerIndex1, InputIndex1, OutputIndex1 : integer;
{ TuosConsole }
procedure TuosConsole.ConsolePlay;
begin
ordir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
{$IFDEF Windows}
{$if defined(cpu64)}
PA_FileName := ordir + 'lib\Windows\64bit\LibPortaudio-64.dll';
SF_FileName := ordir + 'lib\Windows\64bit\LibSndFile-64.dll';
{$else}
PA_FileName := ordir + 'lib\Windows\32bit\LibPortaudio-32.dll';
SF_FileName := ordir + 'lib\Windows\32bit\LibSndFile-32.dll';
{$endif}
SoundFilename := ordir + 'sound\test.ogg';
{$ENDIF}
{$if defined(cpu64) and defined(linux) }
PA_FileName := ordir + 'lib/Linux/64bit/LibPortaudio-64.so';
SF_FileName := ordir + 'lib/Linux/64bit/LibSndFile-64.so';
SoundFilename := ordir + 'sound/test.ogg';
{$ENDIF}
{$if defined(cpu86) and defined(linux)}
PA_FileName := ordir + 'lib/Linux/32bit/LibPortaudio-32.so';
SF_FileName := ordir + 'lib/Linux/32bit/LibSndFile-32.so';
SoundFilename := ordir + 'sound/test.ogg';
{$ENDIF}
{$if defined(linux) and defined(cpuarm)}
PA_FileName := ordir + 'lib/Linux/arm_raspberrypi/libportaudio-arm.so';
SF_FileName := ordir + ordir + 'lib/Linux/arm_raspberrypi/libsndfile-arm.so';
SoundFilename := ordir + 'sound/test.ogg';
{$ENDIF}
{$IFDEF freebsd}
{$if defined(cpu64)}
PA_FileName := ordir + 'lib/FreeBSD/64bit/libportaudio-64.so';
SF_FileName := ordir + 'lib/FreeBSD/64bit/libsndfile-64.so';
{$else}
PA_FileName := ordir + 'lib/FreeBSD/32bit/libportaudio-32.so';
SF_FileName := ordir + 'lib/FreeBSD/32bit/libsndfile-32.so';
{$endif}
SoundFilename := ordir + 'sound/test.ogg';
{$ENDIF}
{$IFDEF Darwin}
opath := ordir;
opath := copy(opath, 1, Pos('/UOS', opath) - 1);
PA_FileName := opath + '/lib/Mac/32bit/LibPortaudio-32.dylib';
SF_FileName := opath + '/lib/Mac/32bit/LibSndFile-32.dylib';
SoundFilename := opath + '/sound/test.ogg';
{$ENDIF}
// Load the libraries
// function uos_loadlib(PortAudioFileName, SndFileFileName, Mpg123FileName, Mp4ffFileName, FaadFileName, opusfilefilename: PChar) : LongInt;
res := uos_LoadLib(Pchar(PA_FileName), Pchar(SF_FileName), nil, nil, nil, nil) ;
writeln;
if res = 0 then
writeln('Libraries are loaded.')
else
writeln('Libraries did not load.');
if res = 0 then begin
//// Create the player.
//// PlayerIndex : from 0 to what your computer can do !
//// If PlayerIndex exists already, it will be overwriten...
PlayerIndex1 := 0;
if uos_CreatePlayer(PlayerIndex1) then
begin
//// add a Input from audio-file with default parameters
//////////// PlayerIndex : Index of a existing Player
////////// FileName : filename of audio file
// result : -1 nothing created, otherwise Input Index in array
InputIndex1 := uos_AddFromFile(PlayerIndex1,(pchar(SoundFilename)));
if InputIndex1 > -1 then
//// add a Output into device with default parameters
//////////// PlayerIndex : Index of a existing Player
// result : -1 nothing created, otherwise Output Index in array
{$if defined(cpuarm)} // need a lower latency
OutputIndex1 := uos_AddIntoDevOut(PlayerIndex1, -1, 0.3, -1, -1, -1, -1) ;
{$else}
OutputIndex1 := uos_AddIntoDevOut(PlayerIndex1);
{$endif}
if OutputIndex1 > -1 then
begin
/////// everything is ready, here we are, lets play it...
uos_Play(PlayerIndex1);
sleep(1000);
writeln;
writeln('Title: ' + uos_InputGetTagTitle(PlayerIndex1, InputIndex1));
sleep(1500);
writeln;
writeln('Artist: ' + uos_InputGetTagArtist(PlayerIndex1, InputIndex1));
writeln;
sleep(3000);
end;
end;
end;
end;
procedure TuosConsole.doRun;
begin
ConsolePlay;
writeln('Press a key to exit...');
readln;
Terminate;
uos_free(); // Do not forget this !
end;
constructor TuosConsole.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
StopOnException := True;
end;
var
Application: TUOSConsole;
begin
Application := TUOSConsole.Create(nil);
Application.Title := 'Console Player';
Application.Run;
Application.Free;
end.
http://www.lazarusforum.de/viewtopic.php?f=53&t=11100
Re: Audiodatei abspielen Platformübergreifend
Je nachdem, wie weit deine Anforderung nach Plattformunabhängigkeit reicht, könnte auch das sehr einfache playsoundpackage auf ccr (https://sourceforge.net/p/lazarus-ccr/s ... ndpackage/) in Frage kommen. Funktioniert auf Windows und Linux; bei letzterem werden einfach die im System vorhandenen Wiedergabemöglichkeiten gesucht und als sekundärer Prozess gestartet. Letzendlich braucht man nur die knapp 300 Zeilen lange Unit.
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Audiodatei abspielen Platformübergreifend
DANKE - ich wußte doch, dass so etwas simples, nicht so kompliziert sein kann. 

-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Audiodatei abspielen Platformübergreifend
Ich habe mit der vlclib gute Erfahrung machen können. Ich meine sogar eine Version liegt Lazarus sogar schon bei.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 478
- Registriert: Fr 13. Sep 2013, 12:07
- OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Audiodatei abspielen Platformübergreifend
DANKE pluto - werde ich auch mal testen.
Mit dem playsoundpackage funktioniert es jedenfalls schon mal 1A
Gruß Frank
Mit dem playsoundpackage funktioniert es jedenfalls schon mal 1A

Gruß Frank