用VC可以進行簡單的錄音和播音操作,這裡調用的是微軟的音頻開發包,通過MCI函數(Media Control Interface,媒體控制介面)即可實現。只需要建立一個對話方塊,上面列四個按鈕,分別是錄音、停止、播放、儲存即可。
(1)在StdAfx.h中加入下面的語句:
#include<vfw.h> //微軟的音視頻開發標頭檔
#pragma comment(lib,"vfw32.lib") //表示連結vfw32.lib庫。和在工程設定裡寫上鏈入vfw32.lib的效果一樣
(2)在dlg.h中定義一個操作控制代碼,HWND mciwav;
(3)錄音按鈕實現函數:
void CSoundrecordandplayDlg::OnRecord()
{
MCIWndClose(mciwav); //開啟一個聲音的之前關閉以前的聲音
mciwav = MCIWndCreate(this->m_hWnd,AfxGetApp()->m_hInstance,WS_CAPTION,NULL);
//建立控制代碼,最後一個參數如果是NULL,就建立一個;如果是一個檔案的路徑就開啟它。
//this->m_hWnd表示父控制代碼,AfxGetApp()獲得當前應用進程的指標,進而取得執行個體
MCIWndNew(mciwav,"waveaudio"); //建立裝置
if (MCIWndCanRecord(mciwav)) //判斷是否能夠錄音
{
MCIWndRecord(mciwav);
}
}
(4)錄音停止按鈕函數:
void CSoundrecordandplayDlg::OnStop()
{
MCIWndStop(mciwav);
}
(5)錄音播放函數:
void CSoundrecordandplayDlg::OnPlay()
{
if (MCIWndCanPlay(mciwav)) //判斷是否能夠播放
{
MCIWndPlay(mciwav);
}
}
(6)儲存函數
void CSoundrecordandplayDlg::OnSave()
{
CString m_path;
CFileDialog wav(FALSE,NULL,NULL,OFN_ALLOWMULTISELECT,"wav File(*.wav)|*.wav");
//建構函式建立一個檔案儲存對話方塊,並且設定類型過濾
if (wav.DoModal() == IDOK) //如果選擇儲存按鈕。DoModal實際上實現了對話方塊的建立、顯示、關閉的全過程
{
m_path = wav.GetPathName(); //獲得絕對路徑和輸入的檔案名稱
}
else
{
return;
}
if (MCIWndCanSave(mciwav)) //如果能儲存
{
MCIWndSave(mciwav,"a"); //儲存成預設的名字a
CopyFile("a",m_path,FALSE); //把a檔案拷貝到另一路徑和名字
}
else
{
MessageBox("can not save");
}
}
//這裡再說明DoModal的其它用法,除了上面建立開啟或者另存新檔對話方塊之外,另一種方式就是調用其它對話方塊。比如,建立了一個對話方塊TestDialog,那麼使用類嚮導時會提示為該對話方塊添加類TestDialogClass。在主對話方塊的按鈕函數中,加入如下代碼:
TestDialogClass test;
test.DoModal();
即可實現對子對話方塊的調用。注意編譯之前要加上新類的標頭檔。