Browse Source

Refactor tts payload

Unknown 8 years ago
parent
commit
f210fbdaf0
5 changed files with 37 additions and 20 deletions
  1. 4 1
      tts/TTS.py
  2. 13 9
      tts/acapela/acapela.py
  3. 7 3
      tts/googletts/googletts.py
  4. 6 2
      tts/voicerss/voicerss.py
  5. 7 5
      tts/voxygen/voxygen.py

+ 4 - 1
tts/TTS.py

@@ -12,6 +12,9 @@ logger = logging.getLogger("jarvis")
 
 
 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)
@@ -32,7 +35,7 @@ class TTS:
         return key.lower()
 
     @staticmethod
-    def get_audio(file_path, cache, payload, url, content_type_expected, timeout_expected=30):
+    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)

+ 13 - 9
tts/acapela/acapela.py

@@ -30,19 +30,23 @@ class Acapela(TTS):
         cache = kwargs.get('cache', None)
         file_path = kwargs.get('file_path', None)
         voice = kwargs.get('voice', None)
-
-        payload = {
-            "MyLanguages": language,
-            "MySelectedVoice": voice,
-            "MyTextForTTS": words,
-            "t": "1",
-            "SendToVaaS": ""
-        }
+        payload = Acapela.get_payload(language, voice, words)
         url = Acapela.get_audio_link(self.TTS_URL, payload)
-        return self.get_audio(file_path, cache, payload, url, self.TTS_CONTENT_TYPE, self.TTS_TIMEOUT_SEC)
+
+        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": ""
+        }

+ 7 - 3
tts/googletts/googletts.py

@@ -24,12 +24,16 @@ class Googletts(TTS):
         cache = kwargs.get('cache', None)
         file_path = kwargs.get('file_path', None)
         language = kwargs.get('language', None)
+        payload = Googletts.get_payload(language,words)
 
-        payload = {
+        return TTS.get_audio(file_path, cache, payload, self.TTS_URL)
+
+    @staticmethod
+    def get_payload(language, words):
+        return {
             "q": words,
             "tl": language,
             "ie": "UTF-8",
             "total": "1",
             "client": "tw-ob"
-        }
-        return self.get_audio(file_path, cache, payload, self.TTS_URL, self.TTS_CONTENT_TYPE, self.TTS_TIMEOUT_SEC)
+        }

+ 6 - 2
tts/voicerss/voicerss.py

@@ -24,10 +24,14 @@ class Voicerss(TTS):
         cache = kwargs.get('cache', None)
         file_path = kwargs.get('file_path', None)
         language = kwargs.get('language', None)
+        payload = Voicerss.get_payload(language, words)
 
-        payload = {
+        return TTS.get_audio(file_path, cache, payload, self.TTS_URL)
+
+    @staticmethod
+    def get_payload(language, words):
+        return {
             "src": words,
             "hl": language,
             "c": "mp3"
         }
-        return self.get_audio(file_path, cache, payload, self.TTS_URL, self.TTS_CONTENT_TYPE, self.TTS_TIMEOUT_SEC)

+ 7 - 5
tts/voxygen/voxygen.py

@@ -11,8 +11,6 @@ class Voxygen(TTS):
     TTS_VOICE_DEFAULT = "Michel"
     TTS_LANGUAGES_DEFAULT = "default"
     TTS_URL = "https://www.voxygen.fr/sites/all/modules/voxygen_voices/assets/proxy/index.php"
-    TTS_CONTENT_TYPE = "audio/mpeg"
-    TTS_TIMEOUT_SEC = 30
 
     def __init__(self):
         TTS.__init__(self)
@@ -25,10 +23,14 @@ class Voxygen(TTS):
         cache = kwargs.get('cache', None)
         file_path = kwargs.get('file_path', None)
         voice = kwargs.get('voice', None)
+        payload = Voxygen.get_payload(voice, words)
 
-        payload = {
+        return TTS.get_audio(file_path, cache, payload, self.TTS_URL)
+
+    @staticmethod
+    def get_payload(voice, words):
+        return {
             "method": "redirect",
             "text": words,
             "voice": voice
-        }
-        return self.get_audio(file_path, cache, payload, self.TTS_URL, self.TTS_CONTENT_TYPE, self.TTS_TIMEOUT_SEC)
+        }