HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0826
merryクリックした単語を瞬時に発音させたい6解決


merry

リンク

2008/8/26(Tue) 13:07:22|NO.18694

「クリックした単語を発音させる」というスクリプトを書きたいのですが、
連打するとすると発音の出だしが遅いのが気になります。

設定で速度を上げると少し良くなりますが、今度は全文を発音した時に
速くなりすぎてしまいます。

* クリックと同時に発音する
(前の単語が発音途中でも、次をクリックした時には次の発音を始める)
* 全文は聞きやすい速さ

にしたいのですが、何か良い方法はないでしょうか。Text-To-Speechにはこだわらないので、他のやり方でも結構です。
よろしくお願いします。

[参照]
http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200511/05110019.txt


axobj tts, "{2398E32F-5C6E-11D1-8C65-0060081841DE}",0,0 mes " 発音を聞きたい単語、もしくは全文をクリックして下さい" mes "   (左クリック=発音 : 右クリック=設定変更)" bun="This is a pen." sdim tango,4,6 : tango="This","is","a","pen","全文" js=26 ;文字サイズ font "MS ゴシック",js color 200,100,100 : x=0 : y=50 : xx=x : w=100 repeat 5 : boxf xx,y,xx+(w-2),y+js : xx+=w : loop color : xx=x repeat 5 : pos xx,y : mes tango.cnt : xx+=w : loop *mein await stick ky,0 if ky&512 : gosub *set if ky&256 : gosub *sp goto *mein *sp if (mousey>=y)&(mousey<=y+js) { no=(mousex-x)/w if no>=5 : return if no=4 : tts->"Speak" bun : return ts=tango.no tts->"Speak" ts } return *set tts->"GeneralDlg" hwnd,"TextToSpeech HSP" return



この記事に返信する


あり

リンク

2008/8/27(Wed) 11:48:21|NO.18719

私の調査不足かもしれませんがText-To-Speechの仕様上
これ以上発声開始の速度を上げることは出来ないんじゃないでしょうか?
音声の多重再生にも対応していないようですし。

もっとTTS(略)の詳しい機能を調べたいのなら参照先からさらにリンクされている
リファレンスを読んでみてはいかがでしょうか?英語ですけど・・・。

他の方法としては、自分で五十音分の音声を用意して
dsoundex.hpi等の多重音声出力に対応したプラグインを使って
単語の発音にあわせた音声を出力する・・・とかなら
出来なくはないでしょうが、手間がかかる割にきれいな発声には
ならないでしょうね。
単語ごとでの発声でよいのならそれなりなのかもしれませんが
手間は相当増えると思います(量にもよりますが)

・・・と、ここまで書いて気がつきましたが
あらかじめ発音させる単語とその数が決まっているのであれば
上の方法でも問題ないですね、単語の数に応じた手間はかかりますが。



merry

リンク

2008/8/27(Wed) 15:18:02|NO.18726

ありさん、ありがとうございます。

やっぱり、TTSでは無理っぽいですか。
英語のリファレンスは一応目を通したのですが語学力不足もあって解決に至りませんでした。

以前、英文の発音を保存できるHPを見つけて利用していたのですが、ご指摘の通り
ちょっと単語数が多いのでTTSに切り替えたのですが・・・ なかなか思うように行かない
ものですね。

dsoundex.hpiというのは頭に無かったので、それも含めて、もう一度検討してみます。



ANTARES

リンク

2008/8/27(Wed) 23:42:44|NO.18746

 参照先からのリンクを見るとStopSpeakingというメソッドが
あるようですが、これは使えないのですか?



merry

リンク

2008/8/28(Thu) 10:08:59|NO.18753

ANTARESさん、ありがとうございます。
解決できました!

StopSpeaking()としてあり、使い方がよく判らなかったのですが、
「 if (mousey>=y)&(mousey<=y+js) { 」
の下に、
「 tts->"StopSpeaking" 」
と入れたら、思い通りに動きました。

懸案事項だったので、これでやっと先に進めます。



あり

リンク

2008/8/28(Thu) 14:42:40|NO.18757

あれ、もう解決してしまいましたか?
StopSpeakingは自分でも試してみたのですがコマンドを置く場所が正しくなかったようですね(汗)

もう見ておられるかはわかりませんが、せっかく調べたので置いておきます。
http://www.vector.co.jp/soft/win95/prog/se400858.html
にある『AquesTalk-規則音声合成ライブラリ』を使うと、とても簡単に音声合成が使えます。

解凍したアーカイブのbinフォルダにあるAquesTalkDa.dllをHSPフォルダに移して

#uselib "AquesTalkDa.dll" #func AquesTalkDa_PlaySync "AquesTalkDa_PlaySync" sptr,sptr #func AquesTalkDa_Create "AquesTalkDa_Create" ;stat=音声エンジンのハンドル #func AquesTalkDa_Release "AquesTalkDa_Release" sptr #func AquesTalkDa_Play "AquesTalkDa_Play" sptr,sptr,sptr,sptr,sptr,sptr #func AquesTalkDa_Stop "AquesTalkDa_Stop" sptr #func AquesTalkDa_IsPlay "AquesTalkDa_IsPlay" sptr ;stat 1=再生中 0=停止中 AquesTalkDa_Create sno1=stat AquesTalkDa_Create sno2=stat vo1="えん'しゅう/りつわ;/<NUM VAL=3.14>です" vo2="こんにちわ" mes "音声1 "+vo1+"\n音声2 "+vo2 button "円周率",*voice button "こんにちは",*voice2 onexit *owari stop *voice AquesTalkDa_Stop sno1 AquesTalkDa_Play sno1,vo1,100,hwnd,0,0 stop *voice2 AquesTalkDa_Stop sno2 AquesTalkDa_Play sno2,vo2,100,hwnd,0,0 stop *owari AquesTalkDa_Release sno1 AquesTalkDa_Release sno2 end
上のスクリプトで起動できると思います。

機能はTTSより少ないですが、反応も早く多重再生も出来るので
使いやすさではこちらの方が優れていると思います。
他にも日本語マニュアル付きで利用条件に制限が少ないというメリットもあるので
興味があったら試してみて下さいませ。



merry

リンク

2008/8/29(Fri) 11:53:05|NO.18765

ありさんへ。

>StopSpeakingは自分でも試してみたのですが〜
ということは、ありさんも「StopSpeaking」にそうした機能があるかもと、
考えたのですね。
私も、メソッドは何度か目を通したつもりでしたが、速度の関係だとばかり
思っていたのでスルーしてしまいました。素人の限界ですね。

『AquesTalk-規則音声合成ライブラリ』は早速ダウンロードしてスプリクトを
試させてもらいまいした。イントネーションが自由に入れられるのがいいですね。
文章を入れてみたら、少し時間がかかりましたが、いい感じで読んでくれました。
英単語に対応していないようなので残念ですが、もう一つ、日本語を入れたい
スプリクトがあるので、そちらに活用させてもらいますね。

色々とありがとうございました。
また、よろしくお願いします。



ONION software Copyright 1997-2021(c) All rights reserved.