MeMP - Mein einfacher Mp3-Player

Kapitel 13. Visualisierung

Fast jeder Player hat sie, und auch wir wollen das bei unserem nicht auslassen. Glücklicherweise geht das hier auch ganz einfach. Zunächst durchforsten wir das Archiv, das wir mit der bass.dll heruntergeladen haben, nach dem Ordner mit den Beispielprojekten für Delphi. Dort finden wir einen Ordner SampleVis, in dem sich ein Beispiel-Projekt zur Visualisierung befindet. Wir wollen uns auf die klassische Balkenansicht beschränken und fügen die beiden Units spectrum_vis.pas und CommonTypes.pas in unser Projekt ein. Die beiden benötigen wir nun für unsere Player-Klasse.

Hinweis: Ja, das bauen wir in die Player-Klasse ein, nicht in die Playlist-Klasse. Das ist etwas, was mit dem Player zu tun hat, nicht mit der ganzen Liste. Da unsere Playlistklasse von der Player-Klasse abgeleitet ist, wird diese damit auch erweitert.

Wir fügen dort zunächst eine weitere Initialisierungsmethode hinzu

procedure TMeMPPlayer.InitSpectrum(Width, Height: Integer);
begin
  Spectrum := TSpectrum.Create(Width, Height);
  Spectrum.Mode := 1;
  Spectrum.BackColor := clBtnFace;
  Spectrum.Pen := clActiveCaption;
  Spectrum.Peak := clWindowText;
end;

erweitern den Destruktor der Klasse um die Zeile

if assigned(Spectrum) then Spectrum.Free;

und implementieren zuletzt noch eine Methode, die das Zeichnen übernimmt, bzw. die entsprechende Methode in der gerade kopierten Unit aufruft.

procedure TMeMPPlayer.DrawSpectrum(aHandle: THandle);
var FFTFata : TFFTData;
begin
  if BASS_ChannelIsActive(fMainStream) = BASS_ACTIVE_PLAYING then
  begin
    BASS_ChannelGetData(fMainStream, @FFTFata, BASS_DATA_FFT1024);
    Spectrum.Draw (aHandle, FFTFata, 0, 0);
  end;
end;

Ich gebe zu, das ist jetzt sehr billig gewesen. Aber jetzt noch auf die FFT-Daten eingehen, und wie man die schnell und einfach darstellt...nö. Irgendwann muss auch mal gut sein. So, wie wir am Anfang das Auslesen der ID3-Tags anderen Klassen überlassen haben, schieben wir jetzt nochmal etwas Arbeit von uns.

Außerdem wollen wir ja jetzt langsam zum Ende kommen, oder? Und das sind wir jetzt auch. Wir müssen nur noch die Visualisierung in den Player einbauen, was mit ein paar Klicks und zwei Zeilen Code erledigt ist.