acapela.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import logging
  2. import re
  3. import requests
  4. from core import AudioPlayer
  5. from tts import TTS
  6. logging.basicConfig()
  7. logger = logging.getLogger("kalliope")
  8. class Acapela(TTS):
  9. TTS_LANGUAGES_DEFAULT = 'sonid15'
  10. TTS_VOICE_DEFAULT = 'Manon'
  11. TTS_URL = "http://www.acapela-group.com/demo-tts/DemoHTML5Form_V2_fr.php"
  12. TTS_CONTENT_TYPE = "audio/mpeg"
  13. TTS_TIMEOUT_SEC = 30
  14. def __init__(self):
  15. TTS.__init__(self)
  16. def say(self, words=None, language=TTS_LANGUAGES_DEFAULT, voice=TTS_VOICE_DEFAULT, cache=True):
  17. self.say_generic(cache, language, words, self.get_audio_acapela, AudioPlayer.PLAYER_MP3, AudioPlayer.AUDIO_MP3_22050_FREQUENCY, voice)
  18. def get_audio_acapela(self, **kwargs):
  19. language = kwargs.get('language', None)
  20. words = kwargs.get('words', None)
  21. cache = kwargs.get('cache', None)
  22. file_path = kwargs.get('file_path', None)
  23. voice = kwargs.get('voice', None)
  24. payload = Acapela.get_payload(language, voice, words)
  25. url = Acapela.get_audio_link(self.TTS_URL, payload)
  26. return TTS.get_audio(file_path, cache, payload, url)
  27. @staticmethod
  28. def get_audio_link(url, payload, timeout_expected=30):
  29. r = requests.post(url, payload, timeout=timeout_expected)
  30. data = r.content
  31. return re.search("(?P<url>https?://[^\s]+).mp3", data).group(0)
  32. @staticmethod
  33. def get_payload(language, voice, words):
  34. return {
  35. "MyLanguages": language,
  36. "MySelectedVoice": voice,
  37. "MyTextForTTS": words,
  38. "t": "1",
  39. "SendToVaaS": ""
  40. }