Open k-okada opened 3 years ago
https://github.com/jsk-ros-pkg/jsk_3rdparty/tree/master/3rdparty/google_cloud_texttospeech は問題なくこれらの記号がある文を読み上げてくれることを確認しました。
hiraoka@hiraoka-desktop:/opt/ros/melodic/share/pr2eus$ roseus ./speak.l
$ (ros::roseus "aaa")
$ (speak-jp "『こんにちは』")
$ (speak-jp "こんにちは!")
$ (speak-jp "こんにちは〜")
この件に関して、aques_talkにプルリクエストを出しました。 https://github.com/jsk-ros-pkg/jsk_3rdparty/pull/257
まずaques_talkが「!」や「こんにちは!」を読めない問題ですが、これは特殊なタグで囲うことで読めるようになります。 https://www.a-quest.com/archive/manual/siyo_onseikigou.pdf この音声記号列仕様表とAquesTalk2 Linux Manualの存在をREADMEに書き、かつ、JSKのGoogle Driveにもおいておきました。 https://www.a-quest.com/archive/manual/aqtk2_lnx_man.pdf
このように特定の文字列を特殊タグで囲う作業はすでにaques_talkでは行われていて、以下のように入力文字列をsedで置き換えることで、数字やアルファベットを読めるようにしています。 https://github.com/jsk-ros-pkg/jsk_3rdparty/blob/2b0226ec32e76176eff179f61f7dd77461e3fa4e/3rdparty/aques_talk/text2wave#L33-L41
今回は「!」を読んでほしいわけではないと思うので、sedの行を追加して「!」や「『」などの文字を無視するようにしました。 ただ、「'」や「"」が文章の開始文字として認識されたり、「[」や「]」がsedの制御文字と認識されたりと、無視しきれない文字があったので、README.mdにそのことを書いておきました。(SQLインジェクション対策の重要性がわかってきました) 僕の正規表現力が低い可能性が高いので、実は「]」は入力できるよ、のような表現があれば教えていただきたいです。
次にvoice_textで(send *ri* :speak-jp xxx)を行ったところ、「!」は発音されなかったですが「こんにちは!」を読むことは出来ました。また、fetch_bringup.launchのログにエラーも表示されませんでした。 ReakSpeaker(旧voice_text)のオンライン音声合成サンプルでも試しましたが、やはり「!」は発音されず「こんにちは!」を読むことは出来ました。 https://readspeaker.jp/
僕は今のところ、voice_textではAquesTalkの音声記号列仕様表のようなドキュメントを見つけられていないので、見つけ次第返信します。
プルリクありがとうございます。
プルリクのブランチのaques_talkを使って、上記のchaplus_ros.pyの138-141行目のreplaceしているところは消したコードで roslaunch chaplus_ros google_example.launch を試したところ、エラーが出なくなっていることを確認しました。
上記のchaplus_ros.pyの138-141行目は消去したいと思います。
ご確認ありがとうございます。 その後、プログラムの見通しを良くするために追加コミットをしたので、再度ご確認していただけると助かります。
ちなみに、aques_talk側での文字列置換では以下の操作を行っています。
nkf -j %s | kakasi -JH | nkf -w | \
sed -e 's/,/、/g' | sed -e 's/,/、/g' | \
sed -e 's/./。/g' | sed -e 's/\./。/g' | \
sed -e 's/[^a-zA-Z0-9ぁ-んァ-ンー、。??]//g' | \
sed -e 's/\([a-zA-Z]\+\)/<ALPHA VAL=\\1>/g' | \
sed -e 's/\([0-9]\+\)/<NUMK VAL=\\1>/g' > \
ありがとうございます。動作することを確認しました。
細かい話になってしまうのですが、「!」は文の切れ目に多いと思うので「。」に置換するのと、「〜」は伸びる音「ー」に置換したほうが、よりもともとのニュアンスが伝わるかなと思いました。 下記のものを追加するのはいかがでしょうか? ご検討よろしくお願い致します。
sed -e 's/!/。/g' | sed -e 's/\!/。/g' | \
sed -e 's/〜/ー/g' | \
@ayfujii よい提案だと思うので https://github.com/jsk-ros-pkg/jsk_3rdparty/blob/57c53ad08b09709b88538c3319153c08aff65cea/3rdparty/aques_talk/README.md にpull requestを送るのが良いと思います
その際、それぞれの場合の音声のwavファイルもつけると説得力が増します
? また、応答に「!」や「『』」のような記号があると、sound synthesis failedと出てしまい、応答を読み上げてくれないことがある印象だったので、気がついたものに関しては置換しています。
は,aques_talk の問題?voice_text だと起こらない?など条件を知りたいのと, もしそうだたすると,aques_talk 側のプログラムで直したいです (https://github.com/jsk-ros-pkg/jsk_3rdparty/blob/a5c20df492cf488d218ce3a81db31691cc720a8a/chaplus_ros/scripts/chaplus_ros.py#L138-L141)
cc: @ayfujii