主题:求助:通过程序将Mic的声音直接播放出来!!!
			
 lingmuhuizi
				 [专家分:0]  发布于 2005-09-11 11:20:00							
			谢谢!
						
					 
		
			
回复列表 (共2个回复)
		
								
				沙发
				
					
gujinguo [专家分:90]  发布于 2005-10-10 18:12:00				
				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函数
							 
						
				板凳
				
					
lingmuhuizi [专家分:0]  发布于 2005-10-27 12:25:00				
				谢谢楼上的,我用API函数解决了这个问题,只是不同操作系统的API函数内核不同,存在一个系统之间的完全兼容问题,还有待于解决,如果使用MCI就不存在这个问题了,非常感谢!![em1]
							 
									
			
我来回复