实际上,每次播放时都会要求Windows从.EXE文件重新加载.WAV数据。这将需要一段时间,除非数据仍在缓存中(这就是为什么如果等待足够长的时间才能将数据“抛出”缓存,则需要更长的时间-然后Windows必须从.EXE文件重新加载数据)。
因此,您应该在启动时在自己的应用程序中缓存一次数据(FormCreate),然后在播放声音时使用缓存的数据。
TBytes
:
FUNCTION LoadResource(CONST ResourceName : STRING) : TBytes;
VAR
S : TStream;
SZ : Int64;
BEGIN
S:=TResourceStream.Create(HInstance,ResourceName,RT_RCDATA);
TRY
SZ:=S.Size;
SetLength(Result,SZ);
S.Read(Result,0,SZ)
FINALLY
FreeAndNIL(S)
END
END;
FUNCTION PlayWAV(CONST Data : TBytes ; Flags : UINT = SND_ASYNC) : BOOLEAN;
BEGIN
Result:=sndPlaySound(PChar(Data),Flags OR SND_MEMORY)
END;