From 29f4b73230515503507d2416d3078306f5968e93 Mon Sep 17 00:00:00 2001 From: Jeroen ter Heerdt Date: Fri, 1 Dec 2017 12:38:20 +0100 Subject: [PATCH] Microsoft Text-to-speech: Fixing missing en-gb support bug (#10429) * Fixing missing en-gb support bug * Microsoft TTS adding support for rate, volume, pitch and contour. * Microsoft TTS fixing support for jp-jp. * Fixing linting error on line 67 * make impossible things possible :tada: --- homeassistant/components/tts/microsoft.py | 36 +++++++++++++++++++---- requirements_all.txt | 2 +- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/tts/microsoft.py b/homeassistant/components/tts/microsoft.py index 4f4c5eb959d..3043e9f418b 100644 --- a/homeassistant/components/tts/microsoft.py +++ b/homeassistant/components/tts/microsoft.py @@ -15,14 +15,18 @@ import homeassistant.helpers.config_validation as cv CONF_GENDER = 'gender' CONF_OUTPUT = 'output' +CONF_RATE = 'rate' +CONF_VOLUME = 'volume' +CONF_PITCH = 'pitch' +CONF_CONTOUR = 'contour' -REQUIREMENTS = ["pycsspeechtts==1.0.1"] +REQUIREMENTS = ["pycsspeechtts==1.0.2"] _LOGGER = logging.getLogger(__name__) SUPPORTED_LANGUAGES = [ 'ar-eg', 'ar-sa', 'ca-es', 'cs-cz', 'da-dk', 'de-at', 'de-ch', 'de-de', - 'el-gr', 'en-au', 'en-ca', 'en-ga', 'en-ie', 'en-in', 'en-us', 'es-es', + 'el-gr', 'en-au', 'en-ca', 'en-gb', 'en-ie', 'en-in', 'en-us', 'es-es', 'en-mx', 'fi-fi', 'fr-ca', 'fr-ch', 'fr-fr', 'he-il', 'hi-in', 'hu-hu', 'id-id', 'it-it', 'ja-jp', 'ko-kr', 'nb-no', 'nl-nl', 'pl-pl', 'pt-br', 'pt-pt', 'ro-ro', 'ru-ru', 'sk-sk', 'sv-se', 'th-th', 'tr-tr', 'zh-cn', @@ -37,31 +41,48 @@ DEFAULT_LANG = 'en-us' DEFAULT_GENDER = 'Female' DEFAULT_TYPE = 'ZiraRUS' DEFAULT_OUTPUT = 'audio-16khz-128kbitrate-mono-mp3' +DEFAULT_RATE = 0 +DEFAULT_VOLUME = 0 +DEFAULT_PITCH = "default" +DEFAULT_CONTOUR = "" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_API_KEY): cv.string, vol.Optional(CONF_LANG, default=DEFAULT_LANG): vol.In(SUPPORTED_LANGUAGES), vol.Optional(CONF_GENDER, default=DEFAULT_GENDER): vol.In(GENDERS), vol.Optional(CONF_TYPE, default=DEFAULT_TYPE): cv.string, + vol.Optional(CONF_RATE, default=DEFAULT_RATE): + vol.All(vol.Coerce(int), vol.Range(-100, 100)), + vol.Optional(CONF_VOLUME, default=DEFAULT_VOLUME): + vol.All(vol.Coerce(int), vol.Range(-100, 100)), + vol.Optional(CONF_PITCH, default=DEFAULT_PITCH): cv.string, + vol.Optional(CONF_CONTOUR, default=DEFAULT_CONTOUR): cv.string, }) def get_engine(hass, config): """Set up Microsoft speech component.""" return MicrosoftProvider(config[CONF_API_KEY], config[CONF_LANG], - config[CONF_GENDER], config[CONF_TYPE]) + config[CONF_GENDER], config[CONF_TYPE], + config[CONF_RATE], config[CONF_VOLUME], + config[CONF_PITCH], config[CONF_CONTOUR]) class MicrosoftProvider(Provider): """The Microsoft speech API provider.""" - def __init__(self, apikey, lang, gender, ttype): + def __init__(self, apikey, lang, gender, ttype, rate, volume, + pitch, contour): """Init Microsoft TTS service.""" self._apikey = apikey self._lang = lang self._gender = gender self._type = ttype self._output = DEFAULT_OUTPUT + self._rate = "{}%".format(rate) + self._volume = "{}%".format(volume) + self._pitch = pitch + self._contour = contour self.name = 'Microsoft' @property @@ -81,8 +102,11 @@ class MicrosoftProvider(Provider): from pycsspeechtts import pycsspeechtts try: trans = pycsspeechtts.TTSTranslator(self._apikey) - data = trans.speak(language, self._gender, self._type, - self._output, message) + data = trans.speak(language=language, gender=self._gender, + voiceType=self._type, output=self._output, + rate=self._rate, volume=self._volume, + pitch=self._pitch, contour=self._contour, + text=message) except HTTPException as ex: _LOGGER.error("Error occurred for Microsoft TTS: %s", ex) return(None, None) diff --git a/requirements_all.txt b/requirements_all.txt index cfec88d925b..0cfead7f62c 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -632,7 +632,7 @@ pycmus==0.1.0 pycomfoconnect==0.3 # homeassistant.components.tts.microsoft -pycsspeechtts==1.0.1 +pycsspeechtts==1.0.2 # homeassistant.components.sensor.cups # pycups==1.9.73