Autor Beitrag
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 18.08.18 18:27 
Bei Nemp gibt es ein neues Update - Version 4.9.

Download von meiner Webseite: Nemp 4.9, oder auf GitHub, wo ich den Code jetzt verwalte: Nemp auf GitHub.

Neu dabei ist die sparsamere Verwendung des Arbeitsspeichers, wodurch man auch größere Musiksammlungen - also bis zu 1.000.000 Titel (oder sogar mehr) damit verwalten können sollte. Außerdem ein Logfile für die Playlist, und ein neuer Skin zur Auswahl.

Der Fehler mit der verdeckten Taskleiste beim Maximieren ist wohl auch behoben (ich hab da aber nix dran gemacht, war vermutlich der Umstieg auf Tokyo. :mrgreen: )

Edit: Link korrigiert

_________________
We are, we were and will not be.


Zuletzt bearbeitet von Gausi am So 19.08.18 09:55, insgesamt 2-mal bearbeitet
Trolldemorted
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 18.08.18 23:36 
Endlich verschlüsselte Downloads und nen vernünftiger issue-tracker!

Der gausi.de-Link geht zu nemp 4.8. Ich würde aber generell empfehlen keine Downloads ohne TLS mehr anzubieten.
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 19.08.18 15:04 
Kleine Anmerkung zu dem Issue-Tracker auf GitHub: Ich arbeite in Schüben an dem Projekt, und schaue daher nicht regelmäßig da rein. Wenn wirklich was ist, dann lieber eine direkte Kontaktaufnahme per Mail.

Vermutlich wird die Entwicklung jetzt erstmal pausieren, wenn nichts gravierendes kaputt ist. Hab zwar grade etwas mit x64 rumgespielt, und nach einigem hin und her kompiliert und startet es auch (OpenGL und GnuGetText machen da richtig Ärger), aber das Umschalten der Sprache und der OpenGL-Coverflow funktionieren nicht. Ich glaube, dass lass ich dann doch erstmal bleiben. ;-)

_________________
We are, we were and will not be.
Trolldemorted
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 20.08.18 12:42 
Wenn du dein repo watchst bekommst du eine mail wenn jmd etwas in einem issue/pr postet :)
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 28.08.18 20:54 
Bei der Beobachtung der hohen CPU-Last beim Verändern der Fenstergröße (normal bei Windows) habe ich bemerkt, dass die CPU-Last generell sehr hoch ist - zumindest dann, wenn man die G15-App nutzt, um den aktuellen Titel auf dem Display der Logitech G15 auszugeben. Ursache war der Code, den ich damals im Netz dazu gefunden habe und relativ ungeprüft übernommen habe :oops: . Man vergleiche nur (wird im Timer alle 250ms ausgeführt)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  x2 := 0;
  for it := 0 to 43 -1 do
  begin
      P := SourceBitmap.ScanLine[it];
      for i := 0 to 160 -1 do
      begin
          if P[i] <> $ff then
              bmp.pixels[x2] := 128
          else
              bmp.pixels[x2] := 0;
          inc(x2);
      end;
  end;


mit

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  x2:=0;
  for it:= 0 to 43 -1 do
  begin
      for i:= 0 to 160 -1 do
      begin
          tmp :=  SourceBitmap.Canvas.Pixels[i,it];
          if tmp <> $ffffff then
              bmp.pixels[x2] := 128
          else
              bmp.pixels[x2] := 0;
          inc(x2);
      end;
  end;


Die Variable bmp ist dabei kein TBitmap, sondern ein Record, was man dann an das Display sendet. Könnte man ggf. noch weiter optimieren, aber schon so sinkt die Last von 2-3% (bei 4 Cores) auf 0-0,1%. Ich glaube, ich muss jetzt ein paar Bäume pflanzen, um das wieder gut zu machen. :angel:

Wer die G15-App nicht nutzt, muss nicht updaten. Ich habe aber dennoch die Version der Nemp.exe erhöht, auch wenn in dem Binary sonst nichts verändert wurde.


Nemp 4.9.1

_________________
We are, we were and will not be.
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Mi 29.08.18 10:24 
Der Wizard beim Erststart (oder bin ich da aus Versehen auf einen Knopf gekommen?) wird bei mir (Windows 10) hinter dem Hauptfenster geladen. Habe ihn nur zufällig aufblitzen sehen, als ich den Skin gewechselt habe (bevorzuge den Windows-Standard). Sollte der nicht besser "immer im Vordergrund" sein?

