1 """Support for the voicerss speech service."""
4 from http
import HTTPStatus
8 import voluptuous
as vol
12 PLATFORM_SCHEMA
as TTS_PLATFORM_SCHEMA,
19 _LOGGER = logging.getLogger(__name__)
21 VOICERSS_API_URL =
"https://api.voicerss.org/"
25 b
"The subscription is expired or requests count limitation is exceeded!",
26 b
"The request content length is too large!",
27 b
"The language does not support!",
28 b
"The language is not specified!",
29 b
"The text is not specified!",
30 b
"The API key is not available!",
31 b
"The API key is not specified!",
32 b
"The subscription does not support SSML!",
87 SUPPORT_CODECS = [
"mp3",
"wav",
"aac",
"ogg",
"caf"]
101 "12khz_16bit_stereo",
105 "16khz_16bit_stereo",
109 "22khz_16bit_stereo",
113 "24khz_16bit_stereo",
117 "32khz_16bit_stereo",
121 "44khz_16bit_stereo",
125 "48khz_16bit_stereo",
145 CONF_FORMAT =
"format"
147 DEFAULT_LANG =
"en-us"
148 DEFAULT_CODEC =
"mp3"
149 DEFAULT_FORMAT =
"8khz_8bit_mono"
152 PLATFORM_SCHEMA = TTS_PLATFORM_SCHEMA.extend(
154 vol.Required(CONF_API_KEY): cv.string,
155 vol.Optional(CONF_LANG, default=DEFAULT_LANG): vol.In(SUPPORT_LANGUAGES),
156 vol.Optional(CONF_CODEC, default=DEFAULT_CODEC): vol.In(SUPPORT_CODECS),
157 vol.Optional(CONF_FORMAT, default=DEFAULT_FORMAT): vol.In(SUPPORT_FORMATS),
163 """Set up VoiceRSS TTS component."""
168 """The VoiceRSS speech API provider."""
171 """Init VoiceRSS TTS service."""
178 "key": conf[CONF_API_KEY],
179 "hl": conf[CONF_LANG],
180 "c": (conf[CONF_CODEC]).upper(),
181 "f": conf[CONF_FORMAT],
186 """Return the default language."""
187 return self.
_lang_lang
191 """Return list of supported languages."""
192 return SUPPORT_LANGUAGES
195 """Load TTS from VoiceRSS."""
199 form_data[
"src"] = message
200 form_data[
"hl"] = language
203 async
with asyncio.timeout(10):
204 request = await websession.post(VOICERSS_API_URL, data=form_data)
206 if request.status != HTTPStatus.OK:
208 "Error %d on load url %s", request.status, request.url
211 data = await request.read()
213 if data
in ERROR_MSG:
214 _LOGGER.error(
"Error receive %s from VoiceRSS",
str(data,
"utf-8"))
217 except (TimeoutError, aiohttp.ClientError):
218 _LOGGER.error(
"Timeout for VoiceRSS API")
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)