chrome.ttsEngine

Description

使用 chrome.ttsEngine API 通过扩展实现文本到语音 (TTS) 引擎。如果您的扩展程序使用此 API 进行注册,则当任何扩展程序或 Chrome 应用程序使用 tts API 生成语音时,它将接收包含要说出的话语和其他参数的事件。然后,您的扩展程序可以使用任何可用的 Web 技术来合成和输出语音,并将事件发送回调用函数以报告状态。

Permissions

ttsEngine

# Overview

扩展可以将自己注册为语音引擎。通过这样做,它可以拦截对 tts.speaktts.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(处理语音事件)

要根据客户端的请求生成语音,您的扩展程序必须为 onSpeakonStop 注册侦听器,如下所示:

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

重要提示:如果您的扩展程序没有为 onSpeakonStop 注册侦听器,则无论清单中有什么,它都不会拦截任何语音调用。

是否向扩展程序发送给定语音请求的决定完全取决于扩展程序是否支持其清单中的给定语音参数,以及是否为 onSpeakonStop 注册了侦听器。换句话说,扩展程序无法接收语音请求并动态决定是否处理它。

Summary

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

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

      SpeakOptions

    • sendTtsEvent

      function

      The sendTtsEvent parameter looks like:

      (event: tts.TtsEvent) => void

      • event

        tts.TtsEvent

        来自文本到语音引擎的事件,指示此话语的状态。

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

  • 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.一粒技术服务.

results matching ""

    No results matching ""