Home » Tutorials » Sonstiges » Mein einfacher Mp3-Player

Mein einfacher Mp3-Player

Überblick und Vorbereitung

In diesem Tutorial möchte ich einen Einstieg in die Programmierung eines Mp3-Players bieten. Es richtet sich an Delphi-Programmierer, die schon etwas Erfahrung mit Delphi gesammelt haben und sich nun an ein neues, etwas größeres Projekt wagen wollen. Wenn man von einem eigenen Editor oder Taschenrechner die Nase voll hat, dann wird nicht selten ein eigener Player programmiert. Und dann kommen immer wieder dieselben Fragen.

  • Wie spiele ich eine mp3 ab?
  • Wie kann man automatisch das nächste Lied starten?
  • Wie kann ich machen, dass da der Titel steht, und nicht der Dateiname?
  • Wieso bekomme ich ein list index out of bounds (-1)?

Diese Fragen (und ein paar mehr) werden hier erläutert werden. Wir werden von Anfang an darauf achten, dass „da nicht der Dateiname steht“. Das mit dem nächsten Titel wird auch klappen. List index out of bounds gibt es nicht, und wir spielen mühelos mp3, ogg, wav, wma, ape, flac und einiges mehr ab. Wir werden Playlisten laden und speichern. Und diese Balken, die bei fast allen Playern rumhüpfen, haben wir dann auch.
Wir werden hier nicht alles selbst entwickeln, sondern „uns auf die Schultern von Giganten stellen“. Wir werden z.B. die bass.dll zum Abspielen benutzen. Auch das Auslesen der Informationen („ID3-Tags“) aus den verschiedenen Dateien werden wir anderen Klassen überlassen und bereiten diese Informationen nur für uns passend auf.

Delphi startklar machen

Um das Beispiel-Programm zu diesem Tutorial kompilieren zu können, benötigen wir zunächst einmal Delphi. Getestet wurde es mit Delphi 7 Personal und Turbo Delphi Explorer. Zusätzlich benötigen wir folgendes:

  • Die bass.dll. Sie wird das Abspielen der Musik für uns übernehmen. Sie kann auf http://www.un4seen.com heruntergeladen werden. Aus dem Downloadarchiv benötigen wir am Ende auch einige Teile der Demoprojekte, nämlich die beiden Units spectrum_vis und CommonTypes aus dem Projekt SampleVis.
  • Optional Addons zur bass.dll zum Abspielen weiterer Formate wie BassWma, BassFlac, BassApe etc.
  • Die Unit Mp3FileUtils, die uns den Großteil der Arbeit mit mp3-Dateien abnimmt.
  • Die Unit ATL_WmaFile zum Auslesen der Informationen aus wma-Dateien. Diese Unit wurde in die Audio Werkzeuge Bibliothek integriert, die hier herunterzuladen ist:
    http://www.gausi.de/awb.html

Hinweis: Natürlich können anstelle meiner Mp3FileUtils auch andere Units zum Auslesen der ID3-Tags benutzt werden. Dann müssen ggf. einige Stellen im Quellcode angepasst werden. Als mir bekannte Alternativen seien hier die Audio Tools Library (ATL), die Jedis oder die ID3Lib von Muetze1 aus der Delphipraxis genannt. Wie die einzelnen Aufrufe der ID3-Tag-Leseroutinen im Einzelnen genau angepasst werden müssen, sollte man der entsprechenden Dokumentation entnehmen. Ein besonders großer Aufwand dürfte das nicht sein.

Hinweis zu den Lizenzen

Die bass.dll kann in nicht-kommerziellen Produkten frei verwendet werden, genauere Angaben werden da meines Wissens nach nicht gemacht. Mp3FileUtils steht unter der LGPL, alternativ unter einer BSD-ähnlichen Lizenz. ATL_WmaFile steht wie die gesamte ATL unter der LGPL.
Die in diesem Tutorial entwickelten Klassen stehen unter keiner besonderen Lizenz. Sie können „einfach so“ benutzt werden. Ich überlasse es dir, das auf faire Art und Weise zu tun. Bei einem 10.000 Zeilen Programm ist ein Hinweis auf das Tutorial sicherlich kaum noch nötig, bei 1500 Zeilen und damit nur rund 30% Eigenanteil schon eher.

Hinweise zur bass.dll

Das ursprüngliche Tutorial war für die Version 2.3 der bass.dll ausgelegt. Mit der aktuellen Version 2.4 wurden einige Änderungen eingeführt. Genaueres ist im Changelog der bass.dll nachzulesen – betroffen sind hier im Wesentlichen die Funktionsaufrufe von BASS_ChannelGetAttributes, -SetAttributes, -Getlength, -GetPosition und -SetPosition. Und, ganz wichtig: Volume ist jetzt ein Float-Typ mit 0=stumm und 1=laut.

2 Gedanken zu „Mein einfacher Mp3-Player“

  1.  

    Ist es mit Delphi auch möglich von einer mp3-Aufname über Start- und Stop-Zeit-Parameter nur einen Ausschnitt abzuspielen? Ich suche für eine blinde Person die Möglichkeit sich Audioaufnahmen ab einem bestimmten Abschnitt vorlesen zu lassen. Vielen Dank für die geschätzte Antwort.

    1. Generell sollte dies möglich sein.
      Am Besten dazu einmal einen Thread im Forum aufmachen, da tummeln sich einige Leute, die schon mit MP3s gearbeitet haben.
      Gruß
      Thomas

Kommentare sind geschlossen.