中華網校

系列網站: 中華網校 | www.網校.com | 3D模型 | 中華網校教育

電腦網校 | 業界新聞 | 職業網校 | 網校寶典 | 軟件下載 | 網校論壇 | 網校聯盟

電腦入門 | 網頁設計 | 網絡編程 | 圖形圖象 | 三維空間 | 多媒體 | 程序語言 | 操作系統 | 系統專題 | 辦公應用 | 軟件寶典 | 硬件天下 | 

 

您的位置:首頁 >> 程序語言 >> VC/VC.NET >> 新聞正文

VC實現錄音,放音,保存,打開功能  

作者:williamnet_li  時間:2004-12-27 21:33:04  來自:CSDN  責任編輯:www.kxazyv.tw  閱讀次數:

前一段時間寫一個錄音功能的DLL,找了N久,發現N多例子都非常麻煩!現在功能DLL做完了,總結一下貼出來大家看看.

  實現了錄音,放音,打開,保存功能.非常簡單,使用的是MSDN里面的MCIWnd來實現的.唉~廢話少說了,還是看代碼吧!

  用VC建立一個Dialog,加入N個按鈕.我的Dialog叫Wav3是測試用的.所以懶得弄名字了,下面也有一個些名字寫的不怎么樣.

  全局的HWND g_hWndMCIWnd;    //因為懶得傳來傳去就全局好了

  先是初始化函數

  void CWav3Dlg::OnButtonInit()
  {

  MCIWndClose(g_hWndMCIWnd);    //這個是為了打開一個聲音的之前關閉以前的聲音,應該先加一個判斷好了.

  g_hWndMCIWnd = MCIWndCreate(this->m_hWnd,::AfxGetApp()->m_hInstance,WS_CAPTION,NULL);    //創建句柄要說的是最后一個參數,如果是NULL,就新建一個,如果是一個文件的路徑,就打開它.但是都要使用下面的MCIWndNew來開內存


  MCIWndNew(g_hWndMCIWnd,"waveaudio");   
  }

  初始化完了之后馬上就可以錄音了,下面就是錄音函數


  void CWav3Dlg::OnButtonRec()
  {
  if(MCIWndCanRecord(g_hWndMCIWnd))    //這里是判斷是否可以錄音
  {
  MCIWndRecord(g_hWndMCIWnd);    //錄音就這個函數,很簡單
  }
  else
  {
  AfxMessageBox("error #01");    //這個錯誤報告很垃圾的,不建議用,不過測試用還可以.
  }
  }

  錄音開始了,接下來就是停止,不停止還了得~!
  void CWav3Dlg::OnButtonRecStop()         //這個停止函數不是只可以用在錄音的,播放錄音時也可以使用它來停止.


  {
  MCIWndStop(g_hWndMCIWnd);    //別懷疑,就這么簡單
  }

  錄完聲音了,播放試試,這個播放也可以播放從硬盤打開的聲音文件.


  void CWav3Dlg::OnButtonPlay()
  {
  if(MCIWndCanPlay(g_hWndMCIWnd))    //這里判斷有沒有可以播放的東西
  {


MCIWndSeek(g_hWndMCIWnd,m_Int);    //說一下這里吧,這里是確定從哪里開始播放.沒有也可以就是從頭開始播放.里面的m_Int是用來傳入播放開始點的,比如從滑動條上接收一個數字,傳到這里,就從這里開始播放了.但這個方法是笨方法!


  MCIWndPlay(g_hWndMCIWnd);
  }
  else
  AfxMessageBox("error no wave");
  }

  最后說說保姘?


  void CWav3Dlg::OnButtonSave()
  {
  CString m_Path;
  CFileDialog wav(FALSE,NULL,NULL,OFN_ALLOWMULTISELECT,"wav File (*.wav)|*.wav");
  if(wav.DoModal() == IDOK)
  {
  m_Path = wav.GetPathName();
  }
  else
  return;
  if(MCIWndCanSave(g_hWndMCIWnd))
  {

  MCIWndSave(g_hWndMCIWnd, "a");    //這里有點問題要說說了,MSDN里面寫,這個MCIWndSave可以直接保存文件,第二個參數傳入一個-1就會自動打開保存框給我們選擇,但是我試了N久都沒搞定,(也請高手看看,誰搞定了mail給我一份)它不打開保存框給我,但是返回一個成功值!靠~!還有直接保存為文件,文件名只要大于一位就是亂碼,所以我在這里繞了一個圈,先保存成一個a,拷貝改名為要保存的文件名,最后在結束里面刪除掉這個a.


  CopyFile("a",m_Path,FALSE);
  }
  else
  AfxMessageBox("error Can`t save");
  }

  OK,已經完成了!打開就不用說了,直接傳一個文件路徑給初始化的最后一個參數就行了.
  還有就是最后在善后的時候不要忘了執行一個MCIWndClose(g_hWndMCIWnd).

  最后提前祝大家圣誕快樂,其實還早著呢~


相關文章 最新文章 推薦文章
VC實現錄音,放音,保存,打開功能
VC# .Net中使用Crystal Report
用VC實現圖象漸顯和漸隱

  中華網校依法保護知識產權,如果我們的文章有涉及或侵犯您的有關權益,請即時與我們 聯系, 注明網址及文章,我們會即時處理或刪除,感謝您的合作!中華網校email
  中華網校由廣州市中六電腦城智銳計算機專業培訓學院及中華網校技術中心提供網絡支持未經本站許可任何個人網站、書刊報社一律不得私自復制,轉載本站內容!

關于中華網校 | 廣告服務 | 版權聲明 | 投稿指南 | 網站合作 | 友情鏈接 | 網站地圖

 

版權所有 中華網校 & 智銳網校 1999-2004 COPYRIGHT (C) 1999-2004 www.kxazyv.tw ALL RIGHTS RESERVED

 
河北快3