Audio-Schnittstelle gesucht. ( gstreamer )

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von Mathias »

Ich will mir einen einfachen Audio-Player schreiben.
Folgende Bedienungen muss er erfüllen.
  • Abspielen von Flac, MP3 und WAV
  • Überblenden von 2 Songs
  • Fade-In und Out
  • Die Länge des Stückes abfragen
  • Die aktuelle Position bei Play zurück geben.(Get_pos)
  • Direktes Positionsanspringen im Stück. (Set_pos)
  • Auf Linux und Windows verwendbar
Kennt jemand eine aktuelle Pakage ?
Ich habe schon auf dem Wiki geguckt, entweder ist es veraltet und es ist nicht OpenSource.
Es darf auch eine C-Lib sein, nicht C++.

SDL2+3, SDL_mix kommt leider nicht in Frage, da nicht alle obigen Bedienungen erfüllt sind. Entweder kann man da die Zeit abfrage, dafür ist nur ein Stück abspielbar. Oder man kann mehrere Stücke abspielen, dafür ist keine Zeit abfrage möglich.
FFmpeg habe ich auch schon angeguckt, die scheint nur ein Container zu sein, welcher eine Datei in einen Stream umwandelt.
Zuletzt geändert von Mathias am Sa 7. Sep 2024, 08:55, insgesamt 1-mal geändert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6782
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Audio-Schnittstelle gesucht.

Beitrag von af0815 »

gstreamer fällt mir dazu ein.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Audio-Schnittstelle gesucht.

Beitrag von Mathias »

Danke, dies sieht auf den ersten Blick vielversprechend aus.
So wie es aussieht, lehnt es sehr stark an GLIB an.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
kupferstecher
Beiträge: 433
Registriert: Do 17. Nov 2016, 11:52

Re: Audio-Schnittstelle gesucht.

Beitrag von kupferstecher »

Mathias hat geschrieben: Fr 26. Jul 2024, 17:08 FFmpeg habe ich auch schon angeguckt, die scheint nur ein Container zu sein, welcher eine Datei in einen Stream umwandelt.
Wenn ichs zu tun hätte würde ich wahrscheinlich versuchen mit ffmpeg den Stream zu laden und mit PortAudio auszugeben. Dann hast du die volle Kontrolle, kannst bei Stop/Pause/Skip scharf ein- und ausfaden oder aneinanderhängende Lieder unterbrechungsfrei abspielen. Erfordert halt einiges an programmiererischer Handarbeit.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6782
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Audio-Schnittstelle gesucht.

Beitrag von af0815 »

Es gibt auch noch uos, da ist auch der Entwickler im englischen Forum.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Audio-Schnittstelle gesucht.

Beitrag von Mathias »

af0815 hat geschrieben: Fr 26. Jul 2024, 21:13 gstreamer fällt mir dazu ein.
Noch besser, die Header sind bei Lazarus schon dabei . 👍
Ich vermute das es aber sehr veraltet ist, wie es bei anderen Headern auch der Fall ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Audio-Schnittstelle gesucht.

Beitrag von Mathias »

Der Song wird schon mal abgespielt, nur wir dabei leider das ganze Programm blockiert, bis das Stück fertig ist.
Aber immerhin es kam mal was.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  pipeline: PGstElement;
  bus: PGstBus;
  msg: PGstMessage;
begin
  pipeline := gst_parse_launch('playbin uri=file:/home/tux/Schreibtisch/gstreamer_3/test.flac', nil);
  gst_element_set_state(pipeline, GST_STATE_PLAYING);

  bus := gst_element_get_bus(pipeline);
  msg :=
    gst_bus_timed_pop_filtered(bus, 0,
    TGstMessageType(TGstMessageType(int64(GST_MESSAGE_ERROR) or int64(GST_MESSAGE_EOS))));
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6782
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Audio-Schnittstelle gesucht.

Beitrag von af0815 »

Den GST in einem Thread verpacken :D Und wenn du in die Pipeline eingreift, dann muss man genau überlegen wo, weil wird doch einiges gepuffert und den Puffer muss man einkalkulieren. War zumindest meine Erkenntnis.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Audio-Schnittstelle gesucht.

Beitrag von Mathias »

Ich habe es jetzt mal als reine Konsolen-Anwendung probiert.
Da bleibt es nicht hängen. Es werden frisch und fröhlich "X" ausgegeben, bis ich eine Taste drücke.

Code: Alles auswählen

  procedure tutorial_main(argc: cint; argv: PPChar);
  var
    pipeline: PGstElement;
    bus: PGstBus;
    msg: PGstMessage;
  begin
    gst_init(@argc, @argv);

    pipeline := gst_parse_launch('playbin uri=file:/xxx/gstreamer/test.mp3', nil);
    gst_element_set_state(pipeline, GST_STATE_PLAYING);

    bus := gst_element_get_bus(pipeline);
    msg := gst_bus_timed_pop_filtered(
      bus, 0, TGstMessageType(TGstMessageType(int64(GST_MESSAGE_ERROR) or int64(GST_MESSAGE_EOS))));

    repeat
      Write('X');
    until KeyPressed;
  end;
Kann es sein, das es nicht sauber mit der LCL zusammenarbeitet ?
Die LCL verwendet glib2 und gtk2. Und auch gstreamer baut auf glib auf.

Nachtrag:
Fehler gefunden. Wen man die Ziel mit gst_bus_timed_pop_filtered weglässt, läuft es durch.
Man hätte das Tutorial ganz durchlesen sollen: https://gstreamer.freedesktop.org/docum ... language=c
Und ich hatte für GST_CLOCK_TIME_NONE 0 anstelle von -1 genommen. GST_CLOCK_TIME_NONE ist nicht bei FPC dabei.
Zuletzt geändert von Mathias am So 28. Jul 2024, 19:47, insgesamt 1-mal geändert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6782
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Audio-Schnittstelle gesucht.

Beitrag von af0815 »

Soweit ich mich erinnere geht es im Thread. Man muss nur aufpassen, wen du dir Informationen aus der Pipeline holst oder Befehle durchführst, das das Entkoppelt ist.

Ich habe es für Video aus Kameras verwendet und Snapshoots gemacht. Und gerade da bei den Versuchen habe ich das auch mit Threads lösen müssen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Audio-Schnittstelle gesucht.

Beitrag von Mathias »

Ich habe dein Post erst jetzt gesehen. Ich habe noch einen Nachtrag ergänzt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Audio-Schnittstelle gesucht.

Beitrag von Mathias »

Der gstreamer wird sicher einiges können.
Immerhin sind unter /usr/include über 2,5MB mit knapp 340 Dateien.
Im Vergleich, GTK4 hat (nur) 2.0MB und 400 Dateien.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

pluto
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: Audio-Schnittstelle gesucht.

Beitrag von pluto »

ich würde VLC lib nehmen, aber ob die Fade-In und Out kann weiß ich nicht.
MFG
Michael Springwald

Bemi
Beiträge: 14
Registriert: So 7. Jan 2024, 15:02
OS, Lazarus, FPC: XP, 7, 10, 11/ 3.8 /3.2.2
CPU-Target: X86-64
Wohnort: Eckental

Re: Audio-Schnittstelle gesucht.

Beitrag von Bemi »

Hallo

Schau dir doch mal die BASS.dll an.

https://www.un4seen.com/

charlytango
Beiträge: 1061
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Audio-Schnittstelle gesucht.

Beitrag von charlytango »

Wenn du hier im Forum nach "MP3" und "MP3 abspielen" suchst, findest du einiges.

viewtopic.php?f=10&t=13617&p=121398&hilit=mp3#p121398
viewtopic.php?f=55&t=13566

und nach wie vor hier
https://www.gausi.de/memp.html

Antworten