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 パラメータは必須です。名前は、使用する音声の名前とエンジンを識別できるようなわかりやすいものにする必要があります。万が一、2 つの拡張機能が同じ名前で音声を登録した場合、クライアントは合成を行う拡張機能の ID を指定できます。

lang パラメータは省略可能ですが、指定することを強くおすすめします。ほとんどの場合、1 つの音声は 1 つの言語のみで音声を合成できます。エンジンが複数の言語をサポートしている場合、言語ごとに個別の音声を簡単に登録できます。まれに複数の言語を処理できる場合は、2 つの別々の音声をリストアップし、内部で同じロジックを使用して処理するのが最も簡単です。ただし、任意の言語の発話を処理する音声を作成する場合は、拡張機能のマニフェストで 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 で mono としてエンコードされています。また、リニア pcm として 32 ビット符号付き浮動小数点数(JavaScript の Float32Array 型)にエンコードされている必要があります。

  • charIndex

    number(省略可)

    このオーディオ バッファに関連付けられている文字インデックス。

  • isLastBuffer

    ブール値(省略可)

    このオーディオ バッファが、読み上げられるテキストの最後である場合は true。

AudioStreamOptions

Chrome 92 以降

エンジンで生成されることが想定される音声ストリーム形式が含まれます。

プロパティ

  • bufferSize

    数値

    オーディオ バッファ内のサンプル数。

  • sampleRate

    数値

    オーディオ バッファで想定されるサンプルレート。

SpeakOptions

Chrome 92 以降

tts.speak() メソッドに指定されたオプション。

プロパティ

  • gender

    VoiceGender 省略可

    Chrome 92 以降でサポートが終了

    性別はサポートが終了したため、無視されます。

    合成音声の性別。

  • lang

    string(省略可)

    合成に使用する言語(language-region の形式)。例: 「en」、「en-US」、「en-GB」、「zh-CN」。

  • 投球

    number(省略可)

    発話のピッチは 0 ~ 2 で、0 が最も低く、2 が最も高くなります。1.0 がこの音声のデフォルトのピッチに対応します。

  • 速度

    number(省略可)

    この音声のデフォルト レートに対する発話速度。デフォルトのレートは 1.0 で、通常は 1 分あたり 180 ~ 220 語です。2.0 はその 2 倍の速さで、0.5 は半分の速さです。この値は、0.1 ~ 10.0 の範囲(両端を含む)であることが保証されています。音声がこのレートの全範囲に対応していない場合は、エラーを返さないでください。代わりに、音声が対応する範囲にレートをクリップしてください。

  • voiceName

    string(省略可)

    合成に使用する音声の名前。

  • 音量

    number(省略可)

    音量は 0 ~ 1 の範囲で指定します。0 が最も小さく、1 が最も大きくなります。デフォルトは 1.0 です。

VoiceGender

Chrome 54 以降 Chrome 70 以降非推奨

性別はサポートが終了したため、無視されます。

Enum

Methods

updateVoices()

Chrome 66 以降
chrome.ttsEngine.updateVoices(
  voices: 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() を呼び出し、この拡張機能のマニフェストに含まれるいずれかの音声が最初に options オブジェクトに合致したときに呼び出されます。

パラメータ

  • callback

    機能

    callback パラメータは次のようになります。

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

    • 発話

      文字列

    • オプション
    • sendTtsEvent

      機能

      sendTtsEvent パラメータは次のようになります。

      (event: tts.TtsEvent)=>void

      • event

        この発話のステータスを示すテキスト読み上げエンジンからのイベント。

onSpeakWithAudioStream

Chrome 92 以降
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
  callback: function,
)

ユーザーが tts.speak() を呼び出し、この拡張機能のマニフェストに含まれるいずれかの音声が最初に options オブジェクトに合致したときに呼び出されます。Chrome が音声再生サービスを提供し、tts イベントのディスパッチを処理する点で、ttsEngine.onSpeak とは異なります。

パラメータ

  • 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

      • errorMessage

        string(省略可)

        エラーを説明する文字列。

onStop

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

tts.stop に対する呼び出しが行われ、この拡張機能が発言中の可能性があるときに呼び出されます。拡張機能が onStop の呼び出しを受信し、音声がすでに停止している場合は、何もしません(エラーを発生させません)。音声が一時停止状態の場合、一時停止状態はキャンセルされます。

パラメータ

  • callback

    機能

    callback パラメータは次のようになります。

    ()=>void