錄製麥克風聲音,但不要windows音效卡上喇叭聲音

Ryan_wen_Binyu 2015-08-25 11:03:07
我要播放一段聲音給麥克風錄音,但遇到會同時錄製喇叭聲音的問題,想問要怎麼只錄麥克風聲音呢?
還有要怎麼讓麥克風插上後馬上power on enable後使用?
void CMPEGDlg::OnBnClickedRecord(){


UINT wDeviceID;
DWORD dwReturn;
MCI_OPEN_PARMS mciOpenParms;

// Opens a CD audio device by specifying a device-type constant.

mciOpenParms.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;
if (dwReturn = mciSendCommand(NULL, MCI_OPEN,
MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID, (DWORD)(LPVOID) &mciOpenParms))
{

AfxMessageBox("a");

}

// The device opened successfully; get the device ID.
wDeviceID = mciOpenParms.wDeviceID;



MCIWndClose(mciwav); //打开一个声音的之前关闭以前的声音

mciwav = MCIWndCreate(this->m_hWnd,AfxGetApp()->m_hInstance,WS_CAPTION,NULL);

//创建句柄,最后一个参数如果是NULL,就新建一个;如果是一个文件的路径就打开它。


//this->m_hWnd表示父句柄,AfxGetApp()获得当前应用进程的指针,进而取得实例
MCIWndNew(mciwav,"waveaudio"); //创建设备
//int a=MCIWndGetDeviceID(mciwav);
if(MCIWndCanRecord(mciwav)) //判断是否能够录音
{

/////////////////
MCI_WAVE_SET_PARMS set_parms;

set_parms.wFormatTag = WAVE_FORMAT_PCM;
set_parms.wBitsPerSample = 16;
set_parms.nChannels = 2;
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(mciwav);
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(mciwav);//开始录制
PlaySound(TEXT("1K16BIT.wav"), NULL, SND_FILENAME);
OnBnClickedSave();
}


void CMPEGDlg::OnBnClickedSave()
{
//MCIWndSave(mciwav,"a"); //保存成默认的名字a
//CopyFile("a","WW.wav",FALSE); //把a文件拷贝到另一路径和名字
CString m_Path="";
if(m_Path==""){
CFileDialog wav(FALSE,NULL,NULL,OFN_ALLOWMULTISELECT,"wav File (*.wav)|*.wav");

m_Path = wav.GetPathName()+"R.wav";
if(MCIWndCanSave(mciwav)&&m_Path!="")
{
MCIWndSave(mciwav, "a");//a作为中间文件,应为文件名超过1位出现乱码
CopyFile("a",m_Path,FALSE);
}else
AfxMessageBox("error save() in class waverecorder");

}
}
...全文
276 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