Browse Source

Acapela tts

Unknown 8 years ago
parent
commit
ba806953cd
5 changed files with 47 additions and 1 deletions
  1. 1 0
      core/AudioPlayer.py
  2. 2 1
      tts/TTS.py
  3. 1 0
      tts/__init__.py
  4. 1 0
      tts/acapela/__init__.py
  5. 42 0
      tts/acapela/acapela.py

+ 1 - 0
core/AudioPlayer.py

@@ -17,6 +17,7 @@ class AudioPlayer:
     AUDIO_MP3_BUFFER = 2048
 
     AUDIO_MP3_44100_FREQUENCY = 44100
+    AUDIO_MP3_22050_FREQUENCY = 22050
 
     AUDIO_DEFAULT_VOLUME = 0.8
 

+ 2 - 1
tts/TTS.py

@@ -5,6 +5,7 @@ import logging
 import os
 import requests
 import sys
+import re
 from core import FileManager
 
 logging.basicConfig()
@@ -24,7 +25,7 @@ class TTS:
     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, words, file_path, cache):
+        if get_audio_specific(language, words, file_path, cache, voice):
             self.play_audio(file_path, audio_type, audio_frequency, cache)
 
     @staticmethod

+ 1 - 0
tts/__init__.py

@@ -3,3 +3,4 @@ from voxygen import Voxygen
 from pico2wave import Pico2wave
 from voicerss import Voicerss
 from googletts import Googletts
+from acapela import Acapela

+ 1 - 0
tts/acapela/__init__.py

@@ -0,0 +1 @@
+from acapela import Acapela

+ 42 - 0
tts/acapela/acapela.py

@@ -0,0 +1,42 @@
+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, language, words, file_path, cache, voice):
+        payload = {
+            "MyLanguages": language,
+            "MySelectedVoice": voice,
+            "MyTextForTTS": words,
+            "t": "1",
+            "SendToVaaS": ""
+        }
+        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)
+
+    @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)