Source code for athena.stt

    Basic Speech-To-Text tools are stored here

import os, pyaudio, speech_recognition
import athena.tts as tts
import athena.settings as settings

from sphinxbase.sphinxbase import Config, Config_swigregister  # @UnusedImport
from pocketsphinx.pocketsphinx import Decoder

[docs]def init(): # Create a decoder with certain model config = Decoder.default_config() config.set_string('-logfn', os.path.join(settings.LOGS_DIR, 'passive-listen.log')) config.set_string('-hmm', os.path.join(settings.MODEL_DIR, 'en-us\en-us')) config.set_string('-lm', os.path.join(settings.MODEL_DIR, 'en-us\en-us.lm.bin')) config.set_string('-dict', os.path.join(settings.MODEL_DIR, 'en-us\cmudict-en-us.dict')) # Decode streaming data global decoder, p decoder = Decoder(config) decoder.set_keyphrase('wakeup', settings.WAKE_UP_WORD) decoder.set_search('wakeup') p = pyaudio.PyAudio()
[docs]def listen_keyword(): """ Passively listens for the WAKE_UP_WORD string """ global decoder, p stream =, channels=1, rate=16000, input=True, frames_per_buffer=1024) stream.start_stream() p.get_default_input_device_info() print('~ Waiting to be woken up... ') decoder.start_utt() while True: buf = decoder.process_raw(buf, False, False) if decoder.hyp() and decoder.hyp().hypstr == settings.WAKE_UP_WORD: decoder.end_utt() return decoder.end_utt()
[docs]def active_listen(): """ Actively listens for speech to translate into text :return: speech input as a text string """ r = speech_recognition.Recognizer() # use the default microphone as the audio source with speech_recognition.Microphone() as src: # listen for 1 second to adjust energy threshold for ambient noise r.adjust_for_ambient_noise(src) print('\n~ Active listening... ') tts.play_mp3('double-beep.mp3') # listen for the first phrase and extract it into audio data audio = r.listen(src) msg = '' try: msg = r.recognize_google(audio) # recognize speech using Google Speech Recognition print('\n~ \''+msg+'\'') except LookupError: # speech is unintelligible tts.speak(settings.ERROR) finally: return msg