「Macro AquesTalk」の版間の差分

提供: VoIP-Info.jp
移動先: 案内検索
(AquesTalkのインストール)
(使い方)
 
(同じ利用者による、間の11版が非表示)
1行目: 1行目:
app_aquestalkを廃止し、Macroに置換。
+
app_aquestalkを廃止し、Macroに置換。<BR>
 +
もはや世の中のCPU性能も十分高いので、わざわざapp_にする必要もないかと思うのでマクロ実装にします。<BR>
 +
<BR>
 +
Raspberry Piを使用している場合には [[AquesTalkPi]] を使ってください。<BR>
 +
<BR>
 +
注意!:AquesTalkの評価版には制限があります。利用の際にはライセンスを購入してください。
 +
:https://www.a-quest.com/download.html
 
==必要なもの==
 
==必要なもの==
 
*AquesTalk本体(AquesTalk10)
 
*AquesTalk本体(AquesTalk10)
5行目: 11行目:
 
*AqKanji2koe
 
*AqKanji2koe
 
:https://www.a-quest.com/products/aqkanji2koe.html
 
:https://www.a-quest.com/products/aqkanji2koe.html
それぞれのマニュアルはちゃんと読んでください。
+
それぞれのマニュアルはちゃんと読んでください。<BR>
 +
*レート変換にsoxを使うのでsoxもインストールしておいてください。
 
==AquesTalkのインストール==
 
==AquesTalkのインストール==
 
入手したzipを展開し、そのディレクトリで以下を実行。64bit版を例に説明。
 
入手したzipを展開し、そのディレクトリで以下を実行。64bit版を例に説明。
35行目: 42行目:
 
辞書をAsterisk用に配置しておく。展開したディレクトリにあるaq_dicをディレクトリごとコピーする。
 
辞書をAsterisk用に配置しておく。展開したディレクトリにあるaq_dicをディレクトリごとコピーする。
 
  cp -r aq_dic /var/lib/asterisk/
 
  cp -r aq_dic /var/lib/asterisk/
 +
==シェルスクリプトを作成しておく==
 +
漢字から音声を発声できるようにスクリプトを作っておく。<BR>
 +
だいたいこんな感じで /var/lib/asterisk/scripts/aquestalk.sh でつくる。
 +
#!/bin/sh
 +
BINPATH=/var/lib/asterisk/bin
 +
DICPATH=/var/lib/asterisk/aq_dic
 +
SOX="sox - -r 8000 -t wav - "
 +
 +
if [ ""$1 != "" ]
 +
then
 +
    echo $1 | $BINPATH/Kanji2KoeCmd $DICPATH | $BINPATH/HelloTalk | $SOX
 +
fi
 +
好みの問題もあるので何ですが、ちと早口すぎると思う場合はSOXを以下のように。
 +
SOX="sox - -r 8000 -t wav - speed 0.9"
 +
ピッチも下がるけど、この位がちょうどいいかも。
 +
 +
==Asterisk Macroの作成==
 +
次のようなMacroを定義しておく。
 +
;AquesTalkによる音声合成用マクロ
 +
[macro-AquesTalk]
 +
exten => s,1,NoOp(AquesTalkPi)
 +
exten => s,n,Set(ID=${CHANNEL})
 +
exten => s,n,Set(FN=${CUT(ID,/,2)})
 +
exten => s,n,Set(FN=/tmp/${FN})
 +
exten => s,n,Set(CHANNEL(hangup_handler_push)=atp-rm-hdlr,s,1(${FN}));
 +
exten => s,n,System(/var/lib/asterisk/scripts/aquestalk.sh ${ARG1} > ${FN}.wav)
 +
exten => s,n(loop),Playback(${FN})
 +
exten => s,n,GotoIf($["${PLAYBACKSTATUS}"="FAILED"]?endm)
 +
exten => s,n,System(rm -f ${FN}.wav)
 +
exten => s,n(endm),Set(CHANNEL(hangup_handler_pop)=);
 +
exten => s,n,MacroExit
 +
 +
;AquesTalk ファイル削除用ハンドラ
 +
