CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

请问::如何将WAV数据与程序代码一起编译:. .

楼主colthero(枫)2003-12-03 08:43:58 在 Delphi / VCL组件开发及应用 提问

我在网上试了很多例子都不能发出声,请高人指点:  
  例子:  
   
  1)编写.RC文件  
  ..RC文件是资源的源文件,编译器也就编译这个文件,生成.RES的资源文件   首先在我们的项目子目录中建立一个纯文本文件,起名叫  
   
  pad.rc   ,在文件中写一行,内容为://注意!资源文件名不可以和WAVE文件名一样的!  
   
  SOUND1   WAV   SOUND.WAV  
   
  其中SOUND.WAV为一个Windows下普通的声音文件  
  2)编译它  
   
  在DOS的提示符下打   BRCC32   PAD.RC   一会儿后,就编译完了  
  3)制作程序  
  在WINDOWS下启动DELPHI,新建一个项目,将其中的文件保存到我们的项目中的子目录中。   在Unit1.pas中找到  
  {$R   *.DFM}  
  把我们的资源文件就声明在后面  
  {$R   PAD.RES}  
  然后,在Form1中声明两个全局变量  
   
  PtrSound   :   PChar;  
  hRes   :   THandle;   {handle   to   the   loaded   resource  
                if   0   indicates   nothing   playing}  
   
  再在Form1的Create事件中写下如下代码  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  var  
      hResInfo   :   THandle;  
  begin  
      hResInfo   :=   FindResource(HInstance,   'SOUND1',   'WAVE');  
      hRes   :=   LoadResource(HInstance,   hResInfo);  
      if   hRes   >   32   then   {its   a   good   load}  
      begin   {lock   the   resource}  
          ptrSound:=LockResource(hRes);  
      end;  
  end;  
  然后在Form1中放一个按钮Button1,写如下代码:  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      sndplaysound(ptrSound,snd_async   or   snd_Memory);  
  end;  
   
    /*点击编译,运行,再按BUTTON1,可以听到扬声器中发出WAVE文件内容。   */  
   
  为什么我的程序不能播放呢? 问题点数:0、回复次数:7Top

1 楼sailer_shi(孤独的我,孤单的走,孤单的活着,孤单呀)回复于 2003-12-03 09:01:20 得分 0

将Wav文件做到EXE文件里    
  使用过C++的朋友们都知道,资源在Windows编程里非常重要,合理地运用资源可以使程序更加灵活。其实在Delphi里,同样也可以制作资源,只不过Delphi本   身对可视的编程强调很多,对资源的制作就没有多加解释,也没有象Borland   C++   里提供了资源制作工具Resource   WorkShop,这些都没有关系,下面我就通过将WAV文件做成资源,从而编译进EXE文件来介绍一下如何利用Delphi本身提供的工具制作资源。    
  16位的Delphi   1.0和32位的Delphi2.0、3.0都提供了资源编译工具,其中   Delphi   1.0的资源编译器叫BRCC.EXE,Delphi   2.0的资源编译器叫BRCC32.EXE   用来编译32位资源,所有资源编译器都只提供了命令行版本,没有提供Windows   版本。制作一个资源一般要通过以下几个步骤:    
   
   
  1)编写.RC文件    
  ..RC文件是资源的源文件,编译器也就编译这个文件,生成.RES的资源文件   首先在我们的项目子目录中建立一个纯文本文件,起名叫Sound.rc,文件中   有一行,内容为:    
  SOUND1   WAV   SOUND.WAV    
  其中SOUND.WAV为一个Windows下普通的声音文件    
  2)编译它    
  在DOS的提示符下打   BRCC   SOUND.RC   硬盘哗啦啦转一会儿后,就编  
  译完了    
  3)制作程序    
  这也是最复杂,最灵活的一步,首先启动Windows,   再启动Delphi,    
  并且将项目   中的文件保存到我们的项目中的子目录中。   在Unit1.pas中找这么一行    
  {$R   *.DFM}    
  把我们的资源文件就声明在后面    
  {$R   SOUND.RES}    
  然后,在Form1中声明两个全局变量    
  PtrSound   :   PChar;    
  hRes   :   THandle;   {handle   to   the   loaded   resource   if   0   indicates   nothing   playing}    
   
  再在Form1的Create事件中写下如下代码    
  procedure   TForm1.FormCreate(Sender:   TObject);    
  var   hResInfo   :   THandle;    
  begin    
      hResInfo   :=   FindResource(HInstance,   'SOUND1',   'WAVE');    
      hRes   :=   LoadResource(HInstance,   hResInfo);    
      if   hRes   >   32   then   {its   a   good   load}    
      begin   {lock   the   resource}    
          ptrSound:=LockResource(hRes);    
      end;    
  end;    
   
  然后在Form1中放一个按钮Button1,写如下代码:    
  procedure   TForm1.Button1Click(Sender:   TObject);    
  begin    
      sndplaysound(ptrSound,snd_async   or   snd_Memory);    
  end;    
  这时候就可以运行了,当然,这只是一个例子,只是提供了调用资源的   一种方法,距离实际应用还有一段距离。愿这个Tip能给大家起个抛砖引玉的作用。    
     
     
  你是看着这一篇文章把Top

