Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Nemp - Noch ein Mp3-Player (https://www.delphipraxis.net/69466-nemp-noch-ein-mp3-player.html)

Gausi 29. Mär 2018 12:52

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
Sourceforge mag mich nicht mehr. Kann sein, dass das Projekt da zu lange brach lag - aber ich kann da keine neuen "Downloads" erstellen. Bin grade dabei, zu Github zu wechseln. Das erscheint mir aktuell um einiges komfortabler und übersichtlicher.

Das Archiv, das ich eben verlinkt habe, enthält nur das Binary, nicht die Quellen. Die gibt es aber auf meiner Webseite auch.

Anregungen für Erweiterungen habe ich noch genug. Was ich mir als nächstes evtl. mal ansehe ist eine Portierung nach 64Bit. Ich hab die Tage eine Mail bekommen, wo (vermutlich wegen RAM-Problemen) gewisse Dinge nicht mehr funktionieren (z.B. das Speichern der Medienbibliothek auf Platte über einen temporären TMemoryStream). Da geht es um über 1 Million Titel in der Medienbibliothek, das passt dann nicht mehr alles in den Adressraum eines 32-Bit-Prozesses. Hat aber geringe Priorität, vor allem, weil der Aufwand möglicherweise extrem ist.

Das "Spectrum" ist ja auch Teil in meinem Player, aber mehr optische Spielereien will ich da eigentlich nicht einbauen.

Ein kleines Update kommt demnächst noch, was die Logik während des Startvorgangs bzgl. der überwachten Verzeichnisse etwas anders organisiert.

MichaForum 29. Mär 2018 13:36

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
Hallo,

ich nutze die 4.6.3.565

Gruß,
Micha

MichaForum 29. Mär 2018 13:48

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
Mist. Mein Fehler ;-)

Ich meinte die komplette Titelliste unten (wenn oben links "verschiedene Interpreten" ausgewählt ist. In dein Einstellungen gibt es ein Häckchen für "immer sotieren", das ist mir nachhaltig entgangen ;-) Bei der Startsortierung "vergisst" Nemp nun aber die letzte ausgewählte Datei in der Medienliste ... das ist aber nicht so wild, damit kann ich leben.

Ich nutze die normale Darstellung, kein Coverflow.

Gruß,
Micha

KodeZwerg 29. Mär 2018 19:02

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
Ja, da wollte ich sowieso nochmal nachhaken, aber ich glaub ich schau mal in die Quellen rein, warum in dem Binary-Paket soviel .exe Dateien vorhanden sind (bei der 4.6 von Sourceforge).
Das Bassplay ist bei mir die einzige .exe, ansonsten nur .dll von Bass bzw Winamp & Nero und noch zwei Soundfonts für Midi.
Ich fand die Spielerei mit dem Analyzer & Spectral Scan sehr wichtig (für mich) um schon von Hause aus beurteilen zu können wie sauber etwas aufgenommen ist ohne groß reinhören zu müssen oder aus einem Mono-Track ein Stereo zu bekommen oder Multi-Channel runter ins Stereo Format.
Die BPM Kalkulation ist eigentlich das einzige was ich nicht unbedingt brauche, da nicht sehr präzise, wird aber automatisch beim Spectral-Scan mitberechnet.
Auf jedenfall Positiv zu vermerken, mir gefällt Deine GUI sehr gut und das sie flüssig läuft.
Wünschen würde ich mir eine Möglichkeit nicht alles sichtbar zu haben, also Player Kontrolle getrennt von Playlist/Bilder/Texte etc so das man Deinen Player als kleines Fenster ala Winamp hat mit einer OnTop Option.
Wenn Du auf 64bit umsteigst für Tabellen/Listen etc, würde ich das als "Pro" Feature einbinden, 2-5 Euro per Donation und es ist eine "Pro" Version, nur so ein Gedanke da es ja Deine Zeit kostet.
Bassplay hat auch ein "Mix" Feature wo per BPM annähernd gleiche Tracks automatisch gemischt werden (mehrere Audio-Streams gleichzeitig) und bei Bedarf wird daraus eine einzige Audio-Datei, mit oder ohne Equalizer settings, mit oder ohne Zugeschaltete Effekte (Hall, Chorus, Echo etc), solche spielereien mag ich ;-)
(oder beim Liedwechsel schneller Linearer Mixdown bzw Fade-in/out, bei Pause/Play gibts einen Plattenspieler effekt wenn strom beim abspielen an-/abgeschaltet)
Ich nutz Bassplay auch oft um aus was-auch-immer-für-ein-Format erstmal eine PCM/WAV datei zu erzeugen die dann wiederum recodiert werden kann (per OLE-Objekt realisiert).
Da Bassplay alt und chaotisch ist, die Bass.pas nicht Delphi XE tauglich war, wurde es nicht weiterentwickelt.
Das war ein Wochenendprojekt und bleibt auch ein solches, ich hoffe ich werde mit Deinem genauso glücklich!

Gausi 29. Mär 2018 20:32

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
Zitat:

Zitat von KodeZwerg (Beitrag 1397607)
Wünschen würde ich mir eine Möglichkeit nicht alles sichtbar zu haben, also Player Kontrolle getrennt von Playlist/Bilder/Texte etc so das man Deinen Player als kleines Fenster ala Winamp hat mit einer OnTop Option.

Drück mal F7 oder guck dir Menü->Einstellungen->Ansicht an. ;-)

Das Haupt-Binary ist die Nemp.exe, alles andere ist zusätzliches Gedöns. "CloseNemp" schließt Nemp. Das hat mal jemand gebraucht, mittlerweile geht das über den Parameter /close, d.h. man kann die laufende Instanz über die Eingabeaufforderung beenden. Die G15App.exe ist eine App für die Logitech G15 (Playlist im Display der Tastatur, einfache Steuerung), und die SafeMode.exe setzt ein paar leicht kritische Parameter zurück, falls mal was nicht richtig läuft.

EWeiss 13. Apr 2018 05:38

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
@Gausi
Wenn du mal zeit hast solltest du dir vielleicht mal deine Cover Sache in Augenschein nehmen.
Wenn man zu MP3 Dateien ein Cover addieren will zerschießt du mit deinen mp3FileUtils den kompletten Tag der Datei.

Habe das auch mal mit Nemp versucht auch hier das gleiche der Tag wird zerstört bzw.. in einem Format geschrieben das vom WMP nicht mehr erkannt wird.

gruss

Codehunter 13. Apr 2018 09:25

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
Zitat:

Zitat von Gausi (Beitrag 1397575)
Sourceforge mag mich nicht mehr. Kann sein, dass das Projekt da zu lange brach lag - aber ich kann da keine neuen "Downloads" erstellen. Bin grade dabei, zu Github zu wechseln. Das erscheint mir aktuell um einiges komfortabler und übersichtlicher.

Lach... Die scheinen aber auch keine Mühen zu scheuen, ihre Nutzer zu vergraulen :twisted: Den Niedergang von Sourceforge zu beobachten ist schon interessant. Im Grunde ein Paradebeispiel wie man es nicht machen sollte.

@Gausi: Wollen wir uns zusammentun?

Gausi 13. Apr 2018 10:37

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
Zitat:

Zitat von EWeiss (Beitrag 1399034)
@Gausi
Wenn du mal zeit hast solltest du dir vielleicht mal deine Cover Sache in Augenschein nehmen.
Wenn man zu MP3 Dateien ein Cover addieren will zerschießt du mit deinen mp3FileUtils den kompletten Tag der Datei.

Habe das auch mal mit Nemp versucht auch hier das gleiche der Tag wird zerstört bzw.. in einem Format geschrieben das vom WMP nicht mehr erkannt wird.

gruss

Kannst du mir mal so eine zerschossene Datei zuschicken? Per Dropbox, Anhang, oder einfach per mail@gausi.de?

Hab das hier grade nochmal kurz getestet, und keine Probleme feststellen können.

Und auch wenn das etwas arrogant klingt: der WMP ist nicht grade eine Referenzimplementation für ID3-Tags. Wenn der WMP was nicht lesen kann, heißt das noch lange nicht, dass der Tag kaputt ist.
Das letzte Mal, dass ich nachgeschaut habe (bei Windows 7), verstand der immer noch nicht Unterversion 2.4 des ID3-Tags (so ungefähr aus dem Jahr 2000), und hat dann lieber einen eigenen in Version 2.3-Tag davor gesetzt. War besonders schön, da Apple wohl standardmäßig auf 2.4 setzt. Eine Zeit lang hat der auch die ersten paar Frames Musik mit dem Tag überschrieben (ID3v2 steht ja am Anfang der Datei, man muss bei einer Größenänderung des Tags als die Musik zwischenpuffern und die ganze Datei neu schreiben).

Aber wie gesagt: Schick mir mal eine Beispieldatei (idealerweise eine vor und nach dem Editieren mit meiner Unit), dann schau ich mir das mal näher an.

Edit: Hm, interessant. "Keine Probleme" war etwas voreilig. Hab grade einen anderen Tagger getestet. Der kann meine Testdatei zwar lesen, der WMP allerdings tatsächlich doch nicht (hatte in der WMP-Medienbib falsch geguckt, kenne mich mit dem WMP nicht so aus). Wenn ich mit diesem Tagger ein Cover hinzufüge, kann der WMP das lesen, allerdings konvertiert dieser Tagger auch die Version von 2.4 zu 2.3. Da habe ich am Wochenende was zu tun, fürchte ich, um das mal näher zu untersuchen.

EWeiss 13. Apr 2018 13:34

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
Zitat:

Edit: Hm, interessant. "Keine Probleme" war etwas voreilig. Hab grade einen anderen Tagger getestet. Der kann meine Testdatei zwar lesen, der WMP allerdings tatsächlich doch nicht (hatte in der WMP-Medienbib falsch geguckt, kenne mich mit dem WMP nicht so aus). Wenn ich mit diesem Tagger ein Cover hinzufüge, kann der WMP das lesen, allerdings konvertiert dieser Tagger auch die Version von 2.4 zu 2.3. Da habe ich am Wochenende was zu tun, fürchte ich, um das mal näher zu untersuchen.
Ja das ist bekannt das der WMP nicht so das wahre ist.. Tags betreffend
deshalb möchte ich diesen auch nicht verwenden um meine Dateien zu Taggen.

Destotrotz wie auch immer darf es nicht sein das deine Anwendung meine tags für den WMP unbrauchbar macht.
Du schleifst das Problem ja nicht mit Nemp alleine durch die Welt sondern deine Library ist davon betroffen
und alle anhängigen Anwendungen welche diese verwenden.

EDIT:
Hat id3v1 schon Cover Support?
Wenn nicht warum kann man sie mit Nemp addieren?

Auch das System mit dem Dialog/Eigenschaften von Datei kann die Tags dann nicht mehr lesen.
Die frage wäre WMP <> System?

gruss

EWeiss 13. Apr 2018 14:48

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
Hab die Mail versendet bekomme aber ein Fehler 550 mit der von dir angegebenen EMAIL.
Keine Ahnung ob diese *.zip Dateien blockiert.

Ein unbekannter Fehler ist aufgetreten.
Zitat:

Betreff 'cover'
Serverfehler: 550
Serverantwort: 550 5.7.0 etwaige Unannehmlichkeiten und bedanken uns für Ihre Unterstuetzung!
Server: 'securesmtp.t-online.de'
Windows Live Mail-Fehlernummer: 0x800CCC69
Protokoll: SMTP
Port: 465
Secure (SSL): Ja
gruss

EWeiss 13. Apr 2018 19:06

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
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

Gausi 13. Apr 2018 19:41

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
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 )

Gausi 17. Jul 2019 10:06

AW: Nemp - Noch ein Mp3-Player 3.2.1
 
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. :-D

Gausi 3. Okt 2022 09:17

AW: Nemp - Noch ein Mp3-Player
 
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. :pale:

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
Delphi-Quellcode:
TAudioFileCollection
, die neben einer Property
Delphi-Quellcode:
CollectionType
auch ein Dictionary
Delphi-Quellcode:
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
Delphi-Quellcode:
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
Delphi-Quellcode:
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
Delphi-Quellcode:
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
Delphi-Quellcode:
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
Delphi-Quellcode:
TAudioCollection
. Die Methode
Delphi-Quellcode:
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:. Ganz perfekt ist Code sicherlich immer noch nicht, aber es ist eine deutliche Verbesserung zum Stand davor. Und man lernt ja nie aus. :stupid:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 Uhr.
Seite 3 von 3     123   

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