Source code for athena.tts

"""
    Basic Text-To-Speech tools are stored here
"""

import pyglet, tempfile, os

import athena.settings as settings

from requests.exceptions import HTTPError
from gtts import gTTS

[docs]def init(): #pyglet.options['audio'] = ('openal', 'directsound', 'silent') pyglet.lib.load_library('avbin') pyglet.have_avbin=True
[docs]def play_mp3(file_name, file_path=settings.MEDIA_DIR): """ Plays a local MP3 file :param file_name: top-level file name (e.g. hello.mp3) :param file_path: directory containing file ('media' folder by default) """ pyglet.resource.path.clear() pyglet.resource.path.append(file_path) pyglet.resource.reindex() sound = pyglet.resource.media(file_name, streaming=False) sound.play() def exit_callback(dt): pyglet.app.exit() pyglet.clock.schedule_once(exit_callback, sound.duration) pyglet.app.run()
[docs]def speak(phrase, cache=False, filename='default', show_text=True): """ Speaks a given text phrase :param phrase: text string to speak :param cache: if True, store .mp3 in 'media/responses' :raises HTTPError: if Google TTS fails to respond """ if show_text: print('\n~ '+phrase+'\n') if not settings.USE_TTS: print('SPOKEN:', phrase) return try: phrase = phrase[:settings.MAX_CHAR] tts = gTTS(text=phrase, lang=settings.LANG) if not cache: with tempfile.NamedTemporaryFile(mode='wb', suffix='.mp3', delete=False) as f: (temp_path, temp_name) = os.path.split(f.name) tts.write_to_fp(f) play_mp3(temp_name, temp_path) os.remove(os.path.join(temp_path, temp_name)) else: filename = os.path.join(settings.RESPONSES_DIR, filename+'.mp3') tts.save(filename) print('\n~ Saved to:', filename) except HTTPError as e: print('Google TTS might not be updated:', e) except Exception as e: print('Unknown Google TTS issue:', e)