「Macro AquesTalk」の版間の差分
ナビゲーションに移動
検索に移動
ページの作成:「app_aquestalkを廃止し、Macroに置換。 ==必要なもの== *AquesTalk本体(AquesTalk10) :https://www.a-quest.com/products/aquestalk.html *AqKanji2koe :https://www...」 |
|||
(同じ利用者による、間の13版が非表示) | |||
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のインストール== | |||
入手した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/ | |||
==シェルスクリプトを作成しておく== | |||
漢字から音声を発声できるようにスクリプトを作っておく。<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の評価版には制限があります。利用の際にはライセンスを購入してください。
必要なもの
- AquesTalk本体(AquesTalk10)
- AqKanji2koe
それぞれのマニュアルはちゃんと読んでください。
- レート変換に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