This commit is contained in:
Paulus Schoutsen
2019-07-31 12:25:30 -07:00
parent da05dfe708
commit 4de97abc3a
2676 changed files with 163166 additions and 140084 deletions

View File

@@ -8,15 +8,15 @@ import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__)
CONF_URL = 'watson_url'
CONF_APIKEY = 'watson_apikey'
ATTR_CREDENTIALS = 'credentials'
CONF_URL = "watson_url"
CONF_APIKEY = "watson_apikey"
ATTR_CREDENTIALS = "credentials"
DEFAULT_URL = 'https://stream.watsonplatform.net/text-to-speech/api'
DEFAULT_URL = "https://stream.watsonplatform.net/text-to-speech/api"
CONF_VOICE = 'voice'
CONF_OUTPUT_FORMAT = 'output_format'
CONF_TEXT_TYPE = 'text'
CONF_VOICE = "voice"
CONF_OUTPUT_FORMAT = "output_format"
CONF_TEXT_TYPE = "text"
# List from https://tinyurl.com/watson-tts-docs
SUPPORTED_VOICES = [
@@ -52,73 +52,68 @@ SUPPORTED_VOICES = [
"it-IT_FrancescaV3Voice",
"ja-JP_EmiVoice",
"pt-BR_IsabelaVoice",
"pt-BR_IsabelaV3Voice"
"pt-BR_IsabelaV3Voice",
]
SUPPORTED_OUTPUT_FORMATS = [
'audio/flac',
'audio/mp3',
'audio/mpeg',
'audio/ogg',
'audio/ogg;codecs=opus',
'audio/ogg;codecs=vorbis',
'audio/wav'
"audio/flac",
"audio/mp3",
"audio/mpeg",
"audio/ogg",
"audio/ogg;codecs=opus",
"audio/ogg;codecs=vorbis",
"audio/wav",
]
CONTENT_TYPE_EXTENSIONS = {
'audio/flac': 'flac',
'audio/mp3': 'mp3',
'audio/mpeg': 'mp3',
'audio/ogg': 'ogg',
'audio/ogg;codecs=opus': 'ogg',
'audio/ogg;codecs=vorbis': 'ogg',
'audio/wav': 'wav',
"audio/flac": "flac",
"audio/mp3": "mp3",
"audio/mpeg": "mp3",
"audio/ogg": "ogg",
"audio/ogg;codecs=opus": "ogg",
"audio/ogg;codecs=vorbis": "ogg",
"audio/wav": "wav",
}
DEFAULT_VOICE = 'en-US_AllisonVoice'
DEFAULT_OUTPUT_FORMAT = 'audio/mp3'
DEFAULT_VOICE = "en-US_AllisonVoice"
DEFAULT_OUTPUT_FORMAT = "audio/mp3"
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_URL, default=DEFAULT_URL): cv.string,
vol.Required(CONF_APIKEY): cv.string,
vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): vol.In(SUPPORTED_VOICES),
vol.Optional(CONF_OUTPUT_FORMAT, default=DEFAULT_OUTPUT_FORMAT):
vol.In(SUPPORTED_OUTPUT_FORMATS),
})
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Optional(CONF_URL, default=DEFAULT_URL): cv.string,
vol.Required(CONF_APIKEY): cv.string,
vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): vol.In(SUPPORTED_VOICES),
vol.Optional(CONF_OUTPUT_FORMAT, default=DEFAULT_OUTPUT_FORMAT): vol.In(
SUPPORTED_OUTPUT_FORMATS
),
}
)
def get_engine(hass, config):
"""Set up IBM Watson TTS component."""
from ibm_watson import TextToSpeechV1
service = TextToSpeechV1(
url=config[CONF_URL],
iam_apikey=config[CONF_APIKEY]
)
service = TextToSpeechV1(url=config[CONF_URL], iam_apikey=config[CONF_APIKEY])
supported_languages = list({s[:5] for s in SUPPORTED_VOICES})
default_voice = config[CONF_VOICE]
output_format = config[CONF_OUTPUT_FORMAT]
return WatsonTTSProvider(
service, supported_languages, default_voice, output_format)
return WatsonTTSProvider(service, supported_languages, default_voice, output_format)
class WatsonTTSProvider(Provider):
"""IBM Watson TTS api provider."""
def __init__(self,
service,
supported_languages,
default_voice,
output_format):
def __init__(self, service, supported_languages, default_voice, output_format):
"""Initialize Watson TTS provider."""
self.service = service
self.supported_langs = supported_languages
self.default_lang = default_voice[:5]
self.default_voice = default_voice
self.output_format = output_format
self.name = 'Watson TTS'
self.name = "Watson TTS"
@property
def supported_languages(self):
@@ -143,8 +138,7 @@ class WatsonTTSProvider(Provider):
def get_tts_audio(self, message, language=None, options=None):
"""Request TTS file from Watson TTS."""
response = self.service.synthesize(
message, accept=self.output_format,
voice=self.default_voice).get_result()
message, accept=self.output_format, voice=self.default_voice
).get_result()
return (CONTENT_TYPE_EXTENSIONS[self.output_format],
response.content)
return (CONTENT_TYPE_EXTENSIONS[self.output_format], response.content)