在网上找了很多相似录音教程成果都不好,或基本不能录音,代码由网上借鉴批改(残缺实现录音播放性能)
NAudio
NAudio为.NET平台下的开源库,采纳ML-PL协定,开源地址:https://github.com/naudio/NAudio。
NAudio功能强大,且其入门容易。
弱小在于:它反对许多音频操作,可实现多种API播放与录制、多种不同音频格式、音频格式转换(重采样、位深、声道等)、音频编码、多通道播放、音频成果解决等等(具体介绍能够看Github readme)。
新建RecordController
首先新建援用类 RecordController
public class RecordController { public WaveIn mWavIn; public WaveFileWriter mWavWriter; /// <summary> /// 开始录音 /// </summary> /// <param name="filePath"></param> public void StartRecord(string filePath) { mWavIn = new WaveIn(); mWavIn.DataAvailable += MWavIn_DataAvailable; // mWavIn.RecordingStopped += MWavIn_RecordingStopped; 有抵触 mWavWriter = new WaveFileWriter(filePath, mWavIn.WaveFormat); mWavIn.StartRecording(); } /// <summary> /// 进行录音 /// </summary> public void StopRecord() { mWavIn?.StopRecording(); mWavIn?.Dispose(); mWavIn = null; mWavWriter?.Close(); mWavWriter = null; } //这个办法在调用敞开时会有抵触 private void MWavIn_RecordingStopped(object sender, StoppedEventArgs e) { //mWavIn?.Dispose(); //mWavIn = null; //mWavWriter?.Close(); //mWavWriter = null; } private void MWavIn_DataAvailable(object sender, WaveInEventArgs e) { mWavWriter.Write(e.Buffer, 0, e.BytesRecorded); int secondsRecorded = (int)mWavWriter.Length / mWavWriter.WaveFormat.AverageBytesPerSecond; }}
应用
在主界面援用 RecordController record = new RecordController();
/// <summary>/// 耳机sidetone测试/// </summary>/// <param name="i"></param>public void Sidetone(int i) { string[] row = getlistviewitem(i); record.StartRecord("e:\rec.wav"); if (MessageBox.Show("正在录音,点击是播放录音", "提醒", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) { record.StopRecord(); ErrorFlag = false; row[6] = "FAIL"; } else { record.StopRecord(); string path = "e:\rec.wav"; //.wav音频文件门路 System.Media.SoundPlayer player = new System.Media.SoundPlayer(path); player.Play(); if (MessageBox.Show("是否有录音", "提醒", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) { ErrorFlag = false; row[6] = "FAIL"; } else { ErrorFlag = true; row[5] = "OK"; row[6] = "PASS"; } } listupdate(row, i);}
实现代码后测试是能失常录音