|
@@ -0,0 +1,52 @@
|
|
|
+import logging
|
|
|
+
|
|
|
+import re
|
|
|
+
|
|
|
+import requests
|
|
|
+
|
|
|
+from core import AudioPlayer
|
|
|
+from tts import TTS
|
|
|
+
|
|
|
+logging.basicConfig()
|
|
|
+logger = logging.getLogger("jarvis")
|
|
|
+
|
|
|
+
|
|
|
+class Acapela(TTS):
|
|
|
+ TTS_LANGUAGES_DEFAULT = 'sonid15'
|
|
|
+ TTS_VOICE_DEFAULT = 'Manon'
|
|
|
+ TTS_URL = "http://www.acapela-group.com/demo-tts/DemoHTML5Form_V2_fr.php"
|
|
|
+ TTS_CONTENT_TYPE = "audio/mpeg"
|
|
|
+ TTS_TIMEOUT_SEC = 30
|
|
|
+
|
|
|
+ def __init__(self):
|
|
|
+ TTS.__init__(self)
|
|
|
+
|
|
|
+ def say(self, words=None, language=TTS_LANGUAGES_DEFAULT, voice=TTS_VOICE_DEFAULT, cache=True):
|
|
|
+ self.say_generic(cache, language, words, self.get_audio_acapela, AudioPlayer.PLAYER_MP3, AudioPlayer.AUDIO_MP3_22050_FREQUENCY, voice)
|
|
|
+
|
|
|
+ def get_audio_acapela(self, **kwargs):
|
|
|
+ language = kwargs.get('language', None)
|
|
|
+ words = kwargs.get('words', None)
|
|
|
+ cache = kwargs.get('cache', None)
|
|
|
+ file_path = kwargs.get('file_path', None)
|
|
|
+ voice = kwargs.get('voice', None)
|
|
|
+ payload = Acapela.get_payload(language, voice, words)
|
|
|
+ url = Acapela.get_audio_link(self.TTS_URL, payload)
|
|
|
+
|
|
|
+ return TTS.get_audio(file_path, cache, payload, url)
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def get_audio_link(url, payload, timeout_expected=30):
|
|
|
+ r = requests.post(url, payload, timeout=timeout_expected)
|
|
|
+ data = r.content
|
|
|
+ return re.search("(?P<url>https?://[^\s]+).mp3", data).group(0)
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def get_payload(language, voice, words):
|
|
|
+ return {
|
|
|
+ "MyLanguages": language,
|
|
|
+ "MySelectedVoice": voice,
|
|
|
+ "MyTextForTTS": words,
|
|
|
+ "t": "1",
|
|
|
+ "SendToVaaS": ""
|
|
|
+ }
|