Add google cloud tts SSML + fix (#40203)

* Add SSML + fix

SSML option is added + pitch paramter fix + couple style code changes

* Remove redundant .get()

* Fix PITCH_SCHEMA, remove redundant .get of dict
pull/44411/head^2
Дубовик Максим 2020-12-20 06:40:43 +02:00 committed by GitHub
parent 1ae3bb6af5
commit 89fe232643
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 30 additions and 17 deletions

View File

@ -20,6 +20,7 @@ CONF_SPEED = "speed"
CONF_PITCH = "pitch"
CONF_GAIN = "gain"
CONF_PROFILES = "profiles"
CONF_TEXT_TYPE = "text_type"
SUPPORTED_LANGUAGES = [
"ar-XA",
@ -84,6 +85,9 @@ MIN_GAIN = -96.0
MAX_GAIN = 16.0
DEFAULT_GAIN = 0
SUPPORTED_TEXT_TYPES = ["text", "ssml"]
DEFAULT_TEXT_TYPE = "text"
SUPPORTED_PROFILES = [
"wearable-class-device",
"handset-class-device",
@ -103,6 +107,7 @@ SUPPORTED_OPTIONS = [
CONF_PITCH,
CONF_GAIN,
CONF_PROFILES,
CONF_TEXT_TYPE,
]
GENDER_SCHEMA = vol.All(
@ -116,6 +121,7 @@ SPEED_SCHEMA = vol.All(vol.Coerce(float), vol.Clamp(min=MIN_SPEED, max=MAX_SPEED
PITCH_SCHEMA = vol.All(vol.Coerce(float), vol.Clamp(min=MIN_PITCH, max=MAX_PITCH))
GAIN_SCHEMA = vol.All(vol.Coerce(float), vol.Clamp(min=MIN_GAIN, max=MAX_GAIN))
PROFILES_SCHEMA = vol.All(cv.ensure_list, [vol.In(SUPPORTED_PROFILES)])
TEXT_TYPE_SCHEMA = vol.All(vol.Lower, vol.In(SUPPORTED_TEXT_TYPES))
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
@ -128,6 +134,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
vol.Optional(CONF_PITCH, default=DEFAULT_PITCH): PITCH_SCHEMA,
vol.Optional(CONF_GAIN, default=DEFAULT_GAIN): GAIN_SCHEMA,
vol.Optional(CONF_PROFILES, default=[]): PROFILES_SCHEMA,
vol.Optional(CONF_TEXT_TYPE, default=DEFAULT_TEXT_TYPE): TEXT_TYPE_SCHEMA,
}
)
@ -144,14 +151,15 @@ async def async_get_engine(hass, config, discovery_info=None):
return GoogleCloudTTSProvider(
hass,
key_file,
config.get(CONF_LANG),
config.get(CONF_GENDER),
config.get(CONF_VOICE),
config.get(CONF_ENCODING),
config.get(CONF_SPEED),
config.get(CONF_PITCH),
config.get(CONF_GAIN),
config.get(CONF_PROFILES),
config[CONF_LANG],
config[CONF_GENDER],
config[CONF_VOICE],
config[CONF_ENCODING],
config[CONF_SPEED],
config[CONF_PITCH],
config[CONF_GAIN],
config[CONF_PROFILES],
config[CONF_TEXT_TYPE],
)
@ -170,6 +178,7 @@ class GoogleCloudTTSProvider(Provider):
pitch=0,
gain=0,
profiles=None,
text_type=DEFAULT_TEXT_TYPE,
):
"""Init Google Cloud TTS service."""
self.hass = hass
@ -182,6 +191,7 @@ class GoogleCloudTTSProvider(Provider):
self._pitch = pitch
self._gain = gain
self._profiles = profiles
self._text_type = text_type
if key_file:
self._client = texttospeech.TextToSpeechClient.from_service_account_json(
@ -216,6 +226,7 @@ class GoogleCloudTTSProvider(Provider):
CONF_PITCH: self._pitch,
CONF_GAIN: self._gain,
CONF_PROFILES: self._profiles,
CONF_TEXT_TYPE: self._text_type,
}
async def async_get_tts_audio(self, message, language, options=None):
@ -224,11 +235,12 @@ class GoogleCloudTTSProvider(Provider):
{
vol.Optional(CONF_GENDER, default=self._gender): GENDER_SCHEMA,
vol.Optional(CONF_VOICE, default=self._voice): VOICE_SCHEMA,
vol.Optional(CONF_ENCODING, default=DEFAULT_ENCODING): SCHEMA_ENCODING,
vol.Optional(CONF_ENCODING, default=self._encoding): SCHEMA_ENCODING,
vol.Optional(CONF_SPEED, default=self._speed): SPEED_SCHEMA,
vol.Optional(CONF_PITCH, default=self._speed): SPEED_SCHEMA,
vol.Optional(CONF_GAIN, default=DEFAULT_GAIN): GAIN_SCHEMA,
vol.Optional(CONF_PROFILES, default=[]): PROFILES_SCHEMA,
vol.Optional(CONF_PITCH, default=self._pitch): PITCH_SCHEMA,
vol.Optional(CONF_GAIN, default=self._gain): GAIN_SCHEMA,
vol.Optional(CONF_PROFILES, default=self._profiles): PROFILES_SCHEMA,
vol.Optional(CONF_TEXT_TYPE, default=self._text_type): TEXT_TYPE_SCHEMA,
}
)
options = options_schema(options)
@ -239,8 +251,9 @@ class GoogleCloudTTSProvider(Provider):
language = _voice[:5]
try:
params = {options[CONF_TEXT_TYPE]: message}
# pylint: disable=no-member
synthesis_input = texttospeech.types.SynthesisInput(text=message)
synthesis_input = texttospeech.types.SynthesisInput(**params)
voice = texttospeech.types.VoiceSelectionParams(
language_code=language,
@ -250,10 +263,10 @@ class GoogleCloudTTSProvider(Provider):
audio_config = texttospeech.types.AudioConfig(
audio_encoding=texttospeech.enums.AudioEncoding[_encoding],
speaking_rate=options.get(CONF_SPEED),
pitch=options.get(CONF_PITCH),
volume_gain_db=options.get(CONF_GAIN),
effects_profile_id=options.get(CONF_PROFILES),
speaking_rate=options[CONF_SPEED],
pitch=options[CONF_PITCH],
volume_gain_db=options[CONF_GAIN],
effects_profile_id=options[CONF_PROFILES],
)
# pylint: enable=no-member