[atp-rm-hdlr]
 +
exten => s,1,System(rm -f ${ARG1}.wav)
 +
exten => s,n,Return()
 +
MacroからGosubに移行する場合には以下のように
 +
;AquesTalkによる音声合成用マクロ
 +
[macro-AquesTalk]
 +
exten => s,1,NoOp(AquesTalkPi)
 +
exten => s,n,Set(ID=${CHANNEL})
 +
exten => s,n,Set(FN=${CUT(ID,/,2)})
 +
exten => s,n,Set(FN=/tmp/${FN})
 +
exten => s,n,Set(CHANNEL(hangup_handler_push)=atp-rm-hdlr,s,1(${FN}));
 +
exten => s,n,System(/var/lib/asterisk/scripts/aquestalk.sh ${ARG1} > ${FN}.wav)
 +
exten => s,n(loop),Playback(${FN})
 +
exten => s,n,GotoIf($["${PLAYBACKSTATUS}"="FAILED"]?endm)
 +
exten => s,n,System(rm -f ${FN}.wav)
 +
exten => s,n(endm),Set(CHANNEL(hangup_handler_pop)=);
 +
exten => s,n,Retunr                                            ← MacroExitではなくreturnに書き換えること
 +
 +
;AquesTalk ファイル削除用ハンドラ
 +
[atp-rm-hdlr]
 +
exten => s,1,System(rm -f ${ARG1}.wav)
 +
exten => s,n,Return()
 +
 +
==使い方==
 +
extenで次のように書くだけ。
 +
exten => 8765,1,Macro(AquesTalk,明日の天気は晴れ)
 +
exten => 8765,n,Hangup
 +
Gosubの場合には以下のように書いてください。
 +
exten => 8765,1,Gosub(macro-AquesTalk,s,1(明日の天気は晴れ))
 +
exten => 8765,n,Hangup

2018年10月22日 (月) 11:21時点における最新版

app_aquestalkを廃止し、Macroに置換。
もはや世の中のCPU性能も十分高いので、わざわざapp_にする必要もないかと思うのでマクロ実装にします。

Raspberry Piを使用している場合には AquesTalkPi を使ってください。

注意!:AquesTalkの評価版には制限があります。利用の際にはライセンスを購入してください。

https://www.a-quest.com/download.html

必要なもの

  • AquesTalk本体(AquesTalk10)
https://www.a-quest.com/products/aquestalk.html
  • AqKanji2koe
https://www.a-quest.com/products/aqkanji2koe.html

それぞれのマニュアルはちゃんと読んでください。

  • レート変換にsoxを使うのでsoxもインストールしておいてください。

AquesTalkのインストール

入手したzipを展開し、そのディレクトリで以下を実行。64bit版を例に説明。

cp lib64/libAquesTalk10.so.1.1 /usr/lib64
ln -sf /usr/lib64/libAquesTalk10.so.1.1 /usr/lib64/libAquesTalk10.so.1
ln -sf /usr/lib64/libAquesTalk10.so.1 /usr/lib64/libAquesTalk10.so
/sbin/ldconfig -n /usr/lib
cp lib64/AquesTalk.h /usr/include/.

samplesにあるHelloTalkをコンパイル。

g++ -o HelloTalk HelloTalk.c -lAquesTalk10

Asterisk用に配置しておく。

mkdir /var/lib/asterisk/bin
cp HelloTalk /var/lib/asterisk/bin/.

Kanji2Koeのインストール

入手したzipを展開し、そのディレクトリで以下を実行。64bit版を例に説明。

cp lib64/libAqKanji2Koe.so.3.0 /usr/lib64
cp lib64/libAqUsrDic.so.3.0 /usr/lib64
ln -sf /usr/lib64/libAqKanji2Koe.so.3.0 /usr/lib64/libAqKanji2Koe.so.3
ln -sf /usr/lib64/libAqKanji2Koe.so.3 /usr/lib64/libAqKanji2Koe.so
ln -sf /usr/lib64/libAqUsrDic.so.3.0 /usr/lib64/libAqUsrDic.so.3
ln -sf /usr/lib64/libAqUsrDic.so.3 /usr/lib64/libAqUsrDic.so
/sbin/ldconfig -n /usr/lib64
cp lib64/AqKanji2Koe.h /usr/include/.
cp lib64/AqUsrDic.h /usr/include/.

