Thema: Delphi mp3 Player mit Waveform

Einzelnen Beitrag anzeigen

Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#2

Re: mp3 Player mit Waveform

  Alt 26. Jun 2007, 09:15
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
Christian Nöding
  Mit Zitat antworten Zitat