CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

哪位大哥帮忙把这段CB的函数译成Delphi?两百分!

楼主cul(恐龙++)2001-11-28 10:24:44 在 Delphi / VCL组件开发及应用 提问

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

相关问题

  • 这个VC函数的声明怎么翻译成DELPHI?
  • 高手帮忙把一个DELPHI的函数定义翻译成BCB的。
  • 请帮我把一个用Delphi写的函数“翻译”成C++ Builder的
  • 急!!!这个C++的函数,怎么翻译成Delphi啊,给分100!
  • Delphi函数 --> CB函数(急)!!
  • delphi函数和winapi函数
  • 寻找delphi函数
  • delphi延时函数.........?!?!?!?!??
  • 哪位大哥能帮我把这两个BCB小函数转为Delphi.急...急...急...急...急...急...急...急...
  • 哭~!!!!大哥们帮忙!!!!函数模板!!!!

关键词

  • outfile
  • ipacketsize
  • outvar
  • ioffset
  • g723
  • varbyte
  • outptr
  • invar
  • sofrombeginning
  • vararraycreate

得分解答快速导航

  • 帖主:cul
  • ymkj
  • zswangII
  • TommyTong

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo