VC++でのエラーについて
| 投稿日 | : 2008/01/07 00:18 |
| 投稿者 | : kaze |
| 参照先 | : |
| 件名 | : Re: VC++でのエラーについて |
| 投稿日 | : 2008/01/07 22:24 |
| 投稿者 | : kaze |
| 参照先 | : |
ご返答ありがとうございます。
サウンドボードを変えることもできず、どうしようか迷っていましたが、解決できたようです。
AquesTalkDa_Playで再生する前に、
AquesTalkDa_Releaseで解放
AquesTalkDa_Createで再作成と
毎回行うと、エラーが発生しなくなりました。
つまり、
初期化処理
AquesTalkDa_Create 作成
2秒間隔のタイマー
AquesTalkDa_Play("てすとです。");
と行っていたのを、
初期化処理
AquesTalkDa_Create 作成
2秒間隔のタイマー
AquesTalkDa_Release 解放
AquesTalkDa_Create 再作成
AquesTalkDa_Play("てすとです。");
とすることで、8000回以上繰り返しても普通に再生されるようになりました。
速度的にも、問題ありません。
他のSAPIライブラリも検討し、組み込んでみたのですが、やわらかく、なめらかな声質がとても気に入っています。
この対処が、最良なのかどうかわかりませんが、今のところは支障がなさそうなので、このまま使用させていただきたいと思います。
ありがとうございました。
サウンドボードを変えることもできず、どうしようか迷っていましたが、解決できたようです。
AquesTalkDa_Playで再生する前に、
AquesTalkDa_Releaseで解放
AquesTalkDa_Createで再作成と
毎回行うと、エラーが発生しなくなりました。
つまり、
初期化処理
AquesTalkDa_Create 作成
2秒間隔のタイマー
AquesTalkDa_Play("てすとです。");
と行っていたのを、
初期化処理
AquesTalkDa_Create 作成
2秒間隔のタイマー
AquesTalkDa_Release 解放
AquesTalkDa_Create 再作成
AquesTalkDa_Play("てすとです。");
とすることで、8000回以上繰り返しても普通に再生されるようになりました。
速度的にも、問題ありません。
他のSAPIライブラリも検討し、組み込んでみたのですが、やわらかく、なめらかな声質がとても気に入っています。
この対処が、最良なのかどうかわかりませんが、今のところは支障がなさそうなので、このまま使用させていただきたいと思います。
ありがとうございました。
| 件名 | : Re: VC++でのエラーについて |
| 投稿日 | : 2008/01/07 12:50 |
| 投稿者 | : 管理人 |
| 参照先 | : |
経験上、オーディオデバイス関係(ドライバを含む)のことが多いようです。
その場合、異なるサウンドカード(異なるメーカで)では、違う結果になるかと思います。
一度お試しいただければと思います。
その場合、異なるサウンドカード(異なるメーカで)では、違う結果になるかと思います。
一度お試しいただければと思います。
現在、非同期(AquesTalkDa_Play)での再生を繰り返していると、不定期なタイミングでヒープ領域でのエラーが表示される現象でつまっています。
そこで、単に、「てすとです。」という文字を非同期で、2秒間隔でタイマーでまわすプログラムを作成しました。
音声は読み上げますが、早いときで十数回、長いときで800回くらいで、ヒープ領域のエラーと表示され、ストップします。
エラーは、関数(AquesTalkDa_Play)を通過した時点では起こりませんが、読み上げ中か、読み上げ終了時のタイミングで、AquesTalkDa_Play通過時に作成される2つのスレッドのうち1つで起こっているようです。
エラートラップなどで、回避も考えたのですが、上手くいっていません。
もし、よろしければ、使用方法のミスなのか、対処方法があれば教えていただけるとありがたいです。
使用させていただいているのに、わがままを申し上げて申し訳ありません。
環境
Windows XP SP2
VC++ 2005
MFC でのダイアログで作成
AquesTalk は、静的ライブラリと、LoadLibralyでの動的読み込みの2種類で試しました。