音声合成マークアップ言語(SSML)

送信する Cloud Text-to-Speech リクエスト内で音声合成マークアップ言語(SSML)を使用して細かい休止や頭字語、日付、時刻、略語、検査すべきテキストに対するオーディオ形式を指定することにより、オーディオ レスポンスをより詳細にカスタマイズできます。詳細とコードサンプルについては、Cloud TTS の SSML チュートリアルをご覧ください。

SSML マークアップの例を次に示します。Cloud TTS によりテキストが合成されます。

<speak>
  Here are <say-as interpret-as="characters">SSML</say-as> samples.
  I can pause <break time="3s"/>.
  I can play a sound
  <audio src="https://www.example.com/MY_MP3_FILE.mp3">didn't get your MP3 audio file</audio>.
  I can speak in cardinals. Your number is <say-as interpret-as="cardinal">10</say-as>.
  Or I can speak in ordinals. You are <say-as interpret-as="ordinal">10</say-as> in line.
  Or I can even speak in digits. The digits for ten are <say-as interpret-as="characters">10</say-as>.
  I can also substitute phrases, like the <sub alias="World Wide Web Consortium">W3C</sub>.
  Finally, I can speak a paragraph with two sentences.
  <p><s>This is sentence one.</s><s>This is sentence two.</s></p>
</speak>

上記の SSML ドキュメントの例に対して生成される合成テキストを次に示します。

Here are S S M L samples. I can pause [3 second pause]. I can play a sound [audio file plays].
I can speak in cardinals. Your number is ten.
Or I can speak in ordinals. You are tenth in line.
Or I can even speak in digits. The digits for ten are one oh.
I can also substitute phrases, like the World Wide Web Consortium.
Finally, I can speak a paragraph with two sentences. This is sentence one. This is sentence two.

Cloud TTS は、使用可能な SSML タグのうち、このトピックで説明するサブセットをサポートしています。

Cloud TTS を使用して SSML 入力から音声データを作成する方法については、音声ファイルの作成をご覧ください。

SSML の使用に関するヒント

実装によっては、Cloud TTS に送信する SSML ペイロードで一重または二重の引用符をエスケープする必要が生じる場合があります。次に、JSON オブジェクトに SSML 入力を含める場合のフォーマット例を示します。

"{
    'input':{
     'ssml':'<speak>The <say-as interpret-as=\"characters\">SSML</say-as>
          standard <break time=\"1s\"/>is defined by the
          <sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>'
    },
    'voice':{
      'languageCode':'en-us',
      'name':'en-US-Standard-B',
      'ssmlGender':'MALE'
    },
    'audioConfig':{
      'audioEncoding':'MP3'
    }
  }"

予約文字

音声に変換するテキストでは SSML の予約文字を使用しないようにしてください。SSML の予約文字を使用する必要がある場合は、エスケープ コードを使用して、文字がコードとして読み取られないようにしてください。次の表に、SSML の予約文字とそれに関連するエスケープ コードを示します。

文字 エスケープ コード
" &quot;
& &amp;
' &apos;
< &lt;
> &gt;

音声の選択

音声は VoiceSelectionParams オブジェクトで設定できます。Text-to-Speech の SSML チュートリアルで、VoiceSelectionParams オブジェクトの使用方法を説明するコードサンプルをご確認ください。

<voice> タグを使用すると、複数の音声で SSML を読み上げることができますが、VoiceSelectionParams の名前を互換性のある音声に設定する必要があります。

リクエストする音声の種類 <voice> タグでサポートされている音声の種類
Neural2 スタジオ WaveNet ニュース 標準
Neural2
スタジオ
WaveNet
標準
ニュース

SSML 要素のサポート

以下のセクションでは、アクションで使用できる SSML 要素とオプションについて説明します。

<speak>

SSML レスポンスのルート要素。

speak 要素の詳細については、W3 仕様をご覧ください。

<speak>
  my SSML content
</speak>

<break>

休止、または韻律のその他の単語間の境界を制御する空の要素。トークンのペアの間で <break> を使用するかどうかは任意です。この要素が単語間に存在しない場合、言語的コンテキストに基づいて自動的にブレークが決定されます。

break 要素の詳細については、W3 仕様をご覧ください。

属性

属性 説明
time

ブレークの長さを秒またはミリ秒単位で設定します(「3 秒」、「250 ミリ秒」など)。

strength

出力の韻律ブレークの強さを相対的な強さで設定します。有効な値は、「x-weak」、「weak」、「medium」、「strong」、「x-strong」です。値「none」は、韻律ブレーク境界が出力されるべきでないことを示し、プロセッサによる韻律ブレークの生成を防止するために使用できます。その他の値は、単調に減少しない(概念的に増加する)トークン間のブレークの強度を示します。一般的に、強い境界は休止を伴います。

次の例は、<break> 要素を使用してステップ間で休止する方法を示します。

<speak>
  Step 1, take a deep breath. <break time="200ms"/>
  Step 2, exhale.
  Step 3, take a deep breath again. <break strength="weak"/>
  Step 4, exhale.
</speak>

<say‑as>

この要素を使用すると、要素内に含まれているテキスト構造体の種類に関する情報を指定できます。また、含まれているテキストのレンダリングの詳細レベルを指定することもできます。

<say‑as> 要素には、値の発音方法を指定する必須属性、interpret-as があります。オプションの属性 formatdetail は、interpret-as が特定の値の場合に使用できます。

interpret-as 属性は次の値をサポートしています。

  • currency

    次の例は「forty two dollars and one cent」と発音されます。language 属性を省略すると、現在の言語 / 地域が使用されます。

    <speak>
      <say-as interpret-as='currency' language='en-US'>$42.01</say-as>
    </speak>
        
  • telephone

    W3C SSML 1.0 の say-as attribute values に関する WG メモの interpret-as='telephone' についての説明をご覧ください。

    次の例は「one eight zero zero two zero two one two one two」と発音されます。google:style 属性を省略すると、ゼロがアルファベットの O(オー)として発音されます。

    google:style='zero-as-zero' 属性は、現在英語を使用する言語 / 地域でのみ機能します。

          <speak>
            <say-as interpret-as='telephone' google:style='zero-as-zero'>1800-202-1212</say-as>
          </speak>
        
  • verbatim または spell-out

    次の例は、文字ごとにスペルアウトされています。

    <speak>
      <say-as interpret-as="verbatim">abcdefg</say-as>
    </speak>
        
  • date

    format 属性は、日付のフィールド文字コードの連続を表します。format でサポートされているフィールド文字コードは {y, m, d} で、それぞれ年、月、日を表します。年、月、または日のフィールド コードを 1 回使用する場合、それぞれを 4、2、2 桁で指定する必要があります。同じフィールド コードを繰り返す場合、そのコードの数が桁数を意味します。日付テキスト内のフィールドは、句読点やスペースで区切ることが可能です。

    detail 属性は、日付の発音形式を制御します。detail='1' の場合、日フィールドに加え、月フィールドまたは年フィールドのどちらかが必須ですが、両方指定することも可能です。これは、3 つのフィールドが 1 つでも欠けている場合のデフォルトです。発音形式は「The {ordinal day} of {month}, {year}」です。

    次の例では、「The tenth of September, nineteen sixty」と発音されます。

    <speak>
      <say-as interpret-as="date" format="yyyymmdd" detail="1">
        1960-09-10
      </say-as>
    </speak>
        

    次の例は「The tenth of September」と発音されます。

    <speak>
      <say-as interpret-as="date" format="dm">10-9</say-as>
    </speak>
        

    detail='2' の場合、日、月、年の 3 つのフィールドが必要で、3 つのフィールドがすべて指定されている場合はこれがデフォルトになります。発声形式は「{month} {ordinal day}, {year}」です。

    次の例では、「September tenth, nineteen sixty」と発音されます。

    <speak>
      <say-as interpret-as="date" format="dmy" detail="2">
        10-9-1960
      </say-as>
    </speak>
        
  • characters

    次の例は、「C A N」と発音されます。

    <speak>
      <say-as interpret-as="characters">can</say-as>
    </speak>
        
  • cardinal

    たとえば次の値は、アメリカ英語では「Twelve thousand three hundred forty five」、イギリス英語では「Twelve thousand three hundred and forty five」と発音されます。

    <speak>
      <say-as interpret-as="cardinal">12345</say-as>
    </speak>
        
  • ordinal

    次の例は、「First」と発音されます。

    <speak>
      <say-as interpret-as="ordinal">1</say-as>
    </speak>
        
  • fraction

    次の例は、「five and a half」と発音されます。

    <speak>
      <say-as interpret-as="fraction">5+1/2</say-as>
    </speak>
        
  • expletive または bleep

    次の例は、放送禁止用語に使われるビープ音として出力されます。

    <speak>
      <say-as interpret-as="expletive">censor this</say-as>
    </speak>
        
  • unit

    数に応じて、単位を単数形または複数形に変換します。次の例は、「10 feet」と発音されます。

    <speak>
      <say-as interpret-as="unit">10 foot</say-as>
    </speak>
        
  • time

    次の例は、「Two thirty P.M」と発音されます。

    <speak>
      <say-as interpret-as="time" format="hms12">2:30pm</say-as>
    </speak>
        

    format 属性は、時刻のフィールド文字コードの連続を表します。format でサポートされているフィールドの文字コードは {h, m, s, Z, 12, 24} で、それぞれ、時、分、秒、タイムゾーン、12 時間制の時間、24 時間制の時間を表します。時、分、秒のフィールド コードを 1 回使用する場合、それぞれを 1、2、2 桁で指定する必要があります。同じフィールド コードを繰り返す場合、そのコードの数が桁数を意味します。時間テキスト内のフィールドは、句読点やスペースで区切ることが可能です。時、分、秒がこの形式で指定されていないか、一致する数字がない場合、フィールドは値 0 として扱われます。デフォルトの format は "hms12" です。

    detail 属性は、時刻を 12 時間制と 24 時間制のどちらで発音するかを制御します。detail='1' の場合、または detail が省略され、時刻の形式が 24 時間制の場合、発音形式は 24 時間制です。detail='2' の場合、または detail が省略され、時刻の形式が 12 時間制の場合、発音形式は 12 時間制です。

say-as 要素の詳細については、W3 仕様をご覧ください。

<audio>

合成された音声出力に関連して、録音された音声ファイルの挿入、他のオーディオ形式の挿入をサポートする要素です。

属性

属性 必須 デフォルト
src なし 音声メディアソースを参照する URI。サポートされているプロトコルは https です。
clipBegin × 0 再生する音源の先頭からのオフセットを示す TimeDesignation。この値が音源の実際の時間以上である場合、音声は挿入されません。
clipEnd × 無限大 音源の再生開始から再生終了までのオフセットを示す TimeDesignation。音源の実際の時間がこの値より短い場合、その時点で再生が終了します。clipBeginclipEnd 以上の場合、音声は挿入されません。
speed × 100% 通常の入力レートに対する出力再生レートの比。パーセント値で表されます。形式は正の実数で、後に % が続きます。現在サポートされている範囲は [50%(低速 - 半分の速度)、200%(高速 - 2 倍の速度)] です。この範囲外の値を指定した場合、範囲内に収まるように調整されることもありますが、確実ではありません。
repeatCount × 1、または repeatDur が設定されている場合は 10 音声を挿入する回数を指定する実数clipBeginclipEnd によってクリッピングが発生した場合はその後に挿入される数)。小数の繰り返しはサポートされていないため、値は最も近い整数に丸められます。0 は有効な値ではないため、指定されていないものとして扱われ、その場合はデフォルト値になります。
repeatDur × 無限大 入力音源に clipBeginclipEndrepeatCountspeed の属性が適用され処理された後に、挿入される音声の時間制限を示す TimeDesignation(通常の再生時間ではない)。処理された音声の時間がこの値より短い場合、その時点で再生が終了します。
soundLevel × +0dB soundLevel デシベル単位で音声のサウンドレベルを調整します。最大範囲は +/-40dB ですが、実際の範囲は狭くなることがあり、全範囲にわたって出力品質が良好にならない可能性があります。

