Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi mp3 Player mit Waveform (https://www.delphipraxis.net/94706-mp3-player-mit-waveform.html)

microhome 25. Jun 2007 22:42


mp3 Player mit Waveform
 
Einen schönen guten Abend euch allen!
Auch wenn das Thema schon des öfteren in diesem Forum versucht wurde zu erörtern, so bin ich da leider noch immer nicht ganz durchgestiegen bzw. habe nicht das gefunden was ich suche. Folgendes Vorhaben: Ich möchte eigentlich nur einen ganz einfachen MP3-Player bauen (Button mp3 laden, start und stop) und dazu eine Waveform der gesamten Datei haben. Nichts was sich bewegt o.Ä. sondern einfach nur die Waveform. Während die Datei abspielt soll sich ein Balken auf dieser Waveform bewegen, damit man sieht an welcher Stelle man sich befindet. Zusätzlich möchte ich einen Button und eine Art "LED" einbinden. Wenn man nun auf den Button klickt, wird die aktuelle Position in einer Text-Datei gespeichert (in Millisekunden), wenn man wieder klickt in einer neuen Zeile diese Stelle und so weiter. Im Nachhinein soll der User nun noch per Feinabstimmung die Positionen im 1/10 Sekunden Bereich (fein)einstellen können, sprich jeweils 1/10 Sekunde vor oder zurück springen und diese Position wird dann in der Textdatei gespeichert. Zusätzlich soll einfach nur die "LED blinken", wenn eine gespeicherte Zeitposition durchlaufen wird.

Das hört sich irgendwie ganz schön kompliziert und komplex an, oder? Ist es das auch? Ich denke dass das Speichern etc. nicht wirklich ein Problem darstellen. Was ich absolut nicht hinbekomme ist die Wellenform. Wie mach ich das am besten? Über bass.dll? Hab davon zugegebenermaßen echt Null Ahnung und würd mich freuen wenn ihr mir helfen würdet. Habe den MP3-Player via TMediaPlayer Komponente von Delphi realisiert. Jedoch ist darüber leider keine Wellenformberechnung möglich. Was meint ihr dazu?


Beste Grüße und gute Nacht!
Rene

christian.noeding 26. Jun 2007 09:15

Re: mp3 Player mit Waveform
 
Hallo :)

Mit dieser Thematik habe ich mich ca. 2 Monate beschäftigt. Ziel war bei mir einen Audioplayer zu programmieren, der an bestimmten Liedpositionen bestimmte Ereignisse ausführt.

Das Ganze habe ich mit der Bass.dll realisiert. Diese spielt die Audiodatei ab, erzeugt die Wellenformanzeige und liefert die genaue aktuelle Abspielposition.


Da meine Software OpenSource ist, kann der Code (Delphi 7) ohne Probleme eingesehen werden: Sourcecode

Die relevante Funktion zum Scannen der Wavedatei ist ScanPeaks2 in der Datei pcdimmer.pas. Dabei liefert die Bass.dll FFT-Daten, die in ein kleines Array gespeichert werden. Dieses Array wird zur Zeichnung der Waveform in einer normalen PaintBox verwendet. Das Zeichnen wird über die Funktion DrawSpectrum ausgeführt.

Das Abspeichern der aktuellen Position ist relativ einfach. Man fragt beim Speichern mit der Bass.dll-Funktion BASS_ChannelGetPosition die aktuelle Position ab und speichert sie. Möchte man beim Abspielen nun wissen, ob dieser Punkt durchlaufen wurde, fragt man zyklisch über einen Timer oder in einem Thread ab, ob die Position +/- eines angemessenen "Safe-Frames" gerade durchlaufen wird. Es empfiehlt sich, ein Array zusätzlich einzubinden, welches speichert, ob das Ereignis schon einmal abgespielt wurde, um Mehrfachausführungen zu vermeiden.

Der Sourcecode ist nicht sonderlich schön strukturiert, aber ich hoffe du kannst dir die relevanten Informationen da herauslesen. Wenn du Teile des Codes in deiner Software verwenden möchtest und diese auch veröffentlichst bitte ich dich, diese Codezeilen ebenfalls öffentlich zugänglich zu machen und einen kurzen Hinweis auf die Herkunft hinzuzufügen.


Viel Erfolg,
Christian :)

microhome 26. Jun 2007 19:55

Re: mp3 Player mit Waveform
 
Hi Christian,
ich hab eben mal reingeschaut in dein Projekt. Aber ich seh da echt absolut nicht durch. Ist es denn extrem kompliziert das ganze zu machen? Ich denke mal das Speichern etc. krieg ich hin aber wie kann ich die bass.dll einbinden und zur Darstellung der Wellenform benutzen bzw. die Datei öffnen und widergeben?


Beste Grüße
Rene

christian.noeding 26. Jun 2007 21:43

Re: mp3 Player mit Waveform
 
Ich such dir morgen mal die nötigen Codezeilen raus :)

Bis morgen :-)


ciao!

microhome 6. Aug 2007 11:56

Re: mp3 Player mit Waveform
 
Ich bin wieder dabei an meinem Projekt weiterzuarbeiten, aber habe leider noch immer nicht das hinbekommen was ich gern wollte. Die Waveform von http://www.delphipraxis.net/internal...ct.php?t=30232 ist richtig gut, was ich nun noch hinbekommen muss ist ein Balken der automatisch mitläuft sowie die Speicherung der einzelnen Positionen z.B. beim Drücken einer Taste. Habt ihr eine Idee?


Beste Grüße
Rene


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz