[suche] python script für 1 klick audioplayer

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    Für ein kleines Projekt eines kleinen Museums soll ein Raspberry P2 in einen Telefon eingebaut werden, dieser soll über einen Taster eine Audiodatei abspielen. Der Hörer dient hierbei als Audioausgabe.

    Das Telefon ist soweit mit einem Pulldown-Widerstand beschaltet.

    Über das Terminal am Pi lässt sich bereits eine Audiodatei abspielen.

    Nun wollen wir den Taster einbinden und bräuchten dafür ein in Python geschriebenes Script.

    (Gerne auch in Bash)

    Im Internet konnten wir bis heute nichts Brauchbares finden.

    Könnte uns jemand ein solches Script in Python oder Bash schreiben?


    Das fertige Script von Tell

    (Funktion, Taster 1 wird gedrückt, ein Audiofile spielt ab, Taste 1 wird erneut gedrückt, Audiofile stoppt.)

    Das script sollte noch rechte bekommen und gestartet werden...

    Zudem lässt sich das Script in den Autostart packen, somit erspart man sich das manuelle starten.


    Vielen dank

    2 Mal editiert, zuletzt von studio a113 (15. November 2017 um 15:31) aus folgendem Grund: Script von Tell eingefügt

  • Im Internet konnten wir bis heute nichts Brauchbares finden.

    Könnte uns jemand ein solches Script in Python oder Bash schreiben?

    https://www.python.org/

    https://www.python.org/about/gettingstarted/

    https://www.jetbrains.com/pycharm/

    Mit den Links, etwas Zeit und noch zusätzlicher Googlearbeit kannst du in absehbarer Zeit dir das Skript selbst erstellen.

    Bei Problemen in der Entwicklungsphase wird dann hier wieder gern geholfen :)

  • hi,

    @bootsmann

    danke für den link

    über das gpiozero sind wir auch schon gestossen, hatten anfangs beim installieren permanent fehlermeldungen erhalten.

    bzw. der kollege, daher haben wir, dass dann mit dem gpiozero sein lassen.

    @Hofei

    danke für die links

    haben uns auf den seiten von python und vielen anderen beginnerseiten bereits umgesehen.

    haben hier und da freilich auch scripte gefunden die im code nicht arg lang gewesen sind, jedoch fehlte uns das stoppen oder das erneute anfangen wärend die audiodatei bereits abspielt.

    wie dem auch sein, es gibt vieles auf verschiedenen seiten, jedoch für uns so nicht anwendbar.
    dann werden wir wohl weiter suchen

    danke

  • Hallo studio a113,

    herzlich Willkommen in unserem Forum!

    Mal abgesehen davon, dass Dir hier keiner eine fertige Lösung präsentieren wird, ohne eine entsprechende Eigeninitiative von Dir bemerkt zu haben, hängst Du meines Erachtens einem Denkfehler nach.

    Taster (Gpio 17) startet wenn low den omxplayer

    Taster (Gpio 17) stoppt (killt) wenn high den omxplayer

    Taster (Gpio 17) startet wenn low den omxplayer von Anfang

    Ein Taster ist - ja nach Beschaltung - beim Betätigen entweder kurzfristig HIGH und dann wieder LOW. Oder umgekehrt.

    Das heißt, Deine Logik bzgl. starten und stoppen funktioniert nur, wenn der Taster gedrückt bleibt. Letzteres ist beliebig unpraktisch.

    Wahrscheinlich brauchst Du zwei Taster: einen zum Starten, einen zum Beenden.

    Die dritte Option habe ich gar nicht verstanden.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Da es sich um ein Museumsprojekt handelt, halte ich es im Gegensatz zu einigen meiner Vorschreiber keinesfalls für ausgeschlossen, daß Du hier sogar eine fertige Lösung bekommst. Dazu müsstest Du aber etwas mehr darüber erzählen, um welches Museum und welches Projekt es sich handelt.

  • hi,

    danke schon mal an alle die geantwortet haben.

    habe mich wie Andreas bereits geschrieben hat, in meiner Kurzbeschreibung bezüglich dem, was der Taster tun sollte vertan.

    Vorhanden ist ein Taster am Telefon, dieser soll gedrückt werden damit ein Audiofile abspielt. während das Audiofile abspielt, soll man über den gleichen Taster das Audiofile stoppen können. Drückt man nun erneut den Taster, soll dasselbe Audiofile erneut von vorn abspielen.

    Taster nr.1 gedrückt Audiofile spielt ab

    Taster nr.1 gedrückt Audiofile stoppt

    Taster nr.1 gedrückt Audiofile spielt von vorne ab

    Taster nr.1 gedrückt Audiofile stoppt

    Taster nr.1 gedrückt Audiofile spielt von vorne ab

    @ bootsmann

    Danke, das war mir nicht bewusst.

    @ Tell

    Genau das Script, habe ich gerade am laufen, habe es mir so angepasst, das es mir über den Gpio 17 ein Audiofile abspielt, dieser lässt sich jedoch nicht stoppen. Habe dann ein Script-Fetzen gefunden und ahnungslos unkontrolliert versucht in diesem Script einzubinden.

    Glaube dieser lautete *killa -9 omxplayer*

    War natürlich erfolglos…

    @ Manul

    Das hört sich gut an und ja, gerne werde ich hier das kleine Projekt vorstellen.

    Das Museum (ein Einraum Museum) ist gerade im Aufbau und wird Renoviert. In diesem sollen Möbelstücke aus dem Jahr ende des 1800 Anfang des 19.00 Jahrhundert ausgestellt werden, jedanfalls soweit ich Informiert bin. Das ganze befindet sich in einer Sozialen Einrichtung im Oberlinhaus in Potsdam.

    Werde morgen mal versuchen, ein paar bilder vom umgebauten Tel. zu posten.

    gruss

  • Ich kann's gerade nicht testen weil an diesem Pi kein Taster haengt. Die einzelnen Teile aber sind getestet und sollten funktionieren:

  • Hi,

    Habs angepasst, schaut nun so aus, dass das Audiofile beim 1. Tastendruck startet, beim 2. Tastendruck nicht stoppt sondern von neuem startet und dabei ein echo entsteht. Da sich das 2. Audiofile auf das 1. Audiofile legt… bzw. das 3. dann auf den ersten beiden und so weiter.

    danke

  • Hallo fred0815,

    das ist schon korrekt so. killall gibt als return-wert 0 oder 1 zurück:

    0 - killall erfolgreich Prozess[e] beendet

    1 - killall hat keinen Prozess beendet

    Code
    cat test.sh
    #!/bin/bash.sh
    #
    if killall top
    then
     echo "stopped"
    else
     echo "not stopped"
    fi

    2 Fenster, in einem top gestartet, im anderen das skript test.sh zu 1. mal gestartet

    Code
    bash -x test.sh
    + killall top
    + echo stopped
    stopped

    das skript zum 2. mal gestartet:

    Code
    bash -x test.sh
    + killall top
    top: Kein Prozess gefunden
    + echo 'not stopped'
    not stopped

    schönen Gruß kle

  • hi,

    finde die idee top...

    würde mich über ein paar pics oder eine beschreibung deines projekts freuen.

    versuch bitte mal folgendes

    nicht:

    Code
    if killall omxplayer

    sondern

    Code
    if pkill omxplayer

    keine garantie nur testen, habe selber kein taster am pi.

    eine frage hätte ich jedoch zu dem kill des omxplayer.

    wenn ich 2 oder 3 tasten habe und ich diesen script auf jede einzele taste anwende, killt mir der player dann den kompletten omxplayer oder nur den omxplayer der gedrückten taste?

    taste 1 gedrückt... audiofile1 spielt

    taste 2 gedrückt... audiofile1 stoppt???

    oder

    taste 2 gedrückt... audiofile2 startet und audiofile1 läuft weiter?

    gruss

    ohne-holger

  • Ich hab es mit einem aelteren Pi 2 ausprobiert.

    So wie es oben steht, funktioniert das Script tatsaechlich nicht. Es gibt mindestens zwei Probleme:

    • omxplayer ist kein normales Programm, es startet gleich zwei Prozesse
    • der Returnwert von killall ist zumindest mit omxplayer nicht zuverlaessig

    Nach vielen erfolglosen Versuchen habe ich eine funktionierende Version hingebracht:

    Genauen Betrachtern wird auffallen, dass die fallende Flanke als Trigger gebraucht wird. Das liegt an der Beschaltung am GPIO und hat nichts mit mit der Funktion zu tun.

    Zudem ist die Schlafzeit kuerzer, damit auch sehr kurze Impulse erkannt werden. Die CPU-Last durch das Script kam auf etwa 3%, was immer noch sehr vernuenftig ist.

  • Ich würde generell Abstand von einem bash Script nehmen, da das eher ungenau ist und auch nicht so schön. Allgemein finde ich den gewählten Weg eher bescheiden... Einen Prozess zu töten oder zu beenden ist nicht mit Pause/Stop gleichzusetzen - zumal das killen und neu starten auch eine gewisse Verzögerung mit sich bringt oder ggf kratzige Geräusche.

    Da du ja eigentlich nur Audio abspielen willst ist ein Video-Player eigentlich die falsche Wahl. Natürlich können viele Video-Player auch Audio abspielen, aber primär ist OMX usw eben für Video vorgesehen.

    Es wäre also eigentlich besser du wählst einen Audio-Player, stoppst die Wiedergabe und startest sie einfach neu (Play) - ohne den Prozess des Players jedes mal zu beenden.

    Ich werfe daher mal mpc bzw mpd2 für Python in den Raum.

    Alternativ ginge auch via subprocess eine interaktive Steuerung eines mpg321 Prozesses (Pause/Stop usw), ist aber komplizierter besser wäre einen Wrapper zu nutzen der das bereits implementiert hat.

Jetzt mitmachen!

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