説明
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
を呼び出して拡張機能のマニフェストから音声情報を取得できます。
音声イベントの処理
クライアントのリクエストに応じて音声を生成するには、拡張機能で 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
ArrayBuffer
テキスト読み上げエンジンの音声バッファ。長さは audioStreamOptions.bufferSize と正確に一致し、mono、audioStreamOptions.sampleRate、リニア PCM、32 ビット符号付き浮動小数点数(JavaScript の Float32Array 型)でエンコードされている必要があります。
-
charIndex
number(省略可)
このオーディオ バッファに関連付けられた文字インデックス。
-
isLastBuffer
ブール値(省略可)
この音声バッファが読み上げられるテキストの最後である場合は true。
AudioStreamOptions
エンジンによって生成されるオーディオ ストリーム形式が含まれます。
プロパティ
-
bufferSize
数値
オーディオ バッファ内のサンプル数。
-
sampleRate
数値
音声バッファで想定されるサンプルレート。
LanguageInstallStatus
音声のインストール ステータス。
列挙型
「notInstalled」
「インストール中」
「インストール済み」
「failed」
LanguageStatus
言語のインストール ステータス。
プロパティ
-
エラー
文字列(省略可)
インストールの失敗に関する詳細。言語のインストールに失敗した場合に入力できます。
-
installStatus
インストール ステータス。
-
lang
文字列
言語コードと地域コードの形式の言語文字列(地域コードは省略可)。例: en、en-AU、zh-CH。
LanguageUninstallOptions
特定の言語をアンインストールするオプション。
プロパティ
-
uninstallImmediately
ブール値
TTS クライアントが言語をすぐにアンインストールすることを希望する場合は true。エンジンは、このパラメータとリクエスト元の情報に基づいて、言語のアンインストールの可否とタイミングを選択する場合があります。false の場合、最近の使用状況などの他の条件を使用して、アンインストールのタイミングを決定することがあります。
SpeakOptions
tts.speak() メソッドに指定されたオプション。
プロパティ
-
gender
VoiceGender 省略可
Chrome 92 で非推奨性別は非推奨であり、無視されます。
合成音声の性別。
-
lang
文字列(省略可)
合成に使用する言語(言語-リージョンの形式)。例: '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
文字列(省略可)
合成に使用する音声の名前。
-
音量
number(省略可)
音声の音量(0 ~ 1 の範囲で、0 が最も低く、1 が最も高く、デフォルトは 1.0)。
TtsClient
ステータスをリクエストしているクライアントの ID。
プロパティ
-
id
文字列
クライアントが言語管理リクエストを行っている。拡張機能の場合は、一意の拡張機能 ID です。Chrome 機能の場合は、機能の人間が読める名前です。
-
ソース
リクエスト元の種類。
TtsClientSource
リクエスト元の種類。
列挙型
"chromefeature"
「extension」
VoiceGender
性別は非推奨であり、無視されます。
列挙型
「male」
「female」
メソッド
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
)
言語のインストールが試行されたとき、および言語がアンインストールされたときにエンジンによって呼び出されます。クライアントからのステータス リクエストに応じて呼び出されます。音声がインストールまたはアンインストールされた場合、エンジンは ttsEngine.updateVoices を呼び出して音声を登録する必要があります。
パラメータ
-
status
言語のインストール ステータス。
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
エンジンから呼び出され、音声のリストを更新します。このリストは、この拡張機能のマニフェストで宣言された音声をオーバーライドします。
パラメータ
-
声
TtsVoice[]
音声合成に使用できる音声を表す
tts.TtsVoice
オブジェクトの配列。
イベント
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
TTS クライアントが新しい言語のインストールをリクエストしたときに呼び出されます。エンジンは、言語のダウンロードとインストールを試み、結果を ttsEngine.updateLanguage に呼び出します。成功した場合、エンジンは ttsEngine.updateVoices を呼び出して、新しく利用可能になった音声を登録する必要があります。
パラメータ
-
callback
関数
callback
パラメータは次のようになります。(requestor: TtsClient, lang: string) => void
-
リクエスト元
-
lang
文字列
-
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
TTS クライアントが言語のインストール ステータスをリクエストしたときに呼び出されます。
パラメータ
-
callback
関数
callback
パラメータは次のようになります。(requestor: TtsClient, lang: string) => void
-
リクエスト元
-
lang
文字列
-
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() を呼び出し、この拡張機能のマニフェスト内の音声のいずれかがオプション オブジェクトに最初に一致したときに呼び出されます。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
文字列(省略可)
エラーを説明する文字列。
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
tts.stop が呼び出され、この拡張機能が音声出力中の場合に発動されます。拡張機能が onStop の呼び出しを受信し、音声がすでに停止している場合は、何も行わず(エラーを発生させず)、音声が一時停止状態の場合は、一時停止状態が解除されます。
パラメータ
-
callback
関数
callback
パラメータは次のようになります。() => void
onUninstallLanguageRequest
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
TTS クライアントが言語が不要になったことを示すときにトリガーされます。
パラメータ
-
callback
関数
callback
パラメータは次のようになります。(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
リクエスト元
-
lang
文字列
-
uninstallOptions
-