哪位大哥帮忙把这段CB的函数译成Delphi?两百分!
void __fastcall G723ToWavFile(void *pBuffer,int iSize,AnsiString FName)
{
TFileStream *outFile=NULL;
int inBound[2]={0,24},outBound[2]={0,480};
int iPacketSize;
Variant inVar=VarArrayCreate(inBound,1,varByte);
Variant outVar=VarArrayCreate(outBound,1,varByte);
int iOffset=0;
void *inPtr,*outPtr;
char *cPtr=(char*)pBuffer;
char Header[64]= {
0x52,0x49,0x46,0x46,0x12,0x2F,0x00,0x00,0x57,0x41,
0x56,0x45,0x66,0x6D,0x74,0x20,0x12,0x00,0x00,0x00,
0x01,0x00,0x01,0x00,0x40,0x1F,0x00,0x00,0x80,0x3E,
0x00,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x66,0x61,
0x63,0x74,0x04,0x00,0x00,0x00,0x70,0x17,0x00,0x00,
0x64,0x61,0x74,0x61,0xE0,0x2E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00 };
try {
outFile=new TFileStream(FName,fmCreate|fmShareExclusive);
outFile->Write(Header,64);
while (iOffset<=iSize-24) {
inPtr=inVar.ArrayLock();
memcpy(inPtr,cPtr+iOffset,24);
inVar.ArrayUnlock();
FMain->G723->decode(inVar,outVar);
outPtr=outVar.ArrayLock();
outFile->Write(outPtr,480);
outVar.ArrayUnlock();
iOffset+=24;
}
outFile->Seek(4,soFromBeginning);
iPacketSize=outFile->Size-8;
outFile->Write(&iPacketSize,4);
outFile->Seek(54,soFromBeginning);
iPacketSize=outFile->Size-64;
outFile->Write(&iPacketSize,4);
delete outFile;
}
catch (...) {
if (outFile!=NULL)
delete outFile;
}
}
问题点数:200、回复次数:6Top
1 楼cul(恐龙++)回复于 2001-11-28 10:51:34 得分 0
没人理我?哪位帮帮我啊?Top
2 楼ymkj(ymkj)回复于 2001-11-28 11:00:00 得分 5
明天吧,我要找点资料才能帮你写Top
3 楼cul(恐龙++)回复于 2001-11-28 11:27:43 得分 0
期待中...Top
4 楼cul(恐龙++)回复于 2001-11-28 11:47:04 得分 0
再来u.p一下。Top
5 楼zswangII(伴水清清)(一贴不灌,何以灌天下?)回复于 2001-11-28 12:17:16 得分 45
//你自己修改修改
procedure G723ToWavFile(const pBuffer; iSize: Integer; FName: AnsiString); stdcall;
const
inBound: array[0..1] of Integer = (0, 24);
outBound: array[0..1] of Integer = (0, 480);
const
Header: array[0..63] of Byte = (
$52,$49,$46,$46,$12,$2F,$00,$00,$57,$41,
$56,$45,$66,$6D,$74,$20,$12,$00,$00,$00,
$01,$00,$01,$00,$40,$1F,$00,$00,$80,$3E,
$00,$00,$02,$00,$10,$00,$00,$00,$66,$61,
$63,$74,$04,$00,$00,$00,$70,$17,$00,$00,
$64,$61,$74,$61,$E0,$2E,$00,$00,$00,$00,
$00,$00,$00,$00);
var
outFile: TFileStream;
iPacketSize: Integer;
inVar: Variant;
outVar: Variant;
iOffset: Integer;
inPtr, outPtr: Pointer;
cPtr: PChar;
begin
inVar := VarArrayCreate(inBound, varByte);
outVar := VarArrayCreate(outBound, varByte);
cPtr := Pointer(pBuffer);
iOffset := 0;
try
outFile := TFileStream.Create(FName, fmCreate or fmShareExclusive);
outFile.Write(Header,64);
while (iOffset <= iSize - 24) do begin
inPtr := VarArrayLock(inVar);
////memcpy()
inPtr := cPtr + iOffset;
cPtr := cPtr + 24;
////memcpy()
VarArrayUnLock(inVar);
// FMain.G723.decode(inVar, outVar);
outPtr := VarArrayLock(outVar);
outFile.Write(outPtr, 480);
VarArrayUnLock(outVar);
iOffset := iOffset + 24;
end;
outFile.Seek(4, soFromBeginning);
iPacketSize := outFile.Size - 8;
outFile.Write(iPacketSize, 4);
outFile.Seek(54, soFromBeginning);
iPacketSize := outFile.Size - 64;
outFile.Write(iPacketSize, 4);
finally
outFile.Free;
end;
end;
Top
6 楼TommyTong(童童--寻求兼职……)回复于 2001-11-28 12:17:41 得分 150
procedure G723ToWavFile(var pBuffer: Pointer; iSize: integer; FName: AnsiString);
const //I found the Header variable is not changed, so I declared it as a constant
Header: array[0..63] of char = (
char($52),char($49),char($46),char($46),char($12),char($2F),
char($00),char($00),char($57),char($41),char($56),char($45),
char($66),char($6D),char($74),char($20),char($12),char($00),
char($00),char($00),char($01),char($00),char($01),char($00),
char($40),char($1F),char($00),char($00),char($80),char($3E),
char($00),char($00),char($02),char($00),char($10),char($00),
char($00),char($00),char($66),char($61),char($63),char($74),
char($04),char($00),char($00),char($00),char($70),char($17),
char($00),char($00),char($64),char($61),char($74),char($61),
char($E0),char($2E),char($00),char($00),char($00),char($00),
char($00),char($00),char($00),char($00) );
var
outFile: TFileStream;
inBound: array[0..1] of integer;
outBound: array[0..1] of integer;
iPacketSize: ^integer;
inVar: Variant;
outVar: Variant;
iOffSet: integer;
inPtr, outPtr: Pointer;
cPtr: PChar;
begin
//Variable initial
outFile := NIL;
inBound[0] := 0;
inBound[1] := 24;
outBound[0] := 0;
outBound[1] := 480;
inVar := VarArrayCreate(inBound, varByte);
outVar := VarArrayCreate(outBound, varByte);
iOffSet := 0;
cPtr := PChar(pBuffer);
try
outFile := TFileStream.Create(FName, fmCreate OR fmShareExclusive);
outFile.Write(Header, 64);
while iOffset<=(iSize-24) do
begin
inPtr := VarArrayLock(inVar); //This and next line I can't understood it's use;
inPtr := PChar(Copy(strPas(cPtr), iOffset, 24));
VarArrayUnLock(inVar);
//FMain->G723->decode(inVar, outVar); //This has not enough information
outPtr := VarArrayLock(outVar);
outFile.Write(outPtr, 480);
VarArrayUnLock(outVar);
Inc(iOffset, 24);
end;//while
outFile.Seek(4, soFromBeginning);
iPacketSize^ := outFile.Size - 8;
outFile.Write(iPacketSize, 4);
outFile.Seek(54, soFromBeginning);
iPacketSize^ := outFile.Size - 64;
outFile.Write(iPacketSize, 4);
outFile.Free;
outFile := NIL;
except
on Exception do
if Assigned(outFile) then
begin
outFile.Free;
outFile := NIL;
end;
end;//try...except
end;
//There are still some errors in the up code.
//You must examin it carefully
//I will regard on you!Top




