uses zlib;function TFormMain.PlaySnd():Boolean; //²¥·Å×ÊÔ´ÖеÄMidiÒôÀÖ var ResStream:TResourceStream; CpsBuf,DCpsBuf:Pointer; DeCompressSize:Integer; begin Result:=false; try ResStream:=TResourceStream.Create(hInstance,'Sound','Compress'); GetMem(CpsBuf,ResStream.Size); ResStream.ReadBuffer(CpsBuf^,ResStream.Size); DecompressBuf(CpsBuf,ResStream.Size,0,DCpsBuf,DeCompressSize); if (PlaySound(DCpsBuf,hInstance,SND_ASYNC or SND_LOOP or SND_MEMORY)=true) then Result:=true; finally ResStream.Free; end; end;
var
CompressStream: TCompressionStream;
Count: integer;
Begin
Count:= SourceStream.Size;
DestStream.WriteBuffer(Count, SizeOf(Count));
CompressStream:=TCompressionStream.Create(CompressionLevel, DestStream);
Try
SourceStream.SaveToStream(CompressStream);
finally
CompressStream.Free;
end;
end;procedure UnCompressIT(var SourceStream, DestStream: TMemoryStream);
var
UnCompressStream: TDecompressionStream;
Buffer: PChar;
Count: Integer;
Begin
SourceStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
UnCompressStream := TDecompressionStream.Create(SourceStream);
Try
UnCompressStream.ReadBuffer(Buffer^, Count);
DestStream.WriteBuffer(Buffer^, Count);
finally
FreeMem(Buffer);
UnCompressStream.Free
end;
end;procedure CompressFile(Compress: Boolean; SourceFile, DestFile: String);
var
SourceStream: TMemoryStream;
DestStream: TMemoryStream;
begin
SourceStream := TMemoryStream.Create;
DestStream := TMemoryStream.Create;
Try
SourceStream.LoadFromFile(SourceFile);
if Compress
then CompressIT(SourceStream, DestStream, clDefault)
else UnCompressIT(SourceStream, DestStream);
DestStream.SaveToFile(DestFile);
finally
SourceStream.Free;
DestStream.Free;
end;
end;end.
zlib;function TFormMain.PlaySnd():Boolean;
//²¥·Å×ÊÔ´ÖеÄMidiÒôÀÖ
var
ResStream:TResourceStream;
CpsBuf,DCpsBuf:Pointer;
DeCompressSize:Integer;
begin
Result:=false;
try
ResStream:=TResourceStream.Create(hInstance,'Sound','Compress');
GetMem(CpsBuf,ResStream.Size);
ResStream.ReadBuffer(CpsBuf^,ResStream.Size);
DecompressBuf(CpsBuf,ResStream.Size,0,DCpsBuf,DeCompressSize);
if (PlaySound(DCpsBuf,hInstance,SND_ASYNC or SND_LOOP or SND_MEMORY)=true) then
Result:=true;
finally
ResStream.Free;
end;
end;