Ich erwäge Nemp, wenn ich wieder am "richtigen" Rechner bin, mal mit MusicBee zu vergleichen, was CPU-Last u.dgl. angeht. Habe vierzehn Jahre gesammelte Musik auf meiner Musikfestplatte, das könnte es schon vernünftig fordern. :)
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 29.08.18 16:48 
Zum Wizard: Der sollte eigentlich im Vordergrund sein, aber ich erzwinge das nicht. Also nicht ShowModal, und auch kein erzwungenes StayOnTop. Das ist eigentlich auch gewollt. Da werden einige Opt-In Dinge abgefragt, die für den eigentlichen Betrieb nicht nötig sind, die ich aber doch für so sinnvoll halte, dass ich sie nicht komplett im Einstellungsdialog versauert haben will.

MusicBee habe ich mir eben auch mal angeschaut. Optisch ist das meilenweit voraus, und ich sehe auf Anhieb keine Möglichkeit, wie ich z.B. diese "Alben"-Ansicht bei mir hinbekommen könnte. Da werden vermutlich zugekaufte Komponenten drinstecken (oder massiv Eigenarbeit). Auch ein paar Funktionen finde ich interessant, die ich bei mir aber nicht einbauen werde. Sehr interessant finde ich da auch die Hintergrund- und Farbgestaltung in der Alben-Ansicht, die wohl aus dem Cover durch ein extremes Verschwimmen generiert wird. Dazu dann passende Schriftfarben. Sieht wirklich sehr gut aus. Bedienung ist für mich etwas ungewohnt, daher sage ich dazu nichts.

Gut gefällt mir da auch das Gedöns mit den Bildern der Interpreten, die aus dem Netz geladen werden. Eventuell schau ich mir mal an, wie ich das geregelt bekomme (dann aber Opt-In), und die bei mir doch sehr angestaubte Artist-Alben-Ansicht ein wenig aufhübsche.

Beim "Albumcover" habe ich aber die Nase vorn, glaube ich :mrgreen:. Sowohl was das Finden einer passenden Datei von der Festplatte angeht, als auch dem nachladen aus dem Netz. Dürfte u.A. daran liegen, dass ich im Zweifel "1 Album = 1 Ordner" annehme, und nicht nur "folder.jpg" als mögliches Cover nehme, sondern mir da eine (sehr oft sehr gut funktionierende) Heuristik gebastelt habe.

Von der CPU-Last sollten die beiden Player vergleichbar sein. Basieren ja beide auf der bass.dll. Kann sein, dass Nemp etwas gieriger ist, weil die Visualisierung etwas aufwändiger ist. Wie performant das Suchen und Stöbern in der Sammlung ist, kann ich nicht sagen. 100.000 - 250.000 Dateien sollten mit Nemp flüssig handelbar sein, darüber gebe ich keine Garantie (aber Luft nach oben ist da jetzt noch). :P

Edit: Hui, das Einlesen der Audiodaten ist schnell. Ich hoffe, dass das bei Nemp daran liegt, dass ich mehr Zeit mit der Coversuche verplempere. Aber das Handling von Samplern finde ich da arg merkwürdig. Aus einer Bravo-Hits macht das Ding mal eben 40 Einzel-Alben ... für jeden Interpreten ein Album mit je einem Lied. Muss das so? :gruebel: Edit2: Ne, muss nicht. Gibt's ne Einstellung für.

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: hydemarie
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Mi 29.08.18 20:49 
Zur Referenz:

RnSQnK6

Ich habe Nemp weitgehend unverändert gelassen, einschließlich des sehr XP-igen schwarzen Standardskins. MusicBee hat inzwischen schon manche Änderung gesehen. ;)
Wenn du aus meinem Hinweis ein paar Anregungen mitnehmen kannst, ist das ja schon mehr als ich erhofft hatte.

Der angedrohte Ressourcenvergleich:

Leerlauf (voll eingelesene Musikbibliothek mit vermutlich also identischem Datenbestand):

9fnLy4R

Beide Player spielen was ab (MusicBee scrobbelt, Nemp nicht, weil das merkwürdig wäre):

JhuQvR0

