主题:求助:通过程序将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]
我来回复