【GCP】Text-to-Speechに色々喋らせて違いを比較してみた

IT活用術
スポンサーリンク

Google Cloud Next ’19 in Tokyo間近という事で、Google Cloud Platformで遊んでみたいと思います。

楽しそうなAPIがたくさんありますが、最近興味のある文字から音声への変換ができる「Text-to-Speech API」を試してみることにしました。

Text-to-Speech AI: 自然な音声合成 | Google Cloud
Turn text into natural-sounding speech in 220+ voices across 40+ languages and variants with an API powered by Google’s ...

色々と試してみると、SSMLで喋り方を制御できるという事です。Googleさんがヘルプも用意してくれています!

音声合成マークアップ言語(SSML)  |  Cloud Text-to-Speech API  |  Google Cloud

しかし・・・このGoogleのヘルプが分かりにくい。この属性はこういう意味だと書いてあるのですが、サッパリな上に色々な音声の比較が無いので、「何がどう変わってるの?」と言う状態。

こちとら文字だけでイメージできるほど頭良くないのよ!!と思いつつ、だったら自分で色々と試してみちゃえば良いかって事で、気になるタグや属性を色々変えて喋らせてみて、何がどう変化するのかまとめてみました。

スポンサーリンク

<P><S>タグ

文と段落の要素とあります。<S>が文(Sentence)<P>が段落(Paragraph)ですね。

実際にPタグとSタグで括った時、括らない時でどんな差が出るのでしょうか?

実際に次のようなSSMLを作成して、音声に変換してみました。

{
  "audioConfig": {
    "audioEncoding": "MP3",
    "pitch": "0.00",
    "speakingRate": "1.00"
  },
  "input": {
    'ssml':'<speak>
        文と段落を設定しない場合は、こういう感じになります。 
        段落1の文章1です。段落1の文章2です。 
        段落2の文章1です。段落2の文章2です。 
        <break time="1s"/>
        続けて、文と段落を設定する場合は、こういう感じになります。
        <p><s>段落1の文章1です。</s><s>段落1の文章2です。</s></p>
        <p><s>段落2の文章1です。</s><s>段落2の文章2です。</s></p>
        何か変化があったでしょうか?
    </speak>'
  },
  "voice": {
    "languageCode": "ja-JP",
    "name": "ja-JP-Standard-C"
  }
}

では、聞き比べてみましょう。

お聴きの通り何の変化もありませんね。

この様に何か意味があるのかと思いきややってみるとそうでもないと言うのもあるので、実際に試すことは大切ですよね。

<prosody>タグ

喋る速さ、声の高さ、声の大きさを指定します。

属性 効果
rate 発話速度
pitch ピッチ
volume 音量

それぞれの属性ごとに設定が可能です。実際に変更するとどうなっていくのか?を試してみたいと思います。

rate=発話速度

rateは発話速度を変更できる。喋るスピードです。

設定出来る値は次の通りです。

  • x-slow
  • slow
  • medium
  • fast
  • x-fast
  • default

slowとかfastって言われてもわからん!と思うので聞き比べてみましょう。

{
  "audioConfig": {
    "audioEncoding": "MP3",
    "pitch": "0.00",
    "speakingRate": "1.00"
  },
  "input": {
    'ssml':'<speak>
        <prosody rate="x-slow">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
        <prosody rate="slow">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
        <prosody rate="medium">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
        <prosody rate="fast">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
        <prosody rate="x-fast">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
        <prosody rate="default">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
    </speak>'
  },
  "voice": {
    "languageCode": "ja-JP",
    "name": "ja-JP-Standard-C"
  }
}

実際に聴いてみましょう。

かなり変化ありますね。

pitch=ピッチ

ピッチは声の高さになります。相対値指定、セミトーン指定、パーセント指定と3つの指定方法がありますが、実際にどう指定いいか。試すのが一番だよね!って事で試します。

相対値指定

相対値指定で指定できるのは次の値です。

  • x-low
  • low
  • medium
  • high
  • x-high
  • default

x-lowからx-highの順に高くなるみたいですが、実際にどれくらいの高さなのか?次のサンプルで試してみましょう。

{
  "audioConfig": {
    "audioEncoding": "MP3",
    "pitch": "0.00",
    "speakingRate": "1.00"
  },
  "input": {
    'ssml':'<speak>
        <prosody pitch="x-low">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
        <prosody pitch="low">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
        <prosody pitch="medium">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
        <prosody pitch="high">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
        <prosody pitch="x-high">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
        <prosody pitch="default">こんにちは。今日もいい天気ですね。外に遊びに行きましょう。</prosody>
    </speak>'
  },
  "voice": {
    "languageCode": "ja-JP",
    "name": "ja-JP-Standard-C"
  }
}

こんな感じになります。

セミトーン指定

セミトーン指定。

またわからんものが出てきました。

+Nst -Nst

Nが数値の様です。プラスの場合も”+”を付ける必要がある様です。

ってどれだけ変化させたらどれだけ変わるのか?こんなもん検証してみないとわかるわけないやん!!

って事で検証してみましょう。

{
  "audioConfig": {
    "audioEncoding": "MP3",
    "pitch": "0.00",
    "speakingRate": "1.00"
  },
  "input": {
    'ssml':'<speak>
        <prosody pitch="-10st">マイナス10セミトーン。こんな高さです。</prosody>
        <prosody pitch="-5st">マイナス5セミトーン。こんな高さです。</prosody>
        <prosody pitch="+0st">0セミトーン。こんな高さです。</prosody>
        <prosody pitch="+5st">プラス5セトーン。こんな高さです。</prosody>
        <prosody pitch="+10st">プラス10セミトーン。こんな高さです。</prosody>
    </speak>'
  },
  "voice": {
    "languageCode": "ja-JP",
    "name": "ja-JP-Standard-C"
  }
}

パーセント指定

パーセントです。何を持っての比率なのかわかりませんが、次のように指定します。

N% -N%

パーセントはセミトーンと違ってプラスの場合は+をつけなくて良いようですね。

{
  "audioConfig": {
    "audioEncoding": "MP3",
    "pitch": "0.00",
    "speakingRate": "1.00"
  },
  "input": {
    'ssml':'<speak>
        <prosody pitch="-100%">マイナス100%。こんな高さです。</prosody>
        <prosody pitch="-50%">マイナス50%。こんな高さです。</prosody>
        <prosody pitch="0%">0%。こんな高さです。</prosody>
        <prosody pitch="50%">プラス50%。こんな高さです。</prosody>
        <prosody pitch="100%">プラス100%。こんな高さです。</prosody>
    </speak>'
  },
  "voice": {
    "languageCode": "ja-JP",
    "name": "ja-JP-Standard-C"
  }
}

volume=音量

音量です。まんまですね。これはまんまです。でも実際にどれくらいの変化があるのかは聞いてみないとわからないですよね。と言う訳で実験です。

相対値指定

相対値指定では次の7つの値を設定する事が可能です。

  • silent
  • x-soft
  • soft
  • medium
  • loud
  • x-loud
  • default

silent→x-soft→soft→medium→loud→x-loudの順に大きくなります。

どんな変化があるんでしょうか?

{
  "audioConfig": {
    "audioEncoding": "MP3",
    "pitch": "0.00",
    "speakingRate": "1.00"
  },
  "input": {
    'ssml':'<speak>
        <prosody volume="silent">設定値サイレントです。大きさの変化に耳を傾けて下さい。 </prosody>
        <prosody volume="x-soft">設定値x-softです。大きさの変化に耳を傾けて下さい。 </prosody>
        <prosody volume="soft">設定値softです。大きさの変化に耳を傾けて下さい。 </prosody>
        <prosody volume="medium">設定値mediumです。大きさの変化に耳を傾けて下さい。 </prosody>
        <prosody volume="loud">設定値loudです。大きさの変化に耳を傾けて下さい。 </prosody>
        <prosody volume="x-loud">設定値x-loudです。大きさの変化に耳を傾けて下さい。 </prosody>
        <prosody volume="default">設定値defaultです。大きさの変化に耳を傾けて下さい。 </prosody>
    </speak>'
  },
  "voice": {
    "languageCode": "ja-JP",
    "name": "ja-JP-Standard-C"
  }
}

う~ん、medium以降は変化がありませんね。どういうことでしょうか?

dB指定

デシベルですね。

+NdB -NdB

まぁ、これは分かり易いですよね。でもどれくらい?と言うのがあるのでやってみました。

{
  "audioConfig": {
    "audioEncoding": "MP3",
    "pitch": "0.00",
    "speakingRate": "1.00"
  },
  "input": {
    'ssml':'<speak>
        <prosody volume="-10dB">音量の実験をしています。マイナス10デシベルです。</prosody>
        <prosody volume="+5dB"> 音量の実験をしています。プラス5デシベルの指定です。</prosody>
        <prosody volume="+5dB"> 音量の実験をしています。さらにプラス5デシベルの指定です。</prosody>
    </speak>'
  },
  "voice": {
    "languageCode": "ja-JP",
    "name": "ja-JP-Standard-C"
  }
}

やってみたら全然わからない。

マイナスは小さくなりますが、プラスにした途端なんにも変化がありませんね。

<emphasis>タグ

強調の追加、削除と言っていますがピンときませんね。

実際に聞き比べてみましょう!

このタグにlevel属性で指定する様です。

指定できる値は次の4つ。

  • strong
  • moderate
  • none
  • reduced
{
  "audioConfig": {
    "audioEncoding": "MP3",
    "pitch": "0.00",
    "speakingRate": "1.00"
  },
  "input": {
    'ssml':'<speak>
        <emphasis level="strong">強調タグにstrongを設定してみました。どのように読み上げるのでしょうか?</emphasis>
        <emphasis level="moderate">強調タグにmoderateを設定してみました。どのように読み上げるのでしょうか?</emphasis>
        <emphasis level="none">強調タグにnoneを設定してみました。どのように読み上げるのでしょうか?</emphasis>
        <emphasis level="reduced">強調タグにreducedを設定してみました。どのように読み上げるのでしょうか?</emphasis>
    </speak>'
  },
  "voice": {
    "languageCode": "ja-JP",
    "name": "ja-JP-Standard-C"
  }
}

なんか不思議な感じですね。

抑揚を強めていると言えばそんな感じですね。早口になっている気もしますが・・・

まとめ

いやぁ、やっぱりやってみないとわからん事沢山ありますね。

組み合わせなどで色々変化があるんでしょうか?

ななかなか面白いですね。

よろしければ拡散お願いします!

最後まで記事を読んでいただき本当にありがとうございます。

本記事が「役に立った」「楽しかった」と思っていただけたらTwitterなどで他の方へ記事を紹介、拡散していただけると嬉しいです。

下にある「シェアする」のボタンを利用していただくと簡単です。

あなたの拡散がブログ継続の原動力になっています。

ブログランキング・にほんブログ村へ
にほんブログ村

IT活用術
スポンサーリンク
シェアする
メリ爺をフォローする
空と僕の記憶

コメント