現在サポートされている音声の設定は次のとおりです。

  • 形式: MP3(MPEG v2)
    • 24K サンプル/秒
    • 24K~96K ビット/秒、固定レート
  • 形式: Ogg に格納された Opus
    • 24K サンプル/秒(超広帯域)
    • 24K~96K ビット/秒、固定レート
  • 形式(非推奨): WAV(RIFF)
    • PCM 16 ビット符号付きリトル エンディアン
    • 24K サンプル/秒
  • すべての形式:
    • 単一チャンネルが推奨されていますが、ステレオも使用できます。
    • 最大時間は 240 秒。長時間の音声を再生したい場合は、メディア レスポンスの実装を検討してください。
    • 5 メガバイトのファイルサイズ上限。
    • ソース URL には HTTPS プロトコルを使用する必要があります。
    • 音声をフェッチするときの UserAgent は「Google-Speech-Actions」です。

<audio> 要素のコンテンツはオプションであり、音声ファイルを再生できない場合や出力デバイスで音声がサポートされていない場合に使用されます。コンテンツに <desc> 要素を含めることができ、その場合はその要素のテキスト コンテンツが表示に使用されます。詳細については、レスポンス チェックリストの「録音された音声」セクションをご覧ください。

src URL は https URL にする必要があります(Google Cloud Storage は https URL で音声ファイルをホストできます)。

メディア レスポンスの詳細については、レスポンス ガイドのメディア レスポンス セクションをご覧ください。

audio 要素の詳細については、W3 仕様をご覧ください。

<speak>
  <audio src="cat_purr_close.ogg">
    <desc>a cat purring</desc>
    PURR (sound didn't load)
  </audio>
</speak>

<p>,<s>

文と段落の要素。

p 要素と s 要素の詳細については、W3 仕様をご覧ください。

<p><s>This is sentence one.</s><s>This is sentence two.</s></p>

ベスト プラクティス

  • 特に、韻律を変更する SSML 要素(<audio>、<break>、<emphasis>、<par>、<prosody>、<say-as>、<seq>、<sub>)が含まれる場合は、<s>...</s> タグを使用して文全体を囲みます。
  • 聞いて認識できる長さの区切りを音声に含めたい場合は、<s> ...</s>タグを使用して文と文の間に区切りを入れます。

<sub>

発音の際、タグ内のテキストが alias 属性値のテキストによって置き換えられることを示します。

sub 要素を使用して、読みにくい単語の簡略化された発音を提供することもできます。下の最後の例は、日本語でのこのユースケースを示しています。

sub 要素の詳細については、W3 仕様をご覧ください。

<sub alias="World Wide Web Consortium">W3C</sub>
<sub alias="にっぽんばし">日本橋</sub>

<mark>

テキスト シーケンスやタグのシーケンスにマーカーを挿入する空の要素。シーケンス内の特定の場所を参照する場合や、非同期通知のマーカーを出力ストリームに挿入する場合に使用できます。

mark 要素の詳細については、W3 仕様をご覧ください。

<speak>
Go from <mark name="here"/> here, to <mark name="there"/> there!
</speak>

<prosody>

要素によって含まれるテキストのピッチ、発話速度、音量をカスタマイズするために使用されます。現在、ratepitchvolume の属性がサポートされています。

rate 属性と volume 属性は、W3 仕様に従って設定できます。pitch 属性値の設定は、次の 3 通りの方法で行えます。

属性 説明
name

各マークの文字列 ID。

オプション 説明
相対 相対値を指定します(例: 「low」、「medium」、「high」など)。「medium」がデフォルトのピッチです。
半音 「+Nst」または「-Nst」を使用して、ピッチを半音で「N」個ずつ増減します。なお、「+/-」と「st」は必須になります。
割合 「+N%」または「-N%」を使用して、ピッチを「N」パーセントずつ増減します。「%」は必須ですが、「+/-」は任意です。

prosody 要素の詳細については、W3 仕様をご覧ください。

次の例では、通常より半音 2 つ分低く、ゆっくりと話すように <prosody> 要素を使用しています。

<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>

<emphasis>

要素によって含まれるテキストに強調を追加するか、削除するために使用されます。<emphasis> 要素は <prosody> と同様に音声を変更しますが、個々の音声属性を設定する必要はありません。

この要素は、次の有効な値を持つオプションの属性「level」をサポートします。

  • strong
  • moderate
  • none
  • reduced

emphasis 要素の詳細については、W3 仕様をご覧ください。

次の例では、<emphasis> 要素を使用してアナウンスを行います。

<emphasis level="moderate">This is an important announcement</emphasis>

<par>

一度に複数のメディア要素を再生できるパラレル メディア コンテナです。使用を許可されているコンテンツは、1 つまたは複数の <par><seq><media> 要素のセットに限られています。<media> 要素の順序は重要ではありません。

子要素で異なる開始時刻が指定されていない限り、要素の暗黙の開始時刻は <par> コンテナの開始時刻と同じです。子要素の begin 属性または end 属性にオフセット値が設定されている場合、要素のオフセットは <par> コンテナの開始時刻に対する相対値になります。ルートの <par> 要素については、begin 属性は無視され、代わりに SSML 音声合成プロセスがルートの <par> 要素の出力生成を開始する時刻が開始時刻になります(つまり、時刻を「0」と指定した場合と同じです)。

<speak>
  <par>
    <media xml:id="question" begin="0.5s">
      <speak>Who invented the Internet?</speak>
    </media>
    <media xml:id="answer" begin="question.end+2.0s">
      <speak>The Internet was invented by cats.</speak>
    </media>
    <media begin="answer.end-0.2s" soundLevel="-6dB">
      <audio
        src="https://actions.google.com/.../cartoon_boing.ogg"/>
    </media>
    <media repeatCount="3" soundLevel="+2.28dB"
      fadeInDur="2s" fadeOutDur="0.2s">
      <audio
        src="https://actions.google.com/.../cat_purr_close.ogg"/>
    </media>
  </par>
</speak>

<seq>

メディア要素を次々と順番に再生できるシーケンシャル メディア コンテナ。使用を許可されているコンテンツは、1 つまたは複数の <seq><par><media> 要素のセットに限られています。メディア要素の順序がレンダリングされる順序になります。

子要素の begin 属性と end 属性はオフセット値に設定できます(下の時間指定を参照)。こうした子要素のオフセット値は、シーケンス内の直前の要素の最後からの相対値で、シーケンス内の最初の要素についてはその <seq> コンテナ先頭からの相対値になります。

<speak>
  <seq>
    <media begin="0.5s">
      <speak>Who invented the Internet?</speak>
    </media>
    <media begin="2.0s">
      <speak>The Internet was invented by cats.</speak>
    </media>
    <media soundLevel="-6dB">
      <audio
        src="https://actions.google.com/.../cartoon_boing.ogg"/>
    </media>
    <media repeatCount="3" soundLevel="+2.28dB"
      fadeInDur="2s" fadeOutDur="0.2s">
      <audio
        src="https://actions.google.com/.../cat_purr_close.ogg"/>
    </media>
  </seq>
</speak>

<media>

<par> または <seq> 要素内のメディアレイヤを表します。使用を許可されている <media> 要素のコンテンツは、SSML の <speak> 要素または <audio> 要素です。次の表に、<media> 要素の有効な属性を示します。

属性

属性 必須 デフォルト
xml:id × 値なし この要素の一意の XML 識別子。エンコードされたエンティティはサポートされません。この識別子は正規表現パターン "([-_#]|\p{L}|\p{D})+" と一致する値です。詳細については、XML-ID をご覧ください。
begin × 0 このメディア コンテナの開始時刻。これがルートのメディア コンテナ要素である場合は無視されます(デフォルトの「0」と同じように扱われます)。有効な文字列値については、以下の時間指定セクションをご覧ください。
end × 値なし このメディア コンテナの終了時刻の指定。有効な文字列値については、以下の時間指定セクションをご覧ください。
repeatCount × 1 メディアを挿入する回数を指定する実数。小数の繰り返しはサポートされていないため、値は最も近い整数に丸められます。0 は有効な値ではないため、指定されていないものとして扱われ、その場合はデフォルト値になります。
repeatDur × 値なし 挿入されたメディアの時間制限を示す TimeDesignation。メディアの時間がこの値より短い場合、その時点で再生が終了します。
soundLevel × +0dB soundLevel デシベル単位で音声のサウンドレベルを調整します。最大範囲は +/-40dB ですが、実際の範囲は狭くなることがあり、全範囲にわたって出力品質が良好にならない可能性があります。
fadeInDur × 0 秒 メディアが無音からオプション指定の soundLevel までフェードインする時間を示す TimeDesignation。メディアの時間がこの値より短い場合、フェードインは再生が終了すると停止し、サウンドレベルは指定したレベルに達しません。
fadeOutDur × 0 秒 メディアがオプション指定の soundLevel から無音になるまでフェードアウトする時間を示す TimeDesignation。メディアの時間がこの値より短い場合、再生終了時に無音に到達するようにサウンドレベルを低い値に設定します。

時間指定

<media> 要素とメディア コンテナ(<par> および <seq> 要素)の「begin」または「end」属性値に使われる時間指定は、オフセット値(例: +2.5s)または同期ベース値(例: foo_id.end-250ms)になります。

  • オフセット値 - 時間オフセット値は SMIL Timecount 値で、正規表現パターン "\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*" と一致する値を使用できます。

    最初の数字列は 10 進数の整数部、2 番目の数字列は小数部分です。符号(「(」、「+」、「|」、「-」、「)」、「?」など)のデフォルトは「+」です。単位値はそれぞれ、時、分、秒、ミリ秒に相当します。単位のデフォルトは「s」(秒)です。

  • 同期ベース値 - 同期ベース値は SMIL 同期ベース値で、正規表現パターン "([-_#]|\p{L}|\p{D})+\.(begin|end)\s\*(+|-)\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*" と一致する値を使用できます

    数字と単位は、オフセット値と同様に解釈されます。

<phoneme>

<phoneme> タグを使用して、一列に並んだ単語のカスタム発音を生成できます。Cloud TTS では、IPA 音素と X-SAMPA 音素(アルファベット)で表記されます。サポート対象の言語と音素の一覧については、音素のページをご覧ください。

<phoneme> タグを適用すると、それぞれが 1 つの単語の発音を示します。

  <phoneme alphabet="ipa" ph="ˌmænɪˈtoʊbə">manitoba</phoneme>
  <phoneme alphabet="x-sampa" ph='m@"hA:g@%ni:'>mahogany</phoneme>

アクセント マーカー

音声文字変換では、次の 3 レベルまでのアクセントが指定できます。

  1. 第一アクセント: IPA では /~/、X-SAMPA では /"/ で表します。
  2. 第二アクセント: IPA では /\/、X-SAMPA では /%/ で表します。
  3. 無強勢: どちらの表記でも、記号はありません。

言語によっては、3 レベル未満の場合やアクセントの位置が指定されない場合もあります。ご使用の言語で利用できるアクセントのレベルについては、音素のページをご覧ください。アクセント マーカーは、強勢がある音節の始めに置かれます。たとえば、米国英語の場合:

単語の例 IPA X-SAMPA
water ˈwɑːtɚ "wA:t@`
underwater ˌʌndɚˈwɑːtɚ %Vnd@"wA:t@

簡略表記と精密表記

一般的なルールとして、音声表記は簡略化し、音素は実際のとおりにします。たとえば、米国英語では、弾音の代わりに母音間に /t/ を表記します。

単語の例 IPA X-SAMPA
butter ˈbʌɾɚ ではなく bʌtɚ "bV4@` ではなく "bVt@`

音素表示を使用すると、TTS の結果が不自然な音声になることもあります(たとえば、音素のシーケンスが解剖学的な観点から発音が難しい場合)。

その一例が、英語の /s/ の有声音の吸収です。この場合、吸収を音声表記に反映する必要があります。

単語の例 IPA X-SAMPA
cats ˈkæts "k{ts
dogs ˈdɑːgs ではなく ˈdɑːgz "dA:gs ではなく "dA:gz

短縮

すべての音節には、母音を 1 つだけ含める必要があります。つまり、音節子音を避けて、代わりに弱化母音で音声表記します。次に例を示します。

単語の例 IPA X-SAMPA
kitten ˈkɪtn ではなく ˈkɪtən "kitn ではなく "kIt@n
kettle ˈkɛtl ではなく ˈkɛtəl "kEtl ではなく "kEt@l

分節法

オプションで /./ を使用して音節境界を指定することもできます。各音節には、母音を 1 つだけ含める必要があります。次に例を示します。

単語の例 IPA X-SAMPA
readability ˌɹiː.də.ˈbɪ.lə.tiː %r\i:.d@."bI.l@.ti:

カスタム発音辞書

phoneme タグで発音をインラインで指定する代わりに、音声合成 RPC でカスタム発音の辞書を指定します。カスタム発音辞書がリクエストに含まれている場合、入力テキストは SSML phoneme タグで自動的に変換されます。

たとえば、テキスト入力とカスタム発音を含む次のリクエストは変換され、次の SSML と同等になります。

元の入力:

input: {
  text: 'Hello world! It is indeed a beautiful world!',
  custom_pronunciations: {
    pronunciations: {
      phrase: 'world'
      phonetic_encoding: PHONETIC_ENCODING_IPA
      pronunciation: 'wɜːld'
    }
  }
}

変換後の入力:

input: {
  ssml: '<speak>Hello <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>! It is indeed a beautiful <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>!</speak>'
}

時間

Cloud Text-to-Speech では、時間を正しく読み取るために <say-as interpret-as="duration"> がサポートされます。たとえば、次の例は「5 時間 30 分」と言語化されます。

<say-as interpret-as="duration" format="h:m">5:30</say-as>

形式設定文字列は次の値をサポートしています。

略語
h 時間
m
s
ms ミリ秒

<voice>

<voice> タグを使用すると、1 つの SSML リクエストで複数の音声を使用できます。次の例では、デフォルトの音声は英語の男性の音声です。すべての単語はこの音声で合成されていますが、「qu'est-ce qui t'amène ici」は例外です。これは、デフォルトの言語(英語)と性別(男性)ではなく、女性の音声のフランス語で言語化されます。

<speak>And then she asked, <voice language="fr-FR" gender="female">qu'est-ce qui
t'amène ici</voice><break time="250ms"/> in her sweet and gentle voice.</speak>

また、<voice> タグを使用して、languagegender ではなく個々の音声(サポートされている音声ページ音声名)を指定できます。

<speak>The dog is friendly<voice name="fr-CA-Wavenet-B">mais la chat est
mignon</voice><break time="250ms"/> said a pet shop
owner</speak>

<voice> タグを使用すると、Cloud TTS は name(使用する音声の名前または次の属性の組み合わせを想定します。次の 3 つの属性はすべてオプションですが、name を指定しない場合は、少なくとも 1 つを指定する必要があります。

  • gender: 「男性」、「女性」、「中性」のいずれか。
  • variant: 構成に基づいて使用可能な音声が複数存在する場合に、タイブレーカーとして使用されます。
  • language: 目的の言語。特定の <voice> タグで指定できる言語は 1 つのみです。言語を BCP-47 形式で指定します。言語の BCP-47 コードは、サポートされている音声と言語のページ言語コード列で確認できます。

requiredordering の 2 つの追加タグを使用して、gendervariantlanguage の各属性の相対的な優先度を制御することもできます。

  • required: 属性が required として指定され、適切に構成されていない場合、リクエストは失敗します。
  • ordering: ordering タグの後に記述した属性はすべて、必須属性ではなく、推奨属性と見なされます。Cloud Text-to-Speech API は、ordering タグの後にある順序で推奨属性を考慮しますが、この処理はベスト エフォート ベースで行われます。推奨属性が正しく構成されていない場合でも、Cloud TTS は誤った構成を削除し、有効な音声を返す場合があります。

required タグと ordering タグを使用した構成例:

<speak>And there it was <voice language="en-GB" gender="male" required="gender"
ordering="gender language">a flying bird </voice>roaring in the skies for the
first time.</speak>
<speak>Today is supposed to be <voice language="en-GB" gender="female"
ordering="language gender">Sunday Funday.</voice></speak>

<lang>

<lang> を使用すると、同じ SSML リクエスト内に複数の言語のテキストを含めることができます。<voice> タグを使って音声を明示的に変更しない限り、すべての言語が同じ音声で合成されます。xml:lang 文字列には、対象言語を BCP-47 形式で含める必要があります(この値はサポートされている音声の表の「言語コード」で確認できます)。次の例では、「chat」はデフォルト言語(英語)ではなくフランス語で言語化されます。

<speak>The french word for cat is <lang xml:lang="fr-FR">chat</lang></speak>

Cloud Text-to-Speech は、ベストエフォート ベースで <lang> タグをサポートしています。同じ SSML リクエストに指定した場合、すべての言語の組み合わせで同じ品質の結果が生成されるわけではありません。言語の組み合わせによっては、微妙な結果やネガティブな結果になることがあります。報告されている問題:

  • <lang> タグは、日本語の漢字をサポートしていません。入力は中国語の文字として文字変換され、読み取られます。
  • アラビア語、ヘブライ語、ペルシャ語などのセム語は <lang> タグでサポートされていないため、無音になります。これらの言語のいずれかを使用する場合は、<voice> タグを使用して、目的の言語の音声に切り替えることをおすすめします(利用可能な場合)。

SSML タイムポイント

Text-to-Speech API では、作成した音声データ内のタイムポイントを使用できます。タイムポイントは、指定されたポイントに対応するスクリプト内のタイムスタンプ(生成された音声の先頭からの秒数)です。<mark> タグを使用すると、スクリプトにタイムポイントを設定できます。音声が生成されると、API は音声の開始からタイムポイントまでの時間オフセットを返します。

タイムポイントを設定するには、次の 2 つの手順を行います。

  1. タイムスタンプを取得するスクリプト内のポイントに <mark> SSML タグを追加します。
  2. TimepointTypeSSML_MARK に設定します。このフィールドが設定されていない場合、タイムポイントはデフォルトで返されません。

次の例は、2 つのタイムポイントを返します。

  • timepoint_1: 生成された音声に「Mark」という単語が出現する時間(秒単位)を示します。
  • timepoint_2: 生成された音声に「see」という単語が出現する時間(秒単位)を示します。
<speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark
name="timepoint_2"/> see you.</speak>

スタイル

次の音声は複数のスタイルで発話できます。

  1. en-US-Neural2-F
  2. en-US-Neural2-J

<google:style> タグを使用して、使用するスタイルを制御します。タグは完全な文章の前後に使用してください。

例:

<speak><google:style name="lively">Hello I'm so happy today!</google:style></speak>

name フィールドは、次の値をサポートしています。

  1. apologetic
  2. calm
  3. empathetic
  4. firm
  5. lively