Raspi als Audioplayer für Museen

  • Hallo Liebes Forum,

    ich bin Mitarbeiter in einem kleinen Museum. Sicher kennt ihr alle aus Museen das irgendwo in einer Ausstellung ein Knopf ist wenn man diesen drückt kann man etwas anhören oder ein Film wird auf einem Monitor abgespielt. Dafür gibt es natürlich professionelle Hersteller allerdings rufen diese auch einen dementsprechende Preis auf was für ein kleines Museum eben doch schwierig ist. Für Videos gibt es ja bereits eine tolle Lösung für den Raspi siehe mp4museum.org


    Zielstellung für einen Raspi-Audioplayer für Museen wäre (von den Professionellen Geräten inspiriert) eine einfache Programmierung die durch drücken von einem Knopf einen bestimmten Titel von einem USB-Stick abspielt und wenn ein anderer Knopf gedrückt wird einen anderen Bestimmten Titel spielt.


    Die Programmierung soll individuell sein so das die Zuordnung Knopf-zu-Titel einfach über den Dateinamen geschehen kann ergo Knopf-1 spielt 001.mp3 Knopf-2 spielt 002.mp3

    es sollte auch funktionieren wenn nur ein Knopf gebraucht wird und die andren nicht installiert werden (weil es in der Ausstellung zb. nur eine Audiodatei gibt)


    Jetzt werden einige sagen da gibt es unzählige Projekte hier im Forum oder Online das ist richtig aber es ist mir zumindest bis jetzt nicht gelungen einer der Projekte entsprechend anzupassen.


    Die meisten Projekte sind mehr wie ein Mediaplayer aufgebaut also mit Start/Stop/ Vorwärts/ Rückwärts das würde dem ein Knopf ein Titel Gedanken widersprechen


    Ich hab es mit pygame versucht siehe hier aber leider spielt das nur kurze töne und überlagert dieses auch noch (zumindest so wie ich es programmieren konnte)


    Alles in allem habe ich versucht es in diesen einfach Code zu fassen doch leider funktioniert auch dieser noch nicht. :wallbash: 
    Hat jemand ein Hinweis, Link oder bessere idee für mich? Ich hab keine Ahnung mehr. Aktuell bastel ich das ganze übrigens mit einem Raspi 2 Modell B spandesd für dieses Projekt wäre noch die Frage ob das auch mit einem Pi Zero funktionieren könnte? Aber ich wäre ja erstmal froh wenn irgendwas funktioniren würde Danke schon mal fürs lesen bis hier hin (:


  • Hallo,


    ist im Grunde ganz einfach, kann den Code aber hier am Telefon nicht vernünftig schreiben. Aber fangen wir schon mal damit an, dass das oben kein gültiger Shebang ist. ;)

    "Alles, was wir sind, ist Sand im Wind, Hoschi."

  • Hallo Danke eure Hilfe ist ja rasend schnell.

    ok den Shebang hab ich natürlich Korrigiert (war klar 1 Zeile gleich einen Tippfehler )


    Hab also die ganzen letzten zwei Wochen auf das falsche Pferd gesetzt mit when_pressed hab es jetzt auf is_pressed korrigiert. Und siehe da es funktioniert. Es spielt nach einem Knopfdruck Musik nur leider nicht unterbrechbar. Es sollte ja so funktionieren das wenn ein neuer Besucher an die Hörstation kommt entweder den noch vom vorherigen Besucher Aktuell laufenden Titel neu starten kann in dem er einfach auf den gleichen Knopf nochmal drückt oder eben der Besucher jederzeit zu einem anderen Titel wechseln kann.

    Ich vermute mal ich muss den oben gegebene Hinweis auf os.system("pkill -f mpg321") noch mit verarbeiten.


    meine Idee war also die folgende:

  • Wenns billig sein muss, könnte man das auch mit einem Arduino mit SD-Karte machen. Das wäre mit wenigen Euro pro Stück realisierbar. Im Web gibts diverse Anleitungen/Projekte für sowas. Wie es da mit der Tonqualität aussieht, kann ich aber leider nicht sagen.

  • vom Arduino hab ich leider nur das Basiswissen. Das ganze auf Raspberry Basis aufzubauen hatte für mich den Charme das man mit der gekauften Hardware eben auch die Option hätte diese als Videostation einzusetzen oder mal einen Bildschirm mit einer Website im Kioskmodus in eine Ausstellung zu integrieren (z.B. für die eigenständige Recherche von Besuchern)


    Den Code konnte ich inzwischen Testen und musste leider feststellen das dieser nicht das Titel unterbrechen Problem löst.

  • Ungetestet:


    Disclaimer: Ich habe noch nie was mit pygame oder gpiozero gemacht.

    Einmal editiert, zuletzt von Manul () aus folgendem Grund: Schlampige Programmierung nachgebessert.

  • Hallo,

    Disclaimer: Ich habe noch nie was mit pygame oder gpiozero gemacht.

    mit pygame geht's mir auch so.


    Das müsste sogar noch einfacher gehen funktionieren:


    Ebenfalls ungetestet. ;)


    //Edit Noch ein Link: https://projects.raspberrypi.org/en/projects/gpio-music-box

    "Alles, was wir sind, ist Sand im Wind, Hoschi."

    Einmal editiert, zuletzt von hyle ()

  • hyle : Bist Du Dir sicher, daß gpiozero.Button als key für ein dictionary verwendet werden kann? Ich hab gpiozero nirgendwo installiert, kann's also nicht ausprobieren.


    Das Problem bei Deinem (ansonsten sehr schönen) Ansatz ist, daß bereits laufende Sounds nicht beendet werden.


    Der link findet sich übrigens bereits im Ursprungspost. ;)


    Nachtrag:

    Nach meinem Verständnis werden gpio.Sound-Objekte direkt bei der Initialisierung ins RAM geladen. Bei vielen, auch längeren Sounds, die ich mir in einem Museum durchaus vorstellen kann, könnte das eng werden. Daher die Verwendung des streamenden pygame.mixer.music.

  • Bist Du Dir sicher, daß gpiozero.Button als key für ein dictionary verwendet werden kann?

    Sicher nicht weil ungetestet, aber in der Doku wird es so gezeigt.


    Auf den Link hatte ich vorhin nicht geklickt, weil mir am Telefon die Statusbar des Browsers fehlt und ich nicht blind auf Links klicken will. :blush:


    Egal, jetzt bin ich angefixt und spiele am WE mal ein bisschen mit pygame und mpg321 herum, da findet sich bestimmt eine Lösung. ;)

    "Alles, was wir sind, ist Sand im Wind, Hoschi."

  • Auf den Link hatte ich vorhin nicht geklickt, weil mir am Telefon die Statusbar des Browsers fehlt und ich nicht blind auf Links klicken will. :blush:

    OT: Etwas länger auf den Link klicken tippen/den Finger halten öffnet zumindest bei mir im FF ein Popup samt URL und Optionen wie "in neuem Tab öffnen" ;)

  • Bist Du Dir sicher, daß gpiozero.Button als key für ein dictionary verwendet werden kann?

    Dazu noch folgendes: https://docs.python.org/3/glossary.html#term-hashable


    Damit ein Objekt als Key für ein dict verwendet werden kann, muss es hashable sein - das sind Klassen und deren Instanzen standardmäßig. ;)

  • Warum noch mpg321 dazu?

    Einfach aus Interesse, ob der vom TO begonnene Weg leicht umsetzbar wäre. Das sollte doch eigentlich "kein Ding" sein, auch wenn ich das Script anders gestaltet hätte. (z.B. Funktionen verwendet, subprocess statt os) :denker:


    //Edit Linus Wie ich gerade getestet habe macht das Chromium auch. Mist, wieder eine Ausrede weniger... ;)


    Ach und an den Ausdruck dict werde ich mich wohl nie gewöhnen können, warum nicht einfach Array wie der Rest der Welt das nenn!?

    "Alles, was wir sind, ist Sand im Wind, Hoschi."

    Einmal editiert, zuletzt von hyle ()

  • Ach und an den Ausdruck dict werde ich mich wohl nie gewöhnen können, warum nicht einfach Array wie der Rest der Welt das nenn!?

    Weil ein Array einer Python-list entspricht. Array -> Zugriff über Index (int), Dictionary -> Zugriff über einen Key, der die verschiedensten Datentypen haben kann. Es sind halt komplett unterschiedliche Datenstrukturen :denker:


    ...entspricht natürlich nicht einer ähnlichen Datenstruktur, auch wenn gleiche Beispielinhalte verwendet wurden.

  • (unabhängig von Python-Spezialitäten)

    auf ein array greift man mir einem Index zu, auf ein dict mit einem key.


    Beispiel: ein Schrank hat mehrere Schubladen, Du sucht nach der mit den Bausteinen.

    Du kannst sequentiell alle Schubladen durchsuchen bis Du die Bausteine findest oder der key Bausteine zeigt direkt auf die richtige Schublade.


    Edit: Linus war schneller

  • Das wäre dann imho ein Assoziatives Array.


    https://de.wikipedia.org/wiki/Assoziatives_Datenfeld

    http://php.net/manual/de/language.types.array.php


    //Edit Und list wäre somit ein indiziertes Array.


    //Edit2 kle : Mir ging es zwar nur um die Unterschiede der Bezeichnung bei verschiedenen Programmiersprachen, aber gut das Du für "Unbedarfte" nochmal anschaulich beschrieben hast, wovon hier die Rede ist.


    BTW: Das wird hier zu viel OT. Wir klären das besser an anderer Stelle. ;)

    "Alles, was wir sind, ist Sand im Wind, Hoschi."

    2 Mal editiert, zuletzt von hyle ()

  • Mit Pygame habe ich es nach der dieser Anleitung probiert.

    https://projects.raspberrypi.org/en/projects/gpio-music-box


    Resultat war ein Raspi der auf Knopfdruck wav Dateien abspielt jedoch diese auch gleichzeitig abspielt. Nachvollziehbar da Pygame ja Soundeffekte für Spiele bereit stellen soll da macht es Sinn das zwei Töne auch gleichzeitig gespielt wird.


    Für die Anwendung in einem Museum ist das aber (meistens) schlecht. Das andere ist die Leihensicherheit. Da das Dateiformat mp3 sehr bekannt ist hoffe ich das es jeder hinbekommt auf einen USB Stick eine 001.mp3 usw. Datei abzuspeichern. Sicher noch toller wäre es wenn das alles auch mit 001.wav oder 001.ogg funktionieren würde, was ja irgendwie mit /media/pi/*/001.* funktionieren sollte, aber hab ich dazu kein Programm das mir einfällt. Daher würde es reichen wenn der Raspi mp3's mit mpg321 spielt.


    Es funktioniert ja auch schon fasst 8o Es Spielt eine Sound (auch den Richtigen) auf Knopfdruck nur lässt sich dieser dann nicht mehr unterbrechen egal welchen Knopf man drückt. Erst nach dem der Track durch ist kann man neu starten.


    Hier nochmal mein aktueller Stand: