Autor Beitrag
pigfacejoe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Sa 28.06.08 20:45 
Guten Abend,

ich möchte hier meinen Mp3 Player vorstellen, der in der Lage ist Playlisten zu speichern, diese zu durchsuchen, Cover zu gerade spielenden Liedern zu finden, Songtexte zu finden, ID3Tags auszulesen und neuerdings auch Musikvideos zu spielenden Songs zu finden.

Cover und Songtexte werden im Ordner Anwendungsdaten\Mp3Library gespeichert. (z.B C:\Dokumente u. Einstellungen\name\Anwendungsdaten)
Ich freue mich über Verbesserungsvorschläge und hoffe , dass der ein oder andere das Programm ausprobiert ;-)

EDIT: Ich habe den Player nocheinmal grundsaniert, zu finden ist die neueste Version immer unter www.max-altmeyer.de/mp3lib15.php , der entsprechende Beitrag hier im Forum findet ihr unter
www.delphi-forum.de/...ibrary+15_93301.html

Gruß
Max
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von pigfacejoe am Mo 20.07.09 13:11, insgesamt 5-mal bearbeitet
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 28.06.08 21:41 
Einfaches anklicken des Titels und dann Play funktioniert nicht, startet nur mit Doppelklick vieleicht solls ja so sein.
Stop Button hat die selbe funktion wie der Pause Button.
Die Zeit würd ich mit Nullen auffüllen sieht besser aus 1:9 - 1:09
Ganze Verzeichnisse per Drag and Drop wäre nicht schlecht.
Wenn ein Lied spielt und ich alle Titel aus der Liste lösche spielt er trotzdem weiter.
Für die Suche braucht man noch eine Hilfedatei ich weiss nicht so recht wie das funzt.
Die Farben naja die volumebar passt nicht so recht ins gesamtbild, die Schrift mit dem schwarz weiss macht irgendwie Augenschmerzen.
Ansonsten schon mal nicht schlecht.
Ist mir etwas zu wuchtig, schlecht zu händeln beim Drag and Drop.

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8536
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 28.06.08 22:14 
Um ehrlich zu sein: Ich weiß nicht, was ich sagen soll. Das Design und Steuerung ist etwas gewöhnungsbedürftig - um es vorsichtig zu sagen.

Aber: Die Cover- und Lyricsuche haut da einiges wieder raus. Die funktioniert bei mir, und auf den ersten Blick erstaunlich gut! :zustimm:
Das ist so etwas, wo ich gerne mal einen Blick (oder auch ein paar mehr Blicke) in den Quelltext hätte, um das dann an anderer Stelle mit entsprechender Notiz in der About-Box einbauen zu können. ;-)

_________________
We are, we were and will not be.
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: So 29.06.08 00:06 
Wow, ging ja ziemlich schnell.. Vielen Dank für's testen!!

Also:
Zitat:
Stop Button hat die selbe funktion wie der Pause Button.

-> Stimmt. Muss geändert werden.

Zitat:
Ganze Verzeichnisse per Drag and Drop wäre nicht schlecht.

-> Auch richtig.

Zitat:
Für die Suche braucht man noch eine Hilfedatei ich weiss nicht so recht wie das funzt.

...kann ich verstehn...Diese Checkbox ist hier eigentlich wie ein button zu bedienen, ist wirklich etwas seltsam :oops:

Zitat:
Ich weiß nicht, was ich sagen soll. Das Design und Steuerung ist etwas gewöhnungsbedürftig - um es vorsichtig zu sagen.

Ohje, ich kann einfach machen was ich will. Designtechnisch bin ich wohl einfach ungeeignet..

Ich setze eure Anregungen mal soweit um, den Quelltext liefere ich noch nach!
Kurz vorweg: Ich Suche den Songtext über Google und filtere den Link zum Songtext aus den Google Ergebnissen heraus.
Das Cover Bild suche ich bei Google Bilder, da das nicht so 100% genau ist, habe ich dort dem Nutzer die Chance gegeben aus 10 Vorschlägen ein Coverbild zu wählen.

Also, nochmals Danke für das Feedback, weitere Kommentare sind natürlich erwünscht! (und vlt. auch ein paar Tips, damit das mit dem Design mal irgendwann funktioniert :cry: )

