编辑
2025-09-29
C#
00

目录

摘要
正文

摘要

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; })); }

image.png

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!