VLC - python 和 GPIO - 随机函数

问题描述 投票:0回答:1

我正在寻找加载播放列表并随机播放其中包含的文件。

另外,当我按下按钮时,它们往往会多次发送信号,我尝试过 time.sleep 但它不起作用。

如你所见,我不是程序员,我尝试自己开始,除了这两项之外,一切都还不错。

非常感谢您的帮助。

这是我的代码:

# -*- coding: utf-8 -*-

from gpiozero import Button
from signal import pause
import vlc
import subprocess
import random

# Définir le chemin des listes de lecture

playlist1_path = "/home/Lebargy/Desktop/Liste1.m3u8"
playlist2_path = "/home/Lebargy/Desktop/Liste2.m3u"

# Créer une instance VLC

instance = vlc.Instance()

# Modifier la commande VLC pour spécifier le plein écran et masquer les contrôles

commande_vlc = "cvlc"

# Ouvrir VLC avec la commande modifiée

subprocess.Popen(commande_vlc, shell=True)

# Charger les listes de lecture

media_list1 = instance.media_list_new(\[playlist1_path\])
media_list2 = instance.media_list_new(\[playlist2_path\])
random.shuffle(media_list1)
random.shuffle(media_list2)

# Créer un lecteur VLC

player = instance.media_player_new()
list_player = instance.media_list_player_new()
list_player.set_media_player(player)
player.set_fullscreen(True)

# Configurer le volume

player.audio_set_volume(480)

# Charger la première liste de lecture dans le lecteur par défaut

list_player.set_media_list(media_list1)

# Démarrer la lecture

list_player.play()

# Variable pour suivre l'état de la vitesse de lecture

vitesse_acceleree = False

# Définir une fonction de rappel pour gérer l'événement d'appui sur le bouton p1

def bouton_p1_callback():
    list_player.stop()
    list_player.set_media_list(media_list1)
    list_player.play()
    player.set_fullscreen(True)

# Définir une fonction de rappel pour gérer l'événement d'appui sur le bouton p2

def bouton_p2_callback():
    list_player.next()  # Passer à la piste suivante dans la liste de lecture.

# Définir une fonction de rappel pour gérer l'événement d'appui sur le bouton p3

def bouton_p3_callback():
    list_player.stop()
    list_player.set_media_list(media_list2)
    list_player.play()
    player.set_fullscreen(True)

# Définir une fonction de rappel pour gérer l'événement d'appui sur le bouton d'accélération

def bouton_p4_callback():
    global vitesse_acceleree
    if list_player.is_playing():
        if not vitesse_acceleree:
            player.set_rate(3)  # Accélérer la lecture (vitesse 3x)
            vitesse_acceleree = True
        else:
            player.set_rate(1)  # Revenir à la vitesse normale
            vitesse_acceleree = False

# Créer des instances de boutons pour les broches GPIO correspondantes

bouton_p1 = Button(21)
bouton_p2 = Button(2)
bouton_p3 = Button(20)
bouton_p4 = Button(14)

# Assigner les fonctions de rappel aux événements "when_pressed" des boutons

bouton_p1.when_pressed = bouton_p1_callback
bouton_p2.when_pressed = bouton_p2_callback
bouton_p3.when_pressed = bouton_p3_callback
bouton_p4.when_pressed = bouton_p4_callback

# Mettre en pause le script pour le maintenir en cours d'exécution indéfiniment

pause()


python random vlc gpio
1个回答
0
投票

@疯狂物理学家,嗨!因为我在几个引脚上插入了一些按钮来触发一些操作。

事实上,我使用的是Gpiozero。

所以,目前,我仍然有按钮过敏的问题。

我更改了在播放列表中随机播放文件的代码,但似乎始终播放文件夹中相同的前 10 个文件。

对我来说还有另一个谜团,当我按下按钮时,下一个文件会全屏播放,但不会在屏幕中心对齐。

感谢您的浏览!


import os
import random
from gpiozero import Button, LED
from signal import pause
import vlc
import threading
import atexit

# Définir les chemins des dossiers
dossier1_path = "/home/Lebargy/Liste1"
dossier2_path = "/home/Lebargy/Liste2"

# Obtenir la liste des fichiers dans les dossiers
fichiers_dossier1 = [os.path.join(dossier1_path, f) for f in os.listdir(dossier1_path) if os.path.isfile(os.path.join(dossier1_path, f))]
fichiers_dossier2 = [os.path.join(dossier2_path, f) for f in os.listdir(dossier2_path) if os.path.isfile(os.path.join(dossier2_path, f))]

# Mélanger les listes de fichiers
random.shuffle(fichiers_dossier1)
random.shuffle(fichiers_dossier2)

# Créer une instance VLC
instance = vlc.Instance("--no-xlib --fullscreen --disable-screensaver --embedded-video --aout=alsa")

# Créer des listes de médias VLC
media_list1 = instance.media_list_new(fichiers_dossier1)
media_list2 = instance.media_list_new(fichiers_dossier2)

# Créer un lecteur VLC et un lecteur de liste
player = instance.media_player_new()

# Activer le mode plein écran
player.set_fullscreen(True)
list_player = instance.media_list_player_new()
list_player.set_media_player(player)

# Charger la première liste de lecture dans le lecteur par défaut
list_player.set_media_list(media_list2)

player.audio_set_volume(50)

# Démarrer la lecture
list_player.play()

# Déclarer la LED
led = LED(17)

# Définir une fonction pour vérifier si du son est en cours de lecture
def verifier_son_en_cours():
    while True:
        media_position = player.get_position()
        if media_position is not None and media_position != 0.0 and player.get_state() == vlc.State.Playing:
            led.on()
        else:
            led.off()
        threading.Event().wait(1)  # Attendre 1 seconde avant de vérifier à nouveau le son

# Définir une fonction de rappel pour gérer l'événement d'appui sur le bouton p1
def bouton_p1_callback():
    list_player.stop()
    list_player.set_media_list(media_list1)
    led.on()
    list_player.play()

# Définir une fonction de rappel pour gérer l'événement d'appui sur le bouton p2
def bouton_p2_callback():
    list_player.next()  # Passer à la piste suivante dans la liste de lecture.

# Définir une fonction de rappel pour gérer l'événement d'appui sur le bouton p3
def bouton_p3_callback():
    list_player.stop()
    list_player.set_media_list(media_list2)
    led.off()
    list_player.play()

# Définir une fonction de rappel pour gérer l'événement d'appui sur le bouton d'accélération
def bouton_p4_callback():
    if list_player.is_playing():
        rate = player.get_rate()
        if rate == 1.0:
            player.set_rate(3.0)  # Accélérer la lecture (vitesse 3x)
        else:
            player.set_rate(1.0)  # Revenir à la vitesse normale

# Créer des instances de boutons pour les broches GPIO correspondantes
bouton_p1 = Button(21)
bouton_p2 = Button(2)
bouton_p3 = Button(20)
bouton_p4 = Button(14)

# Assigner les fonctions de rappel aux événements "when_pressed" des boutons
bouton_p1.when_pressed = bouton_p1_callback
bouton_p2.when_pressed = bouton_p2_callback
bouton_p3.when_pressed = bouton_p3_callback
bouton_p4.when_pressed = bouton_p4_callback

# Nettoyage
def nettoyer_gpio():
    bouton_p1.close()
    bouton_p2.close()
    bouton_p3.close()
    bouton_p4.close()
    led.close
    
atexit.register(nettoyer_gpio)


# Mettre en pause le script pour le maintenir en cours d'exécution indéfiniment
pause()
© www.soinside.com 2019 - 2024. All rights reserved.