MP3 Dateien abspielen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

MP3 Dateien abspielen

Beitrag von Lorca »

Hallo zusammen,

ich arbeite mit Windows 7 / 64 BIT
Lazarus: 2.0.10

Was ich möchte:
Abspielen von Audio Kommentaren aus einem selbst erstellten Programm. Die Kommentardateien liegen als MP3 vor.

die Informationsflut zu diesem Thema erschlägt einen völlig.
Demo Programme lassen sich jedoch nicht kompilieren ( memp ) Hier fehlen alle möglichen LCL Pfade. Sobald ich diese in der Projektliste eintragen will, kommt laufend (nicht bei allen) der popup hoch: Nicht zu empfehlen. Völlig genervt wollte ich dann auf BASS umsteigen.

Aber auch hier Probleme:
Die BASS.DLL ist nicht auf der un4seen Seite zu finden. Habe BASSenc, BASSenc_MP3 und Bass.Net heruntergeladen.
Die DLL war nirgends in den ZIPs zu finden.
Irgendwann habe ich dann eine BASS.DLL in einer ZIP Datei zu einer ganz anderen Engine gefunden.
Kann jedoch nicht sagen ob es eine 32 oder 64 BIT Version ist.

Ich habe dann das Coding zum Laden der DLL und Initialisierung hier aus dem Forum kopiert.
Allerdings bricht auch bei mir das Programm ab sobald die Initialisierung aufgerufen wird. Meldung: "Ich solle auf einen BUG-Fix hoffen"
Echt witzig :)
Daher gehe ich von einer falschen BIT Version der DLL aus.

Ebenfalls fehlen überall Beispiele, wie dann nach dem Laden einer MP3 Datei diese abgespielt wird.
Mit Audio Dateien hatte ich noch nie eine Berührung gehabt,

Kann mir jemand von euch eine Engine empfehlen? bzw. mit der BASS weiterhelfen?
Links bzw. Tips & Tricks etc.PP würden mir weiter helfen
Irgendwann würde ich auch gerne mal CDs einlesen wollen. Aber bis dahin wird noch sehr viel Wasser durch den Rhein gehen.


Im Voraus schon mal herzlichen Dank

Lorca

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: MP3 Dateien abspielen

Beitrag von theo »

Das offizielle Zip für Win ist eig. dieses http://www.un4seen.com/download.php?bass24
Von hier http://www.un4seen.com/

Die 64bit DLL liegt dort im Ordner x64/

charlytango
Beiträge: 843
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: MP3 Dateien abspielen

Beitrag von charlytango »

Du hast recht, das ist ein weites Feld und eine steile Lernkurve.

Hier hast du sicher nachgesehen nehm ich an.
https://www.gausi.de/memp.html

Hier findest du auch noch einiges:
viewtopic.php?f=55&t=13566

Leider sind alle Projekt auf der Seite Delphi-Projekte, aber der MEMP lässt sich konvertieren und mit einigen Eingriffen auch kompilieren.
Wenn ich mich recht erinnere muss man alles was mit Bitmaps zu tun hat auskommentiert oder ersetzt werden. Er hat aber auch ein gutes Tutorial nach dem du den Player selber nachbauen kannst.
Ich kann dir ein ZIP zukommen lassen, nur geht das hier nicht.

An der Variante NEMP (die ausgewachsene Version) hab ich mich versucht, bin aber gescheitert weil mein Wissen nicht ausreicht um einige verwendete Komponenten zu ersetzen oder rauszunehmen.

Um nur einfach Kommentare ohne viel Schnickschnack abzuspielen würde MEMP schon reichen denke ich.

LG

charlytango
Beiträge: 843
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: MP3 Dateien abspielen

Beitrag von charlytango »

Lorca hat geschrieben:
Mi 28. Apr 2021, 11:37
Irgendwann würde ich auch gerne mal CDs einlesen wollen.
soweit ich weiß kann das der NEMP .... das findest du im Code sicher.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MP3 Dateien abspielen

Beitrag von wp_xyz »

Lorca hat geschrieben:
Mi 28. Apr 2021, 11:37
Die BASS.DLL ist nicht auf der un4seen Seite zu finden. Habe BASSenc, BASSenc_MP3 und Bass.Net heruntergeladen.
Die DLL war nirgends in den ZIPs zu finden.
Doch. Keine Ahnung, warum die Firma den Downloadbutton so unscheinbar macht: Ganz oben, bei den Windows, Mac und Linux-Icons neben dem fetten "BASS audio library" sind die Downloadbuttons.

