Home Assistant Unofficial Reference 2024.12.1
tts.py
Go to the documentation of this file.
1 """Support for the MaryTTS service."""
2 
3 from __future__ import annotations
4 
5 from speak2mary import MaryTTS
6 import voluptuous as vol
7 
9  CONF_LANG,
10  PLATFORM_SCHEMA as TTS_PLATFORM_SCHEMA,
11  Provider,
12 )
13 from homeassistant.const import CONF_EFFECT, CONF_HOST, CONF_PORT
15 
16 CONF_VOICE = "voice"
17 CONF_CODEC = "codec"
18 
19 SUPPORT_LANGUAGES = MaryTTS.supported_locales()
20 SUPPORT_CODEC = MaryTTS.supported_codecs()
21 SUPPORT_OPTIONS = [CONF_EFFECT]
22 SUPPORT_EFFECTS = MaryTTS.supported_effects().keys()
23 
24 DEFAULT_HOST = "localhost"
25 DEFAULT_PORT = 59125
26 DEFAULT_LANG = "en_US"
27 DEFAULT_VOICE = "cmu-slt-hsmm"
28 DEFAULT_CODEC = "WAVE_FILE"
29 DEFAULT_EFFECTS: dict[str, str] = {}
30 
31 MAP_MARYTTS_CODEC = {"WAVE_FILE": "wav", "AIFF_FILE": "aiff", "AU_FILE": "au"}
32 
33 PLATFORM_SCHEMA = TTS_PLATFORM_SCHEMA.extend(
34  {
35  vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string,
36  vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
37  vol.Optional(CONF_LANG, default=DEFAULT_LANG): vol.In(SUPPORT_LANGUAGES),
38  vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): cv.string,
39  vol.Optional(CONF_CODEC, default=DEFAULT_CODEC): vol.In(SUPPORT_CODEC),
40  vol.Optional(CONF_EFFECT, default=DEFAULT_EFFECTS): {
41  vol.All(cv.string, vol.In(SUPPORT_EFFECTS)): cv.string
42  },
43  }
44 )
45 
46 
47 def get_engine(hass, config, discovery_info=None):
48  """Set up MaryTTS speech component."""
49  return MaryTTSProvider(hass, config)
50 
51 
52 class MaryTTSProvider(Provider):
53  """MaryTTS speech api provider."""
54 
55  def __init__(self, hass, conf):
56  """Init MaryTTS TTS service."""
57  self.hasshass = hass
58  self._mary_mary = MaryTTS(
59  conf.get(CONF_HOST),
60  conf.get(CONF_PORT),
61  conf.get(CONF_CODEC),
62  conf.get(CONF_LANG),
63  conf.get(CONF_VOICE),
64  )
65  self._effects_effects = conf.get(CONF_EFFECT)
66  self.namename = "MaryTTS"
67 
68  @property
69  def default_language(self):
70  """Return the default language."""
71  return self._mary_mary.locale
72 
73  @property
75  """Return list of supported languages."""
76  return SUPPORT_LANGUAGES
77 
78  @property
79  def default_options(self):
80  """Return dict include default options."""
81  return {CONF_EFFECT: self._effects_effects}
82 
83  @property
84  def supported_options(self):
85  """Return a list of supported options."""
86  return SUPPORT_OPTIONS
87 
88  def get_tts_audio(self, message, language, options):
89  """Load TTS from MaryTTS."""
90  effects = options[CONF_EFFECT]
91 
92  data = self._mary_mary.speak(message, effects)
93  audiotype = MAP_MARYTTS_CODEC[self._mary_mary.codec]
94 
95  return audiotype, data
def get_tts_audio(self, message, language, options)
Definition: tts.py:88
def get_engine(hass, config, discovery_info=None)
Definition: tts.py:47