Alfred/tempo/dona/archive/app.py.save
2025-11-11 13:38:25 +01:00

91 lines
2.2 KiB
Plaintext

#LED
from driver_led import APA102
#BOUTON
import RPi.GPIO as GPIO
import time
#STT
import subprocess
import json
import vosk
## INIT
# Initialisation des LEDs
num_leds = 12
led = APA102(num_led=num_leds)
# Initialisation Bouton
BUTTON = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON, GPIO.IN)
etat = {'mute': False}
# Inistialisation STT
model_path = "vosk-model/vosk-model-small-fr-0.22"
model = vosk.Model(model_path)
command = [
"arecord", "-f", "cd", "-D", "hw:1"
]
arecord = subprocess.Popen(command, stdout=subprocess.PIPE)
ffmpeg = subprocess.Popen(
[
"ffmpeg", "-loglevel", "quiet", "-i", "pipe:0",
"-ac", "1", "-ar", "16000", "-f", "s16le", "pipe:1"
],
stdin=arecord.stdout, stdout=subprocess.PIPE
)
# Initialisation Vosk
rec = vosk.KaldiRecognizer(model, 16000)
## LED
def set_couleur(couleur):
couleur = couleur.upper()
# Dictionnaire des couleurs
couleurs_rgb = {
'R': (255, 0, 0), # Rouge
'V': (0, 255, 0), # Vert
'B': (0, 0, 255), # Bleu
'J': (255, 255, 0), # Jaune
'VI': (128, 0, 128), # Violet
'RO': (255, 105, 180), # Rose
'O': (255, 165, 0), # Orange
}
rgb = couleurs_rgb.get(couleur, (0, 0, 0)) # Éteindre si couleur inconnue
for i in range(num_leds):
led.set_pixel(i, *rgb)
led.show()
def eteindre_led():
set_couleur("") # Couleur inconnue → éteint
def cleanup_led():
led.cleanup()
##BOUTON
# Bascule mute/unmute
def toggle_mute(channel):
etat['mute'] = not etat['mute']
if etat['mute']:
set_couleur('VI') # Rouge = mute
else:
set_couleur('') # Vert = unmute
# Event du bouton préssé
GPIO.add_event_detect(BUTTON, GPIO.FALLING, callback=toggle_mute, bouncetime=300)
try:
while True:
data = ffmpeg.stdout.read(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
result = json.loads(rec.Result())
print("📝", result.get("text", ""))
else:
partial = json.loads(rec.PartialResult())
time.sleep(1) # Le programme tourne sans rien faire
except KeyboardInterrupt:
print("Nettoyage GPIO")
cleanup_led()
GPIO.cleanup()