chrome.ttsEngine
Description
使用 chrome.ttsEngine
API 通过扩展实现文本到语音 (TTS) 引擎。如果您的扩展程序使用此 API 进行注册,则当任何扩展程序或 Chrome 应用程序使用 tts
API 生成语音时,它将接收包含要说出的话语和其他参数的事件。然后,您的扩展程序可以使用任何可用的 Web 技术来合成和输出语音,并将事件发送回调用函数以报告状态。
Permissions
ttsEngine
# Overview
扩展可以将自己注册为语音引擎。通过这样做,它可以拦截对 tts.speak
和 tts.stop
等函数的部分或全部调用,并提供替代实现。扩展可以免费使用任何可用的网络技术来提供语音,包括来自服务器的流音频、HTML5 音频、Native Client 或 Flash。扩展甚至可以对话语做一些不同的事情,比如在弹出窗口中显示隐藏式字幕或将它们作为日志消息发送到远程服务器。
# Manifest
要实现 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
的清单文件不同。)
注意:如果您的 TTS 引擎不支持
'end'
事件类型,Chrome 将无法对话语进行排队,因为它无法知道您的话语何时结束。为了帮助缓解这种情况,Chrome 向引擎的 onSpeak 处理程序传递了一个额外的布尔排队enqueue
选项,让您可以选择实现自己的排队。这是不鼓励的,因为这样客户端就无法对应该由不同语音引擎说出的话语进行排队。
您可以发送的可能事件类型对应于 speak()
方法接收的事件类型:
'start'
: 引擎已经开始说话了。'word'
: 达到了字边界。使用event.charIndex
确定当前语音位置。'sentence'
: 达到了句子边界。使用event.charIndex
确定当前语音位置。'marker'
: 达到了 SSML 标记。使用event.charIndex
确定当前语音位置。'end'
: 引擎说完话。'error'
: 发生特定于引擎的错误,无法说出此话语。在event.errorMessage
中传递更多信息。
'interrupted'
和 'canceled'
事件不是由语音引擎发送的;它们由 Chrome 自动生成。
假设您已按如下所述注册语音事件侦听器,文本转语音客户端可以通过调用 tts.getVoices
从您的扩展程序清单中获取语音信息。
# Handling speech events(处理语音事件)
要根据客户端的请求生成语音,您的扩展程序必须为 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);
Warning
重要提示:如果您的扩展程序没有为
onSpeak
和onStop
注册侦听器,则无论清单中有什么,它都不会拦截任何语音调用。
是否向扩展程序发送给定语音请求的决定完全取决于扩展程序是否支持其清单中的给定语音参数,以及是否为 onSpeak
和 onStop
注册了侦听器。换句话说,扩展程序无法接收语音请求并动态决定是否处理它。
Summary
Types
Methods
Events
Types
AudioBuffer
Chrome 92+
包含音频缓冲区和相关数据的参数。
PROPERTIES
audioBuffer
ArrayBuffer
来自文本到语音引擎的音频缓冲区。它的长度应该正好是 audioStreamOptions.bufferSize 并编码为单声道、audioStreamOptions.sampleRate 和线性 pcm、32 位有符号浮点数,即 JavaScript 中的 Float32Array 类型。
charIndex
number optional
与此音频缓冲区关联的字符索引。
isLastBuffer
boolean optional
如果此音频缓冲区是正在朗读的文本的最后一个,则为真。
AudioStreamOptions
Chrome 92+
包含预期由引擎生成的音频流格式。
PROPERTIES
bufferSize
number
音频缓冲区内的样本数。
sampleRate
number
音频缓冲区中预期的采样率。
SpeakOptions
Chrome 92+
指定给 tts.speak() 方法的选项。
PROPERTIES
gender
VoiceGender optional
Deprecated since Chrome 92
性别已被弃用,将被忽略。
合成语音的语音性别。
lang
string optional
用于综合的语言,形式为语言区域。示例:“en”、“en-US”、“en-GB”、“zh-CN”。
pitch
number optional
说话音高介于 0 和 2 之间,其中 0 为最低,2 为最高。 1.0 对应于这个声音的默认音高。
rate
number optional
相对于此语音的默认速率的说话速率。 1.0 是默认速率,通常约为每分钟 180 到 220 个字。 2.0 是两倍,0.5 是一半。该值保证在 0.1 和 10.0 之间,包括 0.1 和 10.0。当语音不支持这个完整的速率范围时,不要返回错误。相反,将速率限制在语音支持的范围内。
voiceName
string optional
用于合成的声音名称。
volume
number optional
说话音量介于0和1之间,0为最低,1为最高,默认为1.0。
VoiceGender
Chrome 54+
Deprecated since Chrome 70
性别已被弃用,将被忽略。
TYPE
"male", or "female"
Methods
updateVoices
chrome.ttsEngine.updateVoices( voices: TtsVoice[], )
Chrome 66+
由引擎调用以更新其语音列表。此列表覆盖此扩展程序清单中声明的任何声音。
PARAMETERS
voices
TtsVoice[]
tts.TtsVoice
对象数组,表示语音合成的可用语音。
Events
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
可选:如果引擎支持暂停事件,它应该暂停当前正在说的话语(如果有的话),直到它收到恢复事件或停止事件。请注意,停止事件还应清除暂停状态。
PARAMETERS
callback
function
The
callback
parameter looks like:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
可选:如果引擎支持 pause 事件,它也应该支持 resume 事件,以继续说当前的话语,如果有的话。请注意,停止事件还应清除暂停状态。
PARAMETERS
callback
function
The
callback
parameter looks like:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
当用户调用 tts.speak
() 并且此扩展程序清单中的一个语音是第一个匹配选项对象时调用。
PARAMETERS
callback
function
The
callback
parameter looks like:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
utterance
string
options
sendTtsEvent
function
The
sendTtsEvent
parameter looks like:(event: tts.TtsEvent) => void
event
来自文本到语音引擎的事件,指示此话语的状态。
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Chrome 92+
当用户调用 tts.speak
() 并且此扩展程序清单中的一个语音是第一个匹配选项对象时调用。与 ttsEngine.onSpeak
的不同之处在于 Chrome 提供音频播放服务并处理调度 tts 事件。
PARAMETERS
callback
function
The
callback
parameter looks like:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
utterance
string
options
audioStreamOptions
sendTtsAudio
function
The
sendTtsAudio
parameter looks like:(audioBufferParams: AudioBuffer) => void
audioBufferParams
包含音频缓冲区和相关数据的参数。
sendError
function
Chrome 94+
The
sendError
parameter looks like:(errorMessage?: string) => void
errorMessage
string optional
描述错误的字符串。
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
当呼叫 tts.stop 并且此扩展可能正在讲话时触发。如果分机收到 onStop 的呼叫并且语音已经停止,它应该什么都不做(不会引发错误)。如果语音处于暂停状态,这应该取消暂停状态。
PARAMETERS
callback
function
The
callback
parameter looks like:() => void
By.一粒技术服务.