MeMP - Mein einfacher Mp3-Player

Kapitel 5. MeMP Testprojekt, Version 2.0

Wir erweitern nun unser erstes kleines Projekt aus Kapitel 3. Wir fügen zwei Buttons für Play und Stop ein, zwei ScrollBars für die Abspielposition und Lautstärke sowie einen Timer und zwei Label. Der Abspielbutton wird auch gleichzeitig als Pausebutton fungieren. Damit das vernünftig funktioniert, fragen wir im OnClick-Event des Playbuttons den Status des Players ab.

procedure TForm1.BtnPlayPauseClick(Sender: TObject);
begin
  case MeMPPlayer.BassStatus of
    BASS_ACTIVE_STOPPED:
      begin
        MeMPPlayer.Play(GlobalAudioFile);
        LblTitel.Caption := GlobalAudioFile.PlaylistTitel;
      end;
    BASS_ACTIVE_PLAYING: MeMPPlayer.Pause;
    BASS_ACTIVE_PAUSED : MeMPPlayer.Resume;
  end;
end;

Wenn der Player gerade abspielt, stellen wir ihn auf Pause, wenn er auf Pause steht, fahren wir mit der Wiedergabe fort, und wenn er gestoppt ist, dann starten wir die Wiedergabe mit der zuletzt ausgewählten Datei.

Die einzelnen Konstanten sind in der bass.pas definiert. Da wir diese in der Hauptunit nicht brauchen (dafür haben wir ja gerade die Player-Klasse geschrieben) können wir sie aber auch hier nochmal deklarieren:

Const
  BASS_ACTIVE_STOPPED = 0;
  BASS_ACTIVE_PLAYING = 1;
  BASS_ACTIVE_PAUSED  = 3;

Natürlich gehört ins OnCreate der Form die Erstellung und Initialisierung des Players, beim Beenden sollte man ihn wieder freigeben.

procedure TForm1.FormCreate(Sender: TObject);
begin
  GlobalAudioFile := TAudioFile.Create;
  MeMPPlayer := TMeMPPlayer .Create;
  MeMPPlayer.InitBassEngine(Handle);
  MeMPPlayer.Volume := 100;
end;

Timer

Den Timer brauchen wir zur Fortschrittsanzeige. In relativ kurzen Intervallen (ein Wert zwischen 100 und 500ms sollte reichen) fragen wir beim Player die gegenwärtige Abspielposition und den Fortschritt ab und übertragen dies auf die Form. Da wir von unserer Klasse die Zeit in Sekunden erhalten, rechnen wir ein bisschen, damit wir das in der gewohnten Art und Weise angezeigt bekommen.

procedure TForm1.MainTimerTimer(Sender: Tobject);
var t: integer;
begin
  MainScrollbar.Position := Round(MeMPPlayer.Progress * 100);
  t := Round(MeMPPlayer.Time);
  LblTime.Caption := Format('%.2d:%.2d',[t Div 60, t Mod 60])
end;

Die Scrollbars

Wenn der Anwender an den beiden ScrollBars rumspielt, setzen wir die Position oder Lautstärke entsprechend neu. Wir gehen hier davon aus, das beide Leisten einen Maximalwert von 100 und Minimalwert von 0 haben.

procedure TForm1.MainScrollbarScroll(Sender: TObject;
  ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
  MeMPPlayer.Progress := ScrollPos / 100;
end;
 
procedure TForm1.VolumeScrollbarScroll(Sender: TObject;
  ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
  MeMPPlayer.Volume := ScrollPos / 100;
end;

Zusammenfassung bis hierhin

Wir haben jetzt einen kleinen Player, der einzelne Dateien abspielen kann. WMA-Dateien kann er noch nicht, dass kommt später. Aber der Player zeigt die Zeit und den Fortschritt an, wir können letzteren leicht ändern und die Lautstärke anpassen.