Foros Python

Versión completa: Entrada conversacional en Pyaudio (cómo hacer entradas de tiempo desigual)
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Estoy realizando un programa conversacional, que ya tengo bastante avanzado, de modo que actualmente acepta una entrada por teclado, en lenguaje natural, y el "robot" contesta tanto en pantalla como por los altavoces, es decir, "lee" la entrada del usuario y le contesta "hablando".

El siguiente paso es ir a un sistema por el que el usuario pueda dar su entrada de viva voz, no por teclado, y el "robot" le conteste; para ello, debo hacer que por micrófono se acepte una entrada, y se convierta a texto. Esto lo tengo ya resuelto mediante esta pequeña rutina
import pyaudio
import wave
import speech_recognition as sr
 
FORMAT=pyaudio.paInt16
CHANNELS=2
RATE=44100
CHUNK=1024
duracion=5
archivo="grabacion.wav"
audio=pyaudio.PyAudio()
stream=audio.open(format=FORMAT,channels=CHANNELS,rate=RATE,
                  input=True,frames_per_buffer=CHUNK)
print("grabando...")
frames=[]
for i in range(0,int(RATE/CHUNK*duracion)):
    data=stream.read(CHUNK)
    frames.append(data)
print("grabación terminada")
stream.stop_stream()
stream.close()
audio.terminate()
waveFile=wave.open(archivo,"wb")
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()
 
re = sr.Recognizer()
 
with sr.Microphone() as source:
    audio="grabacion.wav"
 
with sr.AudioFile(audio) as source:
    info_audio=re.record(source)
    texto=re.recognize_google(info_audio,language='es')
    print(texto)
print("fin")


Funciona perfectamente, pero se basa en grabar X segundos y transcribirlos (en este caso 5 segundos, aunque puedo poner los que quiera). Transcurrido este tiempo, el sistema hace la transcripción a texto, y como digo, funciona. Ahora bien, ¿no sería posible hacer que la entrada no tuviera un tiempo marcado, sino que esperase hasta que hubiera un silencio, y entonces se generara el fichero wav que se transcribe?

Agradecería cualquier ayuda.