在网上找了很多相似录音教程成果都不好,或基本不能录音,代码由网上借鉴批改(残缺实现录音播放性能)

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

实现代码后测试是能失常录音