![]() |
top100 in mp3player
hi leutz, ich versuche nun seit 2 tagen eine toplist für meinen mp3player zu programmieren.
wenn ein track komplet durchgelaufen ist wird überprüft ob in der listbox (top100l) schon was drin steht wenn nicht, dann wird der aktuellgespielter track eingetragen bzw die variabeln in die vorher aus dem Id3Tag der artist und titel ausgelsen wurde. wenn schon was in der liste steht werden die inhalte in strings geladen der platz abgezogen und nachgeschaut ob artist und titel identisch sind, wenn ja, dann listbox.item.delete(i) den platz addieren um 1 und eintragen in listbox sollte nicht gleich sein dann einfach eintragen mit platz=1 platz heißt eigentlich punkte bzw. stimmen.... hier mein jetzige und 3. code:
Delphi-Quellcode:
mein prob, es geht auch so weit aber bei meist mehr wie 2-3 einträgen fängt er an nicht mehr zu vergleich oder speichert einträge doppelt ect...
procedure Thauptprog.top100Timer(Sender: TObject);
var artneu, trackneu, zkneu, zklist, plist : String; pneu, i, code : Integer; begin if Trackbar1.Position = TrackBar1.Max then //status von song begin artneu := id3_tag.EdtArtist.Text; //id3tag artist trackneu := id3_tag.EdtTitle.Text; //id3tag titel if top100l.Count = 0 then begin pneu := 1; top100l.Items.Add(IntToStr(pneu)+'~'+artneu+'~~'+trackneu); end else if top100l.Count > 0 then begin for i:=0 to top100l.Count-1 do begin zkneu := artneu+'~~'+trackneu; zklist := top100l.Items[i]; plist := Copy(zklist,0,Pos('~',zklist)-1); Val(plist, pneu, code); zklist := Copy(zklist, Pos('~',zklist)+1, Length(zklist)); if zklist=zkneu then begin top100l.Items.Delete(i); pneu := pneu+1; top100l.Items.Add(IntToStr(pneu)+'~'+zkneu); end else begin pneu := 1; top100l.Items.Add(IntToStr(pneu)+'~'+zkneu) end; end; end; end; end; |
Re: top100 in mp3player
habs nun so versucht aber klappt auch net:
Delphi-Quellcode:
naja, hoffe kann mir jemand helfen bzw. versteht was ich meine...und hat eine lösung bzw. eine andere idee *hoff*
procedure Thauptprog.top100Timer(Sender: TObject);
var artneu, trackneu, zkneu, zklist, plist : String; pneu, i, code, drin : Integer; begin if Trackbar1.Position = TrackBar1.Max then //status von song begin drin := 0; pneu := 0; artneu := id3_tag.EdtArtist.Text; //id3tag artist trackneu := id3_tag.EdtTitle.Text; //id3tag titel if top100l.Count = 0 then begin pneu := 1; top100l.Items.Add(IntToStr(pneu)+'~'+artneu+'~~'+trackneu); end else if top100l.Count > 0 then begin for i:=0 to top100l.Count-1 do begin While drin = 0 do begin zkneu := artneu+'~~'+trackneu; zklist := top100l.Items[i]; plist := Copy(zklist,0,Pos('~',zklist)-1); Val(plist, pneu, code); zklist := Copy(zklist, Pos('~',zklist)+1, Length(zklist)); if zklist=zkneu then begin top100l.Items.Delete(i); pneu := pneu+1; top100l.Items.Add(IntToStr(pneu)+'~'+zkneu); drin := 1; end else begin pneu := 1; top100l.Items.Add(IntToStr(pneu)+'~'+zkneu); drin := 1 end; end; end; end; end; end; |
Re: top100 in mp3player
hm... kann wohl keiner, naja selber noch ein bissel testen vielleicht überwinde ich ja die mauer die mich quährdenken lässt :wall:
|
Re: top100 in mp3player
Moin!
Du brauchst doch nur den Zähler, wie oft gespielt. Dadurch entstehen doch automatisch die Top100... MfG Muetze1 |
Re: top100 in mp3player
hopla.. meist jetzt den der zählt, wie oft das lied lief?? oder wie...
ich muss doch auch nachschauen ob das lied in der top100 drin ist und wenn, dann den zähler um eins addieren.... |
Re: top100 in mp3player
Moin!
Zitat:
Deine Top1000 - davon das das am Platz 1000: Angenommen dieses wurde schon 5x gespielt. Wie willst du das denn mit deiner Logik machen? Wenn du nun ein Lied hast was zum ersten mal gespielt wurde, dann wird es auch nicht in die Top1000 aufgenommen, ergo hast du keinen Zähler, ergo weisst du das nächste mal spielen des Liedes nicht mehr, das es schon einmal gespielt wurde. Darauf folgt: es können sich nur noch die Positionen in der Top1000 ändern. Deshalb: Einen Zähler bauen für jedes File der mit jedem abspielen um eins erhöhrt wird. Wenn du das gemacht hast, kannst du daraus dann deine Top1000 ermitteln... MfG Muetze1 |
Re: top100 in mp3player
hm... von prinzip her also eine liste die man nicht sieht...in dieser wird immer das aktuelle lied gespeichert, was gespielt wurde... würd dieses später wieder mal abgespielt erhält es eine 2 und das gleich auch mit anderen liedern..
so, nun sagen wir mal, man klickt auf einem butten der dann eine zweite listbox, die dann aus der unsichbaren die ersten 100 einträge ausließt und dann anzeigt, vorausgesetz die unsichtbare die, halt zählt ist von hause aus sortiert... so in edwar? die unsichtbare listbox kann man ja immer in einer datei abspeichern und laden beim progstart... |
Re: top100 in mp3player
Moin!
Ja, genau so. Dazu noch ein paar Tipps: 1. Du brauchst keine unsichtbare ListBox, du kannst einfach eine TStringList nehmen. Die kannst du genauso einfach laden und speichern und die ist von Haus aus nicht auf der Oberfläche zu sehen. 2. Speicher die Abspielhäufigkeit am besten in dem Object[] Array bei den Einträgen - die werden mitsortiert und dann ist es einfacher, da dann der Name und die Anzahl ordentlich getrennt sind... 3. Du könntest auch den PlayCounter nutzen, der in den ID3v2.3.x.x mindestens definiert sind - Nachteil: jedesmal die MP3's auslesen - und es geht halt nur bei MP3s - also kein OGG, WMA oder sonstige... 4. schöne Interpretation von "etwa" als "edwar"... :thuimb: MfG Muetze1 |
Re: top100 in mp3player
oky, alles klaro so wei *denk ich* :)
Zu2. aber das mit 2 raf ich net, wie meinst soll ich array nutzen....als zähler??? Zu3. Ja könnte man, aber später soll der Nutzer auch einstellen ob er außer mp3 anderes hört und wenn ja, ob top100 dann halt die dateinamen benutzen soll. |
Re: top100 in mp3player
Moin!
Zitat:
Delphi-Quellcode:
Mir fällt nur noch ein, das du dir was beim Speichern überlegen musst, da die Objekte nicht mit gespeichert werden...
StrL := TStringList.Create;
StrL.LoadFromFile('top100'); // so, lied A wird abgespielt Index := StrL.IndexOf(A); Counter := Integer(StrL.Objects[Index]); Inc(Counter); StrL.Objects[Index] := TObject(Counter); MfG Muetze1 |
Re: top100 in mp3player
:shock: so ganz verstanden ha ich es noch nciht aber mal schauen raus kommt... danke für deine Hilfe und wenn ich kein stück weiterkomme :pale: , weiß ich ja, wo hilfe zu finden ist *gg* :dp:
|
Re: top100 in mp3player
ist doch quasi nichts anderes als 'ne Highscore, nur dass es statt der Punkte die Zahl giubt, wie häufig das abgespielt worden ist. Ich würde es allerdinbgs in ini, csv oder xml speichern. Ich schätze aber ini ist das einfachste. Dazu habe ich schonmal was geschrieben:
![]() |
Re: top100 in mp3player
hi, hab mir den code mal angeschaut:
Delphi-Quellcode:
die idee ist nicht schlecht, es von eine highscorelist abzuschauen aber ich muss ja schauen ob der song nachher schon drin ist und wenn, dann soll einfach seine "punkte" (anzahl von abgespielt) addiert werden mit der die in der liste steht...
procedure Highsoreladen;
var ini:TIniFile; s:integer; begin for s:=1 to 10 do //10=anzahl der Einträge begin Ziel :=ini.readstring('Highscore','Name'+inttostr(s),''); Ziel :=ini.readstring('Highscore','Score'+inttostr(s),''); end; end; eigentlich wollte ich das ja statt in einer ini in einer textdatei haben mit einer beliebeigen endung... so das man diese im www laden kann und dann ein phpskrip auswertet bzw. mit den einträgen arbeiten kann.... |
Re: top100 in mp3player
Zitat:
Delphi-Quellcode:
Ich weiß nicht mehr genau, ob es writeint oder writeinteger heißt (das gleiche gilt für read, musst du mal auspürobieren (oder wissen *g*).
procedure eintragUpdate(Song:string);
var ini:TIniFile; s:integer; begin for s:=1 to 101 do begin if ini.readstring('Highscore','Name'+inttostr(s),'') =Song then begin ini.writeint('Highscore','Score'+inttostr(s),ini.readint('Highscore','Score'+inttostr(s),0)+1); //Klartext: Ich lese dir Score aus, erhöhe sie um 1 und speichere sie wieder... break; end; if =101 then //dann ist es nicht drin... end; Zitat:
|
Re: top100 in mp3player
danke, das mit ini ist das kleine prob, wegen befehle, hab ja meine skins und optionen damit gemacht....
das mit php war eigentlich nur das was mir im hinterkopf schwebte, hm.... muss ich halt ein script machen was mit dem aufbau einer ini klar kommt... werd mich melden wenn ich es getsetet hab ;) |
Re: top100 in mp3player
danke... hab mal eben alles so gemacht das das programm jeden song in einer ini eintraägt.. startet man das prog neu, schaut er nahc wo der letze eintrag war und macht da dann weiter nun nur noch dsa überprüfen, wenn schon drin dann gehört +1 und dann noch ein schönes form in dem alles angezeigt wird...
hier mal ein kleier code:
Delphi-Quellcode:
// top100
if (id3_tag.EdtArtist.Text='')and(id3_tag.EdtTitle.Text='')then begin end else begin initop100 := TiniFile.Create(ExtractFilePath(ParamStr(0))+'inis/top.100'); try initop100.WriteInteger('top100','eintrag'+IntToStr(eintragtop100),eintragtop100); initop100.WriteString('top100','artist'+IntToStr(eintragtop100),id3_tag.EdtArtist.Text); initop100.WriteString('top100','track'+IntToStr(eintragtop100),id3_tag.EdtTitle.Text); initop100.WriteString('top100','gehoert'+IntToStr(eintragtop100),'1'); finally initop100.Free; end; eintragtop100 := eintragtop100+1; end; // top100 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz