unit Lame_Enc;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls;const
BE_CONFIG_MP3 = 0;
BE_CONFIG_LAME = 256;
type
THBESTREAM = ULONG;
PHBESTREAM = ^THBESTREAM;
PSHORT = ^SHORT;
PBYTE = ^Byte;
LMODE = (STEREO, JSTEREO, DUALCHANNEL, MONO);
LBITRATE = (b32, b48, b64, b96, b128, b160, b192, b224, b256, b320);
LMAXBITRATE = (m160, m192, m224, m256 ,m320);
lQUALITY = (NORMAL, LOW, HIGH, VOICE);
LVBRQUALITY = (v0, v1, v2, v3, v4, v5, v6, v7, v8 ,v9);
PLHV1 = ^TLHV1;
TLHV1 = packed record
dwStructVersion : DWORD;
dwStructSize : DWORD;
dwSampleRate : DWORD;
dwReSampleRate : DWORD;
nMode : Integer;
dwBitRate : DWORD;
dwMaxBitRate : DWORD;
nQuality : DWORD;
dwMpegVersion : DWORD;
dwPsyModel : DWORD;
dwEmphasis : DWORD;
bPrivate : BOOL;
bCRC : BOOL;
bCopyRight : BOOL;
bOriginal : BOOL;
bWriteVBRHeader : BOOL;
bEnableVBR : BOOL;
nVBRQuality : Integer;
btReserved : array [0..255] of Byte;
end;
PLameMP3 = ^TLameMP3;
TLameMP3 = packed record
dwSampleRate : DWORD;
byMode : Byte;
wBitrate : WORD;
bPrivate : BOOL;
bCRC : BOOL;
bCopyright : BOOL;
bOriginal : BOOL;
end;
PFormat = ^TFormat;
TFormat = packed record
case dwConfig : DWord of
BE_CONFIG_MP3 : (MP3: TLameMP3);
BE_CONFIG_LAME : (LHV1: TLHV1);
end;
PBECONFIG = ^TBECONFIG;
TBECONFIG = packed record
Format: TFormat;
end;
function beInitStream(var pbeConfig: TBEConfig; var dwSamples: DWORD; var dwBufferSize: DWORD; var phbeStream: THBESTREAM): ULONG; cdecl; external 'LAME_ENC.DLL';
function beEncodeChunk(hbeStream: THBEStream; nSamples:DWORD; pSamples: PShort; pOutput: PByte; var pdwOutput: DWORD): ULONG; cdecl; external 'LAME_ENC.DLL';
function beDeinitStream(hbeStream: THBEStream; pOutput:PByte; var pdwOutput : DWORD): ULONG; cdecl; external 'LAME_ENC.DLL';
function beCloseStream(var hbeStream: THBEStream): ULONG; cdecl; external 'LAME_ENC.DLL';
function beInit: Integer;
function beEnc(var Ms: TMemoryStream; var Md: TMemoryStream): Integer; overload;
function beEnc(var Ms: TMemoryStream; var Fd: TFileStream): Integer; overload;
function beEnc(var sBuf: Pointer; sLen: Integer; var Md: TMemoryStream): Integer; overload;
function beEnc(var sBuf: Pointer; sLen: Integer; var Fd: TFileStream): Integer; overload;
function beEnc(var sBuf: Pointer; var sLen: Integer): Integer; overload;
function beDeinit: Integer; overload;
function beDeinit(var Md: TMemoryStream): Integer; overload;
function beDeinit(var Fd: TFileStream): Integer; overload;
var
Done : DWORD;
dwWrite : DWORD;
toRead : DWORD;
isRead : DWORD;
toWrite : DWORD;
IsWritten : DWORD;
sLength : DWORD;
FNumSamples : DWORD;
FBufSize : DWORD;
InputBufSize : DWORD;
FMp3BlockAlign: DWORD;
vConfig : TBeConfig;
FHBeStream : THBeStream;
FInputBuf : Pointer;
FOutputBuf : Pointer;implementationfunction beInit: Integer;
begin
try
Result:= BeInitStream(vConfig, FNumSamples, FBufSize, FHBeStream);
if Result <> 0 then Exit;
InputBufSize:=FNumSamples*FMp3BlockAlign;
GetMem(FInputBuf,InputBufSize);
GetMem(FOutputBuf,FBufSize*32);
except
Result:=9;
end;
end;function beEnc(var Ms: TMemoryStream; var Md: TMemoryStream): Integer;
begin
try
sLength:= Ms.Size;
Done:= 0;
While Done <> sLength do begin
if (Done + (InputBufSize) <= sLength) then toRead:= InputBufSize else toRead:= sLength - Done;
isRead:= Ms.Read(FInputBuf^,toRead);
if isRead <> toRead then Exception.Create('');
Result:= beEncodeChunk(FHBeStream,(toRead div 2), FInputBuf, FOutputBuf, toWrite);
if Result <> 0 then Exit;
IsWritten:= Md.Write(FOutputBuf^,toWrite);
if toWrite <> IsWritten then Exception.Create('');
Done:= Done + toRead;
end;
except
Result:= 9;
end;
end;function beEnc(var Ms: TMemoryStream; var Fd: TFileStream): Integer;
begin
try
sLength:= Ms.Size;
Done:= 0;
While Done <> sLength do begin
if (Done + (InputBufSize) <= sLength) then toRead:= InputBufSize else toRead:= sLength - Done;
isRead:= Ms.Read(FInputBuf^,toRead);
if isRead <> toRead then Exception.Create('');
Result:= beEncodeChunk(FHBeStream,(toRead div 2), FInputBuf, FOutputBuf, toWrite);
if Result <> 0 then Exit;
IsWritten:= Fd.Write(FOutputBuf^,toWrite);
if toWrite <> IsWritten then Exception.Create('');
Done:= Done + toRead;
end;
except
Result:= 9;
end;
end;function beEnc(var sBuf: Pointer; sLen: Integer; var Md: TMemoryStream): Integer;
begin
try
Done:= 0;
While Done <> sLen do begin
if (Done + (InputBufSize) <= sLen) then toRead:= InputBufSize else toRead:= sLen - Done;
Move(Pointer(Longint(sBuf) + Done)^, FInputBuf^, toRead);
if isRead <> toRead then Exception.Create('');
Result:= beEncodeChunk(FHBeStream,(toRead div 2), FInputBuf, FOutputBuf, toWrite);
if Result <> 0 then Exit;
IsWritten:= Md.Write(FOutputBuf^,toWrite);
if toWrite <> IsWritten then Exception.Create('');
Done:= Done + toRead;
end;
except
Result:= 9;
end;
end;function beEnc(var sBuf: Pointer; sLen: Integer; var Fd: TFileStream): Integer;
begin
try
Done:= 0;
While Done <> sLen do begin
if (Done + (InputBufSize) <= sLen) then toRead:= InputBufSize else toRead:= sLen - Done;
Move(Pointer(Longint(sBuf) + Done)^, FInputBuf^, toRead);
if isRead <> toRead then Exception.Create('');
Result:= beEncodeChunk(FHBeStream,(toRead div 2), FInputBuf, FOutputBuf, toWrite);
if Result <> 0 then Exit;
IsWritten:= Fd.Write(FOutputBuf^,toWrite);
if toWrite <> IsWritten then Exception.Create('');
Done:= Done + toRead;
end;
except
Result:= 9;
end;
end;function beEnc(var sBuf: Pointer; var sLen: Integer): Integer;
begin
Result:= beEncodeChunk(FHBeStream,(sLen div 2), sBuf, FOutputBuf, toWrite);
sBuf:=FOutputBuf;
sLen:=toWrite;
end;function beDeinit: Integer;
begin
try
Result:= beDeinitStream(FHBeStream, FOutputBuf, dwWrite);
Result:= beCloseStream(FHBeStream);
finally
FreeMem(FInputBuf);
FreeMem(FOutputBuf);
FInputBuf:= Nil;
FOutputBuf:= Nil;
end;
end;function beDeinit(var Md: TMemoryStream): Integer;
begin
try
Result:= beDeinitStream(FHBeStream, FOutputBuf, dwWrite);
Md.Write(FOutputBuf^,toWrite);
Result:= beCloseStream(FHBeStream);
finally
FreeMem(FInputBuf);
FreeMem(FOutputBuf);
FInputBuf:= Nil;
FOutputBuf:= Nil;
end;
end;function beDeinit(var Fd: TFileStream): Integer;
begin
try
Result:= beDeinitStream(FHBeStream, FOutputBuf, dwWrite);
Fd.Write(FOutputBuf^,toWrite);
Result:= beCloseStream(FHBeStream);
finally
FreeMem(FInputBuf);
FreeMem(FOutputBuf);
FInputBuf:= Nil;
FOutputBuf:= Nil;
end;
end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls;const
BE_CONFIG_MP3 = 0;
BE_CONFIG_LAME = 256;
type
THBESTREAM = ULONG;
PHBESTREAM = ^THBESTREAM;
PSHORT = ^SHORT;
PBYTE = ^Byte;
LMODE = (STEREO, JSTEREO, DUALCHANNEL, MONO);
LBITRATE = (b32, b48, b64, b96, b128, b160, b192, b224, b256, b320);
LMAXBITRATE = (m160, m192, m224, m256 ,m320);
lQUALITY = (NORMAL, LOW, HIGH, VOICE);
LVBRQUALITY = (v0, v1, v2, v3, v4, v5, v6, v7, v8 ,v9);
PLHV1 = ^TLHV1;
TLHV1 = packed record
dwStructVersion : DWORD;
dwStructSize : DWORD;
dwSampleRate : DWORD;
dwReSampleRate : DWORD;
nMode : Integer;
dwBitRate : DWORD;
dwMaxBitRate : DWORD;
nQuality : DWORD;
dwMpegVersion : DWORD;
dwPsyModel : DWORD;
dwEmphasis : DWORD;
bPrivate : BOOL;
bCRC : BOOL;
bCopyRight : BOOL;
bOriginal : BOOL;
bWriteVBRHeader : BOOL;
bEnableVBR : BOOL;
nVBRQuality : Integer;
btReserved : array [0..255] of Byte;
end;
PLameMP3 = ^TLameMP3;
TLameMP3 = packed record
dwSampleRate : DWORD;
byMode : Byte;
wBitrate : WORD;
bPrivate : BOOL;
bCRC : BOOL;
bCopyright : BOOL;
bOriginal : BOOL;
end;
PFormat = ^TFormat;
TFormat = packed record
case dwConfig : DWord of
BE_CONFIG_MP3 : (MP3: TLameMP3);
BE_CONFIG_LAME : (LHV1: TLHV1);
end;
PBECONFIG = ^TBECONFIG;
TBECONFIG = packed record
Format: TFormat;
end;
function beInitStream(var pbeConfig: TBEConfig; var dwSamples: DWORD; var dwBufferSize: DWORD; var phbeStream: THBESTREAM): ULONG; cdecl; external 'LAME_ENC.DLL';
function beEncodeChunk(hbeStream: THBEStream; nSamples:DWORD; pSamples: PShort; pOutput: PByte; var pdwOutput: DWORD): ULONG; cdecl; external 'LAME_ENC.DLL';
function beDeinitStream(hbeStream: THBEStream; pOutput:PByte; var pdwOutput : DWORD): ULONG; cdecl; external 'LAME_ENC.DLL';
function beCloseStream(var hbeStream: THBEStream): ULONG; cdecl; external 'LAME_ENC.DLL';
function beInit: Integer;
function beEnc(var Ms: TMemoryStream; var Md: TMemoryStream): Integer; overload;
function beEnc(var Ms: TMemoryStream; var Fd: TFileStream): Integer; overload;
function beEnc(var sBuf: Pointer; sLen: Integer; var Md: TMemoryStream): Integer; overload;
function beEnc(var sBuf: Pointer; sLen: Integer; var Fd: TFileStream): Integer; overload;
function beEnc(var sBuf: Pointer; var sLen: Integer): Integer; overload;
function beDeinit: Integer; overload;
function beDeinit(var Md: TMemoryStream): Integer; overload;
function beDeinit(var Fd: TFileStream): Integer; overload;
var
Done : DWORD;
dwWrite : DWORD;
toRead : DWORD;
isRead : DWORD;
toWrite : DWORD;
IsWritten : DWORD;
sLength : DWORD;
FNumSamples : DWORD;
FBufSize : DWORD;
InputBufSize : DWORD;
FMp3BlockAlign: DWORD;
vConfig : TBeConfig;
FHBeStream : THBeStream;
FInputBuf : Pointer;
FOutputBuf : Pointer;implementationfunction beInit: Integer;
begin
try
Result:= BeInitStream(vConfig, FNumSamples, FBufSize, FHBeStream);
if Result <> 0 then Exit;
InputBufSize:=FNumSamples*FMp3BlockAlign;
GetMem(FInputBuf,InputBufSize);
GetMem(FOutputBuf,FBufSize*32);
except
Result:=9;
end;
end;function beEnc(var Ms: TMemoryStream; var Md: TMemoryStream): Integer;
begin
try
sLength:= Ms.Size;
Done:= 0;
While Done <> sLength do begin
if (Done + (InputBufSize) <= sLength) then toRead:= InputBufSize else toRead:= sLength - Done;
isRead:= Ms.Read(FInputBuf^,toRead);
if isRead <> toRead then Exception.Create('');
Result:= beEncodeChunk(FHBeStream,(toRead div 2), FInputBuf, FOutputBuf, toWrite);
if Result <> 0 then Exit;
IsWritten:= Md.Write(FOutputBuf^,toWrite);
if toWrite <> IsWritten then Exception.Create('');
Done:= Done + toRead;
end;
except
Result:= 9;
end;
end;function beEnc(var Ms: TMemoryStream; var Fd: TFileStream): Integer;
begin
try
sLength:= Ms.Size;
Done:= 0;
While Done <> sLength do begin
if (Done + (InputBufSize) <= sLength) then toRead:= InputBufSize else toRead:= sLength - Done;
isRead:= Ms.Read(FInputBuf^,toRead);
if isRead <> toRead then Exception.Create('');
Result:= beEncodeChunk(FHBeStream,(toRead div 2), FInputBuf, FOutputBuf, toWrite);
if Result <> 0 then Exit;
IsWritten:= Fd.Write(FOutputBuf^,toWrite);
if toWrite <> IsWritten then Exception.Create('');
Done:= Done + toRead;
end;
except
Result:= 9;
end;
end;function beEnc(var sBuf: Pointer; sLen: Integer; var Md: TMemoryStream): Integer;
begin
try
Done:= 0;
While Done <> sLen do begin
if (Done + (InputBufSize) <= sLen) then toRead:= InputBufSize else toRead:= sLen - Done;
Move(Pointer(Longint(sBuf) + Done)^, FInputBuf^, toRead);
if isRead <> toRead then Exception.Create('');
Result:= beEncodeChunk(FHBeStream,(toRead div 2), FInputBuf, FOutputBuf, toWrite);
if Result <> 0 then Exit;
IsWritten:= Md.Write(FOutputBuf^,toWrite);
if toWrite <> IsWritten then Exception.Create('');
Done:= Done + toRead;
end;
except
Result:= 9;
end;
end;function beEnc(var sBuf: Pointer; sLen: Integer; var Fd: TFileStream): Integer;
begin
try
Done:= 0;
While Done <> sLen do begin
if (Done + (InputBufSize) <= sLen) then toRead:= InputBufSize else toRead:= sLen - Done;
Move(Pointer(Longint(sBuf) + Done)^, FInputBuf^, toRead);
if isRead <> toRead then Exception.Create('');
Result:= beEncodeChunk(FHBeStream,(toRead div 2), FInputBuf, FOutputBuf, toWrite);
if Result <> 0 then Exit;
IsWritten:= Fd.Write(FOutputBuf^,toWrite);
if toWrite <> IsWritten then Exception.Create('');
Done:= Done + toRead;
end;
except
Result:= 9;
end;
end;function beEnc(var sBuf: Pointer; var sLen: Integer): Integer;
begin
Result:= beEncodeChunk(FHBeStream,(sLen div 2), sBuf, FOutputBuf, toWrite);
sBuf:=FOutputBuf;
sLen:=toWrite;
end;function beDeinit: Integer;
begin
try
Result:= beDeinitStream(FHBeStream, FOutputBuf, dwWrite);
Result:= beCloseStream(FHBeStream);
finally
FreeMem(FInputBuf);
FreeMem(FOutputBuf);
FInputBuf:= Nil;
FOutputBuf:= Nil;
end;
end;function beDeinit(var Md: TMemoryStream): Integer;
begin
try
Result:= beDeinitStream(FHBeStream, FOutputBuf, dwWrite);
Md.Write(FOutputBuf^,toWrite);
Result:= beCloseStream(FHBeStream);
finally
FreeMem(FInputBuf);
FreeMem(FOutputBuf);
FInputBuf:= Nil;
FOutputBuf:= Nil;
end;
end;function beDeinit(var Fd: TFileStream): Integer;
begin
try
Result:= beDeinitStream(FHBeStream, FOutputBuf, dwWrite);
Fd.Write(FOutputBuf^,toWrite);
Result:= beCloseStream(FHBeStream);
finally
FreeMem(FInputBuf);
FreeMem(FOutputBuf);
FInputBuf:= Nil;
FOutputBuf:= Nil;
end;
end;end.
解决方案 »
- 关于 Delphi 7 IDE
- 如何在程序中快速清空2000下的打印作业呢?---急用
- 我想屏蔽系统默认的TAB键的功能来在我的组件中重新定义它,请高手指点。
- 请问制作DEPHI6的安装程序installshield express在哪里下载呀
- 怎样在delphi中使用html help啊?
- 紧急求救:我想控制MDI窗口的大小及出现位置。该怎么做?MDI全部通过form1继承
- 复选框问题。
- 急!!!哪儿有 InstallShield Express for Delphi 6 下载
- 怎么把一个VCL 删除掉,我装了 flatstyle_D5 现在要装 flatstyle 2000 怎么把原来那个去掉?
- 哪儿有类似画图的delphi图像处理的例子可下??
- 我写了一个ACTIVE的打印控件,用户在网页上直接点击后,能否就安装成功呢
- 怎样使dbgrid中总显示最后一行记录?在线等待!!
[email protected]
我主要为了录音,我硬盘很小的,但要求有比较好的音质,
to:楼上,我已经发给你了,请查收