chakokuのブログ(rev4)

日々のごった煮ブログです

DoCoMoの音声合成APIを活用して読み上げ品質を向上させる

前回、お手軽にパッケージインストールで音声合成させて、Twitterの読み上げをさせていたが、組み込みパッケージ版だとやっぱりイントネーションが少し不自然で聞き取りにくい。今後音声認識もさせたいと思っており、DoCoMoAPIを使ってみることに。しかし、、DoCoMoAPIの音声合成はPCMだそうで、お試しでどんな声になるのかもちと分からず。技術はHOYAの合成エンジンを使ってるとのことで、HOYAのサイトでサンプルを聴いてみた(URLはご参考に記載)。さすがこれは一級品だと思い、頑張ってAPIの鍵をもらうことにした。
O-Authの設定とかよく分からず適当に普段のメールアドレスを登録、アプリ名も適当に設定。APIKEYを貰えたので試してみる。以下はHOYA音声合成エンジンを使う場合の例

#!/usr/bin/python

import urllib2
import urllib

DOCOMO_API_URL = "https://api.apigw.smt.docomo.ne.jp/voiceText/v1/textToSpeech"
API_KEY="xxxxxxxxxxxxxxxxxxxxxxx"  # set your API KEY

headers ={
  'Content-Type' : 'application/x-www-form-urlencoded',
}
data = {
  'text':'hello',
  'speaker':'haruka',
}

try :
  values = urllib.urlencode(data)
  url=DOCOMO_API_URL+"?APIKEY="+API_KEY
  req = urllib2.Request(url, values ,headers )
  res = urllib2.urlopen(req)
  header = res.info()
  data = res.read()
  code = res.getcode()
except Exception as e:
  print e
  exit()

print code
print  header
if code == 200:
  f=open('syth.wav','w')
  f.write(data)
  f.close()
else:
  print "Response is not 200"

英文字でhelloをharukaの声で合成させた。正常にWAV形式のデータが取得できた。
応答文字列は以下。 レスポンスコード:200(OK)の場合のみWAVファイルを作成

Accept-Ranges: bytes
asyncServiceInvoke: false
Content-Type: audio/wave;charset=UTF-8
Date: Sat, 27 Aug 2016 09:32:10 GMT
Last-Modified: Sat, 27 Aug 2016 09:32:11 GMT
X-Revision: 0d8bc2728c40a431b9d44d7074e819f11eba9fbb
Content-Length: 45364
Connection: Close

今後の取り組みは、、音声合成APIを呼び出すNode-REDの部品を作って、DoCoMoAPI(HOYAエンジン版)で喋らせる事。
ただ、、商用利用でない個人がAPIを使う場合、利用制約(API呼び出し回数等か)があるようで、ベラベラ喋っているうちにだんまりになる可能性もあり。

■追記
合成された音声をaudacityで読み込んでみた。

■ご参考URL
DoCoMo Developer Support API/ツール
https://dev.smt.docomo.ne.jp/?p=docs.api.index

HOYA音声合成仕様説明
https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=text_to_speech&p_name=api_hoya#tag01

音声合成エンジンサンプル(HOYAのVoiceText)
https://voicetext.jp/samplevoice/