1 """Support for IBM Watson TTS integration."""
5 from ibm_cloud_sdk_core.authenticators
import IAMAuthenticator
6 from ibm_watson
import TextToSpeechV1
7 import voluptuous
as vol
10 PLATFORM_SCHEMA
as TTS_PLATFORM_SCHEMA,
15 _LOGGER = logging.getLogger(__name__)
17 CONF_URL =
"watson_url"
18 CONF_APIKEY =
"watson_apikey"
20 DEFAULT_URL =
"https://api.us-south.text-to-speech.watson.cloud.ibm.com"
23 CONF_OUTPUT_FORMAT =
"output_format"
24 CONF_TEXT_TYPE =
"text"
28 "de-DE_BirgitV2Voice",
29 "de-DE_BirgitV3Voice",
31 "de-DE_DieterV2Voice",
32 "de-DE_DieterV3Voice",
35 "en-AU_HeidiExpressive",
36 "en-AU_JackExpressive",
37 "en-GB_CharlotteV3Voice",
41 "en-US_AllisonExpressive",
42 "en-US_AllisonV2Voice",
43 "en-US_AllisonV3Voice",
46 "en-US_EmmaExpressive",
49 "en-US_LisaExpressive",
53 "en-US_MichaelExpressive",
54 "en-US_MichaelV2Voice",
55 "en-US_MichaelV3Voice",
57 "en-US_OliviaV3Voice",
58 "es-ES_EnriqueV3Voice",
66 "fr-CA_LouiseV3Voice",
67 "fr-FR_NicolasV3Voice",
70 "it-IT_FrancescaV2Voice",
71 "it-IT_FrancescaV3Voice",
72 "it-IT_FrancescaVoice",
77 "pt-BR_IsabelaV3Voice",
92 "it-IT_FrancescaVoice",
97 SUPPORTED_OUTPUT_FORMATS = [
102 "audio/ogg;codecs=opus",
103 "audio/ogg;codecs=vorbis",
107 CONTENT_TYPE_EXTENSIONS = {
108 "audio/flac":
"flac",
112 "audio/ogg;codecs=opus":
"ogg",
113 "audio/ogg;codecs=vorbis":
"ogg",
117 DEFAULT_VOICE =
"en-US_AllisonV3Voice"
118 DEFAULT_OUTPUT_FORMAT =
"audio/mp3"
120 PLATFORM_SCHEMA = TTS_PLATFORM_SCHEMA.extend(
122 vol.Optional(CONF_URL, default=DEFAULT_URL): cv.string,
123 vol.Required(CONF_APIKEY): cv.string,
124 vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): vol.In(SUPPORTED_VOICES),
125 vol.Optional(CONF_OUTPUT_FORMAT, default=DEFAULT_OUTPUT_FORMAT): vol.In(
126 SUPPORTED_OUTPUT_FORMATS
133 """Set up IBM Watson TTS component."""
135 authenticator = IAMAuthenticator(config[CONF_APIKEY])
136 service = TextToSpeechV1(authenticator)
137 service.set_service_url(config[CONF_URL])
139 supported_languages =
list({s[:5]
for s
in SUPPORTED_VOICES})
140 default_voice = config[CONF_VOICE]
141 output_format = config[CONF_OUTPUT_FORMAT]
142 service.set_default_headers({
"x-watson-learning-opt-out":
"true"})
144 if default_voice
in DEPRECATED_VOICES:
146 "Watson TTS voice %s is deprecated, it may be removed in the future",
150 return WatsonTTSProvider(service, supported_languages, default_voice, output_format)
154 """IBM Watson TTS api provider."""
156 def __init__(self, service, supported_languages, default_voice, output_format):
157 """Initialize Watson TTS provider."""
167 """Return a list of supported languages."""
172 """Return the default language."""
177 """Return dict include default options."""
182 """Return a list of supported options."""
186 """Request TTS file from Watson TTS."""
187 response = self.
serviceservice.synthesize(
188 text=message, accept=self.
output_formatoutput_format, voice=options[CONF_VOICE]
191 return (CONTENT_TYPE_EXTENSIONS[self.
output_formatoutput_format], response.content)
def __init__(self, service, supported_languages, default_voice, output_format)
def supported_languages(self)
def default_options(self)
def default_language(self)
def supported_options(self)
def get_tts_audio(self, message, language, options)
def get_engine(hass, config, discovery_info=None)