Google TTSを利用してAsteriskのIVRで日本語読み上げでAsteriskでGoogle TTSに喋らせるというのを書いた。
で、せっかくなのでものすごく簡単な日時読み上げのAGIサンプルを作ってみた。
普通に日時を読み上げるAGI
/usr/local/share/asterisk/agi-bin/speaktime.agi1 2 3 4 5 6 7 8 9 10 11 | #!/usr/local/bin/perl
use Asterisk::AGI;
use POSIX qw(mktime);
use lib qw(/usr/local/share/asterisk/agi-bin/);
use MyAsterisk;
use strict;
my $agi = new Asterisk::AGI;
$agi->exec("SayUnixTime", "time(),,bdaHM");
$agi->stream_file('vm-goodbye');
|
入手: http://www.voip-info.jp/index.php/Asterisk_日本語音声 (FreeBSDのportsならjapanese/asterisk-sounds)
Google TTSで日時を読み上げるAGI
/usr/local/share/asterisk/agi-bin/googlettstime.agi1 2 3 4 5 6 7 8 9 | #!/usr/local/bin/perl
use strict;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
my @dweek = qw/日 月 火 水 木 金 土/;
$mon++;
my $out = "$mon月$mday日$dweek[$wday]曜日$hour時$min分$sec秒です";
print "SET VARIABLE TTSCLOCK $out";
|
「SET VARIABLE {Asteriskに渡す戻り値の変数名} 戻り値」これを表示するスクリプトを作ればAsteriskのダイヤルプランに渡すことができる。
普通に実行すれば「SET VARIABLE TTSCLOCK 6月28日水曜日19時58分20秒」のような文字列が表示される筈。
ダイヤルプラン
/usr/local/etc/asterisk/extensions.conf (の一部)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | [general]
writeprotect=no
priorityjumping=no
[globals]
SPEAKINGCLOCK=317
GOOGLETTSCLOCK=318
[default]
;=== 日時読み上げ (普通) ===
exten => ${SPEAKINGCLOCK},1,Goto(speakclock,s,1)
;=== 日時読み上げ (Google TTS) ===
exten => ${GOOGLETTSCLOCK},1,Goto(googlettsclock,s,1)
[speakclock]
;=== 日時読み上げ (普通) ===
exten => s,1,Answer()
exten => s,n,Wait(1)
exten => s,n,AGI(speaktime.agi)
exten => s,n,Wait(1)
exten => s,n,Hangup()
[googlettsclock]
;=== 日時読み上げ (Google TTS) ===
exten => s,1,Answer()
exten => s,n,agi(googlettstime.agi)
exten => s,n,agi(googletts.agi,"${TTSCLOCK}",ja)
exten => s,n,Wait(1)
exten => s,n,Hangup()
|
defaultコンテクストからフローに入るとする。
317に発信すると普通の時刻読み上げを行って切断。
318に発信するとGoogleTTSを使った日時読み上げ。
27行目のgooglettstime.agi実行で現在の日時を作成、28行目でそれを喋らせる。その後通話切断。
読み上げサンプル
普通に日時を読み上げ
細切れの部品を繋いで読むのでぎこちない(けど各部品は人間の声なので綺麗)。
GoogleTTSで日時読み上げ
なめらかに読み上げるけど合成の声っぽさは多少。
どちらも実際に通話したものをスマートフォンの通話録音機能を使用して録音している。雑音もあるがご容赦。
関連記事: