Einzelnen Beitrag anzeigen

100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#121

Re: Bass Player Komponente: TBassDLLPlayer (+ Demos)

  Alt 7. Mär 2006, 20:50
Zitat:
@urbanbruhin: ja, jetzt verstehe ich was du meinst. Habe mich auch gerade mal dran gemacht. Musste dann allerdings feststellen, das diese Einstellungen dann natürlich für jeden Channel einzeln abgespeichert werden müssen. Da mein Beispiel keine Einschränkungen haben soll, sehe ich jetzt noch nicht ob das so sinnvoll ist das in mein Demo mit einzubauen. Im Prinzip ist es ganz einfach. In den Einstellungsframe der jeweiligen Visualisierung wird einfach der Kontruktor und Destruktor überschrieben und dann wird einfach die Lade- bzw. Speichermöglichkeit hinzugefügt (z.B. Ini-File oder sonst was...) und das war es dann auch schon.
ich denke auch, dass es sich nicht lohnt, das in die demo einzubauen.
wenn ich dich richtig verstanden habe, übernimmst du das mit dem speichern und laden? oder soll ich mal versuchen das selber in die hand zu nehmen?
ich muss allerdings sagen dass ich noch nie komponenten abgeändert und erst recht nicht erstellt habe...

Ich habe noch 2 kleine fragen:
1. Ist es möglich, über deine komponente Track-Informationen auszulesen? Wenn nicht mach ich es mit einer TJvID3v1 oder TJvID3v2.

2. kann ich folgende prozedur "verschnellern"?
Delphi-Quellcode:
procedure TForm1.TrackZumArchivHinzufuegen(Filename, Titel, Interpret, Album, Musikstil, Bewertung: String; Abgespielt: Integer; Hinzugefuegt: TDate; ueberschreiben: boolean);
var Litem: TListitem; aTitel, aInterpret, aAlbum, aMusikstil, Zeit: String; i: integer;
begin
  if not fileexists(Filename) then exit;
  i := trackindex(filename); // unwichtig
  if (i <> -1) and (ueberschreiben = false) then exit; // das auch
  TrackInformationen(Filename, aTitel, aInterpret, aAlbum, aMusikstil); // Diese Prozedur ist etwas langsam, ist aber nicht schlimm, kann man so lassen

  if Titel = '-Default-then
    Titel := aTitel;
  if Interpret = '-Default-then
    Interpret := aInterpret;
  if Album = '-Default-then
    Album := aAlbum;
  if Musikstil = '-Default-then
    Musikstil := aMusikstil;
  if Bewertung = '-Default-then
    Bewertung := '';
  if Abgespielt = -1 then
    Abgespielt := 0;
  if Hinzugefuegt = 00-00-0000 then
    Hinzugefuegt := Tdate(now);

  ChannelC.LoadFromFile(Filename); // Diese 4...
  ChannelC.Volume := 0; // ...Zeilen dauern...
  zeit := channelc.songtimeinfo[SongTimeLength].asSecString; // ...ziemlich lange,
  channelc.Stop; // Das sollte viel schneller gehen

  if i = -1 then // Ab hier wieder unwichtig
  begin
    Litem := Listview1.Items.Add;
    Litem.Caption := Titel;
    Litem.SubItems.add(Interpret);
    Litem.SubItems.add(Album);
    Litem.SubItems.add(Musikstil);
    Litem.SubItems.add(Zeit);
    Litem.SubItems.add(inttostr(Abgespielt));
    Litem.SubItems.add(Bewertung);
    Litem.SubItems.add(datetostr(Hinzugefuegt));
    Litem.SubItems.add(Filename);
  end
  else
  begin
    Litem := listview1.Items.Item[i];
    Litem.Caption := Titel;
    Litem.SubItems.Strings[0] := Interpret;
    Litem.SubItems.Strings[1] := Album;
    Litem.SubItems.Strings[2] := Musikstil;
    Litem.SubItems.Strings[3] := Zeit;
    Litem.SubItems.Strings[4] := inttostr(Abgespielt);
    Litem.SubItems.Strings[5] := Bewertung;
    Litem.SubItems.Strings[6] := datetostr(Hinzugefuegt);
    Litem.SubItems.Strings[7] := Filename;
  end;
end;
wenn ich die 4 zeilen, die sehr langsam sind, durch "Zeit := ''" ersetze, geht die ganze prozedur viel schneller vor sich.
wenn die prozedur so 5000 mal hintereinander ausgeführt werden, geht das sehr lange. wenn ich das mit dem zeit := ... weglasse, dauerts nur noch ein bruchteil von der zeit.

Also Meine Frage: kann man die track-spielzeit auch anders ermitteln, ohne dass das so lange dauert?

gruss
urbanbruhin
  Mit Zitat antworten Zitat