Gruss
PigfaceJoe
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 29.06.08 00:12 
Moin!ich hab das prog auch mal getestet und fand es vom design sehr angenehm.
was mich allerdings gestört hat war dass ich nichts mit den Laden und Speichern Button
anfangen konnte.Hints wären ganz schön.
Ich habe grade bei mir die festplatte entleert und windooof xp neu raufgekloppt-
also hatte ich nur die beispiel-musik zum probieren da.
aber dein prog konnte das nicht abspielen!WMA Format!
es sollte wenigstens die standart formate kennen.
Sonst kann ich nich viel zum prog sagen.
Werde wohl morgen(bzw.heute (in c.a 10h))mal ausführlich berichten.
Gute Nacht! 8)
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: So 29.06.08 12:04 
user profile iconj.klugmann hat folgendes geschrieben:
also hatte ich nur die beispiel-musik zum probieren da.
aber dein prog konnte das nicht abspielen!WMA Format!
es sollte wenigstens die standart formate kennen.


Hast du einen Codec installiert?
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: So 29.06.08 12:17 
Moin!

Zitat:
also hatte ich nur die beispiel-musik zum probieren da.
aber dein prog konnte das nicht abspielen!WMA Format!
es sollte wenigstens die standart formate kennen.


Hab ich jetzt verbessert: Er kennt WAV, wma, mp3
Die Buttons haben Hints in der neuen Version,
ein kleiner Fehler bei der Songtext Suche habe ich behoben.
Ausserdem habe ich die Vorschläge umgesetzt mit einer Ausnahme: Das man Ordner per Drag and Drop einfügen kann. (Bei meiner TStringlist zeigt er dann immer an Listenindex überschreitet das Maximum 1) Ich schau mich da mal noch um.

Gruss
Max
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 29.06.08 12:49 
mOIN!Ich hab mal einn lied ohne text abgespielt und dem programm gesagt das es
einen songtext suchen soll-Aber das programm stürtzte nach c.a 25 sek ab.
Woran kann das liegen?
Sonst hat sich programm a bissl verbessert. :wink:
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: So 29.06.08 12:56 
Zitat:
Ich hab mal einn lied ohne text abgespielt und dem programm gesagt das es
einen songtext suchen soll-Aber das programm stürtzte nach c.a 25 sek ab.
Woran kann das liegen?


Es könnte natürlich sein, dass das Programm sich in der while Schleife ,hier sucht es ein ganz best. Wort, aufhängt, weil es dieses nicht findet. Ich schau mal nach.
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 29.06.08 14:57 
Ganz nett, nur spielt der Player Dateien mit Japanischen Zeichen im Dateinamen nicht ab. (Ein Beispiel: "Angela Aki - Home - 03 - 心の戦士.mp3")

Wenn du schon Cover lädst, sollten auch im ID3-Tag befindliche Cover berücksichtigt werden. Außerdem sollte bei der manuellen Coverauswahl der Standardpfad vom OpenDialog gleich dem Pfad der aktuellen Datei sein.

Einstellige Sekundenangaben sollten mit führender Null angegeben werden.

Außerdem stürzt der Player bei manchen Dateien einfach ab. Es passiert einfach gar nichts mehr, der Player hängt.
Die Dateien, bei denen das bisher auftrat waren "Howling" von "abingdon boys school" und "Kakusei Heroism ~ The Hero without a name" von "Antic Cafe". Irgendwelche Gemeinsamkeiten, die zu diesem Fehlverhalten führen könnten, habe ich nicht gefunden...

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 29.06.08 15:24 
Wie kommt man auf die idee japanische lieder abzuspielen- :wink:
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Mo 30.06.08 01:58 
Zitat:
Ich hab mal einn lied ohne text abgespielt und dem programm gesagt das es
einen songtext suchen soll-Aber das programm stürtzte nach c.a 25 sek ab.
Woran kann das liegen?

Soooo.... habe endlich den Fehler gefunden! Er wurde jetzt behoben , ich hoffe mal er wird sich jetzt nicht mehr aufhängen , kannst ja einfach mal den selben Song abspielen und mit dem Programm versuchen den Songtext zu finden. Statt des Absturzes sollte jetzt nach ca 2-5 sek. eine Showmessage kommen die dir sagt, dass nichts gefunden wurde ;-)
Ich habe nocheinmal die Songtextsuche verbessert (ich hoffe man merkts!^^).
Ausserdem habe ich die Nullen eingefügt bei der Zeitangabe.
Mit den japanischen Zeichen weiss ich nicht wie ich das umgehen soll,vlt. kannste mir da ja einen Tip geben ;-)

Vielen Dank für die Berichte!

