MPD/MPC (Python Script soll "cover.png" suchen)

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen, ich habe ein kleines Problem mit meinem Script. Ich habe mir das Script von hier https://github.com/5Volt-Junkie/RPi-Tron-Radio besorgt und nach meinen Wünschen erweitert. Hab mir da durch langes stupides Testen und Kombinieren verschiedener Code Schnipsel zwei weitere Fenster hinzugefügt, eins wo ich jetzt aus acht verschiedenen Playlists wählen kann und ein weiteres für die Anzeige von zusatzlichen Informationen für das momentan gespielte Lied. Dort erscheint momentan nur ein "festes" Standardbild, nämlich eine kleine CD.

    Nun zu dem Problem: statt diesem Standardbild würd ich mich riesig freuen wenn da stattdessen die "cover.png" aus dem Ordner der momentan gespielten mp3 gezeigt wird.

    Hab da schon, leider erfolglos, tagelang rum probiert :wallbash:

    Dieser Befehl

    Code
    mpc -f [%file%]

    ist meines Erachtens die Basis. Dieser gibt mir dann z.b.

    Code
    Various Artists/Dream Dance Vol. 09/Marc van Dale - Water Verve.mp3

    .

    Also muss jetzt "in Python gesagt" werden, Pfad zur mp3 checken ob eine "cover.png" vorhanden ist und diese dann gezeigt wird.

    Hoffe einer von euch kann mir bisschen auf die Sprünge helfen.

    Im Anhang findet ihr das bearbeitete Script.

  • Hm so wie ich das sehe ist das Script etwas kaputt. Im unteren Teil von "while running:" werden größtenteils Leerzeichen als Einrückung genutzt, aber die GPIO Sachen sind mit TABs eingerückt und das sorgt für Ungleichheit. Die GPIO.cleanup() sind zuvor auskommentiert, werden anschließend aber mit TABs anstatt Leerzeichen doch wieder genutzt :-/
    Allgemein kommen wir auch in den Funktionen button() und update_screen() ein paar Zeilen komisch vor, nicht nur die Einrückung mit TABs anstatt Leerzeichen :s

    Die Verwendung von vcgencmd zum auslesen der CPU Temperatur oder ARM Freq. ist zudem etwas zu heavy, vcgencmd verursacht nämlich leider gut 10% CPU Last was bei manch einem zu Aussetzern wärend des abspielens führen könnte. Stattdessen kann man die virtuellen Dateien in /sys/ auslesen, das verursacht kaum erwähnenswerte Last ;)

    Die Playlist Sachen sind auch seltsam (menu 4) - wieso 9x ein Befehl für "cd /home/pi" wiederholt wird versteh ich nicht. Das scheint aber auch schon im Original Script so komisch gelöst worden zu sein, wie man auch am update_screen() sieht... naja, hab jetzt aber auch keine Lust das zu optimieren :fies:

    'mpc play' wird bereits in Zeile 110 ausgeführt, das erneute in Zeile 721 ausführen müsste eigentlich überflüssig sein.


    Zu deinem Anliegen:

    So wie ich das sehe müsste das im update_screen() angepasst werden, da die Darstellung des Bildes Sache von pygame ist und dort ja auch skinCD gesetzt wird.

    Ich seh jetzt aber leider nicht wo genau in das jeweilige Verzeichnis gewechselt wird um die MP3s abzuspielen - dort müsste man dann halt ansetzen um nach einer *.jpg Datei zu suchen und dieses dann also skinCD zu nutzen - glaub ich
    Da du aber anscheint ausschließlich Playlists (*.m3u) abspielst/ansprichst, würde sich das vermutlich etwas umständlicher gestalten...
    Es sind aber auch nicht immer *.jpg direkt in dem Ordner, sondern oft sind diese Bilddaten direkt ins mp3 eingebettet, also: embedded ID3 tag ; metadata
    Hilfreiche Commandline Tools hierfür wären eyed3 und beets
    beet is direkt eine Python Implementierung.
    eyed3 gibt es auch als Python Module.


    Man könnte entweder die Metadaten auslesen und prüfen ob in der MP3 ein 'Album Art' hinterlegt ist, oder indem man die "MPD NowPlaying" Informationen anzapft also den Befehl " mpc current -f %file% " verwendet um dann manuell in dem Verzeichnis nach einer entsprechenden Bilddatei zu suchen...

    Allerdings verstehe ich gerade nicht wirklich wieso dieses TRON-Radio subprozess nutzt um mpd zu steuern - wieso nutzt es nicht das mpd Python Module :s

  • Danke für deine recht ausführliche Antwort. Wie es scheint hast du ein recht gutes Hintergrundwissen in Sachen Python. Leider fehlt mir das und daher hab ich mich schon anfangs über das normale Tron Script gefreut weil mir die Optik so gefallen hat :lol:

    Und wieso da was als Subprocess ausgeführt wird, naja, da müsste man den Urheber fragen, der ebenfalls hier im Forum ist. Deine Tips mit den Leerzeichen und so werd ich jetzt mal genauer prüfen, weil ich gerade mit den GPIOs beim Starten eine Fehlermeldung bekomme.


    Werd jetzt auch mal nach den Command Line Tools googeln die du genannt hast. Mal sehen was raus kommt. Trotzedem nochmal, danke für die Tipps.

  • Achso - wusste nicht das der Urheber auch hier im Forum ist. Hast du zufällig seinen Forum Namen damit ich mich mit ihm mal kurzschließen kann? ;)

    Ich hab nämlich vorhin angefangen die oben "bemängelten" Sachen zu recoden und den Code etwas auf zu räumen - bevor ich das jetzt einfach raushau, lieber noch mal nachfragen, bevor sich irgendwer angegriffen fühlt oder whatever :D

    Der Befehl

    Code
    mpc current -f %file%

    gibt dir auf jeden Fall die Datei mit dem Pfad aus, daraus könnte man den Pfad heraus ziehen und dann in dem Verzeichnis nach *.jpg oder was auch immer suchen.
    Zum Beispiel:

    ..weiter wär ich aber auch noch nicht, bin noch mit der python-mpd2 Implementierung beschäftigt :daumendreh2:

  • Der Urheber heißt "5Volt-Junkie". Is ja cool von dir das du dir die Mühe machst das Script zu bereinigen :bravo2::bravo2: Mal blöd gefragt, hast du das Python Zeugs in der Schule gelernt oder wo kann man da von Grund auf Wissen erlangen?

    Und wenn du es "raus haust", lass es mich bitte wissen, dann kann ich mit meinem Script auch aufräumen :thumbs1:

  • Das hab ich mir alles selber bei gebracht :fies: Immer wieder irgendwas anderes programmieren (so wie das hier) und durch Foren wie dieses immer mehr dazu lernen :)
    Ein Experte bin ich aber längst noch nicht - fürs nötigste reicht es so grade :D
    Abläufe sind in vielen Programmiersprachen ähnlich. Wenn man also auch andere Sprachen ein bisschen programmieren kann, findet man sich in die meisten recht zügig rein ;)


    Ich konnte es bisher noch nicht testen - aber zumindest Theoretisch sollte das soweit funktionieren: http://slexy.org/view/s2EKHiKSIt
    Hab aber noch was auf der ToDo Liste :angel:

  • Hammerhart was du mal "kurz" an Code geschrieben hast. Danke schön schon mal, werd es gleich testen :danke_ATDE::thumbs1:

    Hab es grad getestet. Läuft leider noch nicht.

    Code
    File "/home/pi/tron-radio/tron.py", line 432
        PlayStatus = client.status()

    ist die Fehlermeldung. Kein Plan warum.

    Einmal editiert, zuletzt von Greengecko (27. April 2015 um 20:14)

  • Hast du denn ' pip install python-mpd2 ' ausgeführt?

    In dem Code stehen noch Debug-Ausgaben in Zeile 414 bis 430 - schmeiß die mal raus ;)

    Beta3 am Ende dieses Posts: RPi-Tron-Radio - Raspberry Pi Webradio im Tronstyle

  • Ja, das Python pip install mpd hab ich gemacht, werd jetzt mal probieren das Debug Zeug raus zu nehmen und danach noch deine Beta testen und dir das Ergebnis berichten.

    Edit: Hab grad deinen Post im anderen Thread gelesen :thumbs1: und bin mehr als begeistert :thumbs1:
    Das was du noch so einbauen willst sind genau die Dinge die ich mir noch für mein eigenes Tron-Radio-Projekt noch wünsche aber nicht zu fragen wagte :angel::no_sad:

    Hab beide Codes probiert, also den vom anderem Thread und auch die Lines aus dem gestrigen Code genommen, beides leider ohne Erfolg. Hab jetzt aber auch nicht die Zeit, näher danach zu schauen, werd es aber später nochmal probieren.

    Sobald du aber wieder eine Beta hast, bin ich auch weiter gerne dein Beta-Tester :lol:

    Einmal editiert, zuletzt von Greengecko (28. April 2015 um 16:52)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!