Refactor audio recognition script and add new functionality for continuous listening

This commit is contained in:
2024-12-21 21:56:08 +01:00
parent 397da67530
commit c759c09fd6
2 changed files with 120 additions and 10 deletions
+29 -10
View File
@@ -5,6 +5,9 @@ from vosk import Model, KaldiRecognizer
import ctypes
import time
import keyboard
import winsound
BUFFER = 2000 # Tamaño del buffer de audio
RECOGNITION_ACTIVE = False # Estado inicial del reconocimiento
@@ -19,7 +22,10 @@ def is_key_pressed(key_code):
# Carga el modelo de Vosk (español)
def load_model(model_path="vosk-model-es-0.42"):
return Model(model_path)
print("Cargando modelo de reconocimiento de voz, por favor espera...")
model = Model(model_path)
print("Modelo cargado exitosamente.")
return model
# Inicializa PyAudio
def initialize_audio():
@@ -41,15 +47,18 @@ def toggle_recognition_state():
state = "activado" if RECOGNITION_ACTIVE else "desactivado"
print(f"Reconocimiento de voz {state}.")
# Escucha el audio del stream
def listen_audio(stream):
return stream.read(BUFFER, exception_on_overflow=False)
# Procesa el audio y realiza la transcripción
def process_audio(stream, recognizer):
data = stream.read(BUFFER, exception_on_overflow=False) # Lee el flujo de audio
def process_audio(data, recognizer):
if recognizer.AcceptWaveform(data):
result = recognizer.Result() # Obtiene la transcripción
text = eval(result)['text'].encode('utf-8').decode('utf-8')
if text.strip():
text += ' '
print(text) # Agrega un espacio al final
print(text) # Muestra la transcripción en consola
keyboard.write(text) # Escribe el texto donde esté el cursor
# Cierra los recursos de audio
@@ -62,24 +71,34 @@ def close_audio_resources(p, stream):
def main():
global RECOGNITION_ACTIVE
print("Presiona 'AltGr' + 'P' para activar/desactivar el reconocimiento de voz...")
# Inicializa el modelo y los recursos de audio
model = load_model()
print("Presiona 'AltGr' + 'P' para activar/desactivar el reconocimiento de voz...")
p, stream = initialize_audio()
recognizer = KaldiRecognizer(model, 16000)
try:
while True:
# Detecta si 'AltGr' y 'Ñ' están presionadas
# Detecta si 'AltGr' y 'P' están presionadas
if is_key_pressed(VK_ALTGR) and is_key_pressed(VK_AUX):
toggle_recognition_state()
while is_key_pressed(VK_ALTGR) or is_key_pressed(VK_AUX):
time.sleep(0.1) # Espera a que se suelten las teclas para evitar múltiples activaciones
# Procesa el audio si el reconocimiento está activado
# Leer audio continuamente
audio_data = listen_audio(stream)
# Procesar el audio según el estado del reconocimiento
if RECOGNITION_ACTIVE:
process_audio(stream, recognizer)
process_audio(audio_data, recognizer)
else:
# Solo evalúa si hay un resultado válido, pero no lo usa
if recognizer.AcceptWaveform(audio_data):
recognizer.Result()
time.sleep(0.05) # Pequeña pausa para reducir la carga de la CPU