import sys import os import pyaudio from vosk import Model, KaldiRecognizer import keyboard BUFFER = 500 # Tamaño del buffer de audio RECOGNITION_ACTIVE = False # Estado inicial del reconocimiento # Carga el modelo de Vosk (español) model = Model("vosk-model-small-es-0.42") # Inicializa PyAudio p = pyaudio.PyAudio() # Configura el micrófono (entrada de audio) stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=2000) stream.start_stream() # Inicializa el reconocedor recognizer = KaldiRecognizer(model, 16000) print("Presiona 'AltGr' + 'Ñ' para activar/desactivar el reconocimiento de voz...") try: while True: # Detecta si 'AltGr' + 'Ñ' son presionadas juntas if keyboard.is_pressed('alt gr') and keyboard.is_pressed('ñ'): # Cambia el estado de activación del reconocimiento de voz RECOGNITION_ACTIVE = not RECOGNITION_ACTIVE state = "activado" if RECOGNITION_ACTIVE else "desactivado" print(f"Reconocimiento de voz {state}.") # Espera a que se suelten las teclas antes de continuar while keyboard.is_pressed('alt gr') or keyboard.is_pressed('ñ'): pass # Si el reconocimiento está activado, procesa el audio if RECOGNITION_ACTIVE: data = stream.read(BUFFER, exception_on_overflow=False) # Lee el flujo de audio del micrófono # Procesa cada fragmento de audio en tiempo real if recognizer.AcceptWaveform(data): result = recognizer.Result() # Obtiene la transcripción de ese fragmento text = eval(result)['text'].encode('utf-8').decode('utf-8') text = text + ' ' # Agrega un espacio al final para separar las palabras print(text) # Imprime la transcripción keyboard.write(text) # Escribe el texto transcrito except KeyboardInterrupt: print("\nPrograma terminado por el usuario.") # Cierra los recursos stream.stop_stream() stream.close() p.terminate()