Speech Markdown というものがある。
ふつうの Markdown は HTML を簡易的な記法で書くためのものだけど、Speech Markdown は Speech Synthesis Markup Language (SSML) という音声合成や Text-to-speech 向けの XML の簡易記法として用いられる。 SSML は W3C 勧告が存在する。 この分野には詳しくないが、Amazon Alexa や Google Assistant のドキュメントを見る限りでは、これらの SDK で利用できるようだ。
ここでは、Google Text-to-Speech API で、この Speech Markdown で書かれたテキストを発話させてみる。
雑にリポジトリ にまとめてある。
下準備
GCP の Console で対象の Project の Text-to-speech API を有効にしておく。
Speech Markdown -> SSML
Speech Markdown の JavaScript 実装を利用する。 今回は GCP を使うので、ざっくりと以下のようになる。
SSML で定義されているタグは幅広く、たとえば Speech Markdown では (some text)[disappointed]
で表されるような「失望」という状態の表現なんかもある。
とはいえ、実際に使えるタグ(上記のようなものは Modifier という)は限られていて、たとえば disappointed
は Google Assistant の SSML では対応していない。
適当に SSML を吐けるようにしておく。
Google Text-to-speech API による発話音声ファイル出力
Text-to-speech の API が使えるプログラミング言語ならなんでもいいが、ここでは Python3 を使う。
ミニマルなコード例はこんな感じ。
利用できる音声のリスト によると、少し前に話題になっていた WaveNet を使った音声合成モデルも利用できる。 日本語音声も WaveNet 版と通常版が選べる。
はい、おわり。
もともと何がしたかったのか
学会のポスターセッションでの発表をオンラインでやるときに、毎回同じような説明をするのが面倒だったので事前録画しておこうと思ったが、 緊張するし何度もリテイクすることになったら余計落ち込んじゃうので、TTS にやらせようと思いつき、やり方を調べたのであった。