Skip to content

Commit

Permalink
Improve config validation
Browse files Browse the repository at this point in the history
  • Loading branch information
definitio committed Nov 22, 2020
1 parent c91a2d4 commit 8a35054
Showing 1 changed file with 37 additions and 14 deletions.
51 changes: 37 additions & 14 deletions custom_components/rhvoice/tts.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
"""Support for the RHVoice tts service."""
import logging
from asyncio import TimeoutError as aioTimeoutError

import voluptuous as vol
from itertools import chain

import async_timeout
import voluptuous as vol
from aiohttp import ClientError
from homeassistant.components.tts import PLATFORM_SCHEMA, Provider
from homeassistant.const import CONF_HOST, CONF_PORT, CONF_TIMEOUT
Expand All @@ -19,14 +19,23 @@
CONF_VOICE = 'voice'
CONF_VOLUME = 'volume'

SUPPORT_LANGUAGES = ['en-US', 'ru-RU']
SUPPORTED_FORMATS = ['flac', 'mp3', 'opus', 'wav']
SUPPORTED_OPTIONS = [CONF_VOICE, CONF_FORMAT, CONF_RATE, CONF_PITCH, CONF_VOLUME]
SUPPORTED_LANGUAGES = {
'en-US': ('alan', 'bdl', 'clb', 'slt'),
'eo': ('spomenka',),
'ka-GE': ('natia',),
'ky-KG': ('azamat', 'nazgul'),
'pt-BR': ('letícia-f123',),
'ru-RU': ('aleksandr', 'anna', 'artemiy', 'elena', 'irina'),
'tt-RU': ('talgat',),
'uk-UA': ('anatol', 'natalia'),
}

DEFAULT_PORT = 8080

# Supported languages and voices: https://github.com/Olga-Yakovleva/RHVoice/wiki/Latest-version
DEFAULT_FORMAT = 'mp3' # wav|mp3|opus|flac
DEFAULT_LANG = 'ru-RU'
DEFAULT_PITCH = 50 # 0..100
DEFAULT_PORT = 8080
DEFAULT_RATE = 50 # 0..100
DEFAULT_VOICE = 'anna'
DEFAULT_VOLUME = 50 # 0..100
Expand All @@ -36,11 +45,21 @@
{
vol.Required(CONF_HOST): cv.string,
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
vol.Optional(CONF_FORMAT, default=DEFAULT_FORMAT): cv.string,
vol.Optional(CONF_PITCH, default=DEFAULT_PITCH): cv.positive_int,
vol.Optional(CONF_RATE, default=DEFAULT_RATE): cv.positive_int,
vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): cv.string,
vol.Optional(CONF_VOLUME, default=DEFAULT_VOLUME): cv.positive_int,
vol.Optional(CONF_FORMAT, default=DEFAULT_FORMAT): vol.All(
cv.string, vol.In(SUPPORTED_FORMATS)
),
vol.Optional(CONF_PITCH, default=DEFAULT_PITCH): vol.All(
vol.Coerce(int), vol.Range(0, 100)
),
vol.Optional(CONF_RATE, default=DEFAULT_RATE): vol.All(
vol.Coerce(int), vol.Range(0, 100)
),
vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): vol.All(
cv.string, vol.In(chain(*SUPPORTED_LANGUAGES.values()))
),
vol.Optional(CONF_VOLUME, default=DEFAULT_VOLUME): vol.All(
vol.Coerce(int), vol.Range(0, 100)
),
}
)

Expand All @@ -55,17 +74,21 @@ class RHVoiceProvider(Provider):

def __init__(self, hass, conf):
"""Init RHVoice TTS service."""
self.name = 'RHVoice'
self.hass = hass
self._url = f'http://{conf.get(CONF_HOST)}:{conf.get(CONF_PORT)}/say'
self._language = DEFAULT_LANG
self._codec = conf.get(CONF_FORMAT)
self._pitch = conf.get(CONF_PITCH)
self._rate = conf.get(CONF_RATE)
self._voice = conf.get(CONF_VOICE)
self._volume = conf.get(CONF_VOLUME)
self.name = 'RHVoice'
self._timeout = conf.get(CONF_TIMEOUT)

for language, voices in SUPPORTED_LANGUAGES.items():
if self._voice in voices:
self._language = language
break

@property
def default_language(self):
"""Return the default language."""
Expand All @@ -74,7 +97,7 @@ def default_language(self):
@property
def supported_languages(self):
"""Return list of supported languages."""
return SUPPORT_LANGUAGES
return list(SUPPORTED_LANGUAGES.keys())

@property
def supported_options(self):
Expand Down

0 comments on commit 8a35054

Please sign in to comment.