mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Add options feature to Baidu TTS. (#11462)
* 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.
This commit is contained in:
parent
0e710099e0
commit
e0e2f739ba
@ -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
|
For more details about this component, please refer to the documentation at
|
||||||
https://home-assistant.io/components/tts.baidu/
|
https://home-assistant.io/components/tts.baidu/
|
||||||
@ -8,22 +8,17 @@ https://home-assistant.io/components/tts.baidu/
|
|||||||
import logging
|
import logging
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.components.tts import Provider, CONF_LANG, PLATFORM_SCHEMA
|
||||||
from homeassistant.const import CONF_API_KEY
|
from homeassistant.const import CONF_API_KEY
|
||||||
from homeassistant.components.tts import Provider, PLATFORM_SCHEMA, CONF_LANG
|
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
|
|
||||||
REQUIREMENTS = ["baidu-aip==1.6.6"]
|
REQUIREMENTS = ["baidu-aip==1.6.6"]
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
SUPPORTED_LANGUAGES = ['zh']
|
||||||
SUPPORT_LANGUAGES = [
|
|
||||||
'zh',
|
|
||||||
]
|
|
||||||
DEFAULT_LANG = 'zh'
|
DEFAULT_LANG = 'zh'
|
||||||
|
|
||||||
|
|
||||||
CONF_APP_ID = 'app_id'
|
CONF_APP_ID = 'app_id'
|
||||||
CONF_SECRET_KEY = 'secret_key'
|
CONF_SECRET_KEY = 'secret_key'
|
||||||
CONF_SPEED = 'speed'
|
CONF_SPEED = 'speed'
|
||||||
@ -32,20 +27,39 @@ CONF_VOLUME = 'volume'
|
|||||||
CONF_PERSON = 'person'
|
CONF_PERSON = 'person'
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
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_APP_ID): cv.string,
|
||||||
vol.Required(CONF_API_KEY): cv.string,
|
vol.Required(CONF_API_KEY): cv.string,
|
||||||
vol.Required(CONF_SECRET_KEY): cv.string,
|
vol.Required(CONF_SECRET_KEY): cv.string,
|
||||||
vol.Optional(CONF_SPEED, default=5): vol.All(
|
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.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.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.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):
|
def get_engine(hass, config):
|
||||||
"""Set up Baidu TTS component."""
|
"""Set up Baidu TTS component."""
|
||||||
@ -69,10 +83,10 @@ class BaiduTTSProvider(Provider):
|
|||||||
}
|
}
|
||||||
|
|
||||||
self._speech_conf_data = {
|
self._speech_conf_data = {
|
||||||
'spd': conf.get(CONF_SPEED),
|
_OPTIONS[CONF_PERSON]: conf.get(CONF_PERSON),
|
||||||
'pit': conf.get(CONF_PITCH),
|
_OPTIONS[CONF_PITCH]: conf.get(CONF_PITCH),
|
||||||
'vol': conf.get(CONF_VOLUME),
|
_OPTIONS[CONF_SPEED]: conf.get(CONF_SPEED),
|
||||||
'per': conf.get(CONF_PERSON),
|
_OPTIONS[CONF_VOLUME]: conf.get(CONF_VOLUME),
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -82,8 +96,23 @@ class BaiduTTSProvider(Provider):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def supported_languages(self):
|
def supported_languages(self):
|
||||||
"""Return list of supported languages."""
|
"""Return a list of supported languages."""
|
||||||
return SUPPORT_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):
|
def get_tts_audio(self, message, language, options=None):
|
||||||
"""Load TTS from BaiduTTS."""
|
"""Load TTS from BaiduTTS."""
|
||||||
@ -94,15 +123,26 @@ class BaiduTTSProvider(Provider):
|
|||||||
self._app_data['secretkey']
|
self._app_data['secretkey']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if options is None:
|
||||||
result = aip_speech.synthesis(
|
result = aip_speech.synthesis(
|
||||||
message, language, 1, self._speech_conf_data)
|
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):
|
if isinstance(result, dict):
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
"Baidu TTS error-- err_no:%d; err_msg:%s; err_detail:%s",
|
"Baidu TTS error-- err_no:%d; err_msg:%s; err_detail:%s",
|
||||||
result['err_no'],
|
result['err_no'],
|
||||||
result['err_msg'],
|
result['err_msg'],
|
||||||
result['err_detail'])
|
result['err_detail']
|
||||||
return (None, None)
|
)
|
||||||
|
return None, None
|
||||||
|
|
||||||
return (self._codec, result)
|
return self._codec, result
|
||||||
|
Loading…
x
Reference in New Issue
Block a user