1 """Support for the yandex speechkit tts service."""
4 from http
import HTTPStatus
8 import voluptuous
as vol
12 PLATFORM_SCHEMA
as TTS_PLATFORM_SCHEMA,
19 _LOGGER = logging.getLogger(__name__)
21 YANDEX_API_URL =
"https://tts.voicetech.yandex.net/generate?"
23 SUPPORT_LANGUAGES = [
"ru-RU",
"en-US",
"tr-TR",
"uk-UK"]
25 SUPPORT_CODECS = [
"mp3",
"wav",
"opus"]
55 SUPPORTED_EMOTION = [
"good",
"evil",
"neutral"]
62 CONF_EMOTION =
"emotion"
65 DEFAULT_LANG =
"en-US"
67 DEFAULT_VOICE =
"zahar"
68 DEFAULT_EMOTION =
"neutral"
71 PLATFORM_SCHEMA = TTS_PLATFORM_SCHEMA.extend(
73 vol.Required(CONF_API_KEY): cv.string,
74 vol.Optional(CONF_LANG, default=DEFAULT_LANG): vol.In(SUPPORT_LANGUAGES),
75 vol.Optional(CONF_CODEC, default=DEFAULT_CODEC): vol.In(SUPPORT_CODECS),
76 vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): vol.In(SUPPORT_VOICES),
77 vol.Optional(CONF_EMOTION, default=DEFAULT_EMOTION): vol.In(SUPPORTED_EMOTION),
78 vol.Optional(CONF_SPEED, default=DEFAULT_SPEED): vol.Range(
79 min=MIN_SPEED, max=MAX_SPEED
84 SUPPORTED_OPTIONS = [CONF_CODEC, CONF_VOICE, CONF_EMOTION, CONF_SPEED]
88 """Set up VoiceRSS speech component."""
93 """VoiceRSS speech api provider."""
96 """Init VoiceRSS TTS service."""
98 self.
_codec_codec = conf.get(CONF_CODEC)
99 self.
_key_key = conf.get(CONF_API_KEY)
108 """Return the default language."""
113 """Return list of supported languages."""
114 return SUPPORT_LANGUAGES
118 """Return list of supported options."""
119 return SUPPORTED_OPTIONS
122 """Load TTS from yandex."""
124 actual_language = language
127 async
with asyncio.timeout(10):
130 "lang": actual_language,
131 "key": self.
_key_key,
132 "speaker": options.get(CONF_VOICE, self.
_speaker_speaker),
133 "format": options.get(CONF_CODEC, self.
_codec_codec),
134 "emotion": options.get(CONF_EMOTION, self.
_emotion_emotion),
135 "speed": options.get(CONF_SPEED, self.
_speed_speed),
138 request = await websession.get(YANDEX_API_URL, params=url_param)
140 if request.status != HTTPStatus.OK:
142 "Error %d on load URL %s", request.status, request.url
145 data = await request.read()
147 except (TimeoutError, aiohttp.ClientError):
148 _LOGGER.error(
"Timeout for yandex speech kit API")
151 return (self.
_codec_codec, data)
def async_get_tts_audio(self, message, language, options)
def supported_options(self)
def default_language(self)
def __init__(self, hass, conf)
def supported_languages(self)
def async_get_engine(hass, config, discovery_info=None)
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)