VC++6で、
リアルタイム録音とwavファイルの再生を繰り返していたら、
ブログラムは止まりはしないのですが、
2~3順目あたりから、
警告用のメッセージボックスを上げるかのように、
上記のエラーが何度も出ます。
どこが悪くて、何をなおせばいいのでしょうか?
まずは質問の仕方をなおしましょう
あなたがどんなコードを書いたのか、他人にはさっぱりわかりません
質問の内容から推測すると、
「wavファイルの再生の処理が終了したことを確かめてから、
リアルタイム録音の処理を行いましょう。」
となります。
もう少し、プログラムの処理内容を書いてくれないと推測しか出来ません。
以下のような情報をくれないと分りません。
OSは、WINDOWS XP? SP1? SP2?
何の関数を使ってどのような処理を行ったのか?
SDK?MFC?
いろんな処理方法があるので、
マルチメディアの処理の場合、関数名明記しましょう。
WINDOWS XPです。
SDKです。
再生は、PlaySoundaという関数でやっており、
int a;
int g;
PlaySoundA(RC_NotFound.wav,NULL,SND_FILENAME|SND_ASYNC);
for (a=0;a<25000;a++)
for (b=0;b<25000;b++)
b = b;
一見、無意味と思えるループをさせているのは、
これがないと、途中で再生が、途切れちゃうんですね。
なぜに ASYNC をわざわざ指定してるのに BUSY ループで待つのか。
一見無意味ではなくて、まったく無意味。典型的ダメコード。
PlaySound のマニュアルを読むべし。
具体的にどうコード書けばいいかは「真に何がしたいか」次第なので
提示された文章だけでは判断できん。
PlaySound(_T(RC_NotFound.wav), NULL, SND_FILENAME|SND_SYNC); // ループは不要
でいいのかもしれんが、もっと別のコードになるかも試練
関数を使うときは、それぞれの引数の意味とか何を指定するとどうなるのか
と言うのをきちんと理解して使わないと応用も利かないし、今回のように
無意味なコードを書くハメになると思います。
SND_ASYNCとSND_SYNCの意味とかそのときにどんな動きをするのかとか
きちんと理解して使うようにするべきだと思いますよ。
「PlaySound」って「SND_SYNC」で使うのが妥当みたいですね。
MSDN見てみたけど、非同期にした時の利点があまりないみたいです。
確かに処理がすぐ戻るって利点があっても、
イベントのハンドルは取得できないし、
完了ルーチンを設定も出来ないみたいですね。