Edited at

SSMLで発話できない文字を発話する方法

こんにちは。SSMLいいですよね。

先日、Googleアシスタントは数字を何桁まで発話してくれるのか試してみた所、1000兆円まで発話してくれました。

でも、それ以上になると、数値として読み上げてくれません。

// センチョウエン

<say-as interpret-as="cardinal">1000000000000000</say-as>円

// イチゼロゼロゼロゼロゼロ・・・エン
<say-as interpret-as="cardinal">1000000000000000</say-as>円

なんとかしてその上の桁の を読み上げさせてみましょう。

※ 記事全体で <speak> タグは省略しております。


結論

100<sub alias="ガイ円">垓円</sub>

これで 100垓円ヒャクガイエン と発話してくれます。

なぜこういうSSMLになったのかを以下で説明します。


そもそも発話できない

どうやらGoogleアシスタントは を発話できないようです。

漢数字を調べてみた所 𥝱 が発話できませんでした。

これでは 100垓円 と読み上げてもらえません。


SSMlのsubを使ってみる

subとは、文字の読みと書きを指定できるタグです。

<sub alias="World Wide Web Consortium">W3C</sub>

例えばこれで W3CWorld Wide Web Consortium と読ませる事ができます。

さっそく、subを使って ガイ と発話させてみましょう。


パターン1

<sub alias="ガイ">垓</sub>

・・・?なんも発話してくれません。

どうやら読めない文字に対してsubは有効にならないようです。


パターン2

<sub alias="ヒャクガイエン">100垓円</sub>

お!この指定だとちゃんと ヒャクガイエン と発話してくれました。

しかし100の読みすら指定するのは骨が折れます。

もっといい方法を探しましょう。


パターン3

100<sub alias="ガイ">垓</sub>

これはどうでしょうか?

・・・なんも発話しれくれませんね。

読めない文字の前に数値を置いてもダメなようです。


パターン4

ヒャク<sub alias="ガイ">垓</sub>

これは ヒャク としか発話してくれません。


パターン5

100<sub alias="ガイエン">垓円</sub>

これはなんと エン としか発話してくれません。

なんでや。

しかし少し答えに近づいてきたような気もします。


パターン6

<say-as interpret-as="cardinal">100</say-as><sub alias="ガイエン">垓円</sub>

100をsay-asで囲むとなんと ヒャクエン と発話しました。

いなくなってしまった のこと、時々でいいから…思い出してください。

※ say-asタグは文字の型を指定できます。今回は100を基数と指定しました。


パターン7

<say-as interpret-as="cardinal">100</say-as><sub alias="ガイ円">垓円</sub>

思いつきでsubのaliasの ガイエンガイ円 にしてみた所、なんと無事に ヒャクガイエン と発話しました!

謎仕様ですが、おめでとう自分!


最終パターン

100<sub alias="ガイ円">垓円</sub>

say-as必要ないのでは?と思ったので外してみたら、無事にこちらも ヒャクガイエン と発話しました!

完成です!


おわり

SSML、楽しいですが、謎ですね。

発話してくれない文字があったら、今回の方法を試してみて下さい。