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

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 williamnet_li 的 blog

        好长时间没有更新blog了,都快黄了~今天来唠叨唠叨~!
        前一段时间写一个录音功能的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实现录音,放音,保存,打开功能
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top