3(ポーン)、2(ポーン)、1(ポーン)、0(ピーン)
というような感じでカウントダウンの表示と共にリソースのwaveファイルを鳴らしています。
ですが、なぜか
3(聞こえない)、2(ポーン)、1(ポーン)、0(ポーン)、(ピーン)
と1秒遅れて聞こえてきます。
でタイマーを作り、OnTimerで
HINSTANCE hInst = AfxGetInstanceHandle();
if(timer>0){
::PlaySound( MAKEINTRESOURCE( IDR_PO_N ), hInst, SND_RESOURCE | SND_ASYNC );
}
else if(timer==0){
::PlaySound( MAKEINTRESOURCE( IDR_PI_N ), hInst, SND_RESOURCE | SND_ASYNC );
cTime=CTime::GetCurrentTime();
}
timer--;
timerはSetTimerの前に3で初期化しています。
wavファイルはAudacityを用いて周波数と長さを用いて作成したもので、長さはそれぞれ0.5秒(44KB)です。
SetTimerの後で画面を切り替えてすぐカウントダウンを開始しているのが原因かとも思い、timerを4から始めて
[4は表示しない](音も鳴らさない)、3(ポーン)、2(ポーン)、1(ポーン)、0(ピーン)
のつもりで作り変えてみました。
それでも
[4は表示しない](音も鳴らさない)、3(聞こえない)、2(ポーン)、1(ポーン)、0(ポーン)、(ピーン)
と1秒遅れて聞こえてきます。
表示のほうが1秒早いのでは?という考えは違ったかもしれません。
もともと1秒音が遅れることを見越して4のところで音を鳴らす命令を書けばきちんと聞こえるかもしれませんが、わざわざそういうことをする必要はないと思っています。
初めはRAMが98%も使用されていたので、だから重いのでは?と思いめもりーくりーなーを使ってメモリを掃除したところ、50%程度まで下がりました。
(CPUはどちらも20%前後)
それでも結果は変わらずでした。
ちなみに同じようにして作った0.1秒(9KB)の正誤判定の音は、30秒に約30セット×5回鳴らしても遅延することなく鳴ってくれているように思います。
リソースのwaveファイル0.5秒分44KBを読み込んで鳴らすという処理は遅延が発生するほど時間がかかるものなのでしょうか?
それとも、私の処理のさせ方がよくなかったのでしょうか?