In dem zip, das du dann erhältst, findest du die 32-bit DLL im Root-Verzeichnis und die 64-Bit-Version im x64-Ordner. Im Ordner Delphi gibt es Beipiele für Delphi, die man recht schnell auf Lazarus anpassen kann.

In den Anhang habe ich das konvertierte BASSTest inkl 32-bit DLL gepackt. mp3-Wiedergabe getestet - funktioniert.

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: MP3 Dateien abspielen

Beitrag von Lorca »

Hallo an alle,

zunächst ganz herzlichen Dank für eure Antworten. :)
Habe die DL Seite gefunden und die aktuelle BASS 24 herunter geladen.

Funktioniert aber immer noch nicht. :(
Die DLL liegt im gleichen Ordner wie die Demo.EXE
leider bekomme ich Immer noch die Meldung, das ich auf einen HOT-Fix hoffen soll.
Ich denke das da noch etwas fehlt, bzw. ich etwas falsch mache.
Vllt. weiß ja jemand Rat.


Hier mal kurz mein Coding

PROCEDURE Tform1.Formcreate(Sender : Tobject);
VAR lv_HDL : THandle;
BEGIN
lv_HDL := LoadLibrary( 'Z:\Dev\PRJ\Audio\BASS\bass_64.dll' );
BassInit( lv_HDL );
End;


procedure Tform1.BassInit( iv_HDL : THandle );
begin
{$IFDEF LINUX}
BASS_Init(-1, 44100, 0, @iv_HDL, nil);
{$ELSE}
{ Initialize audio - default device(->-1), 44100hz, stereo, 16 bits
!!! Bei Windows ohne Pointer, nur Handle
}
BASS_Init(-1, 44100, 0, iv_HDL, nil);
{$ENDIF}
end;;
END.


Danke im voraus

Lorca

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: MP3 Dateien abspielen

Beitrag von theo »

Meines wissens brauchst du kein LoadLibrary.
Das Handle dort (zweitletzter Parameter bei BASS_Init) ist das Fenster Handle. Auf Linux geht auch nil.

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: MP3 Dateien abspielen

Beitrag von shokwave »

Blöde Frage: Hast du auch die bass.pas in deinem Projektordner und in den uses eingetragen?

Und Theo hat Recht, das LoadLibrary brauchst du nicht.

Bei mir klappt's mit folgendem Code:

Code: Alles auswählen

uses ...bass, LCLType;

type


  ...
    private
      myStream: HStream;
      procedure PlayStream(aFilename:String);
  ...
  
  
procedure TForm1.FormCreate(Sender: TObject);
begin
  // check the correct BASS was loaded
  if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
  begin
    MessageDlg('An incorrect version of BASS.DLL was loaded', mtError, [mbOK], 0);
    Halt;
  end;

  // Initialize audio - default device, 44100hz, stereo, 16 bits
  if not BASS_Init(-1, 44100, 0, Handle, nil) then
    MessageDlg('Error initializing audio!', mtError, [mbOK], 0);

  if ParamCount > 0 then
  begin
    PlayStream(ParamStr(1));
    Edit_File.Text:=ParamStr(1);
  end;
end;

procedure TForm1.PlayStream(aFilename: String);
var f: PChar;
    flags: DWORD;
begin
  if BASS_IsStarted then //wenn schon Musik läuft
  begin
    BASS_StreamFree(myStream); //Stream freigeben
  end;

  //Datei laden
  f := PChar(aFilename);
  flags:= BASS_STREAM_PRESCAN or BASS_ASYNCFILE;
  {$IFDEF UNICODE}
  flags:= flags or BASS_UNICODE
  {$ENDIF}
  myStream := BASS_StreamCreateFile(False, f, 0, 0, flags);

  //Wiedergabe starten
  if not BASS_ChannelPlay(myStream, False) then
    MessageDlg('Error playing stream!', mtError, [mbOK], 0);
end; 
mfg Ingo

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: MP3 Dateien abspielen

Beitrag von Winni »

Hi!

Langsam mal in BASS einlesen:

Für Audio-CDs gibt's ein extra Modul. Auch bei unseen runterladen.

Winni

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MP3 Dateien abspielen

Beitrag von wp_xyz »

wp_xyz hat geschrieben:
Mi 28. Apr 2021, 12:40
In den Anhang habe ich das konvertierte BASSTest inkl 32-bit DLL gepackt. mp3-Wiedergabe getestet - funktioniert.
Nun habe ich noch einige der anderen Delphi-BASS-Demos nach Lazarus konvertiert und beigefügt. Im Ausgabeverzeichnis bin befinden sich für Windows bereits die richtigen 32-bit bzw. 64-bit DLLs.
Dateianhänge
ported delphi samples.zip
(340.95 KiB) 110-mal heruntergeladen

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: MP3 Dateien abspielen

Beitrag von Lorca »

Hallo euch allen, :)

