12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- from core import AudioPlayer
- from core import Cache
- import logging
- import os
- import requests
- import sys
- from core import FileManager
- logging.basicConfig()
- logger = logging.getLogger("kalliope")
- class TTS:
- TTS_CONTENT_TYPE = "audio/mpeg"
- TTS_TIMEOUT_SEC = 30
- def __init__(self, cache_extension=None, volume=0.8):
- self.cache = Cache(module_name=self.__class__.__name__, cache_extension=cache_extension)
- self.audio_player = AudioPlayer(volume=volume)
- def play_audio(self, music_file, music_type, audio_frequency, cache=False):
- self.audio_player.init_play(music_type, audio_frequency)
- self.audio_player.play_audio(music_file)
- self.cache.remove_audio_file(music_file, cache)
- def say_generic(self, cache, language, words, get_audio_specific, audio_type, audio_frequency, voice=None):
- file_path = self.cache.get_audio_file_cache_path(words, language, voice)
- if get_audio_specific(language=language, words=words, file_path=file_path, cache=cache, voice=voice):
- self.play_audio(file_path, audio_type, audio_frequency, cache)
- @staticmethod
- def unify_key(key):
- return key.lower()
- @staticmethod
- def get_audio(file_path, cache, payload, url, content_type_expected=TTS_CONTENT_TYPE, timeout_expected=TTS_TIMEOUT_SEC):
- if not cache or not os.path.exists(file_path) or FileManager.file_is_empty(file_path):
- r = requests.get(url, params=payload, stream=True, timeout=timeout_expected)
- content_type = r.headers['Content-Type']
- logger.debug("Trying to get url: %s response code: %s and content-type: %s", r.url, r.status_code, content_type)
- try:
- if r.status_code == requests.codes.ok and content_type == content_type_expected:
- return FileManager.write_in_file(file_path, r.content)
- else:
- return False
- except IOError as e:
- logger.error("I/O error(%s): %s", e.errno, e.strerror)
- except ValueError:
- logger.error("Could not convert data to an integer.")
- except:
- logger.error("Unexpected error: %s", sys.exc_info()[0])
- else:
- return True
|