文字っぽいの。

文字を書いています。写真も混ざります。

DOCOMOの音声合成APIを使ってRubyで文章を読み上げさせる。

はじめに

前回、DOCOMOの雑談対話APIを使って、Hubotとお話できるようにしました。

その後、新しく音声合成APIが公開されましたので、そちらも遊んでみます。

音声合成APIについて

下記3種類の音声合成APIが公開されています。

  • エーアイ:REST、SDK(Andoid・iOS・Server side JAVA
  • HOYAサービス:REST
  • NTTアイティ:REST(審査が必要)

どれか選んで使うわけですが、HOYAサービス製のものが声質にサンタクロースや熊があって意味不明だったので、これを使ってみることにしました。下記のコードやサンプルは全て、HOYAサービスのAPIを利用したものです。

音声合成APIの仕様

 上記公式ページに書いてあります。クエリパラメータとしてAPIキーを与えつつ、POSTリクエストを送れば良いです。POSTするデータとして、『声質』と『話してもらう文章』を含める必要があります。レスポンスのbodyには音声合成されたWavがバイナリ形式で返ってくるので、ファイルに書きだすなりそのまま再生するなりすれば良くて簡単。

Rubyのサンプルコード

 とりあえずRubyで雑にAPIを叩いてみました。結果はバイナリで返ってくるので、そのままファイルに書き出してあげれば良いです。

require 'net/http'
require 'uri'

API_KEY = 'YOUR_API_KEY'

endpoint = URI.parse('https://api.apigw.smt.docomo.ne.jp/voiceText/v1/textToSpeech')
endpoint.query = 'APIKEY=' + API_KEY

request_body = {
  'text'=>'こんにちは。本日の天気をお知らせします。',
  'speaker'=>'takeru'
}

res = Net::HTTP.post_form(endpoint, request_body)

case res
when Net::HTTPSuccess
  file_name = "docomo.wav"
  File.binwrite(file_name, res.body)
  `afplay docomo.wav` # Linuxならaplayやmpg123を使う
  File.delete(file_name)
else
  res.value
end

サンプル音声

 上記コードを使って合成される音声はこちら。

DOCOMO音声合成APIのテスト - YouTube

まとめ

 簡単に音声合成ができて楽しいです。しかも、合成された音声も結構品質が良く違和感なく聞くことが出来ます。漢字を送っても大丈夫なので、なにかおもしろいサービスを作る時に重宝しそうです。

 なにより、無料で使えるのが良い。