AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi (D7) Memp Mediaplayer anpassen (Vorspulen)
Thema durchsuchen
Ansicht
Themen-Optionen

(D7) Memp Mediaplayer anpassen (Vorspulen)

Ein Thema von JanWe · begonnen am 30. Jul 2018 · letzter Beitrag vom 31. Jul 2018
Antwort Antwort
Benutzerbild von JanWe
JanWe

Registriert seit: 23. Mär 2015
Ort: NRW
78 Beiträge
 
Delphi 7 Personal
 
#1

(D7) Memp Mediaplayer anpassen (Vorspulen)

  Alt 30. Jul 2018, 21:22
Hi,

ich möchte einen kleinen Player erstellen - aber nicht einen von Grundauf, denn so gut kann ich Delphi dann leider doch nicht.
Hab mir auch das Tutorial von Gausi angeschaut, aber das ist mir doch noch zu hoch.

Der Player MEMP von Gausi kann ja schon viel (Nemp ist auch Open Source, aber mir zu kompliziert )

Nunja, mein Player sollte

1) per Button eine gewisse Zeitspanne vorspulen/springen (3 Sekunden) können. Per Buttonklick.

2) beim Klick auf eine Stelle der Scrollbar dorthin springen.


KodeZwerg hatte ich angeschrieben, weil er sich mit der BassDLL auch gut auskennt.
Aber er hat keine alte Delphi Version. Und somit waren seine Codevorschläge leider nicht bei mir einsetzbar. Danke auch an ihn.

Ich wäre natürlich sehr glücklich, wenn mir jemand der Dephi 7 hat, helfen könnte und ich nicht erst die 20 GB große Delphi 10 Berlin Free instlalieren müßte.

Mein Problem ist nämlich, daß ich die Titel/Stücklänge in dem Code von MEMP nicht sehe/finde. Und auch nicht, in welcher Unit die steht. (Player_Klasse oder unit1)

Denn die bräuchte ich ja, um überhaupt Entfernungen auf der Scrollbar

Memp gibt es hier
https://www.entwickler-ecke.de/viewtopic.php?t=80555

EditH:
Wo wir gerade dabei sind: .... Die Scrollbar/Volumeregler mit dem Mausrad steuern, unter D7 sicher ziemlich kompliziert, oder?

Habe mal meine lauffähige Version angehängt
MEMP_mit_D7.7z (863,5 KB)
Angehängte Dateien
Dateityp: 7z MEMP_mit_D7.7z (863,5 KB, 11x aufgerufen)
Jan
Allen demnächst ein gutes 2023!

