zoukankan      html  css  js  c++  java
  • C# Naudio 从麦克风输入到声卡输出 录音 放音功能

    1.using NAudio.Wave;从麦克风输入到声卡输出,并操作数据

    //创建输出对象
    WaveOut waveOut = new WaveOut();
    //创建输入对象
    WaveIn waveIn = new WaveIn();
    //创建缓冲区
    BufferedWaveProvider bufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(16000, 16, 1));
    public void PlaySound() {
    //输入音频参数设置 16k/16位/通道1
    waveIn.WaveFormat = new WaveFormat(16000, 16, 1);
    //为wavein的回调函数添加事件,用于操作数据
    waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(waveIn_DataAvailable);
    //播放
    waveOut.Init(bufferedWaveProvider);
    waveOut.Play();
    }
    /// <summary>
    /// 回调函数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
    {
    //e.Buffer为用于操作的数组,类型为byte
    bufferedWaveProvider.AddSamples(e.Buffer,0,e.BytesRecorded);
    byte[] WaveIn_Data = e.Buffer;
    }
    2.利用Naudio录音,如对wav文件的头不了解请访问wav头文件格式

    //新建文件操作对象,System.Windows.Forms.Application.StartupPath为程序bin目录 wave为文件夹名称 格式为wav
    WaveFileWriter waveFileWriter = new WaveFileWriter(System.Windows.Forms.Application.StartupPath + "\wave\.wav", new WaveFormat(16000, 16, 1));
    private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
    {
    //e.Buffer为用于操作的数组,类型为byte
    bufferedWaveProvider.AddSamples(e.Buffer, 0, e.BytesRecorded);
    byte[] WaveIn_Data = e.Buffer;
    waveFileWriter.Write(WaveIn_Data, 0, WaveIn_Data.Length);
    }
    //先写入头文件,如对wav文件的头不了解请访问
    public void CreateWav() {
    byte[] bxt = new byte[44] { 82, 73, 70, 70, 36, 124, 7, 0, 87, 65, 86, 69, 102, 109, 116, 32, 16, 0, 0, 0, 1, 0, 1, 0, 64, 31, 0, 0, 128, 62, 0, 0, 2, 0, 16, 0, 100, 97, 116, 97, 0, 124, 7, 0 };
    waveFileWriter.Write(bxt, 0, bxt.Length);
    }
    //停止录音
    private void stopMsg_Click(object sender, EventArgs e)
    {
    waveFileWriter.Close();
    }

    3.播放文件

    //播放
    private void PlayWav_Click(object sender, EventArgs e)
    {
    //文件打开对象
    OpenFileDialog dialog = new OpenFileDialog();
    //设置格式
    dialog.Filter = "Wave File (*.wav)|*.wav;";
    //默认路径
    dialog.InitialDirectory = System.Windows.Forms.Application.StartupPath + "\wave\";
    //是否选取文件
    if (dialog.ShowDialog() == DialogResult.OK)
    {
    //文件访问对象
    AudioFileReader waveReader = new AudioFileReader(dialog.FileName);
    WaveOut waveOutPlay=new WaveOut();
    waveOutPlay.Init(waveReader);
    // 设置音量 0~1
    waveOutPlay.Volume = 1f;
    waveOutPlay.Play();
    }
    }

    如需要获取播放状态,可以新建线程或定时器监听状态

    if (waveOutPlay.PlaybackState != PlaybackState.Playing) { }

  • 相关阅读:
    关于IDEA2019.3在书写pom依赖坐标无法自动提示补全的问题
    vue props的接收格式
    axios请求添加请求头 标准写法
    VUE后台管理系统建立
    arguments
    表单验证规则
    <<>> html内显示
    vue_UI组件库vant之加载转圈
    vue_axios请求拦截器
    vue_js数字有效长度16位_超出的解决办法
  • 原文地址:https://www.cnblogs.com/BlueKeyMsg/p/12766821.html
Copyright © 2011-2022 走看看