Add options feature to Baidu TTS. ()

* Add options feature to Baidu TTS.

Add options feature: supported_options() and default_options() added, get_tts_audio updated to accommodate options.

* Add options feature to Baidu TTS.

Add options feature: supported_options() and default_options() added, get_tts_audio updated to accommodate options.

* Fix style

* Fix style

Change the order of content of lists and dictionaries.

* Fix style

Changed order of imports, and fixed grammar errors.
pull/11534/head
Yien Xu 2018-01-09 00:22:50 +08:00 committed by Pascal Vizeli
parent 0e710099e0
commit e0e2f739ba
1 changed files with 67 additions and 27 deletions
homeassistant/components/tts

View File

@ -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