Aber das Einlesen via Nemp dauert wirklich furchtbar lange. Liebe Güte.
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: Gausi
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 29.08.18 21:36 
Na, der Ressourcenvergleich sieht ja gar nicht so schlecht aus für mich. Scrobbeln sollte ja keine CPU-Zeit brauchen. Da wird 2x pro Titel eine Verbindung zu last.fm aufgebaut. Einmal am Anfang "Spiele jetzt ab", und dann am Ende "bin fertig mit spielen". Sonst passiert da ja nichts (also, bei Nemp passiert da nicht mehr :lol:).

Speicherverbrauch sieht bei mir aber genau andersrum aus. Dürfte an den vielen Liedtexten liegen, die ich im ID3-Tag gespeichert habe und im Speicher (für die Suche) halte.

Diese Statistik bei MusicBee habe ich auch gesehen. Das guck ich mir mal genauer an. Finde ich noch ne nette Idee und wäre eine schöne Erweiterung für das rudimentäre Playlist-Log, das neulich von einem Nutzer gewünscht wurde.

Zum Einlesen der Daten: Da ist ein Faktor von knapp 1,5 drin, wenn ich das grade richtig beobachte. Bei Nemp kommt psychologisch ungünstig hinzu, dass der Zähler und die Anzeige "suche in ..." im festen Zeitintervall aktualisiert wird und nicht im Highspeed-Modus jeden Wert hochzählt bzw. jeden durchsuchten Ordner anzeigt.

Aber 26.000 Titel? Da bin ich beruhigt - da ist alles im grünen Bereich. Ich zitiere mal aus einem Mailverkehr von neulich zur Bugsuche, was letztlich zur Version 4.9 geführt hat, in der ich sparsamer mit RAM umgehe.
Zitat:
Ja, könnten ca. 700.000 Lieder gewesen sein. (...) Das ist erst ein kleinerer Teil aller Musik, die ich habe.

Seitdem bin ich immer etwas nervös, wenn jemand von umfangreicheren Sammlungen spricht. :suspect:

Wenn du weitere Anregungen hast: Immer her damit. Die beiden Programme verwenden ja eine etwas andere Herangehensweise an das Thema Musikverwaltung und setzen andere Schwerpunkte - wenn da Feedback von "der anderen Seite" kommt, kann ich nur gewinnen. ;-)

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: hydemarie
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Mi 29.08.18 21:42 
Ich schmeiße ja immer weg, was ich nicht so mag. ;) Dafür sind manche "Lieder" auch mal eine halbe Stunde lang...

Dein Standardtheme macht mir Kopfweh!


Zuletzt bearbeitet von hydemarie am Di 30.03.21 16:55, insgesamt 1-mal bearbeitet
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 15.07.19 16:43 
Hier ein äußerlich kleineres, aber intern etwas größeres Update.

Vor ca. 3 Monaten kam eine Bugmeldung rein, dass die Lyric-Suche nicht mehr funktioniert. Das war diesmal allerdings keine kleine Template-Änderung an dem Webseiten-Code, sondern u.a. eine erzwungene Weiterleitung auf https. Bin dann von den Indys weg, um die OpenSSL-Libraries nicht mitliefern zu müssen. Dabei sind dann Umbauten am Exception-Handling nötig geworden.

In dem Kontext habe ich dann einige böse Bugs gefunden, die in Verbindung mit Application.ProcessMessages standen (so Zeug wie "ganz viele Dateien von der Medienbibliothek in die Playlist einfügen, und diese dabei löschen - Bäng!"), was einige interne Umbauten zur Folge hatte. Diese Fälle treten zwar nur sehr selten auf, sind aber trotzdem blöd gewesen.

Dabei ist dann als größte Neuerung rausgekommen, dass der Fortschritt einiger länger andauernder Funktionen einheitlich in einem separaten Fenster dargestellt wird, inkl. der klaren Ansage, dass man diese auch abbrechen kann.

Nach außen hin nur wenig Änderungen, aber ich habe dabei ein paar "Altlasten" entfernen können/müssen. :D

Download


zum Standardtheme: Bin halt kein Grafiker. Als nächstes steht aber eine Umsortierung des GUI an, vielleicht wird es dadurch dann schon etwas besser. ;-)

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: hydemarie
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 10.09.19 19:13 
Einer hat's ja schon gesehen (und direkt ein Issue auf Github aufgemacht) ...

Nemp 4.11 ist draußen. Hauptänderung ist ein konfigurierbares Hauptfenster, sowie einige Aufhübschungen am Skinsystem (hoffentlich) und ein oder zwei kleine Erklärtexte beim ersten Start.

Ein paar Dinge funktionieren jetzt ein klein wenig anders, und ein, zwei Features sind verschwunden, die aber glaube ich niemand vermissen wird. Das war eh unsinnig. Oder lief nur unter XP, was nicht mehr voll unterstützt wird.

Download

Oder auf Github.

Quellcode-Archiv ist etwas größer geworden, das Binary-Archiv kleiner. Das liegt vor allem an Einsparungen bei den Hilfe-PDFs (Screenshots mit geringerer Auflösung)

(Verschlüsselter Download von meiner Seite kommt auch demnächst. ;-) )

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: hydemarie
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Di 10.09.19 20:19 
Konfigurierbares Hauptfenster?

Wie foobar2000?

(Bin unterwegs, kann daher nicht gucken.)
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 10.09.19 20:56 
Keine Ahnung, ob das wie bei foobar ist - wahrscheinlich nicht, und wahrscheinlich weniger frei konfigurierbar.

Aber die einzelnen "Blöcke", also Coverflow, Playlist, Medienliste/Suchtreffer, Details zur aktuell markierten Datei (da hat sich in 4.11 auch etwas geändert) sowie das Kontrollpanel sind in der Anordnung variabel.

Vielleicht wird das im Screenshot des Form-Designers klarer, was möglich ist

FormDesigner

Hauptgrund ist, dass einige den Coverflow bevorzugen (da sollte dieser Teil breit und flach sein), und andere die klassische Ansicht mit zwei Vorauswahl-Kriterien, die eher schmal und hoch sein sollte. Mit dem starren Layout ist dadurch auch die Höhe des benachbarten Teils festgelegt, was nicht unbedingt sinnvoll ist. Daher kann man die Teile variabel anordnen, und auch die primäre Anordnung zwischen "zwei Reihen" und "zwei Spalten" wählen.

Alles in einer Spalte/Reihe ist wirklich nicht sinnvoll, daher geht das nicht (bis auf einen kleinen Trick, bzw. wenn man die "Datei-Übersicht" nicht angezeigt haben möchte).
Einloggen, um Attachments anzusehen!
_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: hydemarie
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Di 10.09.19 21:07 
Nicht übel. Ich teste das beizeiten.
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 27.03.21 19:33 
Nach längerer zeit poste ich auch hier mal wieder das Update: Nemp 4.15 ist da! :D

Download
(Endlich auch per https von meiner Seite)

Seit der zuletzt hier geposteten Version ist unter anderem dazu gekommen
  • Unterstützung für ReplayGain
  • Eine verbesserte Update-Benachrichtigung mit Infos zu den neuen Funktionen
  • Verbessertes Drag&Drop in der Playlist
  • Erweiterte Portabilität
  • Suche nach doppelten Einträgen in der Playlist
  • Konfigurierbarer Coverflow

Ich hoffe, es funktioniert soweit alles. An dieser Stelle allerdings der Hinweis, dass das Nachladen von Lyrics aus dem Netz aktuell kaputt ist. Die Seite, von der ich die hauptsächlich beziehe, hat ihren Dienst komplett eingestellt. Im nächsten Update werde ich schauen, ob ich da Alternativen anbieten kann ...

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: icho2099
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Di 30.03.21 16:57 
user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Die Seite, von der ich die hauptsächlich beziehe, hat ihren Dienst komplett eingestellt.


Ohne nachzugucken weiß ich sofort, welche gemeint ist. ;) (Schade drum, allerdings.)
Ich empfand genius.com bisher als ganz guten Ersatz, weiß aber nicht, ob man da einfach scrapen darf.
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 30.03.21 18:03 
user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
Ich empfand genius.com bisher als ganz guten Ersatz, weiß aber nicht, ob man da einfach scrapen darf.

Ich sag mal so: Ich hab da auf GitHub ein Stück Code (allerdings nicht Delphi) gefunden, das deren API nutzt. Die Beschreibung zur Verwendung des Codes endet dann sinngemäß mit "damit haben wir den Link zu der Lyric-Seite, und da popeln wir jetzt den Liedtext raus. Wollen die zwar anscheinend nicht, daher setzt das bitte nur maßvoll ein". Die API bietet keine Möglichkeit, die Liedtexte direkt abzufragen.

Aber ja, genau die Seite habe ich auch im Blick, werde aber ggf. die API aussparen und direkt den Link "schätzen". Dann sinkt ggf. etwas die Trefferquote, aber damit könnte ich vermutlich leben. Was anderes habe ich bei LyricWiki ja auch nicht gemacht. ;-)

Eine kostenfreie API für Lyrics-Beschaffung scheint es leider nicht zu geben.

_________________
We are, we were and will not be.
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Di 30.03.21 20:07 
Natürlich nicht, Liedtextpflege und/oder Infrastrukturbereitstellung kosten ja auch Geld und Zeit und manche verdienen sich gern was dazu. ;)
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 02.10.22 19:07 
Nach ca. eineinhalb Jahren kommt mal wieder ein etwas größeres Update für meinen Player. Auch wenn sich auf den ersten Blick nicht so sehr viel getan, bewerte ich das dennoch als Major-Update und wage den Sprung auf Version 5 - erstmal aber als Beta.

Nemp 5.0 (Beta)
Download bisher nur als Pre-Release auf Github, und auch nur als Zip, kein Installer.

Allgemeine Update-Angaben im Posting auf der ersten Seite. An dieser Stelle evtl. ein paar Hintergrund-Angaben zum Code, warum ich große Teile komplett neu geschrieben habe, und weswegen dann der Sprung auf Version 5 irgendwie doch gerechtfertigt ist. ;-)

Zustand in Nemp 4
Bisher konnte man in Nemp zwei Kriterien auswählen (z.B. Interpret und Album). Die Liste mit allen Dateien wurde nach diesen Kriterien sortiert, und daraus wurden zwei Listen generiert: Eine mit allen Interpreten, und eine zweite mit allen Alben. Diese beiden Listen wurden in zwei Treeviews ausgegeben. Nach Klick auf einen Interpreten wurde erstens eine Liste mit allen Alben generiert, an denen dieser Interpret beteiligt ist. Zweitens wurde eine Liste mit allen Dateien ausgegeben, bei denen dieser Interpret gesetzt ist. Nach Klick auf ein Album in der zweiten Liste wurde die Datei-Liste eingeschränkt auf das markierte Album.

Damit das schnell funktioniert, wurde ein komplexes System aus sortierten Listen und Binärsuchen verwendet. Es gab aber keinen direkten Zusammenhang zwischen der Sortierung und der Binärsuche - weswegen es dabei immer wieder zu Problemen kam. Wenn die Vergleichsmethode bei der Sortierung und der Suche nicht exakt gleich ist, geht das in die Hose. Das war nicht wirklich wartbar.

Zusätzlich dazu gab es den Coverflow. Hier wurden die Dateien nach "Cover-ID" sortiert. Für die Anzeige des Album-Interpreten und des Album-Titels im 3D-Coverflow habe ich eine neue Klasse eingeführt - TNempCoverItem, welches diese Informationen aus der Liste der Titel auf diesem Album bestimmt hat. Damit hatte ich ein zweites Datenmodell für die Anzeige der Medienbibliothek.

Und dann war da noch die Anzeige in Form einer Tagwolke. Ich möchte hier gar nicht lang und breit erklären, was ich mir damals an dieser Stelle zusammengebastelt habe - im Grunde habe ich das Konzept von TDictionary (schlecht) nachgebaut.

Damit hatte ich drei verschiedene Datenmodelle, um die Medienbibliothek anzuzeigen. Drei! :nut: Hinzukamen noch diverse Klimmzüge für Webradio und Playlist-Verwaltung. :eyecrazy:

Neues Datenmodell - Eines für Alles
Damit ist jetzt Schluss. Das neue Datenmodell hat keine Probleme mehr mit Sortierung und Suche. Es gibt intern (fast) keinen Unterschied zwischen Coverflow und Baumansicht und Tagwolke. Daher kann man nun die Tagwolken-Tags in der Baumansicht aktivieren, und es können dort auch die Album-Cover eingeblendet werden. Und man muss sich nun nicht mehr auf eine Einteilung festlegen (auch wenn die zur Laufzeit geändert werden konnte), sondern man kann mehrere parallel nutzen. Interpret-Album und Verzeichnisse? Oder nur Alben? Oder eine tiefere Verschachtelung wie Erscheinungsjahr-Interpret-Album? Oder Genre-Erscheinungsjahr. Oder ...

Realisiert wird das über eine Klasse TAudioFileCollection, die neben einer Property CollectionType auch ein Dictionary TDictionary<string, TAudioFileCollection> enthält. Der CollectionType wird für die einzelnen Ebenen in einem Konfigurations-Objekt hinterlegt. Für das Einfügen einer Audio-Datei in eine AudioFileCollection wird je nach CollectionType ein Key aus dem Interpreten, dem Album, dem Erscheinungsjahr, dem Ordner, Genre gebildet. Dann wird die Datei in die passende Sub-AudioFileCollection im Dictionary eingefügt. Wenn der CollectionType leer ist, dann gibt es keine weitere Dictionary-Ebene, und die Datei wird einfach in eine TObjectList<TAudioFile> in der Collection eingefügt.

Für die Ausgabe in der Baumansicht können einfach alle Values des Dictionaries als Knoten ausgegeben werden. Wenn es ein Sub-Dictionary gibt, werden entsprechend Kind-Knoten mit allen Values des Sub-Dictionaries ergänzt. Bei Klick auf einen Knoten in der Baumansicht wird die Methode SelectedCollection.GetFiles; aufgerufen, die alle Dateien in der TAudioFileList ausgibt und ggf. durch rekursiven Aufruf von GetFiles auch alle Dateien der enthaltenen SubCollections im Dictionary.

Eine Methode AudioFileCollection.Analyse; analysiert bei Bedarf die Collection und ermittelt einen gemeinsamen Interpreten, Album-Titel, oder ein passendes Cover, falls es (abhängig vom Typ) sinnvoll ist. Diese Werte können als Caption oder Image in der Baumansicht genutzt werden, oder auch im Coverflow ...

Und für den Coverflow?
Ganz einfach: Eine AudioFileCollection vom Typ "Album", Ermittlung von Interpret, Album und Cover in Analyse, und Ausgabe aller Alben in dem Dictionary über OpenGL. Die Verknüpfung von Anzeige und Daten geht hier etwas anders, aber das Modell im Hintergrund bleibt gleich.

Und für die Tagwolke?
Eine AudioFileCollection vom Typ "TagCloud". Hier gibt es allerdings eine paar Besonderheiten: Bei den anderen Typen gibt es einen eindeutigen Key pro Datei, hier gibt es mehrere - nämlich ein Key pro "Tag". Dadurch wird jede Datei in mehrere Sub-Collections eingefügt. Und während bei den anderen CollectionTypes die Verschachtelungstiefe klar definiert ist (oder zumindest wie bei Verzeichnissen klar begrenzt), kann hier die Verschachtelungstiefe beliebig groß werden. Daher werden SubCollections nur bei Bedarf erzeugt, und auch nur für den Tag, der grade aktiv betrachtet wird.

Und Playlisten? Und Webradio?
Auch das geht über Collections, allerdings über eine andere Ableitung vom gemeinsamen abstrakten Vorfahr TAudioCollection. Die Methode GetFiles funktioniert dann ein wenig anders, aber das Konzept bleibt.

Fazit: Besser wartbarer Code :) bei deutlich mehr Funktionsumfang :D, der auch noch schneller arbeitet :mrgreen:.

Soweit der Einblick in die Entwicklung der neuen Version. Und falls sich noch jemand wundert, warum die Anzahl der Kategorien (eine weitere Neuheit, die ich hier nicht weiter erläutert habe) auf 32 beschränkt ist: Für die Zuordnung einer Datei zu einer Kategorie nutze ich Bitmasken. 8) Diese Beschränkung ist aber auch ausdrücklich gewollt. Eine feingliedrige Aufteilung ist hierbei nicht das Ziel gewesen.

Bug gefunden? Anmerkungen?
Fehler und andere Anmerkungen an mich. Antwort im Thread, PN, per Mail, ganz egal. Wer will, wird dann auch im About-Dialog eingetragen. ;-)

btw.:
Die Band "The Warning" in der Screenshot-Playlist und besonders den aktuellen Titel "Error" kann ich wärmstens empfehlen: Die Mädels rocken Binärcode! :zustimm:

Und als Nachtrag: Lyric-Suche habe ich (fast) komplett rausgeschmissen. Nach den ersten erfolgreichen Tests kam sehr schnell nur noch "Ihre IP wurde jetzt für 2 Stunden geblockt." - Dann habe ich es aufgegeben und gebe nur noch automatisch generierte Such-Links zum Anklicken an, von denen man dann Copy-Pasten kann.

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: jaenicke, Sinspin