説明
chrome.tts
API を使用して、合成テキスト読み上げ(TTS)を再生します。関連する ttsEngine
API もご覧ください。この API を使用すると、拡張機能で音声エンジンを実装できます。
権限
tts
概要
Chrome は、オペレーティング システムの音声合成機能を使用して Windows(SAPI 5 を使用)、Mac OS X、ChromeOS で音声をネイティブにサポートしています。ユーザーはすべてのプラットフォームで、代替スピーチ エンジンとして登録する拡張機能をインストールできます。
音声を生成しています
内線から speak()
に発信してお話しください。次に例を示します。
chrome.tts.speak('Hello, world.');
すぐに話すのを停止するには、stop()
を呼び出します。
chrome.tts.stop();
レートやピッチなど、音声のさまざまなプロパティを制御するオプションを提供できます。次に例を示します。
chrome.tts.speak('Hello, world.', {'rate': 2.0});
また、言語を指定して、その言語(該当する場合は地域方言)をサポートするシンセサイザーを選択することをおすすめします。
chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
デフォルトでは、speak()
を呼び出すたびに進行中の音声が中断され、すぐに読み上げられます。呼び出しによってなんらかの中断が発生するかどうかを判断するには、isSpeaking()
を呼び出します。さらに、enqueue
オプションを使用すると、現在の発話が終了したときに発話される発話のキューに、この発話を追加できます。
chrome.tts.speak('Speak this first.');
chrome.tts.speak(
'Speak this next, when the first sentence is done.', {'enqueue': true});
すべてのオプションの詳細については、以下のtts.speak
をご覧ください。すべての音声エンジンがすべてのオプションをサポートしているわけではありません。
エラーをキャッチして speak()
を正しく呼び出すには、引数を取らないコールバック関数を渡します。コールバック内で runtime.lastError
をチェックして、エラーが発生したかどうかを確認します。
chrome.tts.speak(
utterance,
options,
function() {
if (chrome.runtime.lastError) {
console.log('Error: ' + chrome.runtime.lastError.message);
}
}
);
コールバックは、エンジンが音声の生成を開始する前にすぐに返されます。コールバックの目的は、音声の合成と出力のプロセスで発生する可能性のあるすべてのエラーを捕捉することではなく、TTS API の使用における構文エラーを警告することです。これらのエラーも検出するには、以下で説明するイベント リスナーを使用する必要があります。
イベントのリッスン
合成音声のステータスに関するリアルタイムの情報を取得するには、次のようにオプションのイベント リスナーを speak()
に渡します。
chrome.tts.speak(
utterance,
{
onEvent: function(event) {
console.log('Event ' + event.type + ' at position ' + event.charIndex);
if (event.type == 'error') {
console.log('Error: ' + event.errorMessage);
}
}
},
callback
);
各イベントには、イベントタイプ、発話に対する現在の音声の文字インデックス、エラーイベントの場合はオプションのエラー メッセージが含まれます。イベントタイプは次のとおりです。
'start'
: エンジンが発話を開始しました。'word'
: 単語境界に達しました。event.charIndex
を使用して、現在の音声の位置を特定します。'sentence'
: 文の境界に達しました。event.charIndex
を使用して、現在の音声位置を特定します。'marker'
: SSML マーカーに到達しました。event.charIndex
を使用して、現在の音声の位置を特定します。'end'
: エンジンが発話を終了しました。'interrupted'
: この発話は、speak()
またはstop()
への別の呼び出しによって中断され、終了しませんでした。'cancelled'
: この発話はキューに格納されましたが、speak()
またはstop()
への別の呼び出しによってキャンセルされ、まったく発話されていません。'error'
: エンジン固有のエラーが発生したため、この発話は読み上げられません。詳しくは、event.errorMessage
をご覧ください。
イベントタイプのうち 'end'
、'interrupted'
、'cancelled'
、'error'
は final です。これらのイベントのいずれかを受信すると、この発話は読み上げられなくなり、この発話からの新しいイベントは受信されなくなります。
音声によっては、一部のイベントタイプに対応していない場合や、イベントをまったく送信しない音声もあります。特定のイベントが送信されない限り音声を使用しない場合は、必要なイベントをオプション オブジェクトの requiredEventTypes
メンバーに渡すか、getVoices()
を使用して要件を満たす音声を選択します。以下では、どちらも説明します。
SSML マークアップ
この API で使用される発話には、音声合成マークアップ言語(SSML)を使用したマークアップが含まれる場合があります。SSML を使用する場合、speak()
の最初の引数は、ドキュメント フラグメントではなく、XML ヘッダーとトップレベルの <speak>
タグを含む完全な SSML ドキュメントである必要があります。
次に例を示します。
chrome.tts.speak(
'<?xml version="1.0"?>' +
'<speak>' +
' The <emphasis>second</emphasis> ' +
' word of this sentence was emphasized.' +
'</speak>'
);
すべての音声エンジンがすべての SSML タグをサポートしているとは限らず、一部のエンジンは SSML をまったくサポートしていない場合があります。ただし、すべてのエンジンは、サポートしていない SSML を無視して、基となるテキストを読み上げる必要があります。
音声を選択する
デフォルトでは、言語に基づいて、発話ごとに最適な音声が自動的に選択されます。ほとんどの Windows、Mac OS X、ChromeOS システムでは、オペレーティング システムによって提供される音声合成は、少なくとも 1 つの言語で任意のテキストを読み上げることができます。ただし、ユーザーによっては、オペレーティング システムと、他の Chrome 拡張機能によって実装されたスピーチ エンジンから、さまざまな音声を利用できる場合があります。そのような場合は、カスタムコードを実装して、適切な音声を選択するか、ユーザーに選択肢のリストを提示できます。
すべての音声のリストを取得するには、getVoices()
を呼び出して、TtsVoice
オブジェクトの配列を引数として受け取る関数を渡します。
chrome.tts.getVoices(
function(voices) {
for (var i = 0; i < voices.length; i++) {
console.log('Voice ' + i + ':');
console.log(' name: ' + voices[i].voiceName);
console.log(' lang: ' + voices[i].lang);
console.log(' extension id: ' + voices[i].extensionId);
console.log(' event types: ' + voices[i].eventTypes);
}
}
);
型
EventType
列挙型
"start"
"end"
"sentence"
"marker"
"error"
TtsEvent
TTS エンジンから発話のステータスを伝えるイベント。
プロパティ
-
charIndex
number(省略可)
発話の現在の文字のインデックス。単語イベントの場合、1 つの単語の末尾と次の単語の開始前にイベントが発生します。
charIndex
は、テキスト内で次に発話される単語の先頭にある点を表します。 -
errorMessage
string(省略可)
エラーの説明(イベントタイプが
error
の場合)。 -
length
number(省略可)
Chrome 74 以降発話の次の部分の長さ。たとえば
word
イベントでは、これは次に発話される単語の長さです。音声エンジンによって設定されていない場合は -1 に設定されます。 -
type
型は、音声が開始するとすぐに
start
、単語境界に達した場合はword
、文の境界に達した場合はsentence
、SSML マーク要素に達した場合はmarker
、発話の終わりに達するとend
、発話が最後まで停止または中断された場合はcancelled
、合成前にキューから削除された場合はcancelled
、その他のエラーが発生した場合はerror
になります。interrupted
音声を一時停止すると、特定の発話が途中で一時停止された場合はpause
イベントが発行され、発話が再開するとresume
イベントが発生します。発話の合間に音声が一時停止されると、一時停止イベントと再開イベントがトリガーされない場合があります。
TtsOptions
TTS エンジンの音声オプション。
プロパティ
-
desiredEventTypes
string[] 省略可
リッスン対象の TTS イベントタイプ。指定されていない場合は、すべての種類のイベントが送信される可能性があります。
-
エンキュー
ブール値(省略可)
true の場合、TTS がすでに進行中の場合、この発話がキューに追加されます。false(デフォルト)の場合、この新しい発話が読み上げられる前に、現在の音声を中断して音声キューをフラッシュします。
-
extensionId
string(省略可)
使用する音声エンジンの拡張機能 ID(わかっている場合)。
-
gender
VoiceGender 省略可
Chrome 77 以降で非推奨性別はサポートが終了したため、無視されます。
合成音声の性別。
-
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 より大きい値は厳しく禁じられていますが、多くの声では最小レートと最大レートがさらに制約されています。たとえば、3.0 より大きい値を指定しても、特定の声では通常の 3 倍以上の速さで話すことができない場合があります。
-
requiredEventTypes
string[] 省略可
音声がサポートする必要がある TTS イベントタイプ。
-
voiceName
string(省略可)
合成に使用する音声の名前。空の場合、使用可能な音声が使用されます。
-
音量
number(省略可)
音量は 0 ~ 1 の範囲で指定します。0 が最も小さく、1 が最も大きくなります。デフォルトは 1.0 です。
-
onEvent
void 省略可
この関数は、発話のプロセスで発生するイベントで呼び出されます。
onEvent
関数は次のようになります。(event: TtsEvent) => {...}
-
event
この発話のステータスを示すテキスト読み上げエンジンからの更新イベント。
-
TtsVoice
音声合成に利用できる音声の説明。
プロパティ
-
eventTypes
EventType[] 省略可
この音声が送信できるすべてのコールバック イベントタイプ。
-
extensionId
string(省略可)
この音声を提供する拡張機能の ID。
-
gender
VoiceGender 省略可
Chrome 70 以降でサポートが終了性別はサポートが終了したため、無視されます。
この声の性別。
-
lang
string(省略可)
この音声がサポートしている言語。language-region の形式で指定します。例: 「en」、「en-US」、「en-GB」、「zh-CN」。
-
リモコン
ブール値(省略可)
true の場合、合成エンジンはリモート ネットワーク リソースです。レイテンシが長くなり、帯域幅コストが発生する可能性があります。
-
voiceName
string(省略可)
音声の名前。
VoiceGender
性別はサポートが終了したため、無視されます。
列挙型
Methods
getVoices()
chrome.tts.getVoices(
callback?: function,
)
使用可能なすべての音声の配列を取得します。
パラメータ
-
callback
関数(省略可)
callback
パラメータは次のようになります。(voices: TtsVoice[]) => void
-
声
TtsVoice[]
音声合成に使用できる音声を表す
tts.TtsVoice
オブジェクトの配列。
-
戻り値
-
Promise<TtsVoice[]>
Chrome 101 以降Promise は Manifest V3 以降でのみサポートされます。他のプラットフォームではコールバックを使用する必要があります。
isSpeaking()
chrome.tts.isSpeaking(
callback?: function,
)
エンジンが現在作動しているかどうかを確認します。Mac OS X では、システム音声エンジンが読み上げているときは常に true になります。音声が Chrome によって開始されたのではない場合も同様です。
パラメータ
-
callback
関数(省略可)
callback
パラメータは次のようになります。(speaking: boolean) => void
-
話す
boolean
話す場合は true、そうでない場合は false です。
-
戻り値
-
Promise<boolean>
Chrome 101 以降Promise は Manifest V3 以降でのみサポートされます。他のプラットフォームではコールバックを使用する必要があります。
pause()
chrome.tts.pause()
音声合成を一時停止します(発話の最中かもしれません)。通話を再開または停止すると、音声の一時停止が解除されます。
resume()
chrome.tts.resume()
音声が一時停止されていた場合は、中断したところから読み上げを再開します。
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
callback?: function,
)
テキスト読み上げエンジンを使用してテキストを読み上げます。
パラメータ
-
発話
文字列
読み上げるテキスト。書式なしテキストまたは完全な正しい形式の SSML ドキュメントのいずれか。SSML をサポートしていない音声エンジンは、タグを取り除いてテキストを読み上げます。テキストの最大長は 32,768 文字です。
-
オプション
TtsOptions 省略可
音声オプション。
-
callback
関数(省略可)
callback
パラメータは次のようになります。() => void
戻り値
-
Promise<void>
Chrome 101 以降Promise は Manifest V3 以降でのみサポートされます。他のプラットフォームではコールバックを使用する必要があります。
stop()
chrome.tts.stop()
現在の音声を停止し、保留中の発話のキューをフラッシュします。また、音声が一時停止されていた場合でも、次の通話に向けて一時停止が解除されます。
イベント
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
getVoices が返す tts.TtsVoice
のリストが変更されたときに呼び出されます。
パラメータ
-
callback
機能
callback
パラメータは次のようになります。() => void