Neue Version ist oben aktualisiert,
Gruss
Max
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Mo 30.06.08 14:28 
user profile iconpigfacejoe hat folgendes geschrieben:
Mit den japanischen Zeichen weiss ich nicht wie ich das umgehen soll,vlt. kannste mir da ja einen Tip geben ;-)

Stichwort Suche in: Delphi-Forum, Delphi-Library UNICODE: Diese Zeichen sind im Standard-1Byte-Zeichensatz nicht enthalten, weshalb sie da zu Fragezeichen werden, und die Datei folglich nicht gefunden wird. Unicode ist ein Multibyte-Zeichensatz, wo es mehr als 256 verschiedene Zeichen gibt, und auch diese Zeichen enthalten sind.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Der nette Nachbar
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 67

Win XP, Suse Linux 9.3
Delphi 7, Delphi 2007, Borland C++ Builder 6, Java Builder 7
BeitragVerfasst: Mo 30.06.08 14:35 
Also sorry wenn ich das sagen muss, aber das Design isn nun wirklich fürn *popo*.
Habe selten ein schlechteres gesehen.
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Mo 30.06.08 15:24 
Zitat:
Also sorry wenn ich das sagen muss, aber das Design isn nun wirklich fürn *popo*.
Habe selten ein schlechteres gesehen.

Ja ich weiss, ich habs halt mit dem design echt nicht drauf...Was genau stört euch eig. alle an dem design? ;-)
Apollo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Windows 7
Delphi 3 Prof., Delphi 2005
BeitragVerfasst: Mo 30.06.08 21:38 
Hallo,
hab mir das mal angesehen und soooo
schlimm ist das desige nun auch wieder nich
(trotzdem nich seeeeeeeeeeeeeeehr schön :( )

Sag mal wie heißt eigendlich die zeitleisten
Komponente (siehe bild unten)? Gib's das bei Torry?
Wars bei delphi dabei?
danke

mfg Apollo
Einloggen, um Attachments anzusehen!
_________________
Im Zweifelsfall immer das Richtige tun
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Mo 30.06.08 21:40 
is bei den JEDI Komponenten dabei, sind im grossen und ganzen auch echt recht nützlich..

Download hier: sourceforge.net/projects/jvcl

Gruss
Max
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Di 01.07.08 16:56 
Sooo habe jetzt die 4. Version hochgeladen. Das Design habe ich mal versucht zu verbessern... Ausserdem kann man jetzt geladene Cover und Songtexte auch wieder entfernen.
Die Songtextsuche hängt sich auch nicht mehr auf...
Gruss
Max
Der nette Nachbar
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 67

Win XP, Suse Linux 9.3
Delphi 7, Delphi 2007, Borland C++ Builder 6, Java Builder 7
BeitragVerfasst: Di 01.07.08 17:24 
Nicht schlecht, das Design sieht nun mehr asnprechend aus xD...weiter so.
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Di 01.07.08 22:50 
Ersteinmal Danke ;-)

