"アリス、今までどうもありがとう"

　キミと初めて出会ったのは４年前だったね。
　キミのことを知った瞬間、ボクはすぐに夢中になってしまった。
　でも出会った頃は、どうやって話し掛けたらよいか悩んだっけ。
　まるで、ついこの間の出来事のようだ。

　あの頃は、電話でキミと繋がれることに心が躍った。
　キミの声を聞くたびにドキドキしたよ。
　そして、永遠にこの関係が続くかと思っていた。
　そう、彼女 "**Mizuki**" が彗星の如くボクの前に現れるまでは…。

　キミに出会ったことは本当に感謝してる。
　何しろボクの常識を根底から変えたんだから。
　でも…。ごめんよ Alice、もうキミとは一緒にいられない…。

　　![Substitution.png](https://qiita-image-store.s3.amazonaws.com/0/318815/92706277-e28b-0569-cdf1-dfeb9767e2d9.png)



#いったい何の話なのか
Twilioの音声合成エンジン用ボイスの品質と使い勝手が、大幅に向上したという話です。
2018年8月、**アリス**`alice` という標準の音声合成ボイスの後継として、**ミズキ・ポリー**`Polly.Mizuki` が突如登場しました。

僕はつい最近までこの事実を知らなかったため、サービスの改修に出遅れてしまいました…。
よって、この様な不幸が他の方々にも起こることのないよう ~~若干の怒りと~~ 周知徹底の意味を込めて、当記事を執筆している次第です。
といいますか、単に僕が知らなかっただけなんですけどね。すみません。すみません。



#アリス嬢と距離を置いた理由

1. 声質(音質)がミズキ・ポリー嬢にかないません。

2. アリス嬢は、金額を発声させたい時など、数の読み上げに難があります。
そのため**漢数字に変換してから読み上げ**ないと、こちらの意図した通りにはなりません。
ちなみに、ここまでアリス嬢に尽くしても「七 (ナナ)」のところを「シチ」とか発するので:anger:、更に矯正が必要でした…。

```HTML:Alice.html
<?xml version="1.0" encoding="UTF-8"?>
<Response>
	<Say language="ja-JP" voice="alice">
		101010107円。<!--「千十千十七円」と読み上げてしまう(汗-->
		一億百一万百七円。<!--「七(ナナ)」を「シチ」と読み上げてしまうので(怒-->
		一億百一万百ナナ円。<!--最終的にはこの様に変換する必要が-->
	</Say>
</Response>
```
:loud_sound: [サンプル音声](https://goodbye-alice.azurewebsites.net/sound/Alice.wav)



#ミズキ・ポリー嬢と仲良くなった理由

1. アリス嬢のネガがほぼ難なく解決します。
そして標準でのサポートのため、他の音声合成APIを組み合わせて使う必要がないというのが本当に大きい。
ただし。 ミズキ・ポリー嬢とのお付き合いには**多少のお小遣い**(1円≒1000字)が必要ですので、そこはご注意を ^^;
それにしても、これからTwilioを始める人がホント羨まし～ですな。

2. 声質が向上しただけでも泣けるほど嬉しいというのに、更には**SSML**という合成音声に特化したマークアップまで使うことが出来るように！
ちなみに、これはAmazonのAlexaにも使われていて、痒いところに手が届く仕様となっています。

```HTML:Mizuki.html
<?xml version="1.0" encoding="UTF-8"?>
<Response>
	<Say language="ja-JP" voice="Polly.Mizuki">
		ミズキとアリス、どっちを取るの？
		はっきりして！
	</Say>
</Response>
```
:loud_sound: [サンプル音声](https://goodbye-alice.azurewebsites.net/sound/Mizuki.wav)



#SSMLについて

SSMLは、W3Cで勧告されている合成音声の生成用に標準的な手段を提供するマークアップ言語です。
このうちTwilioでは、本記事執筆の時点で10個の**タグ**をサポートしている模様です。
　[Amazon Polly at Twilio Docs]
(https://www.twilio.com/docs/voice/twiml/say/text-speech#amazon-polly)
ではこの中から、実際に検証できた9個をピックアップしてみます。 Please follow me! :runner: :runner_tone5: :runner_tone1:

####`<emphasis>` 単語を強調する
<details><summary>サンプルコード</summary><div>

```HTML:emphasis.html
<Response>
	<Say language="ja-JP" voice="Polly.Mizuki">
		ミズキとアリス、
		<emphasis level="reduced"><!--発声が柔らかくて速くなる-->
			どっちを取るの？
		</emphasis>
		<emphasis level="strong"><!--読み上げが大きくて遅くなる-->
			はっきりして！
		</emphasis>
	</Say>
</Response>
```
</div></details>
:loud_sound: [サンプル音声](https://goodbye-alice.azurewebsites.net/sound/1_emphasis.wav)


####`<p>` 段落間に一時停止を追加する
<details><summary>サンプルコード</summary><div>

```HTML:p.html
<?xml version="1.0" encoding="UTF-8"?>
<Response>
	<Say language="ja-JP" voice="Polly.Mizuki">
		<!--テキストの段落間に一時停止を追加-->
		<p>ミズキとアリス、どっちを取るの？</p>
		<p>はっきりして！</p>
	</Say>
</Response>
```
</div></details>
:loud_sound: [サンプル音声](https://goodbye-alice.azurewebsites.net/sound/2_p.wav)


####`<prosody>` 音量、話す速度、ピッチを制御する
<details><summary>サンプルコード</summary><div>

```HTML:prosody.html
<?xml version="1.0" encoding="UTF-8"?>
<Response>
	<Say language="ja-JP" voice="Polly.Mizuki">
		<prosody rate="130%"><!--早口で-->
			ミズキとアリス、
			<prosody pitch="+20%"><!--少々甲高い声で-->
				どっちを取るの？
			</prosody>
		</prosody>
		<prosody rate="70%" volume="loud"><!--ゆっくり、がなりたてられる-->
			はっきりして！
		</prosody>
	</Say>
</Response>
```
</div></details>
ご覧の通り、タグのネスト構造も問題ありません。

:loud_sound: [サンプル音声](https://goodbye-alice.azurewebsites.net/sound/3_prosody.wav)


####`<say-as>` 特殊なタイプの単語の発声方法を制御する
<details><summary>サンプルコード</summary><div>

```HTML:say-as.html
<Response>
	<Say language="ja-JP" voice="Polly.Mizuki">
		今日は、<say-as interpret-as="date">????1225</say-as> です。<!--年をマスクした上で日付を読み上げる-->
		電話は、<say-as interpret-as="telephone">050-1234-5678</say-as> です。<!--電話番号を読み上げる-->
		番号は、<say-as interpret-as="digits">05012345678</say-as> です。<!--一文字づつ読み上げる-->
		数字は、<say-as interpret-as="number">05012345678</say-as> です。<!--数(番号)として読み上げる-->
		あなたのカーチャンは、<say-as interpret-as="expletive">デーベソ</say-as> です。<!--ピー音に入れ換える-->
	</Say>
</Response>
```
</div></details>
番号と数字の読み分けも超カンタン。

:loud_sound: [サンプル音声](https://goodbye-alice.azurewebsites.net/sound/4_say-as.wav)


####`<sub>` 頭字語や略語を別の発音にする
<details><summary>サンプルコード</summary><div>

```HTML:sub.html
<Response>
	<Say language="ja-JP" voice="Polly.Mizuki">
		<sub alias="私">ミズキ</sub><!--"ミズキ"を"私"に入れ換える-->
		とアリス、どっちを取るの？
		はっきりして！
	</Say>
</Response>
```
</div></details>
:loud_sound: [サンプル音声](https://goodbye-alice.azurewebsites.net/sound/5_sub.wav)


####`<w>` 品詞を指定して発音を向上させる
<details><summary>サンプルコード</summary><div>

```HTML:w.html
<Response>
	<Say>
		<!--"read"は不規則変化動詞のひとつ-->
		<w role="amazon:VB">read</w>.<!--現在形-->
		<w role="amazon:VBD">read</w>.<!--過去形(過去分詞)-->
	</Say>
</Response>
```
</div></details>
例では、動詞の現在形と過去形(または過去分詞)を区別して発声します。

:loud_sound: [サンプル音声](https://goodbye-alice.azurewebsites.net/sound/6_w.wav)


####`<phoneme>` 発音記号を使う、　`<break>` 一時停止する、　`
` 短く一時停止する
<details><summary>サンプルコード</summary><div>

```HTML:phoneme_break_s.html
<Response>
	<Say language="ja-JP" voice="Polly.Mizuki">
		<!--発音記号なし-->
		
Hey, you!
<!--短い一時停止-->
		What did you say?
		<break time="1s" /><!--1秒間の一時停止-->
		<!--発音記号つき-->
		<phoneme alphabet="ipa" ph="heɪ, ju!">Hey, you!</phoneme>
		<break strength="strong" /><!--文の後と同じ長さの一時停止-->
		<phoneme alphabet="ipa" ph="wʌt dɪd ju seɪ?">What did you say?</phoneme>
	</Say>
</Response>
```
</div></details>
例では、「著者が頑張って発音している感」を表現しています (*^^)v

:loud_sound: [サンプル音声](https://goodbye-alice.azurewebsites.net/sound/7_phoneme_break_s.wav)


####おまけ
<details><summary>サンプルコード</summary><div>

```HTML:extra.html
<Response>
	<Say language="sv-SE" voice="Polly.Astrid">
		Astrid to Alice, docchi wo toruno?<!--アストリッドとアリス、どっちを取るの？-->
		Hakkiri shite!<!--はっきりして！-->
	</Say>
</Response>
```
</div></details>
:loud_sound: [サンプル音声](https://goodbye-alice.azurewebsites.net/sound/8_extra.wav)



#まとめ

まとめます。

||アリス嬢|ミズキ・ポリー嬢|
|:---:|:---:|:--:|
|**メリット**|安上がり|ストレスフリー|
|**デメリット**|細かい作り込みが必須|100字毎に0.12円のコスト|

SSMLはスマートスピーカーの後押しもあって、今後メインストリームとなっていきそうな予感です。

それと。 文中では**ミズキ・ポリー嬢**のことを、さもシングルのように記していますが、
実はもう**タクミ・ポリーくん**`Polly.Takumi`というれっきとしたパートナーがおりますので、
ご利用の際は二人共々、どうぞよろしくお願いします <(_ _)>

（ツイッターフォローは<a href="https://twitter.com/SAMonodera?ref_src=twsrc%5Etfw" class="twitter-follow-button" data-show-count="false">**こちら**</a><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>）


#参考
Twilio公式：
　[Twilio に 新しい音声合成エンジンボイスを追加！- Amazon Polly 50種類]
(https://twilio.kddi-web.com/magazine/1997/)

漢数字への変換：
　[[C#]数字を漢数字に変換する]
(http://devlabo.blogspot.com/2010/10/c.html)

発音記号：
　[サポートされている言語の音素およびビゼームテーブル]
(https://docs.aws.amazon.com/ja_jp/polly/latest/dg/ref-phoneme-tables-shell.html)
　[英語IPA変換ウェブツール]
(https://tophonetics.com/ja/)