herzlichen Dank erst einmal für eure freundlichen Antworten.
Jetzt funzt es :)

Zunächst habe ich die aktuelle BASS.PAS aus der ZIP von wp_xyz heraus kopiert.
In meiner BASS.PAS waren so Funktionen wie "BASS_IsStarted" nicht vorhanden. (Warum auch immer)
Ebenfalls habe ich die BASS(64).DLL aus der ZIP datei herausgeholt.
Als nächstes habe ich dann das Coding von shokwave übernommen. Und es Funktioniert. *freu*
Ich denke was bei mir falsch war, waren die Versionen der BASS.PAS und BASS.DLL

Danach habe ich das BASS Test Programm von wp_xyz herausgeholt. ( Danke für Deiner sehr große mühe)
Doch leider funktioniert dieses Testprogramm nicht. Nach dem Programmstarten bricht das Programm sofort ab. Der breakpoint in der LPR
Datei wird NICHT erreicht. Es erscheint folgende Meldung:
"i]"Der Debugger ist abgestürzt mit Status Speichern Sie ihre Arbeit jetzt! .
Drücken sie >>Stop<< und hoffen Sie auf einen Fix für diesen Fehler."
[/i]"

Nun bin ich völlig geplättet und verstehe gar nichts mehr.
Beide Testprogramme greifen auf die gleiche BASS.PAS und BASS.DLL zu.
Vllt.komme ich zu einem späteren Zeitpunkt zu dem Wissen nach dem "warum"

Nun zu der Aussage von theo: (das die DLL nicht benötigt wird) Auch Dir ganz lieben Dank :)
-> Warum ich es nicht verstehe das die DLL nicht benötigt wird:
- In der BASS.PAS wird die DLL ebenfalls nicht explizit geladen. (Kein BEGIN END.) mit einer Laderoutine im Implementierungs Bereich enthalten
- In der BASS.PAS sind jedoch Funktionen wie function BASS_StreamCreate definiert welche auf die BASS.DLL (external bassdll) verweisen
Somit komme ich zu dem Schluss, das diese DLL sehr wohl benötigt wird, aber NICHT selber geladen werden muss.
Ob ich damit richtig liege weiß ich noch nicht. Ebenfalls vermute ich das diese DLL im gleichen Ordner abliegen muss wie das Programm
Vllt. reicht aber auch die Ablage in einem Pfad (z.B: Windows) der in der Environment Variablen PATH hinterlegt ist, aus.

Sobald ich weiteres Wissen aufbauen konnte werde ich meine Erkenntnisse hier in diesem Forum mitteilen, um anderen Kollegen die Arbeit ein wenig zu erleichtern. So wie Ihr es mit mir getan habt.


Ganz herzlichen Dank noch einmal an alle, die sich soviel Mühe gemacht haben, mir zu helfen.

Lorca :)

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: MP3 Dateien abspielen

Beitrag von theo »

Lorca hat geschrieben:
Mo 3. Mai 2021, 10:05
Nun zu der Aussage von theo: (das die DLL nicht benötigt wird) Auch Dir ganz lieben Dank :)
-> Warum ich es nicht verstehe das die DLL nicht benötigt wird:
Wo habe ich das geschrieben?
Ich habe nur gesagt, dass du kein LoadLibrary brauchst, also das der "bass.pas" überlassen kannst.
Wahrsch. linkt die statisch: https://wiki.freepascal.org/DLL_static_load/de

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MP3 Dateien abspielen

Beitrag von wp_xyz »

Lorca hat geschrieben:
Mo 3. Mai 2021, 10:05
Danach habe ich das BASS Test Programm von wp_xyz herausgeholt. ( Danke für Deiner sehr große mühe)
Doch leider funktioniert dieses Testprogramm nicht. Nach dem Programmstarten bricht das Programm sofort ab. Der breakpoint in der LPR
Datei wird NICHT erreicht. Es erscheint folgende Meldung:
"i]"Der Debugger ist abgestürzt mit Status Speichern Sie ihre Arbeit jetzt! .
Drücken sie >>Stop<< und hoffen Sie auf einen Fix für diesen Fehler."
[/i]"

Nun bin ich völlig geplättet und verstehe gar nichts mehr.
Beide Testprogramme greifen auf die gleiche BASS.PAS und BASS.DLL zu.
Vllt.komme ich zu einem späteren Zeitpunkt zu dem Wissen nach dem "warum"
Bei mir geht's.

