Raspberry Piを喋らせよう

###Google Cloud APIを利用すると簡単にRaspberry PIに日本語音声合成機能を追加することができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/2649d2ea-848b-4fbc-d3e8-f5ce032ecd14.png)

#準備 インストールAPI
```command
sudo  pip install google-cloud-texttospeech
```
## サポートされている声の種類は、ja-JP-Wavenet-A,ja-JP-Wavenet-B,ja-JP-Wavenet-C,ja-JP-Wavenet-Dの4種類です。
```tts1.py
#!/usr/local/bin/python3.6
from google.cloud import texttospeech as tts
import sys,subprocess as proc
client = tts.TextToSpeechClient()
audio_config = tts.types.AudioConfig(audio_encoding=tts.enums.AudioEncoding.LINEAR16)
text="この釘はひきぬきにくい釘だ"
itext = tts.types.SynthesisInput(text=text)
for nm in 'ABCD':
    print("ja-JP-Wavenet-"+nm)
    voice = tts.types.VoiceSelectionParams(language_code='ja-JP',name='ja-JP-Wavenet-'+nm)
    resp = client.synthesize_speech(itext, voice, audio_config)
    with open('temp.wav', 'wb') as out:
        out.write(resp.audio_content)
    proc.call("aplay -q temp.wav", shell=True)
```
##サンプル音声

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">プログラム作成中 <a href="https://t.co/EQmUNMteyV">pic.twitter.com/EQmUNMteyV</a></p>&mdash; utaca.rich (@RichUtaka) <a href="https://twitter.com/RichUtaka/status/1124199669674827776?ref_src=twsrc%5Etfw">May 3, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
追加の設定
1.speaking_rate
-[0.25、4.0]の範囲内のオプションの発話速度/速度。1.0は、特定の音声でサポートされている通常のネイティブ速度です。2.0は2倍、0.5は半分です。未設定（0.0）の場合、デフォルトはネイティブの1.0の速度になります。0.25未満または4.0より大きい他の値はエラーを返します。
2.pitch 
[-20.0、20.0]の範囲内のオプションの発声ピッチ。20は、元のピッチから20半音増加することを意味します。-20は、元のピッチから20半音を減らすことを意味します。

``` tts2.py
#!/usr/local/bin/python3.6
from google.cloud import texttospeech as tts
import sys,subprocess as proc
import os
client = tts.TextToSpeechClient()
audio_config = tts.types.AudioConfig(audio_encoding=tts.enums.AudioEncoding.LINEAR16,pitch=0.5)
p=0
rate=0.25
nm="C"
text='かえるぴょこぴょこみ ぴょこぴょこ あわせてぴょこぴょこむぴょこぴょ'
while rate<4.0:
    try:
        audio_config = tts.types.AudioConfig(audio_encoding=tts.enums.AudioEncoding.LINEAR16,
                                    pitch=p,speaking_rate=rate)
        rate+=0.25
        print("rate=",rate)
        itext = tts.types.SynthesisInput(text=text)
        voice = tts.types.VoiceSelectionParams(language_code='ja-JP',name='ja-JP-Wavenet-'+nm)
        resp = client.synthesize_speech(itext, voice, audio_config)
        with open(nm+'.wav', 'wb') as out:
            out.write(resp.audio_content)
        proc.call("aplay -q %s.wav"%nm, shell=True)
    except KeyboardInterrupt:
        break

```
### スピーキングレイトを変化させる　例
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Google cloud Text to speech 検証中 <a href="https://t.co/0Sot02DlET">pic.twitter.com/0Sot02DlET</a></p>&mdash; utaca.rich (@RichUtaka) <a href="https://twitter.com/RichUtaka/status/1124577357782667265?ref_src=twsrc%5Etfw">May 4, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

##各国語対応
###この例では、英語とインド英語日本語を音声合成します。
```tts3.py
#!/usr/local/bin/python3.6
from google.cloud import texttospeech as tts
import os,sys,subprocess as proc
ttsdt=[
    ("en-US",'en-US-Wavenet-A',"Thank you for calling. I'm sorry but I can't answer your call right now. Please leave a message at (the sound of) the tone [after the tone]. I'll get back to you as soon as possible."),
    ("en-IN",'en-IN-Wavenet-A',"Thank you for calling. I'm sorry but I can't answer your call right now. Please leave a message at (the sound of) the tone [after the tone]. I'll get back to you as soon as possible."),
    ("ja-JP",'ja-JP-Wavenet-A',"お電話ありがとうございます。ただ今電話に出ることができません。ピーッという音が鳴りましたら[発信音の後に]、メッセージをお願いします。こちらからすぐにお電話いたします。")
]

for dt in ttsdt:
    client = tts.TextToSpeechClient()
    pitch,rate=0,1.0
    audio_config = tts.types.AudioConfig(audio_encoding=tts.enums.AudioEncoding.LINEAR16,pitch=pitch,speaking_rate=rate)
    itext = tts.types.SynthesisInput(text=dt[2])
    voice = tts.types.VoiceSelectionParams(language_code=dt[0],name=dt[1])
    resp = client.synthesize_speech(itext, voice, audio_config)
    with open('temp.wav', 'wb') as out:
        out.write(resp.audio_content)
    proc.call("aplay -q temp.wav", shell=True)

```