VC实现录音,放音,保存,打开功能

2016-02-19 14:26 101 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐VC实现录音,放音,保存,打开功能,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - 编程语言 】

  前一段时间写一个录音功能的DLL,找了N久,发现N多例子都非常麻烦!现在功能DLL做完了,总结一下贴出来大家看看.

  实现了录音,放音,打开,保存功能.非常简单,使用的是MSDN里面的MCIWnd来实现的.唉~废话少说了,还是看代码吧!

  用VC建立一个Dialog,加入N个按钮.我的Dialog叫Wav3是测试用的.所以懒得弄名字了,下面也有一个些名字写的不怎么样.

  全局的HWND g_hWndMCIWnd;    //因为懒得传来传去就全局好了

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  先是初始化函数

   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是用来传入播放开始点的,比如从滑动条上接收一个数字,传到这里,就从这里开始播放了.但这个方法是笨方法!

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

   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).

  最后提前祝大家圣诞快乐,其实还早着呢~

来源:https://www.tulaoshi.com/n/20160219/1606974.html

延伸阅读
一、引 言 ---- Windows Socket API是一套开放的、支持多种协议的Windows下的网络编程接口,它包 括一个标准的 Berkeley Socket功能调用的集合,以及为Windows所作的重要扩充。 Windows Socket经过不断完善并在众 多公司的全力支持下,已成为Windows网络编程 的事实上的标准。 ---- 本 文 将 在VC++ 5.0 环 境 下 介 绍 一个基于 Winsock ...
引言 做用户界面的时候经常要用到一些静态文本控件,显示一些文字信息,但是 MFC 提供的 CStatic类的功能过于简单,无法满足高级需求。为此我从 CStatic 派生了一个类 CLabelEx,扩展了CStatic。第一次投稿,水平不足请大家见谅。我从 vckbase.com 学到了很多很多东西 ,该是我回报的时候了。 一、功能简介 新增的功能主要...
void CDiaryDlg::OnButtonSave() { // TODO: Add your control notification handler code here // 这种用bSave的方式来判断是否保存过,这样不好,待考虑。 // if (!bSave) {   int iYear = m_cMonthView.GetYear();   int iMonth = m_cMonthView.GetMonth();   int iDay = m_cMonthView.GetDay();   CString sFileNam...
果冻录音如何使用现场录功能   果冻录音如何使用现场录功能?使用果冻录音怎能不会现场录呢?现场录不论通话还是现场录音一步到位,记录一生所闻,收藏美好声音。下面小编就教大家果冻录音现场录方法。 1)安装并打开果冻录音,在主界面中点击左上角的按钮。   2)找到并点击,在现场录界面中点击即可开始录音。 &nbs...
前一阵有人在VB专家门诊中提出一个问题,如何在VB中实现打开图像文件的预览,虽然给出了300分的高分,回答着却寥寥无几。我在参照了DELPHI的源代码后在VB中实现了其部分图像预览功能,在中文WINDOWS98 SE下测试通过。 从MSDN中可以知道调用文件打开通用对话框需调用API 函数GetOpenFileName,原形如下: BOOL GetOpenFileName( LP...

经验教程

384

收藏

62
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部