ちょっとしたタイマーを作っています。
例えば10秒ごとにwavファイルを演奏して、カウント続行という処理をする場合、サイズの大きなwavファイルだと、鳴っている間、カウントが遅くなってしまうような状態になります(ちょっと表現しにくいですが)。
これを、wavの鳴動にかかわらずカウントは同じように進むようにするには、wav鳴動処理を別スレッドにしなければならいのでしょうか?
ちなみに、鳴動処理はVCLではなくAPIで直接実行してします。
カウントが遅くなるというのはWAVを再生中に TTimer の割り込みが Interval に設定している時間より遅く割り込みが掛かるという事かな?
MediaPlayer だけど以下のように10秒毎に再生させても遅くはならないけど?
再生させているのは Windows XP Startup.wav 415K
procedure TForm3.Timer1Timer(Sender: TObject);
var
Hour,Min,Sec,MSec : Word;
T : TDateTime;
S : String;
begin
T := Now;
S := '';
DeCodeTime (T,Hour,Min,Sec,MSec);
if Sec mod 10 = 0 then
begin
MediaPlayer1.Close;
MediaPlayer1.Open;
MediaPlayer1.Play;
S := ' SOUND';
end;
Memo1.Lines.Add (FormatDateTime('hh:nn:ss:zzz',T) + S);
end;
ツイート | ![]() |