3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

音声合成を使ってみる

Last updated at Posted at 2017-06-30

合成音声サービス・製品まとめ

ざっと調べた感じだと、こんなのがあった。

ちょっと使ってみる

個人的に好きなのは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 のぞみ
すみれ
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を使ってみる。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?