chrome.ttsEngine

說明

透過 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,假設您已按照下列方式註冊語音事件監聽器。

處理語音事件

為了應用戶端的要求產生語音,您的擴充功能必須針對 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);

決定是否向擴充功能傳送特定語音要求時,主要取決於 擴充功能是否支援資訊清單中指定的語音參數,且已登錄 onSpeakonStop 的事件監聽器。換句話說,擴充功能無法接收 然後動態決定是否處理該要求

類型

AudioBuffer

Chrome 92 以上版本

包含音訊緩衝區和相關資料的參數。

屬性

  • audioBuffer

    ArrayBuffer

    文字轉語音引擎的音訊緩衝區。其長度應該剛好是 audioStreamOptions.bufferSize,並編碼為 audioStreamOptions.sampleRate,並以線性 pcm、32 位元帶正負號的浮點值,也就是 JavaScript 中的 Float32Array 類型。

  • charIndex

    編號 選填

    與此音訊緩衝區相關聯的字元索引。

  • isLastBuffer

    布林值 選填

    如果此音訊緩衝區是朗讀文字的最後一個部分,則為「true」。

AudioStreamOptions

Chrome 92 以上版本

包含引擎預計產生的音訊串流格式。

屬性

  • bufferSize

    數字

    音訊緩衝區中的樣本數量。

  • sampleRate

    數字

    音訊緩衝區中預期的取樣率。

SpeakOptions

Chrome 92 以上版本

針對 tts.speak() 方法指定的選項。

屬性

  • gender

    VoiceGender 選用

    自 Chrome 92 版起已淘汰

    性別已淘汰,因此將遭到忽略。

    合成語音的語音性別。

  • lang

    string optional

    要用於合成的語言,格式為 language-region。例如:「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 (含) 之間。如果語音不支援此完整的費率範圍,不會傳回錯誤。而是將速率調整至語音支援的範圍。

  • voiceName

    string optional

    要用於合成的語音名稱。

  • 磁碟區

    編號 選填

    朗讀音量介於 0 到 1 之間 (含 0 和 1),其中 0 代表最低,1 代表最高,預設值為 1.0。

VoiceGender

Chrome 54 以上版本 自 Chrome 70 版起已淘汰

性別已淘汰,因此將遭到忽略。

列舉

"male"

"female"

方法

updateVoices()

Chrome 66 以上版本
chrome.ttsEngine.updateVoices(
  voices: TtsVoice[],
)

由引擎呼叫以更新語音清單。這份清單會覆寫這項擴充功能資訊清單中宣告的任何語音。

參數

活動

onPause

chrome.ttsEngine.onPause.addListener(
  callback: function,
)

選用:如果引擎支援暫停事件,應暫停目前播放的語音內容 (如果有的話),直到收到恢復事件或停止事件為止。請注意,停止事件也必須清除暫停狀態。

參數

  • 回呼

    函式

    callback 參數如下所示:

    () => void

onResume

chrome.ttsEngine.onResume.addListener(
  callback: function,
)

選用:如果引擎支援暫停事件,則應同時支援履歷事件,以便繼續朗讀目前的語音內容 (如果有的話)。請注意,停止事件也必須清除暫停狀態。

參數

  • 回呼

    函式

    callback 參數如下所示:

    () => void

onSpeak

chrome.ttsEngine.onSpeak.addListener(
  callback: function,
)

使用者呼叫 tts.speak() 時,此擴充功能資訊清單的其中一種語音是第一個與選項物件相符的語音。

參數

  • 回呼

    函式

    callback 參數如下所示:

    (utterance: string, options: SpeakOptions, sendTtsEvent: function) => void

    • 話語

      字串

    • 選項
    • sendTtsEvent

      函式

      sendTtsEvent 參數如下所示:

      (event: tts.TtsEvent) => void

      • 活動

        文字轉語音引擎的事件,用於表示這則語音的狀態。

onSpeakWithAudioStream

Chrome 92 以上版本
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
  callback: function,
)

使用者呼叫 tts.speak() 時,此擴充功能資訊清單的其中一種語音是第一個與選項物件相符的語音。與 ttsEngine.onSpeak 的差異,Chrome 提供音訊播放服務並處理調度 Tts 事件。

參數

  • 回呼

    函式

    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

      • errorMessage

        string optional

        說明錯誤的字串。

onStop

chrome.ttsEngine.onStop.addListener(
  callback: function,
)

呼叫 tts.stop 時觸發,且這個擴充功能可能正在說話時啟動。如果擴充功能收到對 onStop 的呼叫,且語音停止時,則不會執行任何動作 (不會引發錯誤)。如果語音處於暫停狀態,這會取消暫停狀態。

參數

  • 回呼

    函式

    callback 參數如下所示:

    () => void