Geändert von JanWe (30. Jul 2018 um 22:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: (D7) Memp

  Alt 30. Jul 2018, 21:46
Mit dem Vor- Zurückspulen sollte kein Problem darstellen, das schau ich mir gleich nochmal an, aber diese TScrollBar für Positionierung ist doof, die hat keine Eigenschaften, mit einer TProgressBar ist das in Null Komma Nichts erledigt, die hat Eigenschaften mit denen ich bei OnChange was Anfangen kann, darf man die tauschen?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von JanWe
JanWe

Registriert seit: 23. Mär 2015
Ort: NRW
78 Beiträge
 
Delphi 7 Personal
 
#3

AW: (D7) Memp

  Alt 30. Jul 2018, 21:54
Grüß Dich KodeZwerg,

mhh, Tauschen ... zusätzlich wäre besser, oder?
Jan
Allen demnächst ein gutes 2023!
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: (D7) Memp Mediaplayer anpassen (Vorspulen)

  Alt 30. Jul 2018, 22:44
Im Anhang ist ProgressBar zusätzlich enthalten, entpacke das in Dein Memp, kompiliere, teste.
Klappt es mit Delphi 7? Sind die Sekunden Spuler Knöpfe nun noch Notwendig?

Bin schon müde, +3 / -3 Sekunden Knöpfe kommen Morgen ran.

Ps: Erstelle vorher Backup von Dein Memp, man weiß ja nie...

Pps:
Der Code dazu sieht so aus:
Delphi-Quellcode:
procedure TForm1.pb1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 var
  i : integer;
begin
 Form1.Caption := IntToStr(round(X / (pb1.Width / pb1.Max)));
 i := round(X / (pb1.Width / pb1.Max));
// if ((i < pb1.Max)and(i > 0)) then
 pb1.Position := i;
 MeMPPlaylist.Progress := pb1.Position / 100;
end;
Wenn ich die Sekunden Knöpfe mache schaut Code danach so aus, kannst Du jetzt schon machen wenn Du Lust hast.
Delphi-Quellcode:
procedure TForm1.pb1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 pb1.Position := round(X / (pb1.Width / pb1.Max));
 MeMPPlaylist.Progress := pb1.Position / 100;
end;
Angehängte Dateien
Dateityp: 7z Memp.7z (3,1 KB, 4x aufgerufen)
Gruß vom KodeZwerg

Geändert von KodeZwerg (30. Jul 2018 um 23:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: (D7) Memp Mediaplayer anpassen (Vorspulen)

  Alt 30. Jul 2018, 23:38
Autsch:
Delphi-Quellcode:
procedure TForm1.pb1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 var
  i : integer;
begin
 Form1.Caption := IntToStr(round(X / (pb1.Width / pb1.Max)));
Nimm das Form1 aus dem Code raus. pb1MouseDown ist doch schon eine Methode von TForm1. Man sollte es im Code nicht noch mal referenzieren. Und wenn es doch sein muss, nimm Self .
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (30. Jul 2018 um 23:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: (D7) Memp Mediaplayer anpassen (Vorspulen)

  Alt 31. Jul 2018, 04:23
Schade das Du mitten drinn anscheinend aufgehört hast zu Lesen, sonst hättest Du ein wenig weiter unten auch den Fix entdeckt.
Da hab ich zu schnell hochgeladen gehabt mit noch Testkrams drinnen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: (D7) Memp Mediaplayer anpassen (Vorspulen)

  Alt 31. Jul 2018, 11:50
Mein Problem ist nämlich, daß ich die Titel/Stücklänge in dem Code von MEMP nicht sehe/finde. Und auch nicht, in welcher Unit die steht. (Player_Klasse oder unit1)
Hallo,

Da stöbert man nur mal kurz hier im Forum, und findet direkt jemanden, der dieses uralte Tutorial ausgräbt.

Motivation hinter dem Tutorial war (neben dem Wettbewerb bei Delphi-Treff damals) es, ein halbwegs vernünftiges Basiskonzept vorzustellen. Also zum Beispiel die übliche Trennung von Daten und Anzeige, die grade bei Programmieranfängern oft komplett ignoriert wird. Damit müsste dann schon klar sein, dass man die Dauer des aktuellen Stücks nicht in der Unit1 findet (bzw. dem Formular), sondern in der Playerklasse. In der Unit1, die zum Hauptformular gehört, wird dann zur Anzeige dieser Daten auf die entsprechenden Properties des Player-Objekts zugegriffen.

Ob man bei seinem eigenen Player dann die hier vorgeschlagene Klassenstruktur wählt, oder eine andere, ist dann zweitrangig. In meinem großen Player Nemp ist dann z.B. die Playlistklasse nicht von der Playerklasse abgeleitet, sondern die Playlist hat eine Property vom Typ TPlayer, da dieser "Player" nicht nur Zeug aus der Playlist abspielen soll, sondern ggf. auch was anderes.

Zum Thema:

Das mit der Titellänge in meinen Playern ist immer so eine Sache. Einerseits bestimme ich die über meine eigenen (sehr schnellen) Methoden in der "Audiofile"-Klasse (mit Hilfe meiner Mp3FileUtils etc.), andererseits stimmen diese Berechnungen nicht immer 100%ig mit der Realität überein (CBR, VBR, XING-Header, irgendwelches anderes Gedöns), so dass diese Daten für das Abspielen mit der Dauer abgeglichen werden sollte, die die bass.dll liefert. Sonst kommt die GUI ggf. durcheinander.

In Memp sind dafür die folgenden Eigenschaften interessant:
Delphi-Quellcode:
// Properties von TMempPlayer (bzw. dann auch von TMempPlaylist, die vom TMempPlayer abgeleitet ist)
// aktuelle Position im Titel in Sekunden. Auslesen im Timer für Zeitanzeige, Setter nutzen für "3 Sekunden vorspulen" oder so
property Time: Double read GetTime write SetTime;

// aktuelle Position im Titel in "Prozent". Auslesen für den Progress in einer Scrollleiste/Progressbar o.Ä. für einen "relativen Fortschritt"
// Setter ebenso nutzbar für Klicks auf eine Progressbar/Scrollleiste oder ein geeigneteres visuelles Element
property Progress: Double read GetProgress write SetProgress;

// Dauer des aktuellen Stücks in Sekunden. Nur Getter, weil wir keinen Audio-Editor haben, sondern nur einen Player
property Dauer: Double read Getlength;
Welche visuellen Komponenten man dann wählt, um dem User die Steuerung möglichst bequem zu machen, ist dann wieder was anderes. Die TScrollbar ist da ein einfaches Beispiel, was einige Features bietet, aber eben nicht unbedingt alle. - Zum Beispiel kein OnMouseDown, um per Klick zu einer bestimmten Stelle zu springen.
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: (D7) Memp Mediaplayer anpassen (Vorspulen)

  Alt 31. Jul 2018, 12:08
Hallo nochmal,
habe noch etwas nachkorrigiert hier damit das visuelle aktueller gleich ausschaut, vielleicht machst Du das auch bei Dir.
Delphi-Quellcode:
procedure TForm1.pb1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 pb1.Position := round(X / (pb1.Width / pb1.Max));
 MeMPPlaylist.Progress := pb1.Position / 100;
 MainScrollbar.Position := pb1.Position;
end;
Delphi-Quellcode:
procedure TForm1.MainTimerTimer(Sender: TObject);
var t: integer;
begin
  if MainScrollbar.Tag = 0 then
  begin
    MainScrollbar.Position := Round(MeMPPlaylist.Progress * 100);
    pb1.Position := MainScrollbar.Position;
  end;

  t := Round(MeMPPlaylist.Time);
  LblTime.Caption := Format('%.2d:%.2d',[t Div 60, t Mod 60]);
  MeMPPlaylist.DrawSpectrum(SpectrumPaintbox.Canvas.Handle);
end;
Hallo @Gausi, ich hoffe das geht in Ordnung so.

Mit paar sekunden vor oder nach hinten hopsen würde ich auch über eine der TBar.Position realisieren, es kann dann nicht exakt 3 sekunden sein da die TBar's immer 0-100 sind, prozentual von liedlänge halt.
Vielleicht klappts auch anders, der Erfinder kann sich da bestimmt noch Besser zu äußern

Nachtrag: Hat er ja bereits getan
Gruß vom KodeZwerg

Geändert von KodeZwerg (31. Jul 2018 um 12:11 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 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