Ed eccoci all’ultima funzione del bot.
Quella che mi ha dato più problemi e quella che mi ha dato maggiori soddisfazioni.
Quando passiamo al bot un messaggio audio registrato all’interno di Telegram, questa funzione, come prima cosa, converte il file audio dal formato OGG al formato WAV. E per fare questo ho trovato una meravigliosa quanto pratica libreria PYDUB.
Successivamente la funzione passa il file audio in formato WAV all’engine di speech recognition di Google per riconoscere il messaggio vocale ed ottenere una stringa di testo.
Infine, la stringa di testo riconosciuta dal messaggio vocale, viene passata alla funzione formula_risposta(…) per formulare una risposta basata sul testo dettato (direi meraviglioso).
"""
=== ANALIZZA_AUDIO ===
Funzione per convertire in WAV il file audio registrato
in Telegram (nativo in formato OGG) e analizzare il messaggio audio
contenuto nel file WAV
======================
"""
def analizza_audio(bot, chat_id, msg):
print("Funzione ANALIZZA_AUDIO: START")
ogg_file_id=msg["voice"] ["file_id"]
print("Funzione ANALIZZA_AUDIO:",ogg_file_id)
print("Funzione ANALIZZA_AUDIO: Downloading file in formato OGG...")
bot.download_file(ogg_file_id, "audio_da_telegram.ogg")
print("Funzione ANALIZZA_AUDIO: Salvataggio file OGG terminato.")
file_ogg = AudioSegment.from_ogg("audio_da_telegram.ogg")
file_handle = file_ogg.export("output.wav", format="wav")
print("Funzione ANALIZZA_AUDIO: Convesione file WAV terminato.")
r = sr.Recognizer()
with sr.WavFile("output.wav") as source:
audio = r.record(source)
try:
domanda=r.recognize_google(audio,language="it_IT")
print("Trascrizione del file audio: " + domanda) # recognize speech using Google Speech Recognition
formula_risposta(bot,chat_id,msg,domanda)
except LookupError: # speech is unintelligible
print("Impossibile riconoscere del testo nel file audio analizzato")
return