C# mci SoundRecord / 录音
2018-07-20 来源:open-open
录音我一般更喜欢mci方式,当然也有另一种方式及DirectSound不过它会麻烦许多
但是它却有一个让我感到较好的特点,首先可以选择录音设备源,第二它不像mci
必须要写到本地磁盘,它是把录制音频流存放在内存中,在速度上我认为它会快很
多,不过它也有一个缺点让我不舒服,它不如mci哪样是默认集成在系统中的,我这
个人特喜欢使用系统自带的函数,主要你不需要去拷贝DLL因为系统是默认就有的,
只需要去调用就行了,方便 当然mci提供的操作命令我比较讨厌mciSendCommand
原因在于我自己得写一大堆结构体 是让我感到非常讨厌的,mciSendString则是通过
字符串,属于轻量操作函数我倒是喜欢的紧。
private SoundRecord m_Record = new SoundRecord(); private void MainForm_Load(object sender, EventArgs e) { this.m_Record.OpenRecord(); // 打开录音 this.m_Record.StartRecord(); // 开始录音 } private void BtnStopAndSave_Click(object sender, EventArgs e) { this.m_Record.StopRecord(); // 停止录音 this.m_Record.SaveRecord(@"C:\Users\windo\Desktop\1.wav"); // 保存录音 this.m_Record.CloseRecord(); // 关闭录音 }上面的代码只是一个简单的录音并保存的过程,不过该类本身就很简单 而且我也附
有注释,想必你们应该不会感到学习困难,录音属性配置默认初始化在构造函数中。
public partial class SoundRecord { [DllImport("WinMm.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)] private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback); private const int ERROR_SUCCESS = 0; private const string MODE_UNKNOWN = "unknown"; private static bool mciSendString(string strCommand) { return mciSendString(strCommand, null, 0, 0) != ERROR_SUCCESS; } } public partial class SoundRecord { private int m_channels; private int m_sample_spersec; private string m_format_tag; private int m_bits_per_sample; public SoundRecord() { this.Channels = 2; this.FormatTag = "pcm"; this.BitsPerSample = 8; this.SampleSpersec = 11025; } // 采样位数 public virtual int BitsPerSample { set { if (mciSendString("set wave bitpersample " + value)) this.m_bits_per_sample = value; } get { return this.m_bits_per_sample; } } // 采样频率 public virtual int SampleSpersec { get { return this.m_sample_spersec; } set { if (mciSendString("set wave samplespersec " + value)) this.m_sample_spersec = value; } } // 声道 public virtual int Channels { get { return m_channels; } set { if (mciSendString("set wave channels " + value)) this.m_channels = value; } } // 格式标签 public virtual string FormatTag { get { return this.m_format_tag; } set { if (mciSendString("set wave format tag " + value)) this.m_format_tag = value; } } // 打开录音 public virtual bool OpenRecord() { return mciSendString("open new type waveaudio alias movie"); } // 开始录音 public virtual bool StartRecord() { return mciSendString("record movie"); } // 停止录音 public virtual bool StopRecord() { return mciSendString("stop movie"); } // 保存录音 public virtual bool SaveRecord(string saveFileName) { return mciSendString("save movie " + saveFileName); } // 关闭录音 public virtual bool CloseRecord() { return mciSendString("close movie"); } // 暂停录音 public virtual bool PauseRecord() { return mciSendString("pause movie"); } // 恢复录音 public virtual bool ResumeRecord() { return mciSendString("resume movie"); } // 执行状态 public virtual string Status { get { string strBuffer = new string('\0', 12); if (mciSendString("status movie mode", strBuffer, 12, 0) != ERROR_SUCCESS) return MODE_UNKNOWN; if ((strBuffer = strBuffer.Remove(strBuffer.IndexOf('\0'))).Length <= 0) return MODE_UNKNOWN; return strBuffer; } } }
标签: 代码
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。