C# NAudio 音频库
- NAudio安装
- NAudio简述
- 简单示例1
NAudio安装
项目=>NuGet包管理器 搜索NAudio点击安装,自动安装依赖库。
 
 安装成功后工具箱会新增NAudio.WinForms控件
 
NAudio简述
NAudio为.NET平台下的开源库,采用ML-PL协议,开源地址:https://github.com/naudio/NAudio支持多种音频操作,可实现多种API播放与录制、多种不同音频格式、音频格式转换(重采样、位深、声道等)、音频编码、多通道播放、音频效果处理等等。
快速入门
 深入研究
常用类:
- WaveIn 表示波形输入, 继承了 IWaveIn, 例如麦克风输入, 或者计算机正在播放的音频流。
- WaveOut 表示波形输出, 继承了 IWavePlayer, 用来播放音频, 以 IWaveProvider 作为播放源播放音频, 通过拓展方法也支持以 ISampleProvider 作为播放源播放音频。
- WaveStream 表示波形流, 它继承了 IWaveProvider, 可以用来作为播放源。
- WaveFileReader 继承了 WaveStream, 用来读取波形文件。
- WaveFileWriter 继承了Stream, 用来写入文件, 常用于保存音频录制的数据。
- AudioFileReader 通用的音频文件读取器, 可以读取波形文件, 也可以读取其他类型的音频文件例如 Aiff, MP3
常用接口:
- IWaveProvider 波形提供者, 上面已经提到, 是音频播放的提供者, 通过拓展方法可以转换为 ISampleProvider。
- ISampleProvider 采样提供者, 上面已经提到, 通过拓展方法可以作为 WaveOut 的播放源。
简单示例1
自定义录音机类:Recorder.cs
using NAudio.Wave;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NAudioDemo
{
    internal class Recorder
    {
        public WaveIn mWaveIn;
        public WaveFileWriter mWaveFileWriter;
        public int secondsRecorded;
        /// <summary>
        /// 开始录音
        /// </summary>
        /// <param name="filePath"></param>
        public void RecorderStart(string filePath)
        {
            // 创建WaveIn对象
            mWaveIn = new WaveIn();
            // 添加DataAvailable事件处理回调
            mWaveIn.DataAvailable += OnDataAvailable;
            // 创建WaveFileWriter对象
            mWaveFileWriter = new WaveFileWriter(filePath, mWaveIn.WaveFormat);
            // 开始录音
            mWaveIn.StartRecording();
        }
        /// <summary>
        /// 停止录音
        /// </summary>
        public void RecorderStop()
        {
            mWaveIn?.StopRecording();
            mWaveIn?.Dispose();
            mWaveFileWriter?.Close();
            mWaveFileWriter = null;
        }
        /// <summary>
        /// 录音数据回调
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnDataAvailable(object sender, WaveInEventArgs e)
        {
            // 写入录音数据
            mWaveFileWriter.Write(e.Buffer, 0, e.BytesRecorded);           
            // 计算已录制的秒数
            secondsRecorded = (int)mWaveFileWriter.Length / mWaveFileWriter.WaveFormat.AverageBytesPerSecond;
        }
  
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using NAudio.Wave;
using System.Drawing.Text;
using System.Media;
using NAudio.Dsp;
namespace NAudioDemo
{
    public partial class Form1 : Form
    {             
        // 创建录音机类实例
        Recorder recorder = new Recorder();
        
        public Form1()
        {
            InitializeComponent();
        }
                
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }
   
        private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            button2.Enabled = true;
            recorder.RecorderStart(@"D:\1.wav");
        }
        private void button2_Click(object sender, EventArgs e)
        {
            button1.Enabled = true;
            button2.Enabled = false;
            recorder.RecorderStop();
        }
        private void button3_Click(object sender, EventArgs e)
        {
            SoundPlayer player = new SoundPlayer(@"D:\1.wav");
            player.Play();           
        }
    }
}




















