vocal-nemo/bot.py

57 lines
1.8 KiB
Python

import os
import pvporcupine
import pyaudio
import struct
import logging
from src.pico2wave import Pico2wave
from src.vosk import Vosk
import time
class Voice_listener():
def run(self):
porcupine = None
pa = None
audio_stream = None
try:
porcupine = self.init_porcupine()
pa = pyaudio.PyAudio()
logging.debug("Init audio with rate: %s and frame per buffer: %s" % (porcupine.sample_rate, porcupine.frame_length))
audio_stream = pa.open(format=pyaudio.paInt16, channels=1, rate=porcupine.sample_rate, input=True, frames_per_buffer=porcupine.frame_length)
logging.info("I'm listening")
while True:
pcm = audio_stream.read(porcupine.frame_length)
pcm = struct.unpack_from("h" * porcupine.frame_length, pcm)
result = porcupine.process(pcm)
if result:
tts.say("Oui ?")
time.sleep(1)
text = stt.listen(audio_stream,porcupine.frame_length)
tts.say(text)
except KeyboardInterrupt:
logging.info('stopping ...')
finally:
if porcupine is not None:
porcupine.delete()
if audio_stream is not None:
audio_stream.close()
if pa is not None:
pa.terminate()
def init_porcupine(self):
return pvporcupine.create( keyword_file_paths=[os.path.join(os.path.dirname(__file__), './data/picovoice.ppn')],sensitivities=[1])
logging.basicConfig(format='[%(levelname)s] [%(asctime)s] %(message)s',level=logging.DEBUG)
logging.info('Started')
bot = Voice_listener()
stt = Vosk()
tts = Pico2wave()
tts.say("Bonjour !")
bot.run()