Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi top100 in mp3player (https://www.delphipraxis.net/24121-top100-mp3player.html)

EvilDragon 15. Jun 2004 19:44


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:
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;
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...

EvilDragon 15. Jun 2004 20:46

Re: top100 in mp3player
 
habs nun so versucht aber klappt auch net:

Delphi-Quellcode:
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;
naja, hoffe kann mir jemand helfen bzw. versteht was ich meine...und hat eine lösung bzw. eine andere idee *hoff*

EvilDragon 16. Jun 2004 05:07

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:

Muetze1 16. Jun 2004 08:59

Re: top100 in mp3player
 
Moin!

Du brauchst doch nur den Zähler, wie oft gespielt. Dadurch entstehen doch automatisch die Top100...

MfG
Muetze1

EvilDragon 16. Jun 2004 15:16

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....

Muetze1 16. Jun 2004 16:17

Re: top100 in mp3player
 
Moin!

Zitat:

Zitat von EvilDragon
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....

Ich meinen einen Zähler für jedes Lied - musst du eh haben, weil folgendes mal vorstellen:

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

EvilDragon 16. Jun 2004 19:04

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...

Muetze1 17. Jun 2004 00:40

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

EvilDragon 17. Jun 2004 07:17

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.

Muetze1 17. Jun 2004 09:01

Re: top100 in mp3player
 
Moin!

Zitat:

Zitat von EvilDragon
Zu2.
aber das mit 2 raf ich net, wie meinst soll ich array nutzen....als zähler???

Nutze eine TStringList und missbrauche die Objekt Eigenschaft als Speicherplatz für deinen Zähler:

Delphi-Quellcode:
  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);
Mir fällt nur noch ein, das du dir was beim Speichern überlegen musst, da die Objekte nicht mit gespeichert werden...

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr.
Seite 1 von 2  1 2      

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