Audiodatei abspielen Platformübergreifend

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...

Audiodatei abspielen Platformübergreifend

Beitragvon DL3AD » 27. Okt 2017, 10:09 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
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon mse » 27. Okt 2017, 10:36 Re: Audiodatei abspielen Platformübergreifend

mse
 
Beiträge: 1967
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon DL3AD » 27. Okt 2017, 10:45 Re: Audiodatei abspielen Platformübergreifend

... hmmm da sind jede menge Dateien :shock:
soll das ein Paket sein das installiert werden muss ?

Wie spiele ich denn nun eine Sounddatei ab ?
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon mse » 27. Okt 2017, 10:58 Re: Audiodatei abspielen Platformübergreifend

Im "examples" Verzeichnis sind viele Beispiele, z.B.
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.
 

In Funktion sieht man UOS auch in diesem Projekt:
viewtopic.php?f=53&t=11100
mse
 
Beiträge: 1967
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon wp_xyz » 27. Okt 2017, 11:04 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.
wp_xyz
 
Beiträge: 2611
Registriert: 8. Apr 2011, 08:01

Beitragvon DL3AD » 27. Okt 2017, 11:22 Re: Audiodatei abspielen Platformübergreifend

DANKE - ich wußte doch, dass so etwas simples, nicht so kompliziert sein kann. :mrgreen:
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon pluto » 27. Okt 2017, 16:43 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
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6652
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon DL3AD » 27. Okt 2017, 17:13 Re: Audiodatei abspielen Platformübergreifend

DANKE pluto - werde ich auch mal testen.
Mit dem playsoundpackage funktioniert es jedenfalls schon mal 1A 8)

Gruß Frank
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

• Themenende •

Zurück zu Multimedia



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried