Phyton script welches neue mp3 files auf dem raspi automatisch abspielt

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
svenmeyer
User
Beiträge: 1
Registriert: Sonntag 3. Juli 2022, 10:52

Hey Leute,
ich hoffe das kommt jetzt nicht dumm oder heuchlerisch rüber. Aber ich habe ein Problem und zwar habe ich am Dienstag ein Projekt für die Schule hierzu habe ich eine Android App im Appinventor gebaut. Jetzt fehlt mir leider noch die letzte Funktion, mithilfe welcher man am Handy Audiofiles aufzeichnen kann welche dann automatisch auf einem Lautspecher abgespielt werden, welcher am RasPi angeschlossen ist. Ich habe es bereits geschafft dass die Dateien automatisch durch einen SFTP Server auf dem RasPi gespeichert werden in einem definierten Order.

Jetzt kommt mein Problem und zwar benötige ich eigentlich nur ein simples Phyton Skript, welches erkennt wenn sich eine neue MP3 Datei im Ordner befindet und diese dann automatisch abspielt. Leider hatte ich bisher keinerlei Berührungspunkte mit Phyton und habe wirklich gar keine Ahnung.

Ein fertiges Skript zu finden gestaltet sich irgendwie auch schwieriger als gedacht..
Denkt ihr jemand von euch kann mir da eventuell etwas helfen? Oder eventuell benutzt jemand von euch ja schon ein Skript genau für diese Zweck.
Für mich klingt das ganze für jemanden, der sich mit Phyton auskennt relativ simpel, für mich jedoch ist das echt nicht machbar.
Freue mich auf die ein oder andere Antwort von euch! :geek:
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

muss das mit Python sein? Verzeichnisse kann man z.B. mit inotify (siehe z.B. https://wiki.ubuntuusers.de/inotify/) überwachen. Und jedes Mal, wenn eine Datei dazu kommt, damit was machen. Z.B. mit dem Audioplayer des Systems abspielen.

Natürlich kannst du das auch mit Python machen, aber in dem Falle wäre Python nur der Wrapper für inotify und den Audioplayer - also nicht so richtig sinnvoll.

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich würde es mit Inotify machen, da man dann auch die Information hat, dass die Datei fertig übertragen ist.

Wegwerfcode:

Code: Alles auswählen

from __future__ import annotations

import subprocess
from inotify.adapters import Inotify
# https://pypi.org/project/inotify/


def predicate(event_types: list[str]):
    return len(event_types) == 1 and "IN_CLOSE_WRITE" in event_types


def main(root: str, suffixes: list[str]):
    while True:
        for event in Inotify(root).event_gen(yield_nones=False):
            event, event_types, path, file = event

            if not file or not predicate(event_types):
                continue
                
            if not any(file.endswith(suffix) for suffix in suffixes):
                continue
            
            # blockiert
            subprocess.run(["mpv", file])
            # print(event, event_types, path, file)


main("/home/pi/Musik", [".mp3", ".m4a", ".ogg", ".opus"])
Wenn ich mit SCP Dateien lokal kopiere, bekomme ich zweimal das Ereignis "IN_CLOSE_WRITE" mit dem gleichen Dateinamen.
Beim Dateimanager `Dolphin` auch zweimal, aber die Datei hat zusätzlich noch `.part` am Ende.
Bei sftp kommt "IN_CLOSE_WRITE" nur einmal. Das ist gut.

Das Beispiel überwacht /home/pi/Musik und spielt die Dateien mp3, m4a, ogg und opus mit dem mpv Player ab.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Bei (S)FTP Verbindungen ist es auch nicht unüblich, das Ausloggen des Benutzers als Trigger zu verwenden, mit der Verarbeitung der Daten zu beginnen.
Antworten