samplesにあるKanji2KoeComdをコンパイル。

g++ -o Kanji2KoeCmd Kanji2KoeCmd.cpp -lAqKanji2Koe

Asterisk用に配置しておく。

cp Kanji2KoeCmd /var/lib/asterisk/bin/.

辞書をAsterisk用に配置しておく。展開したディレクトリにあるaq_dicをディレクトリごとコピーする。

cp -r aq_dic /var/lib/asterisk/

シェルスクリプトを作成しておく

漢字から音声を発声できるようにスクリプトを作っておく。
だいたいこんな感じで /var/lib/asterisk/scripts/aquestalk.sh でつくる。

#!/bin/sh
BINPATH=/var/lib/asterisk/bin
DICPATH=/var/lib/asterisk/aq_dic
SOX="sox - -r 8000 -t wav - "

if [ ""$1 != "" ]
then
    echo $1 | $BINPATH/Kanji2KoeCmd $DICPATH | $BINPATH/HelloTalk | $SOX
fi

好みの問題もあるので何ですが、ちと早口すぎると思う場合はSOXを以下のように。

SOX="sox - -r 8000 -t wav - speed 0.9"

ピッチも下がるけど、この位がちょうどいいかも。

Asterisk Macroの作成

次のようなMacroを定義しておく。

;AquesTalkによる音声合成用マクロ
[macro-AquesTalk]
exten => s,1,NoOp(AquesTalkPi)
exten => s,n,Set(ID=${CHANNEL})
exten => s,n,Set(FN=${CUT(ID,/,2)})
exten => s,n,Set(FN=/tmp/${FN})
exten => s,n,Set(CHANNEL(hangup_handler_push)=atp-rm-hdlr,s,1(${FN}));
exten => s,n,System(/var/lib/asterisk/scripts/aquestalk.sh ${ARG1} > ${FN}.wav)
exten => s,n(loop),Playback(${FN})
exten => s,n,GotoIf($["${PLAYBACKSTATUS}"="FAILED"]?endm)
exten => s,n,System(rm -f ${FN}.wav)
exten => s,n(endm),Set(CHANNEL(hangup_handler_pop)=);
exten => s,n,MacroExit

;AquesTalk ファイル削除用ハンドラ
[atp-rm-hdlr]
exten => s,1,System(rm -f ${ARG1}.wav)
exten => s,n,Return()

MacroからGosubに移行する場合には以下のように

;AquesTalkによる音声合成用マクロ
[macro-AquesTalk]
exten => s,1,NoOp(AquesTalkPi)
exten => s,n,Set(ID=${CHANNEL})
exten => s,n,Set(FN=${CUT(ID,/,2)})
exten => s,n,Set(FN=/tmp/${FN})
exten => s,n,Set(CHANNEL(hangup_handler_push)=atp-rm-hdlr,s,1(${FN}));
exten => s,n,System(/var/lib/asterisk/scripts/aquestalk.sh ${ARG1} > ${FN}.wav)
exten => s,n(loop),Playback(${FN})
exten => s,n,GotoIf($["${PLAYBACKSTATUS}"="FAILED"]?endm)
exten => s,n,System(rm -f ${FN}.wav)
exten => s,n(endm),Set(CHANNEL(hangup_handler_pop)=);
exten => s,n,Retunr                                             ← MacroExitではなくreturnに書き換えること

;AquesTalk ファイル削除用ハンドラ
[atp-rm-hdlr]
exten => s,1,System(rm -f ${ARG1}.wav)
exten => s,n,Return()

使い方

extenで次のように書くだけ。

exten => 8765,1,Macro(AquesTalk,明日の天気は晴れ)
exten => 8765,n,Hangup

Gosubの場合には以下のように書いてください。

exten => 8765,1,Gosub(macro-AquesTalk,s,1(明日の天気は晴れ))
exten => 8765,n,Hangup