AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Nemp - Noch ein Mp3-Player
Thema durchsuchen
Ansicht
Themen-Optionen

Nemp - Noch ein Mp3-Player

Ein Thema von Gausi · begonnen am 15. Mai 2006 · letzter Beitrag vom 3. Okt 2022
Antwort Antwort
Seite 10 von 10   « Erste     8910   
Benutzerbild von Gausi
Gausi
Registriert seit: 17. Jul 2005
Nemp - Noch ein MP3-Player, Version 5.0


Ein einfach zu bedienender mp3-Player mit vielen Funktionen. Er läuft ohne Installation - einfach runterladen, entpacken und ausprobieren. Ohne Erlaubnis fummelt Nemp auch nicht an euren Mp3-Dateien herum, sondern lässt sie so, wie sie sind.

Nemp 5.0Neu in Version 5.0
Die größte sichtbare Neuerung ist die Einführung von Kategorien in der Medienbibliothek. Damit kann die Medienbibliothek in verschiedene Bereiche aufgeteilt werden. Diese Kategorien können Sie ganz nach Ihren Wünschen anpassen. Die Aufteilung in zwei Listen (z.B. Interpreten und Alben) in der Baumansicht wurde ersetzt durch eine Baumstruktur, in der nun mehrere Sortierungen parallel genutzt werden können - auch diese können Sie nach Ihren Wünschen anpassen.

Außerdem ist nun die Anordnung der einzelnen Bereiche freier konfigurierbar, und es können (bis auf Steuerung und Playlist) alle Elemente wahlweise ausgeblendet werden. Der Funktionsumfang von Drag&Drop wurde erweitert, und der Einstellungsdialog wurde stark überarbeitet.

In der Medienbibliothek werden jetzt auch die Eigenschaften "Album-Interpret", "Komponist" und "BPM (Beats per Minute)" ausgelesen und gespeichert. Der Album-Interpret kann bei der Kategorisierung nach "Interpret" bevorzugt werden.

Weggefallen ist hingegen die automatische Suche nach Liedtexten. Das war schon immer irgendwie eine Grauzone. Nachdem das Community-basierte LyricWiki eingestampft wurde, sehe ich keine Möglichkeit mehr, diese Funktion weiter anzubieten. Sie ist nun reduziert auf automatisch generierte URLs zu AZLyrics und Suchanfragen zu verschiedenen Suchmaschinen (Google, Bing, DuckDuckGo). Von dort kann der Text dann manuell kopiert werden.


Download Nemp 4.15.0 (letzte stabile Version)Die Versionsverwaltung ist umgezogen zu GitHub: Nemp auf GitHub.

Zum Start einfach ein paar Titel (oder ein paar Alben) in den Playlist-Bereich ziehen. Werden Dateien in andere Bereiche des Fensters gedroppt, werden sie in die Medienbibliothek aufgenommen. Das Scannen der Platte dauert natürlich etwas - pro Minute schafft Nemp knapp 3000 Dateien (hängt natürlich auch stark von der Festplatte ab).

Features

Nemp organisiert alle Titel in einer Medienbibliothek, in der wahlweise nach Coverflow, zwei einstellbaren Kriterien (z.B. Interpret und Album) oder in Form einer Tagwolke gestöbert werden kann. Die Schnellsuche ist auch bei umfangreichen Musiksammlungen sehr schnell und ermöglicht zügig das Finden eines bestimmten Titels. Für die Tagwolke können automatisiert weitere Tags aus der last.fm-Community besorgt werden. Fehlender Cover oder Liedtexte werden ebenfalls auf Wunsch aus dem Netz nachgeladen. Solche Einstellungen (und ein paar weitere), die Änderungen an den Dateien vornehmen, werden beim ersten Programmstart im Einstellungs-Wizard abgefragt - diese sind aber alle Opt-In, d.h. per Default deaktiviert.

Ein integrierter Webserver bietet Zugriff auf Medienbibliothek und Playlist über einen Webbrowser, was ein schönes Gimmick auf Partys ist, wenn man den Player übers Smartphone steuern kann. Der Zugriff ist auf Wunsch stark eingeschränkt, sodass sich Gäste z.B. nur Lieder wünschen können, die dann nach einiger Zeit abgespielt werden.

Neben ein paar Spielereien wie Equalizer und einigen Effekten kann ein zweiter Titel über eine zweite Soundkarte vorgehört werden. Damit wird Nemp natürlich nicht zu einem DJ-Programm, aber ab und zu kann man das gut gebrauchen.

Als ernsthafteres Feature sei noch die Nemp-API erwähnt (im Wesentlichen kompatibel zur Winamp-API), über die andere Programme mit Nemp kommunizieren können. Ein Beispiel dafür ist die beiliegende App für das Tastatur-Display der G15, in der der laufende Titel angezeigt wird und eine rudimentäre Steuerung des Players ermöglicht - als Alternative zu den üblichen Multimediatasten (aber ein wenig darüber hinaus).


Lizenz seit Version 4.0: GPL mit ein paar Sondergenehmigungen, damit man gegen die bass.dll linken und MadExcept verwenden darf.
Miniaturansicht angehängter Grafiken
01-mainform.jpg  

Geändert von Gausi (12. Nov 2022 um 20:05 Uhr) Grund: Neue Version
 
EWeiss
 
#91
  Alt 13. Apr 2018, 20:06
Hmmm.. vielleicht wäre es dir ja möglich die PRIV Frames bei bedarf in die Datei zu integrieren?
Wäre top..
  1. PRIV WM/MediaClassSecondaryID
  2. PRIV WM/MediaClassPrimaryID
  3. PRIV WM/WMContentID
  4. PRIV WM/WMCollectionID
  5. PRIV WM/WMCollectionGroupID
  6. PRIV WM/UniqueFileIdentifier

Ich stelle mich gerne zur Verfügung um das zu testen.

gruss

Geändert von EWeiss (13. Apr 2018 um 20:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

 
Delphi 11 Alexandria
 
#92
  Alt 13. Apr 2018, 20:41
Die "PRIV"-Frames sind private Frames einer bestimmten Software. Es kann beliebig viele PRIV-Frames in einer Datei geben. Der Inhalt dieser Frames ist nicht standardisiert, und hat für andere Programme oft nur eine geringe Bedeutung.

Zu deinem Problem habe ich in dem anderen Thread geantwortet. Ist ja kein Nemp-Problem, sondern ein Windows-Problem (da bin ich mir jetzt sehr sicher). Teste deinen Code mal mit einem 1x1-Pixel großen Bild. Damit funktioniert das noch - keine Ahnung, wo die Grenze liegt.
( https://www.delphipraxis.net/1399162-post25.html )
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

 
Delphi 11 Alexandria
 
#93
  Alt 17. Jul 2019, 11:06
Nach etwas längerer Zeit gibt es ein kleines Update für den Player.

Die Lyric-Suche war (mal wieder) defekt, diesmal unter anderem verursacht durch eine zwangsweise Weiterleitung auf https bei der verwendeten Webseite. Das erforderte einen Umstieg von Indy auf andere Methoden (weil ich die OpenSSL-Dlls nicht unbedingt zusätzlich mitliefern will), was wiederum ein paar Umbauten am Exception-Handling erforderte, was wiederum ein paar genauere Blicke in den generellen Ablauf der Lyric-Suche, Nebenthreads und einiger anderer längerer Aktionen zur Folge hatte, bei dem dann ein paar konzeptionelle Probleme sichtbar geworden sind, die unter bestimmten Umständen zum Absturz des Players führten, und die mit "Application.ProcessMessages ist böse" wohl am besten zusammengefasst werden können ... kurz: Ein kleiner Bug führte zu einem ganzen Rattenschwanz an internen Änderungen.

Als sichtbare Veränderung ist dabei raus gekommen, dass nun die Fortschrittsanzeige für länger dauernde Funktionen einheitlicher gestaltet ist und auch dem Anwender deutlich gemacht wird, dass er das jederzeit abbrechen kann (das ging früher auch schon, war aber wohl nicht so offensichtlich).

Ich hoffe, es läuft soweit alles.

Download
Am Wochenende hat mir auch jemand eine Übersetzungsdatei für Niederländisch geschickt. Die werde ich nochmal etwas gegenchecken (besonders mit Blick auf die Format-Strings), und dann bei Gelegenheit dem Archiv hinzufügen.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

 
Delphi 11 Alexandria
 
#94
  Alt 3. Okt 2022, 10:17
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.

(Crossposting Entwickler-Ecke)

Nemp 5.0 (Beta)
Download bisher nur als Pre-Release auf Github, und auch nur als Zip, kein Installer.Allgemeine Infos zum Update 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 3 und 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 den Alben generiert und ausgegeben, 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 im Code 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 nunmal in die Hose. Das war nicht wirklich wartbar, und machte auch anderweitig Probleme - z.B. bei verschiedenen Alben mit dem Titel "Best of".

Zusätzlich dazu gab es den Coverflow. Hier wurden die Dateien nach einer "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. Aber das gab es "damals" noch nicht in Delphi. Oder es war mir unbekannt - daher was eigenes. Eine Hash-Tabelle mit fixer Größe, Kollisionsauflösung per Liste, sowas halt.

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

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 , der auch noch schneller arbeitet . Ganz perfekt ist Code sicherlich immer noch nicht, aber es ist eine deutliche Verbesserung zum Stand davor. Und man lernt ja nie aus.

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

Geändert von TBx ( 3. Okt 2022 um 17:10 Uhr) Grund: Titel auf Wunsch des TE angepasst
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 10 von 10   « Erste     8910   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr.
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