合成音声サービス・製品まとめ
ざっと調べた感じだと、こんなのがあった。
-
AITalk® 声の職人®
http://www.ai-j.jp/cloud/voice/ -
VoiceText
http://voicetext.jp/ -
Ruby Talk®
http://www.hitachi-ul.co.jp/middleware/rubytalk/o_index.html -
CeVIO Creative Studio
http://cevio.jp/
ちょっと使ってみる
個人的に好きなのはCeVIOだけど、今回はサービスである AITalk® 声の職人® を使ってみる。
DEMO用のAPIなので、一部パラメータが効かないっぽい?
まず、適当に文を入力して、合成をポチッと押せば音声が流れる。
簡単すぎて面白みがないので、実際通信とか仕組みを調べてみる。
合成時の通信
POSTしているjsを見つけた。
$('#btnPlay').click(function() {
var chktextelement = document.getElementById("text");
chktextstring = chktextelement.value;
chktextstring = chktextstring.replace(/\s+/g, "");
if(chktextstring == ""){
window.alert('合成するテキストを入力してください。');
}else{
changeUnderGousei();//ボタン変更
$.ajax({
type: 'post',
url: 'http://cloud.ai-j.jp/demo/aitalk2webapi_nop.php',
data: {
'speaker_id' : $("#speaker_id").val(),
'text': $("#text").val(),
'ext' : audio_ext,
'volume' : $("#volume").val(),
'speed' : $("#speed").val(),
'pitch' : $("#pitch").val(),
'range' : $("#range").val(),
'anger' : $("#anger").val(),
'sadness' : $("#sadness").val(),
'joy' : $("#joy").val(),
},
dataType: 'jsonp',
jsonpCallback: 'callback',
success: function(result){
//window.alert(result['url']);
$('#result').html(result['url']);
play(result['url']);
},
error: function(request, textStatus, errorThrown) {
window.alert('合成に失敗しました。');
}
});
}//if
});
F12で開発者ツールを開いて、実際合成ボタンをポチっとおした時の通信を見てみる。

Requestの中身を細かく見てみると
- リクエストURL
http://cloud.ai-j.jp/demo/aitalk2webapi_nop.php
- パラメータ
callback=callback&speaker_id=1&text=%E4%BB%8A%E6%97%A5%E3%81%AE%E6%99%A9%E5%BE%A1%E9%A3%AF%E3%81%AF%E3%80%8C%E3%82%AB%E3%83%AC%E3%83%BC%E3%83%A9%E3%82%A4%E3%82%B9%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82&ext=ogg&volume=1.0&speed=1&pitch=1&range=1&anger=0&sadness=0&joy=0&_=1498824369076
パラメータまとめ
-
callback
返却されたデータを処理する関数を指定? -
speaker_id
どのキャラに喋らせるかを指定。
htmlを見てみたら、こんな感じになっていた。
id | キャラ |
---|---|
1 | のぞみ |
2 | すみれ |
3 | まき |
4 | かほ |
5 | あかり |
6 | ななこ |
7 | れいな |
11 | せいじ |
12 | ひろし |
13 | おさむ |
14 | たいち |
21 | こうたろう |
22 | あんず |
23 | ゆうと |
24 | ちひろ |
-
text
合成した文をここで指定する。
開発ツールで見るとエンコードされているけど、
エンコードされたものじゃなくても大丈夫みたい? -
ext
生成する音声ファイルの拡張子を指定。
デフォルトはogg。
mp3とwavも使えた。
他にも使えるものがあるかも。 -
volume
生成音声データの音量を指定?
効かないっぽい・・・・ -
speed
生成する音声データのスピーチの速さを指定。
2にすると2倍速になった。 -
pitch
生成する音声データのピッチの高さを指定。
大きいほどピッチも高くなる。 -
range
生成する音声データの抑揚の強さを設定。
大きいほど、抑揚も強くなる。 -
anger
生成する音声データの怒りの強さを設定?
効かないっぽい・・・・ -
sadness
生成する音声データの悲しさを設定?
効かないっぽい・・・・ -
joy
生成する音声データの嬉しさを設定?
効かないっぽい・・・・
レスポンス
サーバ側で音声ファイルを生成している。
callback({"url":"http:\/\/cloud.ai-j.jp\/demo\/tmp\/1_20170630155923277518060.ogg"})
jsソースを見てみると、playにurlを渡して音声データを生成している様子。
success: function(result){
//window.alert(result['url']);
$('#result').html(result['url']);
play(result['url']);
}
ちなみに、生成された音声データは定期的に削除される様だ。
まぁ、当たり前かw
まとめ
とりあえず、分析してみた。
文字数制限とか、英語にした時どうなるのかとか、色々気になることはあるが、
一旦おいておく。
次回はPHPで、このAPIを使ってみる。