mciSendString 录制WAV
MCI(Media Control Interface,媒体控制接口)函数中,有些只适用于一种接口方式,有些则两种接口都可以用。mciSendString只适用于命令串接口方式(命令串中不区分大小写)。
基础设置
set wave bitpersample 8 //设置为8位
set wave samplespersec 11025 //设置为11025Hz
set wave channels 2 //设置为立体声
导入winmm.dll
C#[DllImport("winmm.dll")]
private static extern uint mciSendString(string command, string returnValue, int returnLength, IntPtr winHandle);
开始录音
C#DateTime startDate;
private void btnRecord_Click(object sender, EventArgs e)
{
uint ret = 0;
//ret=mciSendString("set wave samplespersec 11025", "", 0, IntPtr.Zero);
ret = mciSendString("set wave channels 2", "", 0, IntPtr.Zero);
ret = mciSendString("close record1", "", 0, IntPtr.Zero);
ret = mciSendString("open new type WAVEAudio alias record1", "", 0, IntPtr.Zero);
ret = mciSendString("record record1", "", 0, IntPtr.Zero);
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 1;
timer.Elapsed += Timer_Elapsed;
timer.Start();
startDate = DateTime.Now;
}
保存文件
C#private void btnSave_Click(object sender, EventArgs e)
{
uint ret = 0;
StringBuilder sb = new StringBuilder(32);
ret = mciSendString("stop record1", "", 0, IntPtr.Zero);
ret = mciSendString("save record1 d://a.wav","", 0, IntPtr.Zero);
ret = mciSendString("close record1", "", 0, IntPtr.Zero);
}
C#private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
this.Invoke(new Action(() =>
{
DateTime enddate = DateTime.Now;
TimeSpan timeSpan = enddate - startDate;
this.lblRecord.Text = timeSpan.Minutes + ":" + timeSpan.Seconds + ":" + timeSpan.Milliseconds;
}));
}
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!