c#錄音和放音,超簡單!不用DirectX


最近在做android與C#錄音並互相通信的小東西。但是卡在C#錄音這兒了。找了好久,說的都是DirectX,可是我總是安裝不上,這才找到了這個簡單的錄音方法。當然,如果你想要錄得好並且處理音頻,那還是用用DirectX吧!原文:http://www.cnblogs.com/zrx401558287/archive/2008/11/28/1343160.html

 

 

using System.Runtime.InteropServices;

        [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
        public static extern int mciSendString(
         string lpstrCommand,
         string lpstrReturnString,
         int uReturnLength,
         int hwndCallback
        );
        private void button1_Click(object sender, EventArgs e)
        {
            mciSendString("set wave bitpersample 8", "", 0, 0);

            mciSendString("set wave samplespersec 20000", "", 0, 0);
            mciSendString("set wave channels 2", "", 0, 0);
            mciSendString("set wave format tag pcm", "", 0, 0);
            mciSendString("open new type WAVEAudio alias movie", "", 0, 0);
 
            mciSendString("record movie", "", 0, 0);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            mciSendString("stop movie", "", 0, 0);
            mciSendString("save movie 1.wav", "", 0, 0);
            mciSendString("close movie", "", 0, 0);
        }

button1是開始錄音,button2是結束錄音。你當然也可以通過邏輯判斷來只使用一個button。

錄音文件保存到了該項目下bin/Debug目錄下了。文件名是1.wav。所以你可以在這里改成你自己的文件名

 

mciSendString("save movie "+yourfilename, "", 0, 0);

 

 

很簡單吧?

下面是放音。

放音我使用的是WindowsMediaPlayer這個組件:

我將它設為不可見,自己用按鍵控制它的播放與暫停。

 

private void button1_Click(object sender, EventArgs e)
        {
            if(!playing)
            {
		playing = true;
                button1.Text = "停止";
               this.axWindowsMediaPlayer1.URL ="your voice file name";
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
            else
            {
                axWindowsMediaPlayer1.Ctlcontrols.stop();
                playing=false;
                button1.Text="播放";
            }
        }

也就是通過URL屬性設置播放的文件。

那如果它自己播放結束了怎么辦呢?

 

當然就需要事件啦!

 

private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {
            if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsStopped)
            {
                if (playing)
                {
                    playing = false;
                    button1.Text = "播放";
                }
                if (playing_my)
                {
                    playing_my = false;
                    btn_playmy.Text = "播放我的";
                }
            }
        }

這兩個強大的工具讓我們完成了簡單的開發!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM