以前の記事「docomoの音声合成APIの音声データ(Binary)をMacで再生する方法 (2つ) 」で試した Docomoの音声合成APIをMacのPythonからWavデータに保存できるようにしました。
(Windowsでは動きません)
目次
環境
- Mac OS : 10.11.4 (EI Capitan)
- Python 3.4.1
前準備
docomo Developer supportに登録して、音声合成のAPI_KEYを取得しておく
使い方
1. 以下のソースを保存
ファイル名は適当でもOK。
以下、sample.py で保存したとします。
API_KEYは適時修正してください。
# -*- coding:utf-8 -*-
"""
Mac上で指定したテキストから、docomoの音声合成APIのバイナリデータをwavデータに保存する
"""
import os
import sys
import datetime
import argparse
import subprocess
import requests
import pprint
# config
# ===========================================
#バイナリデータの一時保存場所
tmp = "./cache/"
# wavデータの保存場所
soundDir = "./sound/"
#Docomo 音声合成 API
API_KEY = '***********************************************************************'
url = "https://api.apigw.smt.docomo.ne.jp/aiTalk/v1/textToSpeech?APIKEY="+API_KEY
# aitalk パラメーター設定
# ===========================================
"""
参考)音声合成 | docomo Developer support
https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=text_to_speech&p_name=api_1#tag01
'speaker' : "nozomi"、"seiji"、"akari"、"anzu"、"hiroshi"、"kaho"、"koutarou"、"maki"、"nanako"、"osamu"、"sumire"
'pitch' : ベースライン・ピッチ。 基準値:1.0、範囲:0.50~2.00
'range' : ピッチ・レンジ。基準値:1.0、範囲:0.00~2.00
'rate' : 読み上げる速度。基準値:1.0、範囲:0.50~4.00
'volume' : 音量。基準値:1.0、範囲:0.00~2.00
"""
prm = {
'speaker' : 'nozomi',
'pitch' : '1',
'range' : '1',
'rate' : '1',
'volume' : '1.5'
}
# パラメーター受取
# ===========================================
#%% arguments
parser = argparse.ArgumentParser()
parser.add_argument('--text', type=str, required=True)
args = parser.parse_args()
text = args.text
# SSML生成
# ===========================================
xml = u''
voice = ''
prosody = ''
xml += ''+ voice + prosody + text + ' '
# utf-8にエンコード
xml = xml.encode("UTF-8")
# Docomo APIアクセス
# ===========================================
print("Start API")
response = requests.post(
url,
data=xml,
headers={
'Content-Type': 'application/ssml+xml',
'Accept' : 'audio/L16',
'Content-Length' : len(xml)
}
)
#print(response)
#print(response.encoding)
#print(response.status_code)
#print(response.content)
if response.status_code != 200 :
print("Error API : " + response.status_code)
exit()
else :
print("Success API")
#現在日時を取得
now = datetime.datetime.now()
tstr = datetime.datetime.strftime(now, '%Y%m%d-%H%M%S')
#保存するファイル名
rawFile = tstr + ".raw"
wavFile = tstr + ".wav"
#バイナリデータを保存
fp = open(tmp + rawFile, 'wb')
fp.write(response.content)
fp.close()
print("Save Binary Data : " + tmp + rawFile)
# バイナリデータ → wav に変換
# ===========================================
# macのsoxを使って raw→wavに変換
cmd = "sox -t raw -r 16k -e signed -b 16 -B -c 1 " + tmp + rawFile + " "+ soundDir + wavFile
# コマンドの実行
subprocess.check_output(cmd, shell=True)
print("Done : " +soundDir + wavFile)
2. 保存フォルダの準備
sample.pyを保存した同じディレクトリ内に、 “cache”,”sound”のディレクトリを作成
書き込み権限を与えておくこと
{作業フォルダ}
├ sample.py
├ cache/
└ sound/
3. 実行
ターミナルで以下コマンドを実行
$ cd {作業フォルダ}
$ sample.py --text 音声合成って楽しいですね
成功すれば、sound/*******.wav が保存され、再生できるはず
cache内のデータは削除してOK
パラメーターについて
合成音声の話者や読み上げ速度などはSSMLで調整可能となっています。
'speaker' : "nozomi"、"seiji"、"akari"、"anzu"、"hiroshi"、"kaho"、"koutarou"、"maki"、"nanako"、"osamu"、"sumire"
'pitch' : ベースライン・ピッチ。 基準値:1.0、範囲:0.50~2.00
'range' : ピッチ・レンジ。基準値:1.0、範囲:0.00~2.00
'rate' : 読み上げる速度。基準値:1.0、範囲:0.50~4.00
'volume' : 音量。基準値:1.0、範囲:0.00~2.00
パラメーターはAITalkの音声合成デモンストレーション http://www.ai-j.jp/cloud/webapi/で試せます。
ただAPIではデモンストレーションの話者全員を使えないので気をつけること。
APIで使える話者は以下のみ
のぞみ、まき、すみれ、かほ、あかり、ななこ
せいじ、おさむ、ひろし、あんず、こうたろう
参考サイト)

コメント