関数の連続使用
| 投稿日 | : 2007/10/20 23:41 |
| 投稿者 | : ラッキー |
| 参照先 | : |
| 件名 | : Re: 関数の連続使用 |
| 投稿日 | : 2007/10/24 11:41 |
| 投稿者 | : 管理人 |
| 参照先 | : |
こんにちは。
おかしいですね。AquesTalkDa_PlaySyncは、同期関数として用意していますので、Sleepで無音区間が作れるはずなのですが・・・
また、メッセージのやりとりは、AquesTalkライブラリのアーカイブに、AqTkAppのサンプルプログラムで使っていますので、この辺りのコードを参照いただければと思います。
おかしいですね。AquesTalkDa_PlaySyncは、同期関数として用意していますので、Sleepで無音区間が作れるはずなのですが・・・
また、メッセージのやりとりは、AquesTalkライブラリのアーカイブに、AqTkAppのサンプルプログラムで使っていますので、この辺りのコードを参照いただければと思います。
| 件名 | : Re: 関数の連続使用 |
| 投稿日 | : 2007/10/23 09:43 |
| 投稿者 | : ラッキー |
| 参照先 | : |
ラッキーです。お世話になっております。
どうも、色々とありがとうございます。
すみません。単純にwhile(全解析単位){}
の中に、Sleep(任意のポーズ長)を入れる
形で実験したのですが、おそらく
AquesTalkDa_PlaySyncが非同期の関数の
ために、思った結果が得られませんでした。
AquesTalkDa_Play()にメッセージを指定する
という方法なのですが、自分で試してみたの
ですが、いまいちやり方が悪いようで、うま
くできませんでした。
このため、もしも可能でしたら、非常に簡単
な例で良いのですが、AquesTalkDa_Play()に
メッセージを指定してそれを受け取る方法の
やり方について、簡単なソースをお示し頂け
れば非常に幸いです。
または、既にどこかに類例があれば、その
URLを教えて頂くだけでも結構なのですが。
お忙しいところ、本当に申し訳ありません。
もしも、可能でしたらよろしくお願い致しま
す。
どうも、色々とありがとうございます。
すみません。単純にwhile(全解析単位){}
の中に、Sleep(任意のポーズ長)を入れる
形で実験したのですが、おそらく
AquesTalkDa_PlaySyncが非同期の関数の
ために、思った結果が得られませんでした。
AquesTalkDa_Play()にメッセージを指定する
という方法なのですが、自分で試してみたの
ですが、いまいちやり方が悪いようで、うま
くできませんでした。
このため、もしも可能でしたら、非常に簡単
な例で良いのですが、AquesTalkDa_Play()に
メッセージを指定してそれを受け取る方法の
やり方について、簡単なソースをお示し頂け
れば非常に幸いです。
または、既にどこかに類例があれば、その
URLを教えて頂くだけでも結構なのですが。
お忙しいところ、本当に申し訳ありません。
もしも、可能でしたらよろしくお願い致しま
す。
| 件名 | : Re: 関数の連続使用 |
| 投稿日 | : 2007/10/21 19:42 |
| 投稿者 | : 管理人 |
| 参照先 | : |
音声合成の際の最後のポーズ(無音区間)は、わざとはずす仕様になっております。
現在のインターフェースではポーズのみの出力も出来ないので、その方法ではポーズを入れるのは難しいかもしれません。
そこで、例えば、
while (全解析単位) {
解析単位の切り出し
解析単位内の言語処理
AquesTalkDa_PlaySync(言語解析結果の発音文字列);
Sleep(任意のポーズ時間)
}
のようにするか、
AquesTalkDa_Play()にメッセージを指定することで、発声の完了メッセージを受けて、Sleep処理、次の解析単位を処理するようにしてもよいかと思います。
なお、有償になりますが、常に最後にポーズ区間を付与するようにカスタマイズすることもできますので、必要があればご連絡くださいませ。
現在のインターフェースではポーズのみの出力も出来ないので、その方法ではポーズを入れるのは難しいかもしれません。
そこで、例えば、
while (全解析単位) {
解析単位の切り出し
解析単位内の言語処理
AquesTalkDa_PlaySync(言語解析結果の発音文字列);
Sleep(任意のポーズ時間)
}
のようにするか、
AquesTalkDa_Play()にメッセージを指定することで、発声の完了メッセージを受けて、Sleep処理、次の解析単位を処理するようにしてもよいかと思います。
なお、有償になりますが、常に最後にポーズ区間を付与するようにカスタマイズすることもできますので、必要があればご連絡くださいませ。
AquesTalkDa_Playの関数を連続して利用する場合に関
する点で分からないことがありまして、書き込みさせ
て頂きます。
文章の「。」を1つの解析単位として、言語処理して、
その単位毎に、ループを使ってを呼び出す形で、連続
して音声合成しています。
すなわち、
while (全解析単位) {
解析単位の切り出し
解析単位内の言語処理
AquesTalkDa_Play(言語解析結果の発音文字列);
}
のような形で、呼び出しています。このように処理し
ている理由は、非常に長文の場合には解析単位毎でな
いと、都合が悪いためです。
ここで、分からないのが、このような形で、ループを
使ってAquesTalkDa_Playを連続使用した場合に、発音
文字列の最後には、必ず「。」が入っているにも関わ
らず、合成される音声では、各解析単位の最後の「。」
のポーズ長が非常に短くて、各文がくっついて聞こえ
てしまう点です。
同じ発音文字列でも、ループでAquesTalkDa_Playを呼
び出すのでなく、全文の解析結果を1度にこの関数で
処理させた場合などは、各文の最後の「。」のポーズ
長は、正しい長さとなり聞きやすくなります。
何か、プログラム上のヒントなどお教え頂ければ、幸
いです。