(收藏)mci 录音和播放

原文http://blog.csdn.net/lvbian/article/details/18226741

最近在做Android与C#录音并互相通信的小东西。但是卡在C#录音这儿了。找了好久,说的都是DirectX,可是我总是安装不上,这才找到了这个简单的录音方法。当然,如果你想要录得好并且处理音频,那还是用用DirectX吧!原文:http://www.cnblogs.com/zrx401558287/archive/2008/11/28/1343160.html

[csharp] view plain copy
 
  1. using System.Runtime.InteropServices;  
  2.   
  3.         [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]  
  4.         public static extern int mciSendString(  
  5.          string lpstrCommand,  
  6.          string lpstrReturnString,  
  7.          int uReturnLength,  
  8.          int hwndCallback  
  9.         );  
  10.         private void button1_Click(object sender, EventArgs e)  
  11.         {  
  12.             mciSendString("set wave bitpersample 8", "", 0, 0);  
  13.   
  14.             mciSendString("set wave samplespersec 20000", "", 0, 0);  
  15.             mciSendString("set wave channels 2", "", 0, 0);  
  16.             mciSendString("set wave format tag pcm", "", 0, 0);  
  17.             mciSendString("open new type WAVEAudio alias movie", "", 0, 0);  
  18.    
  19.             mciSendString("record movie", "", 0, 0);  
  20.         }  
  21.   
  22.         private void button2_Click(object sender, EventArgs e)  
  23.         {  
  24.             mciSendString("stop movie", "", 0, 0);  
  25.             mciSendString("save movie 1.wav", "", 0, 0);  
  26.             mciSendString("close movie", "", 0, 0);  
  27.         }  

button1是开始录音,button2是结束录音。你当然也可以通过逻辑判断来只使用一个button。

录音文件保存到了该项目下bin/Debug目录下了。文件名是1.wav。所以你可以在这里改成你自己的文件名

[csharp] view plain copy
 
  1. mciSendString("save movie "+yourfilename, "", 0, 0);  

很简单吧?

下面是放音。

放音我使用的是WindowsMediaPlayer这个组件:

我将它设为不可见,自己用按键控制它的播放与暂停。

[csharp] view plain copy
 
  1. private void button1_Click(object sender, EventArgs e)  
  2.         {  
  3.             if(!playing)  
  4.             {  
  5.         playing = true;  
  6.                 button1.Text = "停止";  
  7.                this.axWindowsMediaPlayer1.URL ="your voice file name";  
  8.                 axWindowsMediaPlayer1.Ctlcontrols.play();  
  9.             }  
  10.             else  
  11.             {  
  12.                 axWindowsMediaPlayer1.Ctlcontrols.stop();  
  13.                 playing=false;  
  14.                 button1.Text="播放";  
  15.             }  
  16.         }  

也就是通过URL属性设置播放的文件。

那如果它自己播放结束了怎么办呢?

当然就需要事件啦!

[csharp] view plain copy
 
  1. private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)  
  2.         {  
  3.             if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsStopped)  
  4.             {  
  5.                 if (playing)  
  6.                 {  
  7.                     playing = false;  
  8.                     button1.Text = "播放";  
  9.                 }  
  10.                 if (playing_my)  
  11.                 {  
  12.                     playing_my = false;  
  13.                     btn_playmy.Text = "播放我的";  
  14.                 }  
  15.             }  
  16.         }  


这两个强大的工具让我们完成了简单的开发!

原文地址:https://www.cnblogs.com/81/p/6268431.html