Hast du beim Ausprobieren die Verzeichnisstruktur beibehalten, insbesondere die Ordner für das Ausgabeziel, in dem sich schon die entsprechenden BASS.dll's befinden? Wenn nicht, könnte es so gewesen sein: nachdem die BASS.dll sich in dem Ordner mit der Exe-Datei befinden muss (es sei denn, man hat sie auch in Windows/System32 (für 64bit) und Windows/SysWOW64 (für 32bit) - welch Namensverwirrung!), habe ich als Kompilierungsziele Ordner ../bin/i386-win32 und ../bin/x86_64-win64 vorgesehen, in denen sich die BASS.dlls der entsprechenden Bitness befinden und in denen alle Beispielprogramme landen, so dass jedes Beispielprogramm seine BASS.dll findet. Wenn du das Testprogramm zum ersten Mal übersetzt, ohne meine Ordner-Struktur zu verwenden, ist der Ordner noch leer - der Compiler erzeugt ihn, schreibt die exe hinein und startet sie; aber da noch keine BASS.dll drinnen ist, stürzt das Programm ab. Wenn du jetzt die entsprechende BASS.dll (32bit und 64bit nicht verwechseln!) reinkopiert, sollte es beim zweiten Start funktionieren, und das auch bei allen anderen Beispielprogrammen, die in meinem zip enthalten sind.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MP3 Dateien abspielen

Beitrag von wp_xyz »

Lorca hat geschrieben:
Mo 3. Mai 2021, 10:05
Ebenfalls vermute ich das diese DLL im gleichen Ordner abliegen muss wie das Programm
Vllt. reicht aber auch die Ablage in einem Pfad (z.B: Windows) der in der Environment Variablen PATH hinterlegt ist, aus.
Ja, wie im vorigen Post schon erwähnt: DLL in den exe-Ordner, oder in einen der durch den Pfad erreichbar ist, üblicherweise in Windows/System32 bzw. Windows/SysWOW64 - dabei auf die Bitness achten.

Es gibt übrigens auch eine Unit, um die DLL dynamisch zu laden, so dass man im Programm selbst den Speicherort angeben kann und bei Nichtvorhandensein mit einer vernünftigen Fehlermeldung reagieren und evtl. gar mit reduziertem Umfang weitermachen kann. Das ist die unit "Dynamic_bass", die du statt "bass" in die uses-Zeile aufnehmen musst. Ansonsten geht alles genauso, bis auf die Initialisierung und Finalisierung. Aus dem un4seen forum:

Code: Alles auswählen

uses
Dynamic_Bass

function TForm1.ProgDir: string;
begin
  Result := ExtractFilePath(ParamStr(0));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   if not Load_BassDLl(progdir + 'bass.dll') then
   begin
     ShowMessage('Error, bass.dll was not found in you AppDir or Search Path');
     Application.Terminate;
   end;
   if not Bass_Init(1, 44100, 0, handle, nil) then
   begin
     ShowMessage('Error, can`t start the AudioDevice');
     Application.Terminate;
   end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   Bass_Free;
   UnLoad_BassDLL;
end;
Die Unit findest du im Ordner "delphi_dynamic" des von u4seen heruntergeladenen zip.

winni meinte hier zwar einmal, das würde nicht richtig funktionieren, aber zumindest mein Oscilloscope-Projekt (https://sourceforge.net/p/wp-laz/code/H ... illoscope/) hat damit keine Probleme.

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: MP3 Dateien abspielen

Beitrag von Lorca »

Hallo zusammen,

erst einmal herzlichen Dank an alle die mir geholfen haben.
Zu theo: Bitte vielmals um Entschuldigung. War keine böse Absicht, sondern Unaufmerksamkeit von meiner Seite.
Ich habe die Erfahrung gemacht, das zum Kompilieren des Programms, die BASS.DLL im gleichen Ordner sein muss wie auch das zu erstellende Programm.
Beim Start des Programms hat es nicht funktioniert wenn die BASS.DLL im gleichen Ordner lag. Ich habe diese dann in den Windows Ordner rein gepackt und dann lief es. (Windows Path)
Was sich jedoch gravierend bei mir ausgewirkt hat war, das die BASS.PAS nicht mit der BASS.DLL zusammen gepasst haben.
Erst nachdem ich bei einem von euren Links mir erneut die BASS Komponenten herunter geladen habe, stimmten beide Versionen überein, und es klappt ganz wunderbar.


Noch mal ganz lieben Dank an euch alle

Lorca

Antworten