Und hier den versprochenen Code:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
procedure TForm3.Button1Click(Sender: TObject);
var z,i:integer;
begin
JVWaitingGradient1.Active:=true;//Ist die Progressbarr zur Anzeige des Fortschritts
res:=''//Res ist das Result, enthält später den Link zum Songtext (Global deklariert)
text:='';//Text enthält nach Prozedur Button3Click den Songtext, ebenfalls global
try
memo1.Text:=idhttp1.Get('http://www.google.de/search?hl=de&q='+plusersetzen(edit1.text)+'+magistrix+songtext&btnG=Suche&meta=');
//Hier wird in memo1 der HTML Quelltext geladen. In edit1 steht der Interpret und //Songtitel, Die funktion plusersetzen macht aus einem Leerzeichen ein "+", weil die //Google suche das so verlangt...
for z:= 1 to length(memo1.text) do
begin
application.ProcessMessages;
if copy(memo1.Text,z,length('www.magistrix.de/lyrics'))='www.magistrix.de/lyrics' then
begin //Hier wird in den Suchergebnissen nach den Songtexten in Magistrix gesucht...
i:=z;
while (memo1.Text[i] <>'"'and (i<length(memo1.text)-1do
begin
res:=res+memo1.text[i];//Hier wird nun der Link zum Songtext in res geschrieben
i:=i+1;
application.ProcessMessages;
end;
if i<length(memo1.Text) then
begin
edit1.Text:=res;
button2.click;//Und button2 wird aufgerufen, dieser besorgt uns den Songtext
exit;
end else
begin
showmessage('Die Suche war erfolglos');
close;
exit;
end;
end;
end;
except showmessage('Verbindung zum Internet nicht möglich. Überprüfen Sie ihre Firewall!');  close; end;
showmessage('Die Suche war erfolglos');
close;
end;

procedure TForm3.Button2Click(Sender: TObject);
var z,i:integer;
begin
if zahl (res) then //Siehe unten function zahl
begin
try
memo2.Text:=idhttp1.Get('http://'+res);//Hier wird der Magistrix Songtext geladen
for z:= 1 to length(memo2.Text) do
begin
if copy(memo2.Text,z,length('<p id="lyricText" style="">'))='<p id="lyricText" style="">' then
  begin
  i:=z+length('<p id="lyricText" style="">');
    while (copy(memo2.Text,i,length('<table class="box1"'))<>'<table class="box1"'and (i<length(memo2.Text)) do
    begin
    text:=text+memo2.Text[i];//Und hier schritt für schritt in text geschrieben
    i:=i+1;
    application.ProcessMessages;
    end;
  memo3.Text:=html2text(text); //HTML2text wandelt HTML befehle in Delphi befehle //um.(Siehe unten)
  if not directoryexists(Extractfilepath(Paramstr(0))+'Lyrics\'then//Dies ist nun //nicht mehr wichtig. In der Variable text steht das was ihr braucht ;-)
  createdir(Extractfilepath(Paramstr(0))+'Lyrics\');
  memo3.lines.SaveToFile(Extractfilepath(Paramstr(0))+'Lyrics\'+Extractfilename(form1.mediaplayer1.FileName)+'.txt');
  showmessage('Songtext gefunden und abgespeichert!');
  close;
  exit;
  end ;

end;
 except showmessage('Verbindung zum Internet nicht möglich. Überprüfen Sie ihre Firewall!');  close; end;
 showmessage('Die Suche war erfolglos');
 close;
 end else begin  showmessage('Die Suche war erfolglos');
 close; end;
 end;

  function HTML2Text(aHTML: string): string;
  var
    WStr: string;
  begin
    WStr:= aHTML;
    WStr:= StringReplace(WStr, '<br>'#13#10, [rfReplaceAll]);
    WStr:= StringReplace(WStr, '</p><center>'' ', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '</i>'' ', [rfReplaceAll]);
    WStr:= StringReplace(WStr, ''#13#10, [rfReplaceAll]);
    WStr:= StringReplace(WStr, '|'' ', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '´''`', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '<i>'' ', [rfReplaceAll]);
    WStr:= StringReplace(WStr, 'ä''ä', [rfReplaceAll]);
    WStr:= StringReplace(WStr, 'Ä''Ä', [rfReplaceAll]);
    WStr:= StringReplace(WStr, 'ö''ö', [rfReplaceAll]);
    WStr:= StringReplace(WStr, 'Ö''Ö', [rfReplaceAll]);
    WStr:= StringReplace(WStr, 'ü''ü', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '&Üuml;''Ü', [rfReplaceAll]);
    WStr:= StringReplace(WStr, 'ß''ß', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '€''€', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '&''&', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '<''<', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '>''>', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '"''"', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '<b>''', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '</b>''', [rfReplaceAll]);
    WStr:= StringReplace(WStr, '%B4''''', [rfReplaceAll]);
    Result:= WStr;
  end;


  function zahl(s:string):boolean;
  var z:integer;
  begin
  for z:=1 to length(s) do
  if (ord(s[z])>=48and (ord(s[z])<=57then
  begin result:=true; exit ; end;
  result:=false;
  end;
  
function allesklein(s:string):string;
var z:integer;r:string;
begin
r:='';
for z:=1 to length(s) do
begin

if  (ord(s[z])>=65and (ord(s[z])<=90then
 r:=r+ chr(ord(s[z])+32)
 else r:=r+s[z];
 end;
 result:=r;
 end;
var res,text:string;
p:boolean;

function plusersetzen(s:string):string;
var z:integer;
begin
for z:= 1 to length(s) do
begin
if s[z]=' ' then s[z]:='+';
if (allesklein(copy (s,z,4))='.mp3'or (allesklein(copy (s,z,4))='.wma')or (allesklein(copy (s,z,4))='.wav'then delete(s,z,4);
end;
result:=s;
end;




Falls ihr das ganze in eurem Projekt unterbringt, würde ich mich sehr über eine kleine Erwähnung freuen :-)

Gruss
Max