录音

BCB里用MCI实现简单的录音功能(摘录自BCB Demo)

代码相当简单:

  HANDLE m_hMCIWnd=MCIWndCreate(Handle,
                         HInstance,
                         WS_CHILD | WS_OVERLAPPED | WS_CAPTION | WS_BORDER |
                         MCIWNDF_RECORD | MCIWNDF_SHOWALL,
                         NULL );
      
  MCIWndNew(m_hMCIWnd, "waveaudio");

  MCI_WAVE_SET_PARMS set_parms;
 
  set_parms.wFormatTag      = WAVE_FORMAT_PCM;
  set_parms.wBitsPerSample  = 16;
  set_parms.nChannels       = 1;
  set_parms.nBlockAlign     = (set_parms.nChannels*set_parms.wBitsPerSample)/8;
  set_parms.nSamplesPerSec  = 44100;
  set_parms.nAvgBytesPerSec = ((set_parms.wBitsPerSample) *
                                set_parms.nChannels *
                                set_parms.nSamplesPerSec)/8;

  // now send the format changes with MCI_SET
  int deviceID=MCIWndGetDeviceID(m_hMCIWnd);
  int result = mciSendCommand( deviceID, MCI_SET,
                               MCI_WAIT
                             | MCI_WAVE_SET_FORMATTAG
                             | MCI_WAVE_SET_BITSPERSAMPLE
                             | MCI_WAVE_SET_CHANNELS
                             | MCI_WAVE_SET_SAMPLESPERSEC
                             | MCI_WAVE_SET_AVGBYTESPERSEC
                             | MCI_WAVE_SET_BLOCKALIGN,
                               (DWORD)(LPVOID)&set_parms);

  MCIWndRecord(m_hMCIWnd);  //开始录制

  ShowMessage("录音中...");

  MCIWndStop(m_hMCIWnd);  //录制完毕
  MCIWndSave(m_hMCIWnd,L"abc.wav");   //保存
  MCIWndClose(m_hMCIWnd);

  MCIWndDestroy(m_hMCIWnd);
 
 头文件:#include <vfw.h>

 

用MediaPlay录音  
  //---------------------------------------------------------------------------  
  void   __fastcall   CreateWav(WORD   wChannels,   WORD   wResolution,   long   lRate,   String   strFileName)  
  {  
          typedef   struct   _TWavHeader  
          {  
                  long   rId;  
                  long   rLen;  
                  long   wId;  
                  long   fId;  
                  long   fLen;  
                  WORD   wFormatTag;  
                  WORD   nChannels;  
                  long   nSamplesPerSec;  
                  long   nAvgBytesPerSec;  
                  WORD   nBlockAlign;  
                  WORD   wBitsPerSample;  
                  long   dId;  
                  long   wSampleLength;  
          }TWavHeader;  
   
          TWavHeader   wh;  
          wh.rId   =   0x46464952;  
          wh.rLen   =   36;  
          wh.wId   =   0x45564157;  
          wh.fId   =   0x20746d66;  
          wh.fLen   =   16;  
          wh.wFormatTag   =   1;  
          wh.nChannels   =   wChannels;  
          wh.nSamplesPerSec   =   lRate;  
          wh.nAvgBytesPerSec   =   wChannels   *   lRate   *   (wResolution   /   8);  
          wh.nBlockAlign   =   wChannels   *   (wResolution   /   8);  
          wh.wBitsPerSample   =   wResolution;  
          wh.dId   =   0x61746164;  
          wh.wSampleLength   =   0;  
          int   nHandle   =   FileCreate(strFileName);  
          FileSeek(nHandle,   0,   0);  
          FileWrite(nHandle,   &wh,   sizeof(wh));  
          FileClose(nHandle);  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::btnStartClick(TObject   *Sender)  
  {  
          //   开始录音  
          MediaPlayer1->DeviceType   =   dtAutoSelect;  
          CreateWav(2,   16,   44100,   "C://Test.wav");  
          MediaPlayer1->FileName   =   "C://Test.wav";  
          MediaPlayer1->Open();  
          MediaPlayer1->StartRecording();  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::btnEndClick(TObject   *Sender)  
  {  
          //   结束录音  
          MediaPlayer1->Stop();  
          MediaPlayer1->Save();  
          MediaPlayer1->Close();  
  }  
  //---------------------------------------------------------------------------


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值