说明
使用 chrome.ttsEngine
API 通过扩展程序实现文字转语音(TTS) 引擎。如果您的扩展程序使用此 API 注册,那么当任何扩展程序或 Chrome 应用使用 tts
API 生成语音时,该扩展程序将收到包含待说出的话语和其他参数的事件。然后,您的扩展程序可以使用任何可用的网络技术来合成并输出语音,并将事件发送回调用函数以报告状态。
权限
ttsEngine
概念和用法
扩展程序可以将自己注册为语音引擎。这样,它可以拦截部分或全部调用
添加到 tts.speak()
和 tts.stop()
等函数,并提供替代实现。
扩展程序可以随意使用任何可用的网络技术来提供语音,包括流式传输音频
HTML5 音频扩展程序甚至可以
例如在弹出式窗口中显示字幕,或以日志消息的形式将其发送给
远程服务器。
要实现 TTS 引擎,扩展程序必须声明“ttsEngine”然后声明 它在扩展程序清单中提供的语音,如下所示:
{
"name": "My TTS Engine",
"version": "1.0",
"permissions": ["ttsEngine"],
"tts_engine": {
"voices": [
{
"voice_name": "Alice",
"lang": "en-US",
"event_types": ["start", "marker", "end"]
},
{
"voice_name": "Pat",
"lang": "en-US",
"event_types": ["end"]
}
]
},
"background": {
"page": "background.html",
"persistent": false
}
}
扩展程序可以指定任意数量的语音。
voice_name
为必需参数,名称应具有充分的描述性,以便于识别
所使用的语音名称和引擎的名称。在极少数情况下,两个扩展会注册语音
具有相同名称的扩展程序,客户端可以指定应进行合成的扩展程序的 ID。
lang
参数是可选的,但强烈建议您使用。语音几乎总是能合成
只用一种语言进行的语音对话。当引擎支持多种语言时
为每种语言注册单独的语音。在极少数情况下,可能会出现单一语音
处理多种语言,最简单的方法就是列出两种不同的语音,然后使用
在内部使用相同的逻辑不过,如果你想创建一种语音,
请从扩展程序清单中去掉 lang
参数。
最后,如果引擎可以发送事件来更新客户端,则必须使用 event_types
参数
向大家介绍语音合成的进展至少支持 'end'
事件类型,以指明
强烈建议在语音完成时发出提醒,否则 Chrome 无法调度加入队列的语音。
加载后,扩展程序可通过调用
chrome.ttsEngine.updateVoices
。(请注意,
updateVoices
采用驼峰式大小写形式:例如voiceName
,这与使用
voice_name
。)
您可以发送的可能事件类型与 speak()
方法的事件类型对应
会获得:
'start'
:引擎已开始读出语音内容。'word'
:已达到单词边界。使用event.charIndex
确定当前语音 排名。'sentence'
:已达到句子边界。使用event.charIndex
确定当前 语音位置。'marker'
:已到达 SSML 标记。使用event.charIndex
确定当前语音 排名。'end'
:引擎已说出内容。'error'
:发生了引擎特定错误,无法读出此语音内容。通过更多event.errorMessage
中的信息。
语音引擎不会发送 'interrupted'
和 'cancelled'
事件;它们是
由 Chrome 自动提供。
文字转语音客户端可以通过调用
tts.getVoices
(假设您已按如下所述注册语音事件监听器)。
处理语音事件
若要应客户端请求生成语音,您的扩展程序必须为二者注册监听器
onSpeak
和 onStop
,如下所示:
const speakListener = (utterance, options, sendTtsEvent) => {
sendTtsEvent({type: 'start', charIndex: 0})
// (start speaking)
sendTtsEvent({type: 'end', charIndex: utterance.length})
};
const stopListener = () => {
// (stop all speech)
};
chrome.ttsEngine.onSpeak.addListener(speakListener);
chrome.ttsEngine.onStop.addListener(stopListener);
是否向扩展程序发送特定语音请求的决定仅取决于
扩展程序是否在其清单中支持指定的语音参数,以及是否已注册
onSpeak
和 onStop
的监听器。也就是说,扩展程序不会
语音请求,并动态决定是否处理该请求。
类型
AudioBuffer
包含音频缓冲区和相关数据的参数。
属性
-
audioBuffer
数组缓冲区
文字转语音引擎的音频缓冲区。它的长度应恰好为 audioStreamOptions.bufferSize,编码为单声道,采用 audioStreamOptions.sampleRate,编码为线性 pcm,32 位有符号浮点,即 JavaScript 中的 Float32Array 类型。
-
charIndex
编号(选填)
与此音频缓冲区关联的字符索引。
-
isLastBuffer
布尔值(可选)
如果此音频缓冲区是最后说出的文本,则为 true。
AudioStreamOptions
包含引擎预期生成的音频流格式。
属性
-
bufferSize
number
音频缓冲区中的样本数。
-
sampleRate
number
音频缓冲区中预期的采样率。
SpeakOptions
为 tts.speak() 方法指定的选项。
属性
-
gender
VoiceGender 选填
<ph type="x-smartling-placeholder"></ph> 自 Chrome 92 起弃用Gender 已被弃用,将被忽略。
合成语音的语音性别。
-
lang
字符串(可选)
用于合成的语言,格式为“语言-区域”。示例:“en”“en-US”“en-GB”“zh-CN”。
-
投球
编号(选填)
讲话音高介于 0 和 2 之间(包括 0 和 2),0 表示最低,2 表示最高。1.0 对应于该语音的默认音高。
-
费率
编号(选填)
此语音相对于默认语速的语速。默认速率为 1.0,通常约为每分钟 180 到 220 个单词。2.0 表示快一倍的速度,0.5 则表示原有速度的一半。此值保证介于 0.1 和 10.0 之间(含 0.1 和 10.0)。当语音不支持此完整速率范围时,不返回错误。而应将语速裁剪到语音支持的范围内。
-
voiceName
字符串(可选)
用于合成的语音的名称。
-
音量
编号(选填)
朗读音量介于 0 和 1 之间(包括 0 和 1),0 表示最低音量,1 表示最高音量,默认值为 1.0。
VoiceGender
Gender 已被弃用,将被忽略。
枚举
“男性”
“女性”
方法
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
由引擎调用以更新其语音列表。此列表会替换此扩展程序的清单中声明的所有语音。
参数
-
声音
TtsVoice[]
tts.TtsVoice
对象数组,表示可用于语音合成的语音。
事件
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
可选:如果引擎支持暂停事件,则应暂停当前正在说的话语(如果有),直到收到继续事件或停止事件。请注意,停止事件也应清除暂停状态。
参数
-
callback
函数
callback
参数如下所示:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
可选:如果引擎支持暂停事件,则也应支持继续播放事件,以便继续说出当前话语(如果有)。请注意,停止事件也应清除暂停状态。
参数
-
callback
函数
callback
参数如下所示:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
当用户调用 tts.speak() 且此扩展程序的清单中的任一语音是第一个与选项对象匹配时调用。
参数
-
callback
函数
callback
参数如下所示:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
语音
字符串
-
选项
-
sendTtsEvent
函数
sendTtsEvent
参数如下所示:(event: tts.TtsEvent) => void
-
事件
文字转语音引擎中的事件,指示该话语的状态。
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
当用户调用 tts.speak() 且此扩展程序的清单中的任一语音是第一个与选项对象匹配时调用。与 ttsEngine.onSpeak 的不同之处在于,Chrome 提供音频播放服务,并负责处理 tts 事件的分派。
参数
-
callback
函数
callback
参数如下所示:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
语音
字符串
-
选项
-
audioStreamOptions
-
sendTtsAudio
函数
sendTtsAudio
参数如下所示:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
包含音频缓冲区和相关数据的参数。
-
-
sendError
函数
Chrome 94 及更高版本sendError
参数如下所示:(errorMessage?: string) => void
-
错误消息
字符串(可选)
描述错误的字符串。
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
在向 tts.stop 拨打电话时触发,且此扩展程序可能正在说话中。如果扩展程序收到对 onStop 的调用但语音已停止,则不应执行任何操作(不会引发错误)。如果语音处于暂停状态,此操作应该会取消暂停状态。
参数
-
callback
函数
callback
参数如下所示:() => void