diff --git a/homeassistant/components/tts/baidu.py b/homeassistant/components/tts/baidu.py index 6f86a42bbc5..609f38454fe 100644 --- a/homeassistant/components/tts/baidu.py +++ b/homeassistant/components/tts/baidu.py @@ -1,5 +1,5 @@ """ -Support for the baidu speech service. +Support for Baidu speech service. For more details about this component, please refer to the documentation at https://home-assistant.io/components/tts.baidu/ @@ -8,22 +8,17 @@ https://home-assistant.io/components/tts.baidu/ import logging import voluptuous as vol +from homeassistant.components.tts import Provider, CONF_LANG, PLATFORM_SCHEMA from homeassistant.const import CONF_API_KEY -from homeassistant.components.tts import Provider, PLATFORM_SCHEMA, CONF_LANG import homeassistant.helpers.config_validation as cv - REQUIREMENTS = ["baidu-aip==1.6.6"] _LOGGER = logging.getLogger(__name__) - -SUPPORT_LANGUAGES = [ - 'zh', -] +SUPPORTED_LANGUAGES = ['zh'] DEFAULT_LANG = 'zh' - CONF_APP_ID = 'app_id' CONF_SECRET_KEY = 'secret_key' CONF_SPEED = 'speed' @@ -32,20 +27,39 @@ CONF_VOLUME = 'volume' CONF_PERSON = 'person' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Optional(CONF_LANG, default=DEFAULT_LANG): vol.In(SUPPORT_LANGUAGES), + vol.Optional(CONF_LANG, default=DEFAULT_LANG): vol.In(SUPPORTED_LANGUAGES), vol.Required(CONF_APP_ID): cv.string, vol.Required(CONF_API_KEY): cv.string, vol.Required(CONF_SECRET_KEY): cv.string, vol.Optional(CONF_SPEED, default=5): vol.All( - vol.Coerce(int), vol.Range(min=0, max=9)), + vol.Coerce(int), vol.Range(min=0, max=9) + ), vol.Optional(CONF_PITCH, default=5): vol.All( - vol.Coerce(int), vol.Range(min=0, max=9)), + vol.Coerce(int), vol.Range(min=0, max=9) + ), vol.Optional(CONF_VOLUME, default=5): vol.All( - vol.Coerce(int), vol.Range(min=0, max=15)), + vol.Coerce(int), vol.Range(min=0, max=15) + ), vol.Optional(CONF_PERSON, default=0): vol.All( - vol.Coerce(int), vol.Range(min=0, max=4)), + vol.Coerce(int), vol.Range(min=0, max=4) + ), }) +# Keys are options in the config file, and Values are options +# required by Baidu TTS API. +_OPTIONS = { + CONF_PERSON: 'per', + CONF_PITCH: 'pit', + CONF_SPEED: 'spd', + CONF_VOLUME: 'vol', +} +SUPPORTED_OPTIONS = [ + CONF_PERSON, + CONF_PITCH, + CONF_SPEED, + CONF_VOLUME, +] + def get_engine(hass, config): """Set up Baidu TTS component.""" @@ -66,14 +80,14 @@ class BaiduTTSProvider(Provider): 'appid': conf.get(CONF_APP_ID), 'apikey': conf.get(CONF_API_KEY), 'secretkey': conf.get(CONF_SECRET_KEY), - } + } self._speech_conf_data = { - 'spd': conf.get(CONF_SPEED), - 'pit': conf.get(CONF_PITCH), - 'vol': conf.get(CONF_VOLUME), - 'per': conf.get(CONF_PERSON), - } + _OPTIONS[CONF_PERSON]: conf.get(CONF_PERSON), + _OPTIONS[CONF_PITCH]: conf.get(CONF_PITCH), + _OPTIONS[CONF_SPEED]: conf.get(CONF_SPEED), + _OPTIONS[CONF_VOLUME]: conf.get(CONF_VOLUME), + } @property def default_language(self): @@ -82,8 +96,23 @@ class BaiduTTSProvider(Provider): @property def supported_languages(self): - """Return list of supported languages.""" - return SUPPORT_LANGUAGES + """Return a list of supported languages.""" + return SUPPORTED_LANGUAGES + + @property + def default_options(self): + """Return a dict including default options.""" + return { + CONF_PERSON: self._speech_conf_data[_OPTIONS[CONF_PERSON]], + CONF_PITCH: self._speech_conf_data[_OPTIONS[CONF_PITCH]], + CONF_SPEED: self._speech_conf_data[_OPTIONS[CONF_SPEED]], + CONF_VOLUME: self._speech_conf_data[_OPTIONS[CONF_VOLUME]], + } + + @property + def supported_options(self): + """Return a list of supported options.""" + return SUPPORTED_OPTIONS def get_tts_audio(self, message, language, options=None): """Load TTS from BaiduTTS.""" @@ -92,17 +121,28 @@ class BaiduTTSProvider(Provider): self._app_data['appid'], self._app_data['apikey'], self._app_data['secretkey'] - ) + ) - result = aip_speech.synthesis( - message, language, 1, self._speech_conf_data) + if options is None: + result = aip_speech.synthesis( + message, language, 1, self._speech_conf_data + ) + else: + speech_data = self._speech_conf_data.copy() + for key, value in options.items(): + speech_data[_OPTIONS[key]] = value + + result = aip_speech.synthesis( + message, language, 1, speech_data + ) if isinstance(result, dict): _LOGGER.error( "Baidu TTS error-- err_no:%d; err_msg:%s; err_detail:%s", result['err_no'], result['err_msg'], - result['err_detail']) - return (None, None) + result['err_detail'] + ) + return None, None - return (self._codec, result) + return self._codec, result