FName: String;
FileStream : TFileStream;
FData : Pointer;
curTime,endTime:String;
FileStream := TFileStream.Create('c:\test.wav', fmOpenRead);
try
FData := AllocMem(FileStream.Size);
FileStream.Read( FData^,FileStream.Size);
curTime := FormatDateTime('hh:nn:ss', now);
sndPlaySound(FData,SND_MEMORY); //1회 재생
if (chkRepeat.Checked = true) and (StrToInt(cboftime.text) > 0) then
begin
if StrToInt(copy(curTime,4,2)) + StrToInt(cboftime.text) < 60 then
endTime := copy(curTime,1,3) + IntToStr(StrToInt(copy(curTime,4,2)) + StrToInt(cboftime.text)) + copy(curTime,6,3)
else
endTime := IntToStr(StrToInt(copy(curTime,1,2)) + trunc((StrToInt(copy(curTime,4,2)) + StrToInt(cboftime.text))/60)) + ':' + IntToStr((StrToInt(copy(curTime,4,2)) + StrToInt(cboftime.text)) mod 60) + copy(curTime,6,3);
while curTime <= endTime do
begin
sndPlaySound(FData,SND_MEMORY); //반복재생시 끊어짐
curTime := FormatDateTime('hh:nn:ss', now);
end;
end;
finally
FileStream.Free;
end;
wav 파일의 연주를 특정 시간 만큼 반복재생키 위해 while 문을 사용하셨나요?
만일 그렇다면, 구지 그렇게 안하셔도 될것 같습니다..
아래 예문 처럼 하시면
sndPlaySound(Pointer(FData), SND_MEMORY
Or SND_NODEFAULT Or SND_ASYNC or SND_LOOP); <- 무한 반복 재생
while 문을 사용하지 않아도 반복재생이 될거구요..
특정 시간이 흐르는 것을 체크해서
멈춰야 할땐 단순히,
sndPlaySound(nil, 0); <- 멈춤
이렇게만 해주시면 될거 같네요..
즐거운 프로그래밍 하세요~
p.s : sndPlaySound 의 인자들은 MMSystem.pas 에 자세히 있습니다.