2 楼colthero(枫)回复于 2003-12-03 09:09:13 得分 0

是的   但不能播放声音Top

3 楼fhuibo(永远深爱一个叫“莎”的好女孩儿)回复于 2003-12-03 09:12:02 得分 0

参考一下吧:  
      wave文件格式说明            
           
  unit   LinearSystem;  
   
  interface  
   
  {==============   WAV   Format   Coding   Type   ==================}  
   
  type   WAVHeader   =   record  
   
  nChannels   :   Word;  
   
  nBitsPerSample   :   LongInt;  
   
  nSamplesPerSec   :   LongInt;  
   
  nAvgBytesPerSec   :   LongInt;  
   
  RIFFSize   :   LongInt;  
   
  fmtSize   :   LongInt;  
   
  formatTag   :   Word;  
   
  nBlockAlign   :   LongInt;  
   
  DataSize   :   LongInt;  
   
  end;  
   
  {==============   Sample   DataStreams   ========================}  
   
  const   MaxN   =   300;   {   max   number   of   sample   values   }  
   
  type   SampleIndex   =   0   ..   MaxN+3;  
   
  type   DataStream   =   array[   SampleIndex   ]   of   Real;  
   
  var   N   :   SampleIndex;  
   
  {==============   Observation   Variables   ======================}  
   
  type   Observation   =   record  
   
  Name   :   String[40];   {Name   of   this   observat  
   
  ion}  
   
  yyy   :   DataStream;   {Array   of   data   points}  
   
  WAV   :   WAVHeader;   {WAV   specs   for   observa  
   
  tion}  
   
  Last   :   SampleIndex;{Last   valid   index   to   y  
   
  yy}  
   
  MinO,   MaxO   :   Real;   {Range   values   from   yyy  
   
  }  
   
  end;  
   
  var   K0R,   K1R,   K2R,   K3R   :   Observation;  
   
  K0B,   K1B,   K2B,   K3B   :   Observation;  
   
  {==================   File   Name   Variables   ===================}  
   
  var   StandardDatabase   :   String[   80   ];  
   
  BaseFileName   :   String[   80   ];  
   
  StandardOutput   :   String[   80   ];  
   
  StandardInput   :   String[   80   ];  
   
  {===============   Operations   ==================}  
   
  procedure   ReadWAVFile   (var   Ki,   Kj   :   Observation);  
   
  procedure   WriteWAVFile(var   Ki,   Kj   :   Observation);  
   
  procedure   ScaleData   (var   Kk   :   Observation);  
   
  procedure   InitAllSignals;  
   
  procedure   InitLinearSystem;  
   
     
   
  implementation  
   
  {$R   *.DFM}  
   
  uses   VarGraph,   SysUtils;  
   
     
   
  {==================   Standard   WAV   File   Format   ===================}  
   
  const   MaxDataSize   :   LongInt   =   (MaxN+1)*2*2;  
   
  const   MaxRIFFSize   :   LongInt   =   (MaxN+1)*2*2+36;  
   
  const   StandardWAV   :   WAVHeader   =   (  
   
  nChannels   :   Word(2);  
   
  nBitsPerSample   :   LongInt(16);  
   
  nSamplesPerSec   :   LongInt(8000);  
   
  nAvgBytesPerSec   :   LongInt(32000);  
   
  RIFFSize   :   LongInt((MaxN+1)*2*2+36);  
   
  fmtSize   :   LongInt(16);  
   
  formatTag   :   Word(1);  
   
  nBlockAlign   :   LongInt(4);  
   
  DataSize   :   LongInt((MaxN+1)*2*2)  
   
  );  
   
     
   
  {==================   Scale   Observation   Data   ===================}  
   
  procedure   ScaleData(var   Kk   :   Observation);  
   
  var   I   :   SampleIndex;  
   
  begin  
   
  {Initialize   the   scale   values}  
   
  Kk.MaxO   :=   Kk.yyy[0];  
   
  Kk.MinO   :=   Kk.yyy[0];  
   
  {Then   scan   for   any   higher   or   lower   values}  
   
  for   I   :=   1   to   Kk.Last   do  
   
  begin  
   
  if   Kk.MaxO   <   Kk.yyy[I]   then   Kk.MaxO   :=   Kk.yyy[I];  
   
  if   Kk.MinO   >   Kk.yyy[I]   then   Kk.MinO   :=   Kk.yyy[I];  
   
  end;  
   
  end;   {   ScaleData   }  
   
  procedure   ScaleAllData;  
   
  begin  
   
  ScaleData(K0R);  
   
  ScaleData(K0B);  
   
  ScaleData(K1R);  
   
  ScaleData(K1B);  
   
  ScaleData(K2R);  
   
  ScaleData(K2B);  
   
  ScaleData(K3R);  
   
  ScaleData(K3B);  
   
  end;   {ScaleAllData}  
   
  {==================   WAV   Data   I/O   ===================}  
   
  VAR   InFile,   OutFile   :   file   of   Byte;  
   
  type   Tag   =   (F0,   T1,   M1);  
   
  type   FudgeNum   =   record  
   
  case   X:Tag   of  
   
  F0   :   (chrs   :   array[0..3]   of   Byte);  
   
  T1   :   (lint   :   LongInt);  
   
  M1   :   (up,dn:   Integer);  
   
  end;  
   
  var   ChunkSize   :   FudgeNum;  
   
  procedure   WriteChunkName(Name:String);  
   
  var   i   :   Integer;  
   
  MM   :   Byte;  
   
  begin  
   
  for   i   :=   1   to   4   do  
   
  begin  
   
  MM   :=   ord(Name[i]);  
   
  write(OutFile,MM);  
   
  end;  
   
  end;   {WriteChunkName}  
   
  procedure   WriteChunkSize(LL:Longint);  
   
  var   I   :   integer;  
   
  begin  
   
  ChunkSize.x:=T1;  
   
  ChunkSize.lint:=LL;  
   
  ChunkSize.x:=F0;  
   
  for   I   :=   0   to   3   do   Write(OutFile,ChunkSize.chrs[I]);  
   
  end;  
   
  procedure   WriteChunkWord(WW:Word);  
   
  var   I   :   integer;  
   
  begin  
   
  ChunkSize.x:=T1;  
   
  ChunkSize.up:=WW;  
   
  ChunkSize.x:=M1;  
   
  for   I   :=   0   to   1   do   Write(OutFile,ChunkSize.chrs[I]);  
   
  end;   {WriteChunkWord}  
   
  procedure   WriteOneDataBlock(var   Ki,   Kj   :   Observation);  
   
  var   I   :   Integer;  
   
  begin  
   
  ChunkSize.x:=M1;  
   
  with   Ki.WAV   do  
   
  begin  
   
  case   nChannels   of  
   
  1:if   nBitsPerSample=16  
   
  then   begin   {1..2   16-bit   samples   in   buffer   for   one   channel}  
   
  ChunkSize.up   :=   trunc(Ki.yyy[N]+0.5);  
   
  if   N   .5);  
   
  N   :=   N+2;  
   
  end  
   
  else   begin   {1..4   8-bit   samples   in   buffer   for   one   channel}  
   
  for   I:=0   to   3   do   ChunkSize.chrs[I]  
   
  :=   trunc(Ki.yyy[N+I]+0.5);  
   
  N   :=   N+4;  
   
  end;  
   
  2:if   nBitsPerSample=16  
   
  then   begin   {2   16-bit   samples   on   two   channels}  
   
  ChunkSize.dn   :=   trunc(Ki.yyy[N]+0.5);  
   
  ChunkSize.up   :=   trunc(Kj.yyy[N]+0.5);  
   
  N   :=   N+1;  
   
  end  
   
  else   begin   {4   8-bit   samples   on   two   channels}  
   
  ChunkSize.chrs[1]   :=   trunc(Ki.yyy[N]+0.5);  
   
  ChunkSize.chrs[3]   :=   trunc(Ki.yyy[N+1]+0.5);  
   
  ChunkSize.chrs[0]   :=   trunc(Kj.yyy[N]+0.5);  
   
  ChunkSize.chrs[2]   :=   trunc(Kj.yyy[N+1]+0.5);  
   
  N   :=   N+2;  
   
  end;  
   
  end;   {with   WAV   do   begin..}  
   
  end;   {the   four-byte   variable   "ChunkSize"   has   now   been   filled}  
   
  ChunkSize.x:=T1;  
   
  WriteChunkSize(ChunkSize.lint);{put   4   bytes   of   data}  
   
  end;   {WriteOneDataBlock}  
   
  procedure   WriteWAVFile(var   Ki,   Kj   :   Observation);  
   
  var   MM   :   Byte;  
   
  I   :   Integer;  
   
  OK   :   Boolean;  
   
  begin  
   
  {Prepare   to   write   a   file   of   data}  
   
  AssignFile(OutFile,   StandardOutput);   {   File   selected   in   dialog   }  
   
  ReWrite(   OutFile   );  
   
  With   Ki.WAV   do  
   
  begin   DataSize   :=   nChannels*(nBitsPerSample   div   8)*(Ki.Last+1);  
   
  RIFFSize   :=   DataSize+36;  
   
  fmtSize   :=   16;  
   
  end;  
   
  {Write   ChunkName   "RIFF"}  
   
  WriteChunkName('RIFF');  
   
  {Write   ChunkSize}  
   
  WriteChunkSize(Ki.WAV.RIFFSize);  
   
  {Write   ChunkName   "WAVE"}  
   
  WriteChunkName('WAVE');  
   
  {Write   tag   "fmt_"}  
   
  WriteChunkName('fmt   ');  
   
  {Write   ChunkSize}  
   
  Ki.WAV.fmtSize   :=   16;   {should   be   16-18}  
   
  WriteChunkSize(Ki.WAV.fmtSize);  
   
  {Write   formatTag,   nChannels}  
   
  WriteChunkWord(Ki.WAV.formatTag);  
   
  WriteChunkWord(Ki.WAV.nChannels);  
   
  {Write   nSamplesPerSec}  
   
  WriteChunkSize(Ki.WAV.nSamplesPerSec);  
   
  {Write   nAvgBytesPerSec}  
   
  WriteChunkSize(Ki.WAV.nAvgBytesPerSec);  
   
  {Write   nBlockAlign,   nBitsPerSample}  
   
  WriteChunkWord(Ki.WAV.nBlockAlign);  
   
  WriteChunkWord(Ki.WAV.nBitsPerSample);  
   
  {WriteDataBlock   tag   "data"}  
   
  WriteChunkName('data');  
   
  {Write   DataSize}  
   
  WriteChunkSize(Ki.WAV.DataSize);  
   
  N:=0;   {first   write-out   location}  
   
  while   N<=Ki.Last   do   WriteOneDataBlock(Ki,Kj);   {put   4   bytes   &   incr  
   
  ement   N}  
   
  {Free   the   file   buffers}  
   
  CloseFile(   OutFile   );  
   
  end;   {WriteWAVFile}  
   
  procedure   InitSpecs;  
   
  begin  
   
  end;   {   InitSpecs   }  
   
  procedure   InitSignals(var   Kk   :   Observation);  
   
  var   J   :   Integer;  
   
  begin  
   
  for   J   :=   0   to   MaxN   do   Kk.yyy[J]   :=   0.0;  
   
  Kk.MinO   :=   0.0;  
   
  Kk.MaxO   :=   0.0;  
   
  Kk.Last   :=   MaxN;  
   
  end;   {InitSignals}Top

4 楼fhuibo(永远深爱一个叫“莎”的好女孩儿)回复于 2003-12-03 09:12:28 得分 0

procedure   InitAllSignals;  
   
  begin  
   
  InitSignals(K0R);  
   
  InitSignals(K0B);  
   
  InitSignals(K1R);  
   
  InitSignals(K1B);  
   
  InitSignals(K2R);  
   
  InitSignals(K2B);  
   
  InitSignals(K3R);  
   
  InitSignals(K3B);  
   
  end;   {InitAllSignals}  
   
  var   ChunkName   :   string[4];  
   
  procedure   ReadChunkName;  
   
  var   I   :   integer;  
   
  MM   :   Byte;  
   
  begin  
   
  ChunkName[0]:=chr(4);  
   
  for   I   :=   1   to   4   do  
   
  begin  
   
  Read(InFile,MM);  
   
  ChunkName[I]:=chr(MM);  
   
  end;  
   
  end;   {ReadChunkName}  
   
  procedure   ReadChunkSize;  
   
  var   I   :   integer;  
   
  MM   :   Byte;  
   
  begin  
   
  ChunkSize.x   :=   F0;  
   
  ChunkSize.lint   :=   0;  
   
  for   I   :=   0   to   3   do  
   
  begin  
   
  Read(InFile,MM);  
   
  ChunkSize.chrs[I]:=MM;  
   
  end;  
   
  ChunkSize.x   :=   T1;  
   
  end;   {ReadChunkSize}  
   
  procedure   ReadOneDataBlock(var   Ki,Kj:Observation);  
   
  var   I   :   Integer;  
   
  begin  
   
  if   N<=MaxN   then  
   
  begin  
   
  ReadChunkSize;   {get   4   bytes   of   data}  
   
  ChunkSize.x:=M1;  
   
  with   Ki.WAV   do  
   
  case   nChannels   of  
   
  1:if   nBitsPerSample=16  
   
  then   begin   {1..2   16-bit   samples   in   buffer   for   one   channel}  
   
  Ki.yyy[N]   :=1.0*ChunkSize.up;  
   
  if   N   N   :=   N+2;  
   
  end  
   
  else   begin   {1..4   8-bit   samples   in   buffer   for   one   channel}  
   
  for   I:=0   to   3   do   Ki.yyy[N+I]:=1.0*ChunkSize.chrs[I  
   
  ];  
   
  N   :=   N+4;  
   
  end;  
   
  2:if   nBitsPerSample=16  
   
  then   begin   {2   16-bit   samples   on   two   channels}  
   
  Ki.yyy[N]:=1.0*ChunkSize.dn;  
   
  Kj.yyy[N]:=1.0*ChunkSize.up;  
   
  N   :=   N+1;  
   
  end  
   
  else   begin   {4   8-bit   samples   on   two   channels}  
   
  Ki.yyy[N]   :=1.0*ChunkSize.chrs[1];  
   
  Ki.yyy[N+1]:=1.0*ChunkSize.chrs[3];  
   
  Kj.yyy[N]   :=1.0*ChunkSize.chrs[0];  
   
  Kj.yyy[N+1]:=1.0*ChunkSize.chrs[2];  
   
  N   :=   N+2;  
   
  end;  
   
  end;  
   
  if   N<=MaxN   then   begin   {LastN   :=   N;}  
   
  Ki.Last   :=   N;  
   
  if   Ki.WAV.nChannels=2   then   Kj.Last   :=   N;  
   
  end  
   
  else   begin   {LastN   :=   MaxN;}  
   
  Ki.Last   :=   MaxN;  
   
  if   Ki.WAV.nChannels=2   then   Kj.Last   :=   MaxN  
   
  ;  
   
  end;  
   
  end;  
   
  end;   {ReadOneDataBlock}  
   
  procedure   ReadWAVFile(var   Ki,   Kj   :Observation);  
   
  var   MM   :   Byte;  
   
  I   :   Integer;  
   
  OK   :   Boolean;  
   
  NoDataYet   :   Boolean;  
   
  DataYet   :   Boolean;  
   
  nDataBytes   :   LongInt;  
   
  begin  
   
  if   FileExists(StandardInput)  
   
  then  
   
  with   Ki.WAV   do  
   
  begin   {   Bring   up   open   file   dialog   }  
   
  OK   :=   True;   {unless   changed   somewhere   below}  
   
  {Prepare   to   read   a   file   of   data}  
   
  AssignFile(InFile,   StandardInput);   {   File   selected   in   dialog   }  
   
  Reset(   InFile   );  
   
  {Read   ChunkName   "RIFF"}  
   
  ReadChunkName;  
   
  if   ChunkName<>'RIFF'   then   OK   :=   False;  
   
  {Read   ChunkSize}  
   
  ReadChunkSize;  
   
  RIFFSize   :=   ChunkSize.lint;   {should   be   18,678}  
   
  {Read   ChunkName   "WAVE"}  
   
  ReadChunkName;  
   
  if   ChunkName<>'WAVE'   then   OK   :=   False;  
   
  {Read   ChunkName   "fmt_"}  
   
  ReadChunkName;  
   
  if   ChunkName<>'fmt   '   then   OK   :=   False;  
   
  {Read   ChunkSize}  
   
  ReadChunkSize;  
   
  fmtSize   :=   ChunkSize.lint;   {should   be   18}  
   
  {Read   formatTag,   nChannels}  
   
  ReadChunkSize;  
   
  ChunkSize.x   :=   M1;  
   
  formatTag   :=   ChunkSize.up;  
   
  nChannels   :=   ChunkSize.dn;  
   
  {Read   nSamplesPerSec}  
   
  ReadChunkSize;  
   
  nSamplesPerSec   :=   ChunkSize.lint;  
   
  {Read   nAvgBytesPerSec}  
   
  ReadChunkSize;  
   
  nAvgBytesPerSec   :=   ChunkSize.lint;  
   
  {Read   nBlockAlign}  
   
  ChunkSize.x   :=   F0;  
   
  ChunkSize.lint   :=   0;  
   
  for   I   :=   0   to   3   do  
   
  begin   Read(InFile,MM);  
   
  ChunkSize.chrs[I]:=MM;  
   
  end;  
   
  ChunkSize.x   :=   M1;  
   
  nBlockAlign   :=   ChunkSize.up;  
   
  {Read   nBitsPerSample}  
   
  nBitsPerSample   :=   ChunkSize.dn;  
   
  for   I   :=   17   to   fmtSize   do   Read(InFile,MM);  
   
  NoDataYet   :=   True;  
   
  while   NoDataYet   do  
   
  begin  
   
  begin  
   
  {Read   tag   "data"}  
   
  ReadChunkName;  
   
  {Read   DataSize}  
   
  ReadChunkSize;  
   
  DataSize   :=   ChunkSize.lint;  
   
  if   ChunkName<>'data'   then  
   
  begin  
   
  for   I   :=   1   to   DataSize   do   {skip   over   any   nondata   stuff}  
   
  Read(InFile,MM);  
   
  end  
   
  else   NoDataYet   :=   False;  
   
  end;  
   
  nDataBytes   :=   DataSize;  
   
  {Finally,   start   reading   data   for   nDataBytes   bytes}  
   
  if   nDataBytes>0   then   DataYet   :=   True;  
   
  N:=0;   {first   read-in   location}  
   
  while   DataYet   do  
   
  begin  
   
  ReadOneDataBlock(Ki,Kj);   {get   4   bytes}  
   
  nDataBytes   :=   nDataBytes-4;  
   
  if   nDataBytes<=4   then   DataYet   :=   False;  
   
  end;  
   
  ScaleData(Ki);  
   
  if   Ki.WAV.nChannels=2  
   
  then   begin   Kj.WAV   :=   Ki.WAV;  
   
  ScaleData(Kj);  
   
  end;  
   
  {Free   the   file   buffers}  
   
  CloseFile(   InFile   );  
   
  end  
   
  else   begin  
   
  InitSpecs;{file   does   not   exist}  
   
  InitSignals(Ki);{zero   "Ki"   array}  
   
  InitSignals(Kj);{zero   "Kj"   array}  
   
  end;  
   
  end;   {   ReadWAVFile   }  
   
     
   
     
   
  {=================   Database   Operations   ====================}  
   
  const   MaxNumberOfDataBaseItems   =   360;  
   
  type   SignalDirectoryIndex   =   0   ..   MaxNumberOfDataBaseItems;  
   
  VAR   DataBaseFile   :   file   of   Observation;  
   
  LastDataBaseItem   :   LongInt;   {Current   number   of   database   items}  
   
  ItemNameS   :   array[SignalDirectoryIndex]   of   String[40];  
   
  procedure   GetDatabaseItem(   Kk   :   Observation;   N   :   LongInt   );  
   
  begin  
   
  if   N<=LastDataBaseItem  
   
  then   begin  
   
  Seek(DataBaseFile,   N);  
   
  Read(DataBaseFile,   Kk);  
   
  end  
   
  else   InitSignals(Kk);  
   
  end;   {GetDatabaseItem}  
   
  procedure   PutDatabaseItem(   Kk   :   Observation;   N   :   LongInt   );  
   
  begin  
   
  if   N   then  
   
  then  
   
  if   N<=LastDataBaseItem  
   
  then   begin  
   
  Seek(DataBaseFile,   N);  
   
  Write(DataBaseFile,   Kk);  
   
  LastDataBaseItem   :=   LastDataBaseItem+1;  
   
  end  
   
  else   while   LastDataBaseItem<=N   do  
   
  begin  
   
  Seek(DataBaseFile,   LastDataBaseItem);  
   
  Write(DataBaseFile,   Kk);  
   
  LastDataBaseItem   :=   LastDataBaseItem+1;  
   
  end  
   
  else   ReportError(1);   {Attempt   to   read   beyond   MaxNumberOfDataBaseItems  
   
  }  
   
  end;   {PutDatabaseItem}  
   
  procedure   InitDataBase;  
   
  begin  
   
  LastDataBaseItem   :=   0;  
   
  if   FileExists(StandardDataBase)  
   
  then  
   
  begin  
   
  begin  
   
  Assign(DataBaseFile,StandardDataBase);  
   
  Reset(DataBaseFile);  
   
  while   not   EOF(DataBaseFile)   do  
   
  begin  
   
  GetDataBaseItem(K0R,   LastDataBaseItem);  
   
  ItemNameS[LastDataBaseItem]   :=   K0R.Name;  
   
  LastDataBaseItem   :=   LastDataBaseItem+1;  
   
  end;  
   
  if   EOF(DataBaseFile)  
   
  then   if   LastDataBaseItem>0  
   
  then   LastDataBaseItem   :=   LastDataBaseItem-1;  
   
  end;  
   
  end;   {InitDataBase}  
   
  function   FindDataBaseName(   Nstg   :   String   ):LongInt;  
   
  var   ThisOne   :   LongInt;  
   
  begin  
   
  ThisOne   :=   0;  
   
  FindDataBaseName   :=   -1;  
   
  while   ThisOne   begin  
   
  if   Nstg=ItemNameS[ThisOne]  
   
  then   begin  
   
  FindDataBaseName   :=   ThisOne;  
   
  Exit;  
   
  end;  
   
  ThisOne   :=   ThisOne+1;  
   
  end;  
   
  end;   {FindDataBaseName}  
   
  {=======================   Init   Unit   ========================}  
   
  procedure   InitLinearSystem;  
   
  begin  
   
  BaseFileName   :=   '\PROGRA~1\SIGNAL~1\';  
   
  StandardOutput   :=   BaseFileName   +   'K0.wav';  
   
  StandardInput   :=   BaseFileName   +   'K0.wav';  
   
  StandardDataBase   :=   BaseFileName   +   'Radar.sdb';  
   
  InitAllSignals;  
   
  InitDataBase;  
   
  ReadWAVFile(K0R,K0B);  
   
  ScaleAllData;  
   
  end;   {InitLinearSystem}  
   
  begin   {unit   initialization   code}  
   
  InitLinearSystem;  
   
  end.   {Unit   LinearSystem}  
  Top

5 楼fengsx(风三笑)回复于 2003-12-03 09:12:41 得分 0

机器不会没有声卡吧,呵呵!Top

6 楼codehunter008(马里奥)回复于 2003-12-03 09:31:57 得分 0

楼主其实很清楚怎么做啊,可能那里有点小问题吧,耐心的找找看!Top

7 楼colthero(枫)回复于 2003-12-03 10:09:49 得分 0

实在找不出哪出了问题..  
  各位兄弟有没有简单的源代码和编译后的程序打包发给我,  
  将不胜感激并高分相送!  
  Email   :   discolt@sohu.comTop

相关问题

  • 用w32dasm来反编译程序,如何修改一行反编译的代码
  • 请问如何把vb程序中的部分代码编译?
  • 如何把java代码编译成*.exe的应用程序
  • 请教:如何用vc编译windows程序的c源代码?
  • 如何将.net程序直接编译成机器代码?
  • 编译好的代码,如何生成安装程序?
  • 怎么将C#编写的程序编译成本机代码
  • Delphi编译出来的Exe程序是机器代码吗?
  • 修改MFC的源代码后怎么编译程序?
  • 程序编译

关键词

  • c++
  • 编译
  • 文件
  • 编译器
  • 代码
  • delphi
  • 制作
  • 项目
  • scaledata
  • wav

得分解答快速导航

  • 帖主:colthero

相关链接

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

广告也精彩

反馈

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