回 帖 发 新 帖 刷新版面

主题:求助:通过程序将Mic的声音直接播放出来!!!

谢谢!

回复列表 (共2个回复)

沙发

void __fastcall TForm1::ImButton1Click(TObject *Sender)//加一个按钮
{
     if(OpenDialog1->Execute())//在窗体上拖放一个OpenDialog1
     {
        AnsiString filename=OpenDialog1->FileName;
        DWORD dwReturn;
        MCI_OPEN_PARMS mciOpenParms;//打开设备参数
        MCI_PLAY_PARMS mciPlayParms;
        mciOpenParms.lpstrDeviceType="waveaudio";
        mciOpenParms.lpstrElementName=filename.c_str();
        if(dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)(LPVOID) &mciOpenParms))
        {
           char szErrorBuf[MAXERRORLENGTH];
           DWORD dwError;
           MessageBeep(MB_ICONEXCLAMATION);
           if(mciGetErrorString (dwError,(LPSTR) szErrorBuf,MAXERRORLENGTH))
           {
               ShowMessage(szErrorBuf);
           }
           else
           {
               ShowMessage("Unknown Error");
            }
         }
         WavDeviceID=mciOpenParms.wDeviceID;
         mciPlayParms.dwCallback=(DWORD)(Handle);
         if(dwReturn=mciSendCommand(WavDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD) (LPVOID) &mciPlayParms))
         {
              ShowMessage("Play wave file error");
         }
         ImButton1->Enabled=false;
      }

}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnMCINotify(TMessage &Msg)
{
   mciSendCommand(WavDeviceID,MCI_CLOSE,0,NULL);
   ImButton1->Enabled=true;
}
上面的这个程序,也就是直接调用Windows底层的MCI函数

板凳

谢谢楼上的,我用API函数解决了这个问题,只是不同操作系统的API函数内核不同,存在一个系统之间的完全兼容问题,还有待于解决,如果使用MCI就不存在这个问题了,非常感谢!![em1]

我来回复

您尚未登录,请登录后再回复。点此登录或注册