📄 mainfrm.pas.~84~
字号:
unit mainfrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons,mmsystem;
type
POggEncMsg=^OggEncMsg;
OggEncMsg=packed record
Mark :integer;
lpBuffer :PByte;
BufferSize:Integer;
lpOutBuffer :PByte;
OutBufferMaxSize:Integer;
OutBufferSize :Integer;
end;
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
BitBtn1: TBitBtn;
Button1: TButton;
OpenDialog1: TOpenDialog;
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function ogg_encode_init(lpMsg:PChar):Integer;stdcall;external 'E:\软件\源代码\OGG相关\oggenc2.85srcs_改2\oggenc2\RT_Opt\_oggenc2.dll' ;
function ogg_encode_do(lpMsg:PChar):Integer;stdcall;external 'E:\软件\源代码\OGG相关\oggenc2.85srcs_改2\oggenc2\RT_Opt\_oggenc2.dll';
function ogg_encode_free(lpMsg:PChar):Integer;stdcall;external 'E:\软件\源代码\OGG相关\oggenc2.85srcs_改2\oggenc2\RT_Opt\_oggenc2.dll';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
const
TempBufferLenght=512;
TempOutBufferLength=512*20;
var
Buffer:Array[0..TempOutBufferLength-1]of Byte;
SrcFileName,DestFileName:String;
OggSize,nRet,nSize:Integer;
pmsg:POggEncMsg;
fsSrc,fsDest:TFileStream;
ptmp:PByte;
begin
SrcFileName := edit1.Text;
if not FileExists(SrcFileName) then
begin
showmessage('file not found:'+srcFileName);
exit;
end;
DestFileName :=Copy(SrcFileName,1,length(SrcFileName)-4)+'.ogg';
if FileExists(DestFileName) then
DeleteFile(DestFileName);
fsSrc := TFileStream.Create(SrcFileName,fmOpenRead or fmShareDenyNone);
fsDest := TFileStream.Create(DestFileName,fmCreate);
new(pmsg);
FillMemory(pmsg,sizeof(pmsg^),0);
pmsg.lpBuffer := PByte(StrAlloc(TempBufferLenght));
pmsg.lpOutBuffer := PByte(StrAlloc(TempOutBufferLength));
pmsg.OutBufferMaxSize:=TempOutBufferLength;
// 1.初始化
fsSrc.Seek(20,0);
fsSrc.Read(Buffer,sizeof(tWAVEFORMATEX));
ptmp := pmsg.lpBuffer;
copymemory(ptmp,@Buffer,sizeof(tWAVEFORMATEX));
pmsg.Mark := 0;
pmsg.BufferSize := sizeof(tWAVEFORMATEX);
nRet := ogg_encode_init(pchar(pmsg));
if nRet <> 0 then
exit;
ptmp := pmsg.lpOutBuffer;
copymemory(@Buffer,pmsg.lpOutBuffer.OutBufferSize);
if pmsg.OutBufferSize>0 then
fsDest.Write(Buffer,pmsg.OutBufferSize);
while fsSrc.Position < fsSrc.Size do
begin
nSize :=fsSrc.Read(Buffer,TempBufferLenght);
ptmp := pmsg.lpBuffer;
copymemory(ptmp,@Buffer,nSize);
if nSize >0 then
begin
pmsg.Mark := 1;
pmsg.BufferSize := nSize;
pmsg.OutBufferMaxSize:=TempOutBufferLength;
nRet := ogg_encode_do(pchar(pmsg));
if nRet <> 0 then exit;
ptmp := pmsg.lpOutBuffer;
copymemory(@Buffer,pmsg.lpOutBuffer,pmsg.OutBufferSize);
if pmsg.OutBufferSize>0 then
fsDest.Write(Buffer,pmsg.OutBufferSize);
end;
end;
pmsg.Mark :=2;
ogg_encode_free(pchar(pmsg));
fsSrc.Free;
fsDest.Free;
StrDispose(PChar(pmsg.lpBuffer));
StrDispose(PChar(pmsg.lpOutBuffer));
Dispose(pmsg);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
edit1.Text := OpenDialog1.FileName;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -