はじめに
docomoの音声合成APIには、日本語の声のパターンが一通り揃っています。
今回はPythonから喋らせたい内容をAPIに叩いて、帰ってきた結果を音声ファイルとして保存して再生することにしました。このシステムだと何度も同じ内容を喋らせる際に、処理を早く済ませられます。
事前準備
あらかじめAPIキーを取得しておいてください。私はこちらのAPIを利用しましたが、他にもいろいろあります。
コード
他の機能と組み合わせて作ったので、喋らせる部分だけ抜粋しました。
関数は、talk(音声ファイルのタイトル, 喋らせたい文字列)となっています。
talk.py
import os
import requests
import json
# 引数で指定した文字列を再生する
def talk(title, message, path="./"):
    if not os.path.isfile(path+title+".wav"): # 既に音声ファイルがあるかどうかを確認する
        url = 'https://api.apigw.smt.docomo.ne.jp/crayon/v1/textToSpeech?APIKEY=2e6d4e6b645342562f6858396b59634d626a6a356d79424a6b43433654386f4558656d76676a7242336344'
        params = {
              "Command":"AP_Synth",
              "SpeakerID":"1",
              "StyleID":"1",
              "SpeechRate":"1.15",
              "AudioFileFormat":"2",
              "TextData":message
            }
        r = requests.post(url, data=json.dumps(params))
        if r.status_code == requests.codes.ok:
            wav = r.content
            with open(path+title+".wav","wb") as fout:
                fout.write(wav)
	# APIでエラーが発生し、音声ファイルが生成されないときのため
    if os.path.isfile(path+title+".wav"): 
        char = "aplay {}{}.wav".format(path, title)
        os.system(char)
try:
    while True:
        
        #中略
        
        #画像認識の結果からデータベースを検索しその内容(説明文)を喋らせる
        talk(result,desc)