Musik und LED

  • Hi Leute,

    bin neu auf dem Gebiet Raspi. :s

    Hab nen Mp3 Player auf meinen Raspi 2 geladen und würde das Programm gerne so erweitern,
    dass eine LED in einem gewissen Takt blinkt solange ein Titel läuft.??.


    Der Mp3 Player funktioniert ganz gut, nur das mit der LED schaffe ich irgendwie nicht.
    Die Titel habe ich im selben Ordner wie das Programm!

    Wäre echt cool wenn mir jemand weiterhelfen könnte

    Vielen Dank im Voraus :danke_ATDE:


    Mein Source Code:

    #!/usr/bin/env python

    from os import listdir
    import subprocess
    from time import sleep

    import RPi.GPIO as GPIO

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(23, GPIO.OUT)
    GPIO.setup(24, GPIO.OUT)
    GPIO.setup(25, GPIO.OUT)

    mp3_files = [ f for f in listdir('.') if f[-4:] == '.mp3' ]

    if not (len(mp3_files) > 0):
    print "No mp3 files found!"

    print '--- Available mp3 files ---'
    print mp3_files
    print '--- Press button #1 to select mp3, button #2 to play current. ---'

    index = 0
    while True:
    if (GPIO.input(23) == False):
    index += 1
    if index >= len(mp3_files):
    index = 0
    print "--- " + mp3_files[index] + " ---"

    if (GPIO.input(24) == False):
    subprocess.Popen(['mpg123', mp3_files[index]])
    print '--- Playing ' + mp3_files[index] + ' ---'
    print '--- Press button #3 to clear playing mp3s. ---'
    sleep(1)

    if (GPIO.input(25) == False):
    subprocess.call(['killall', 'mpg123'])
    print '--- Cleared all existing mp3s. ---'

    sleep(0.1);

  • Hallo,
    damit eine LED in einem gewissen Takt blinkt, muss die Soundquelle "zerlegt" werden.
    Bei (nicht digitaler Form) also einem Sound- Track, bekommt man den Takt (... relativ breites Thema ... ) meistens aus dem Schlagzeug - Bassgitarre ... . Aus dem Soundspektrum muss die Musikalische 1 (eins) extrahiert werden. Dafür sind (By ....... Pas) Filter erfunden worden.
    Simple RC / CR Filter, haben schon ziemlich gute Arbeit geleistet.
    Suche nach Soundspektrum filtern - oder ähnliches.
    (in den 70-ger waren die berühmte RGB Licht orgeln sehr beliebt)
    Paar Widerstände und Kondensatoren haben grade bei den Tiefen -> also Takt sehr gute Resultate erzeugt.

    Gruß
    Georg

    Sollte ich "Müll- reden" :blush: - bitte mich (?) "auf die Nuss" hauen. :huh:

  • georg das ist ziemlich viel Unfug. Beat-tracking (also das herausfinden der "1") ist eine Wissenschaft die selbst heute noch herausfordernd ist - mein Kollege Andrew Robertson hat erst letzten Herbst eine Implementierung abgeliefert: https://www.ableton.com/en/press/press…drew-robertson/.

    Ein lustiges, irgendwie von der Musik beeinflusstes Lichterflackern wie bei einer Lichtorgel ist etwas anderes. Kann durchaus sein, dass es fuer den TE genuegt, unter der Annahme, er will ueberhaupt etwas musikabhaengiges. Fuer mich klingt sein Post eher nach einem simplen Blinklicht, das anzeigt, dass etwas abgespielt wird.
    Automatisch zusammengefügt:
    Lukas_90

    Was genau soll denn wie blinken? Und hast du schon etwas versucht?


  • georg das ist ziemlich viel Unfug. Beat-tracking (also das herausfinden der "1") ist eine Wissenschaft die selbst heute noch herausfordernd ist - mein Kollege Andrew Robertson hat erst letzten Herbst eine Implementierung abgeliefert: https://www.ableton.com/en/press/press…drew-robertson/.

    Ein lustiges, irgendwie von der Musik beeinflusstes Lichterflackern wie bei einer Lichtorgel ist etwas anderes. Kann durchaus sein, dass es fuer den TE genuegt, unter der Annahme, er will ueberhaupt etwas musikabhaengiges. Fuer mich klingt sein Post eher nach einem simplen Blinklicht, das anzeigt, dass etwas abgespielt wird.
    Automatisch zusammengefügt:

    Lukas_90

    Was genau soll denn wie blinken? Und hast du schon etwas versucht?

    ...Danke für die Antwort, also ja du hast recht ich würde meinen Code gern soweit ändern, dass sobald ich einen
    Titel abspiele eine LED in einem 5Hz Takt blinkt.
    Ist das Lied aus soll auch die LED aus sein.

    Mein Player hat 3 Tasten: 1.Taste wählt immer nächsten Titel
    2.Taste spielt den ausgewählten Titel ab
    3. Taste stoppt den abgespielten Titel

    Also sobald ich die 2. Taste drücke und der Titel abgespielt wird, will ich die LED blinken lassen.

    Hoff ich habs einigermaßen gut beschrieben

    LG Lukas

  • Warum immer gleich mit Kanonen auf Spatzen schießen? Aus dem Eröffnungspost geht doch recht eindeutig hervor, daß die LED einfach nur blinken soll, so lange der Song läuft, da steht nix von "im Musiktakt" oder Ähnlichem. Typische Forenkrankheit, aus jeder winzigen Mücke einen gigantischen Elefanten zu machen.

    Einfach die LED, am Besten über einen Transistor zum Schutz des Pi, an einen PWM GPIO Anschluß des Pi schalten, diesen mit 5 Hz, 50% Pulslänge programmieren und dann bei Start des Titels auch den GPIO starten, ist das Lied zu Ende, den GPIO wieder stoppen. Ist mit ganz einfachen Befehlen in Python zu erreichen.
    Einen konkreten Code werde ich hier absichtlich nicht liefern, denn wir wollen ja alle ständig dazulernen. Wird dem TE jetzt alles mundgerecht geliefert, weiß er zwar, daß es geht, aber nicht wie und warum. Deshalb einfach in die GPIO Programmierung einlesen, ist nicht soo schwer. Der Denkanstoß ist erst einmal da.

  • Hallo Lukas,

    noch einfacher geht's mit einer Blink-LED. Die blinkt einfach drauf los, wenn sie Spannung bekommt - und hört dmit auf, wenn die Spannung abgeschaltet wird.

    Somit brauchst Du bloß unmittelbar vor dem Befehl, der die Musik startet, den GPIO, der zur Blink-LED führt, auf HIGH zu setzen. Und wenn das Lied abgespielt ist oder unterbrochen wurde, dann setzt Du den GPIO auf LOW.

    Mit einer Blink-LED verballerst Du auch keine CPU-Zeit. Die CPU kann sich voll und ganz auf das Abspielen der Musik konzentrieren.

    Das sind dann zwei Zeilen, die ins Programm kommen. Alles andere (100 ms an, 100 ms aus), um auf die 5 Hz zu kommen, sind meiner Meinung nach Käse - und dürfte sich auf die Abspielqualität nicht so positiv auswirken.

    Und die Schaltung ist auch simpel: GPIO-LED-R-GND.


    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.

    Einmal editiert, zuletzt von Andreas (14. Mai 2016 um 11:08)


  • Warum immer gleich mit Kanonen auf Spatzen schießen? Aus dem Eröffnungspost geht doch recht eindeutig hervor, daß die LED einfach nur blinken soll, so lange der Song läuft, da steht nix von "im Musiktakt" oder Ähnlichem. Typische Forenkrankheit, aus jeder winzigen Mücke einen gigantischen Elefanten zu machen.

    Einfach die LED, am Besten über einen Transistor zum Schutz des Pi, an einen PWM GPIO Anschluß des Pi schalten, diesen mit 5 Hz, 50% Pulslänge programmieren und dann bei Start des Titels auch den GPIO starten, ist das Lied zu Ende, den GPIO wieder stoppen. Ist mit ganz einfachen Befehlen in Python zu erreichen.
    Einen konkreten Code werde ich hier absichtlich nicht liefern, denn wir wollen ja alle ständig dazulernen. Wird dem TE jetzt alles mundgerecht geliefert, weiß er zwar, daß es geht, aber nicht wie und warum. Deshalb einfach in die GPIO Programmierung einlesen, ist nicht soo schwer. Der Denkanstoß ist erst einmal da.

    :lol: :lol: :lol: :lol: :lol: :lol:
    Danke für die Info jetzt weiß ich das es funktioniert.

    Ich probier seit 2 Wochen herum und würg den PI entweder ab oder bekomme Syntax Fehler,
    deshalb hab ich meine Frage gestellt.

    Ich weiß das es machbar ist, jedoch leider nicht beim PI

    LG

  • Wenn du Syntax-Fehler bekommst, dann zeig uns was du probiert hast.

    Hier wird gerne geholfen - aber ein kostenloser Programmierservice fuer PI-Projekte ist das hier nunmal nicht.

  • Hi Andres,

    Danke für deine Antwort, aber was ist eine Blinkled?

    Ich habe eine while schleife mit 3 if bedingungen,

    soll ich in die 2te if bedingung die dafür da ist den Titel abzuspielen ein blink Program dazu basteln?
    Hast du das so gemeint? :denker:

    Mir wäre nur wichtig das ich die Frequenz des Blinkens ändern kann.

    LG Lukas

  • Eine BlinkLED ist eine LED die schon von selbst blinkt - mit fester Frequenz. Bringt dir also nichts.

    Hast du schon mal ein Programm geschrieben, dass fuer sich selbst eine LED (mit variabler Frequenz) ansteuert?


  • Wenn du Syntax-Fehler bekommst, dann zeig uns was du probiert hast.

    Hier wird gerne geholfen - aber ein kostenloser Programmierservice fuer PI-Projekte ist das hier nunmal nicht.

    ...Hi nochmal,

    Sory dann hab ich das falsch verstanden mit dem Forum,
    dachte hier sind Professionisten die bei kleinen Problemen weiter helfen können.

    Und ich meine das ist sicher nur ne Kleinigkeit.

    Oder gehst du wenn du krank bist zum Arzt und wartest auf die Frage was fehlt mir?
    --> Auf NEIN ICH SAG DIR ZWAR DAS DU KRANK BIST ABER DEN GRUND FINDE SELBST HERAUS!!!

    Sory Deets, wegen solchen Antworten hab ich mich hier nicht angemeldet.

    LG Lukas
    Automatisch zusammengefügt:


    Eine BlinkLED ist eine LED die schon von selbst blinkt - mit fester Frequenz. Bringt dir also nichts.

    Hast du schon mal ein Programm geschrieben, dass fuer sich selbst eine LED (mit variabler Frequenz) ansteuert?

    ...Ja hab ich, ist jedoch dann ein Programm Bsp. python blink-led.py

    wenn ich das ausführe blinkt die led bis ich das Programm wieder stoppe mit ctrl+c

    und mein player ist auch ein eigenständiges Programm python raspi-audio-programm.py

    ich kann das blink programm nicht einfach einfügen in die if bedingung

    LG Lukas

    Einmal editiert, zuletzt von Lukas_90 (14. Mai 2016 um 11:35)

  • Lukas nicht alles was derbe hinkt ist ein Vergleich.

    Fuer deinen Arzt bezahlst du deine Krankenkasse. Kann ich mal deine Programmiererkassenschein sehn? Haste nicht? Dachte ich mir.

    Es ist inzwischen offensichtlich, dass du ohne ein Mindestmass an eigenem Aufwand eine Leistung von anderen Leuten abgreifen willst. Kannst du gerne versuchen - nicht mit mir.


  • Lukas nicht alles was derbe hinkt ist ein Vergleich.

    Fuer deinen Arzt bezahlst du deine Krankenkasse. Kann ich mal deine Programmiererkassenschein sehn? Haste nicht? Dachte ich mir.

    Es ist inzwischen offensichtlich, dass du ohne ein Mindestmass an eigenem Aufwand eine Leistung von anderen Leuten abgreifen willst. Kannst du gerne versuchen - nicht mit mir.

    Hi Deets,

    Nochmal ich habe mit dem PI keine Erfahrung,
    ich habe das eine oder andere schon mit Arduino gelöst.
    Das mit den mp3 Playern wurde im Internet oft mit einem PI realisiert
    deshalb habe ich mich für den PI entschieden, ich kämpfe seit Wochen damit,
    dass ich die led nicht dazu ansteuern kann.

    Dann habe ich mich entschieden dieses Forum aufzusuchen.
    Es ist bestimmt und da bin ich mir ganz sicher eine minimalistische änderung in meinem bestehenden
    Programm.

    Was willst du eine Spende?
    Schick mir nen funktionierenden Code dann Spende ich dir den Arbeitsaufwand von wsl. 5 min.

    LG Lukas

  • Hallo __deets__


    Eine BlinkLED ist eine LED die schon von selbst blinkt - mit fester Frequenz. Bringt dir also nichts.


    Das sehe ich zwar nicht so - denn genau das ist die einfachste praktikable Lösung, nach der Lukas sucht. Die er aber nicht finden kann, weil er dies nicht als Lösung erkennen kann.

    Die Lösung steht in Beitrag #6. Braucht nur minimalisitisch programmiert zu werden.

    Lucas: Dieses Forum ist kein "Wünsch Dir was". Wir helfen hier normalerweise gern mit dem einen oder anderen Code aus. Aber nur wenn der Themenersteller (TE) erkennbare Eigeninitiative gezeigt hat. Z.B.
    - Eigeninitiative im Suchen: Diese und jene Links habe ich durchgearbeitet. Daran kann man eigenes Bemühen erkennen.
    - Eigeninitiative im Nachmachen: Dieses und jenes habe ich probiert. Hier meine Schaltung, hier mein Code.
    - Eigeninitiative im Probieren: Dann habe ich den Code aus dem Programm so und so geändert, weiter komme ich nicht, weil dann Fehlermeldungen kommen, nämlich diese...
    - Eigenintiative beim Know-How-Transfer: Aus den und den Artikeln folgt für mich dieses und jenes. Liege ich hier richtig?

    Hier fliegen auch Schulgruppen auf die Schnauze, die der irrigen Ansicht sind, wir würden hier über's Wochenende Abschlussarbeiten ausarbeiten, die die Gruppe seit Monaten nicht begonnen hat.

    Und mit Geld kannst Du hier schon mal niemanden ködern. Das haben die von uns mit gutbezahlten Entwickler- / Berater-Jobs in der Industrie eh genug. Dazu vielleicht einen Tip: Solche Jobs bekommt man vielleicht mit Beziehungen - halten kann man sie aber nur mit Leistung.

    Der sicherste Weg aber war und ist - ganz sicher aber durch Leistung und ... wie heißt es noch :s ... ach, ich hab's: E I G E N I T I A T I V E !


    Ich bin hier raus.

    Beste Grüße

    Andreas
    Automatisch zusammengefügt:

    Hallo Lukas,

    Buchempfehlungen:
    Erik Bartmann: Die elektronische Welt mit dem Raspberry Pi entdecken

    Zeitschriften-Empfehlung:
    TheMagPi - Ausgaben 2 und 3

    Tutorial-Empfehlung:
    Icon Tutorials Teil 12 und Teil 24

    Wenn die LED nicht tut:
    Einen Vorwiderstand setzest Du aber ein? Und umgepolt hast Du sie auch schon mal?

    Und den GPIO des RPi hast Du noch nicht weggebrutzelt?


    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.

    2 Mal editiert, zuletzt von Andreas (15. Oktober 2017 um 15:11)


  • Das sehe ich zwar nicht so - denn genau das ist die einfachste praktikable Lösung, nach der Lukas sucht. Die er aber nicht finden kann, weil er dies nicht als Lösung erkennen kann.

    Er such nicht nach einer festen Frequenz. Zitat: "Mir wäre nur wichtig das ich die Frequenz des Blinkens ändern kann."

  • Nochmal ich habe mit dem PI keine Erfahrung,
    ...
    Dann habe ich mich entschieden dieses Forum aufzusuchen.
    Es ist bestimmt und da bin ich mir ganz sicher eine minimalistische änderung in meinem bestehenden
    Programm.


    Ich beschäftige mich seit noch nicht mal einem Jahr mit dem Pi. Jetzt kannst Du gern hier nach Threads suchen, in denen ich mal etwas gefragt habe. Wirst Du keinen Erfolg haben.

    Was sagt Dir das? Eigeninitiative, Lesen, Lernen, dann wird das etwas mit dem Pi.

    Da schließe ich mich anderen Usern an, hier wird Hilfe bei konkreten Problemen geboten, Hilfe zur Selbsthilfe, um genauer zu sein. Ein Programmierservice ist das Forum sicher nicht.

  • Hi habe meinen Code erweitert und geschafft nach Stunden =)

    Jetzt habe ich nur ein Problem beim starten meines Programms blinkt die LED und beim stoppen hört sie auf soweit so gut, wenn ich jedoch nochmals einen Titel abspiele leuchtet sie dauerhaft ich poste mal meinen Code

    LG Lukas

    #!/usr/bin/env python

    from os import listdir
    import subprocess
    from time import sleep
    import RPi.GPIO as GPIO
    import time


    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(18, GPIO.IN)
    GPIO.setup(23, GPIO.IN)
    GPIO.setup(24, GPIO.IN)

    GPIO.setup(22, GPIO.OUT)
    GPIO.output(22, GPIO.HIGH)
    p1 = GPIO.PWM(22,10) ################Das ist neu#########



    mp3_files = [ f for f in listdir('.') if f[-4:] == '.mp3' ]

    if not (len(mp3_files) > 0):
    print "No mp3 files found!"

    print '--- Available mp3 files ---'
    print mp3_files
    print '--- Press button #1 to select mp3, button #2 to play current. ---'

    index = 0
    while True:
    if (GPIO.input(18) == False):
    index += 1
    if index >= len(mp3_files):
    index = 0
    print "--- " + mp3_files[index] + " ---"


    if (GPIO.input(23) == False):
    p1.start(10) ############Das ist neu#########
    subprocess.Popen(['mpg123', mp3_files[index]])
    print '--- Playing ' + mp3_files[index] + ' ---'
    print '--- Press button #3 to clear playing mp3s. ---'



    if (GPIO.input(24) == False):
        
    p1.stop() ##########Das ist neu#######
    subprocess.call(['killall', 'mpg123'])
    print '--- Cleared all existing mp3s. ---'


    sleep(0.2);

  • Es sieht ein bisschen besser aus, aber es sind definitiv falsche Einrueckungen so wie das hier dargestellt ist. Statt also hier irgendwie von Hand einzuruecken, bitte poste den richtigen Code, mit code-tags:

    [*code*]
    Dein Code
    [*/code*]

    Nur musst du in echt die Sternchen weglassen (weglassen. Nicht durch Leerzeichen ersetzen). Und dann hier unten auf "Beitragsvorschau" klicken, um zu pruefen, ob es richtig ist. Ausserdem empfiehlt es sich, Tabulatoren durch Spaces zu ersetzen, falls das in deinem Code der Fall sein sollte.

Jetzt mitmachen!

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