Tonka - Tonuino Katalog Android App

Hi!

Dank dieser Community habe ich mittlerweile 3 TonUINOs gebaut. Nun ist es an der Zeit, etwas zurückzugeben. Ich habe in der letzten Wochen eine Android App geschraubt, die als Katalog dient und Karten beschreiben kann.

Ich habe die App Tonka genannt, für TONuino KAtalog. Die App muss man mit einer CSV-Datei füttern, die alle Infos enthält. Wie die CSV Datei aussehen muss, ist hier erklärt.

Funktionen (im Moment)

  • Titel, Ordner und Unterordner anzeigen.
  • Tags anzeigen (Auf den Screenshots nicht zu sehen)
  • Karte für Einzelmodus schreiben
  • Karte für den ganzen Ordner schreiben (alle 4 Modi)
  • Karte in allen 3 von-bis Modi schreiben (Wenn im csv ein Unterordner spezifiziert wurde.
  • Suchfunktion nach Ordner, Unterordner und Titel, sowie Nummern und Tags

Da die App in Flutter geschrieben ist und Flutter nach JavaScript compiliert werden kann, gibt’s die App hier noch als Webapp zum testen. Ist auch ganz praktisch um die CSV zu validieren.

CSV Datei erstellen

Ich hoffe, dass der eine oder andere sein existierendes Tool anpasst, um die App verwenden zu können. Aber auch ich habe ein Pythonscript geschrieben, dass meine SD Karte erstellt und nebenher die CSV Datei befüllt. Anders als andere Ansätze hier lese ich jegliche Informationen aus den Dateinahmen. Man muss also nur die Ordner und Dateien sauber benennen, das Skript laufen lass und fertig. Dadurch muss ich nicht zusätzlich zu den eigentlichen Dateien noch eine Datenbank pflegen. Das Script wird auch in der README erklärt. Und hier ist der Code.

Jetzt freu ich ich auf euer Feedback!

Grüsse Dominic

10 Like

JUHU.
Danke, genau darauf habe ich gewartet.
Wir hören zum Schlafen immer ein Random Lied und wenn er beim Suchen zu schnell nach dem nächsten springt, „PAPA ICH WAR WIEDER ZU SCHNELL“ und dann nehme ich meine gedruckte Liste, suche den Titel „Sleepy Hollow“ und schreibe dann einen Tag mit der richtigen Nummer

Hallo @Dome, sieht spannend aus. Super finde icb den Ansatz, die Informationen direkt aus dem Dateisystem abzuleiten, damit die redundante Pflege einer Datenbank entfällt.

Was ich vetstanden habe:

  • Ordnername und Nummer werden aus der Ordnerstruktur gewonnen
  • Titelname und Nummerierung werden aus dem Dateinamen gewonnen
  • Gruppierungen z.B. als Album leitest du aus unterordnern ab.

Ich lege die Ordnerstruktur also entsprechend an und lasse dein Skript laufe. Ergebnis ist die CSV

Was mir unklar ist:

  • Wie leitest du den Abspielmodus ab? Könnte man den nicht als benutzerdefinietes Eigenschaft in den Metadaten des Ordners definieren? Also der Ordner „Bejamin Blümchen“ bekommt ein Metadatum „TonuinoMode“ = „Höhrspiel“ in den Dateieigenschaften. Harry Potter Höhrbuch usw. In deiner App wird der Modus dann entsprechend vorbelegt. Wenn man mag, kann man das in der App dann immer noch spontan umswitchen, muss es aber nicht mehr für jede Karte neu setzen.
  • Wie befüllst du die Tags? Holst du die aus den Dateieigenachaften / Metadaten der Datei? Oder muss ich die nach jedem Skriptdurchlauf manuel in die CSV nachtragen?
  • holst du die Laufzeit auch aus der Datei? Wofür ist die eigentlich gut?

Hast du noch einen Tipp, wie man sinnvoll mit der Nummerierung der Alben umgeht? Wenn man in deinem Beispiel zum „coolen Album“ nachträglich einen Titel hinzufügt, oder löscht, verschiebt sich die 003 der „Partysongs“, oder? Dann müsste die Karte Partysongs und auch alle nachfolgenden Alben neu angelernt werden? Kann man da gleich ne Lücke lassen, und die Partysongs mit 10 beginnen, um das zu vermeiden?
Falls der DF-Player lücken nicht zulässt, wäre es in meinen Augen konsequent, die Nummerierung automatisiert zu vergeben. Sonst ist die Angabe 001 bzw 003 in der Subdirectory für die Gruppierung der Alben am Ende auch nur eine Redundanz mit Konfliktpotential. Oder denk ich da grad zu engstirnig?

Für die erse Erstellung ist der Ablauf ziemlich klar. Was mich noch interessieren würde. Ein Beispiel:

  • ich gab die Struktur angelegt
  • dein Skript laufen lassen
  • lade die CSV aufs Handy
  • beschreibe alle Karten
  • Im Verlauf von zwei Monaten kommen nach und nach neue Höhrspiel in die Mediathek. Welche, habe ich natürlich schon vergessen, bis ich mich durchringen kann die Karte neu zu bespielen.
  • Ich ergänze die Ordnerstruktur
  • Starte das Skript erneut
  • aktualisiere die CSV im Handy

Bekomme ich dann angezeigt, welche Ordner/Dateien neu sind, damit ich gezielt die Karten schreiben kann?

Hui, viele gute Fragen. Dann fang ich mal an

In einer früheren Version habe ich tatsächlich Ordner annotiert um den Abspielmodus zu beinhalten. Das hat aber die Komplexität der CSV Datei erhört und war relativ unnötig. Normalerweise weiß der Benutzer ja, welchen Abspielmodus er/sie will. Man wählt den Modus einfach durch den passenden Button aus, das geht super schnell.

Noch gar nicht. Es ist geplant die aus den Dateinamen zu lesen. Zb 005 - Frau Holle [Ab 5J, Märchen].mp3 hat die Tags „Ab 5J“ und „Frau Holle“. Das werde ich später noch ins Pythonskript einbauen.

Genau. Ist aber auch noch nicht fertig. Die Laufzeit wird bereits aus dem CSV in die Datenbankgeschrieben der App geschrieben, aber die App zeigt sie noch nicht an.

Darüber habe ich viel nachgedacht.

  • Automatisch geht einfach nicht. Irgendwo hängt es immer. Vor allem Löschen von Dateien ist problematisch, weil es die Nummerierung aller nachfolgenden Dateien verschriebt. Es ist am einfachsten und am stabilsten die Nummerierung einfach festzulegen.
  • Zu den Alben: Ich lasse Lücken und zähle einfach mit jedem Album 30 oder so hoch (je nachdem). Zumindest meine DFPlayer haben damit kein Problem. Wo ich mir nicht sich bin, ist, wie sich der Partymodus über den ganzen Ordner verhält, wenn du Lücken hast. Manchmal habe ich das Gefühl, dass der Tonuino hängen bleibt.

Nein. Ich beschreibe einfach alles neu. Es gibt ja unzählige Tools, die Ordner synchron halten können, falls dir das zu lange dauert :slight_smile:

Ich finde die App auch super! Bin mal gespannt was da mit weiteren Ideen aus der Community noch hinzukommt.
Einen Vorschlag hätte ich da: Es gibt ja einige doch häufig verwendete Forks, die die Adminkarte im Menü nicht oder woanders anbieten. Wenn es dafür irgendwo eine Einstellung gäbe, sodass man ein Häkchen setzt und dann die Nummern für die von-bis Modi um einen reduziert werden beim schreiben, wäre die Nutzung auch mit @stephan und @Thomas-Lehnert Fork möglich.

Ansonsten berichte ich mal von meinen kleinen Hürden beim ersten Testen. Vielleicht hat die ja noch jemand.
Ich bekam beim ausführen des Python-Skriptes eine Fehlermeldung OSError: [WinError 1314] Dem Client fehlt ein erforderliches Recht: ... Lösung: Das Skript als Administrator ausführen.
Dann konnte ich auf dem Smartphone die csv Datei nicht einlesen. Bei mir geht das nur wenn ich nicht den Schnellzugriff auf Download verwende (da kann ich sie zwar sehen aber nicht auswählen), sondern über den Gerätespeicher und den Ordner Download die Datei wähle.

Noch ein Bugreport

Beim ersten Laden hat sich die App dann irgendwie verschluckt. Irgendwann wurde eine Datei aus dem Unterordner nicht mehr diesem Zugeordnet und alle weiteren Songs fehlten dann. Nachdem ich die csv nochmal geladen habe hat das aber funktioniert. Allerdings scheint es da beim allerersten Laden reproduzierbar ein Problem zu geben. Denn beim meiner Schwester ist genau das gleiche passiert. Also beim selben Lied wurde es nicht in den Unterordner sortiert und alle weiteren fehlten.
Hier mal der Screenshot nach dem ersten und zweiten Laden.

Der Bug ist schon gefunden und wird vermutlich zeitnah gefixt

Ordner annotiert? Verstehe ich nicht.
meine Idee wäre halt gewesen, das in den Dateieigenschaften zu hinterlegen. Rechte Maustaste -> Eigenschaften. Auf diese Informationen greifen auch die ganzen Programme zu um Genres etc. zu pflegen oder zu gruppieren.

Du hast recht, grundsätzlich ist der Button schnell gedrückt. Wenn ich einen Tonuino neu aufsetze und auf die Schnelle 20-50 Karten anlernen will wäre das erwas lästig. Optimal wäre dazu ein Modus zum Serienanlernen. Man markiert die Titel, startet den Modus und legt die angezeigte Karte auf. Sobald er die geschrieben hat, springt das Tool zum nächsten Titel und wartet auf ne leere Karte. So kann man ohne nachzudenken in wenigen Minuten ein paar Dutzend Karten beschreiben. Wenn man da manuell bei jeder Karte was setzen muss wird es wieder zäh. Und viele haben ja mehr als nur einen Tonuino. Würden also davon profitieren, wenn sie die Information einmal zentral pflegen könnten.

Da würde ich von absehen. Zum einen möchte ich mir als Nutzer keine Kryptischen Nomenklaturen merken müssen. Und zum Zweiten haben Dateien genau für den Zweck Metadaten, also Dateieigenschaften. Und hier hat man dann auch den Vorteil, dass man diese bequem mit dem Mediathekprogramm seiner Wahl pflegen kann.

Das war glaube ich ein Missverständnis. Mir ging es nicht um das Mergen der Dateien auf die SD Karte. Habe gehört, der DF Palyer ist da sensibel, und es wirdbempfohlen die Karte zu löschen und komplett neu zu beschreiben.
Ich hatte nur überlegt, das es cool wäre, wenn die App die CSV Dateien vergleicht, und mir anzeigt, welche Karten ich neu anlernen muss.

Ich werde mein Exceltool um einen entsprechenden CSV-Export erweitern (Testdatei läuft soweit schon). Danke nochmals für das vorab Bescheid geben!

Super für iOS. So hat man auch eine schöne mobile Übersicht!

Ich selbst benutzte Linux (hauptsächlich), MacOS und Windows. Leider sind viele Dateieigenschaften nicht zwischen den verschiedenen Dateisystemen kompatibel. Deswegen gehe ich nur auf Dateinamen. ID3 Tags, also die Metadaten, die in einer mp3 Datei gespeichert werden, sind natürlich kompatibel.

Aber ich glaube hier gibt es ein Missverständnis. Die Tonka App unterstütz Tags im allgemeinen Sinne des Wortes. Also kleine Informationsschnipsel, die an einen Titel angehängt werden können. Das hat nichts mit ID3 Tags zu tun, sondern soll es einfach ermöglichen, etwas mehr Informationen darzustellen.

Ich persönlich möchte kein ID3 Tags pflegen, deswegen funktioniert mein Pythonskript nur mit Dateinamen. Aber die App kann ja auch mit anderen Tools verwendet werden. @Manuel arbeitet schon an Support für das beliebte Excel Tool.

Du solltest du App mal testen :wink: Das ist es wirklich unnötig vorher was zu markieren. Es geht schon so super schnell. Zum Serienanlernen gibt’s ja auch noch die andere Android App

Aja, das hatte ich missverstanden. Kommt das bei dir oft vor? Gerade durch die fixe Nummerierung muss ich nie alte Karten neu anlernen. Ehrlich gesagt scheint mir das ein Fass ohne Boden zu sein, denn um zu wissen, welche Karten neu angelernt werden müssen, müsste die App erstmal wissen, welche Karten existieren.

Beta ist schon fertig…

In Verbindung mit dem Exceltool und QR Code läuft es ganz schnell :wink:.

Auch da hilft das Exceltool :wink:

Wie wahrscheinlich ist es, dass es von deiner App eine iOS Variante geben wird?

1 Like

In meinem Fall auch so. Wie bekommst du da das erwähnte XLS Tool zum Laufen? Ich hatte nicht zu hoffen gewagt, dass unter Linux zum Laufen zu bekommen. Daher fand ich deinen Ansatz auch so viel versprechend.

So wahrscheinlich wie es ist, dass mir jemand ein iPhone schenkt und 100 Euro im Jahr für den Entwickleraccount stellt. Und dass Apple diese nischige App in den Store lässt, da bin ich mir auhc nicht sicher. Bis dahin gibts die Webapp (die unter Android übrigens NFC unterstützen könnte, iOS nicht). Oder wir warten bis die EU Apple zum Einlenken zwinkt (link). Aber das driftet irgendwie vom Thema ab :slight_smile:

Gar nicht, wollte ich aber auch nicht. Ich hatte kein Interesse daran, eine Datenbank zu pflegen. Da das Tool so beliebt ist, hatte ich vorab mit Manuel gesprochen, um Support einzubauen.

Für mich habe ich das Script, das automatisch aus der Ordnerstruktur ein CSV erstellt und die App zum Katalog anschauen und Karten schreiben.

2 Like

Das Gefühl kann ich bestätigen sowohl im Album-/ Hörbuch- als auch im Partymodus bleibt die Wiedergabe hängen sobald der Player eine Datei nicht finden kann. Was ja der Fall ist wenn sie fehlt. Es ist also schon wichtig wie in der FAQ beschrieben, keine Lücken zu lassen. Man kann aber beispielsweise sehr kurze Dateien mit Stille verwenden um die Lücken nachträglich zu füllen. Wenn diese kurz genug sind, wird man das beim Abspielen kaum merken und kann trotzdem 2 Alben in Folge hören.
Sauberer wäre natürlich wenn das Skript die Nummer der Unterordner passend vergeben könnte ohne das man diese zuvor ausrechnen muss.

Das finde ich nicht. Ich wollte auf keinen Fall, dass das Skript automatisch Nummern vergibt und am Ende keine Karte mehr stimmt.

Ich sehe 2 Möglichkeiten, das zu verbessern:

  1. Das Skript könnte am Ende ausgeben, dass Lücken gefunden wurden, und fragen, ob sie repariert werden sollen, also die Dateien und Ordner so umbenennen, dass es keine Lücken gibt.
  2. Das Skript könnte die Lucken in der Ausgabe automatisch schliessen. Dann sind die Dateinummern eben nur so lange stabil, wie keine neue Dateien in die Lücken gelegt werden.

Was denkst du?

@Gute_Laune
Bleibt da wirklich der DF Player stecken? Also stürzt der ab und braucht nen PowerOn, damit er wider ansprechbar ist? Oder wartet die Tonuino FW auf ein „onPlayFinished“ Event, dass natürlich nie kommt, weil kein Titel gestartet wurde?

Ich habe das mal mit --compress True in das Python Script eingebaut.

1 Like

Nein, nicht der Player bleibt stecken, die nur Wiedergabe. Denn du kannst nicht weiter hören, weil nach dem error 6 kein weiterer Track abgespielt wird. Der Albummodus über den gesamten Ordner würde also nie das 2. Album erreichen, weil nach dem Ende des ersten Albums aufgrund des Fehlers Schluss wäre. Genauso der Hörbuchmodus. Beim Partymodus ist Schluss sobald ein nicht vorhandener Track abgespielt werden soll.
Ich hoffe das Problem wird so klarer.

Eventuell wäre es eine Option bei Auftreten des Comerror 6 automatisch ein nextTrack aufzurufen. Zusätzlich müsste auch ein Flag gesetzt sein, dass z.B. der Albummodus aktiv ist. Das sollte das Hängen dann abfangen.

Aber das ist in der aktuellen Software aktuell nicht drin und solange das nicht der Fall ist, sollten die Tools / Skripte eigentlich arbeiten wie in den FAQs angegeben (was die Dateibenennung und Reihenfolge anbelangt). Denn es wird Leute geben, die nicht so bewandert sind und dann haben sie auch noch einen DfPlayer, welcher das nicht mag.

Korrekt. War auch nur eine Idee für die, die das mit den Lücken machen wollen. Ist auch nicht meine Wahl. Ich habe allerdings in meiner letzten Version (nicht öffentlich) eine ähnliche Lösung zum Abfangen von Fehlern des Df-players integriert, die dann einfach einen Track weiter springt und den fehlerhaften Track sozusagen Überspringt.

1 Like