测试.net开源音频库NAudio

  微信公众号“dotNET跨平台”看到一篇文章《【.NET】使用NAudio实现录音功能》介绍基于NAudio实现录音功能(参考文献1)。NAudio是开源.net音频库,其支持播放多种格式的音频(WAV、AIFF、MP3、WMA等)、音频格式转换、录音等,功能十分强大(GitHub近5000星),本文测试其音频播放及录制视频相关功能的基本用法。
  创建Winform项目,添加NAudio的NuGet引用,如下图所示:

在这里插入图片描述
  NAudio中通过WaveOutEvent和AudioFileReader实现音频的播放,其中WaveOutEvent用于打开音频输出设备,AudioFileReader用于读取音频文件,最终调用WaveOutEvent类的Play、Pause、Stop函数实现音频的播放、暂停、停止功能,主要代码及程序效果如下所示(代码主要参考自参考文献2):
在这里插入图片描述

private WaveOutEvent m_outputDevice;
private AudioFileReader m_audioFile;
private bool m_close = false;

public frmMain()
{
    InitializeComponent();

    m_outputDevice = new WaveOutEvent();
    m_outputDevice.PlaybackStopped += OnPlaybackStopped;
}

private void OnPlaybackStopped(object sender, StoppedEventArgs args)
{
    if(!m_close)
    {
        return;
    }

    m_outputDevice.Dispose();
    m_outputDevice = null;
    m_audioFile.Dispose();
    m_audioFile = null;
}

private void btnBrowse_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        txtSoundFile.Text = openFileDialog.FileName;
    }
}


private void btnPlay_Click(object sender, EventArgs e)
{
    if(m_audioFile != null)
    {
        m_audioFile.Dispose();
    }

    m_close = false;
    m_audioFile = new AudioFileReader(txtSoundFile.Text);
    m_outputDevice.Init(m_audioFile);
    m_outputDevice.Play();            
}

private void btnPause_Click(object sender, EventArgs e)
{
    if(m_outputDevice.PlaybackState== PlaybackState.Paused)
    {
        m_outputDevice.Play();
        btnPause.Text = "暂  停";
    }
    else
    {
        m_outputDevice.Pause();
        btnPause.Text = "继  续";
    }
    
}

private void btnStop_Click(object sender, EventArgs e)
{
    m_close = true;
    m_outputDevice.Stop();
}

  NAudio中通过WaveInEvent和WaveFileWriter实现音频的录制,其中WaveInEvent用于打开音频输入设备,WaveFileWriter用于写入音频文件,最终调用WaveInEvent类的StartRecording、StopRecording函数实现录音的开始、停止功能,主要代码及程序效果如下所示(代码主要参考自参考文献2):
在这里插入图片描述

private void btnStartRecord_Click(object sender, EventArgs e)
{
    m_waveFileWriter = new WaveFileWriter(Path.Combine(txtOutputDir.Text, String.Format("{0}.wav", txtOutputFileName.Text)), m_waveInEvent.WaveFormat);
    m_waveInEvent.DataAvailable += (s, a) =>
    {
        m_waveFileWriter.Write(a.Buffer, 0, a.BytesRecorded);
        if (m_waveFileWriter.Position > m_waveInEvent.WaveFormat.AverageBytesPerSecond * 30)
        {
            m_waveInEvent.StopRecording();
        }
    };
    m_waveInEvent.StartRecording();
}

private void btnEndRecord_Click(object sender, EventArgs e)
{
    m_waveInEvent.StopRecording();
}

  录制好的音频,再使用NAudio播放时会提示“Invalid WAV file - No fmt chunk ”,但是可以在KMPlayer中播放,暂时还未找到解决办法。还有一个问题,就是录音时把电脑播放的声音和人在电脑前说话的声音都录进去了,后续看能不能只录电脑播放的声音。
  补充说明:报错的问题已经解决,详见参考文献3,只需停止录制后,将m_waveFileWriter和m_waveInEvent释放掉即可,参考文献3中说的是Dispose掉m_waveFileWriter,不过我是全都给dispose掉了。后续测试的时候发现调用m_waveFileWriter.Flush()也行,输出的文件也不会报错。

参考文献:
[1]https://it.sohu.com/a/710438265_121124363
[2]https://github.com/naudio/NAudio
[3]https://stackoverflow.com/questions/38523255/invalid-wav-file-no-fmt-chunk-found-after-recording-using-naudio

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB.NET 可以用来开发音频测试仪器,以下是一些实现方法和应用: 1. 音频采集与控制:使用VB.NET可以实现音频输入和输出的控制,包括麦克风和扬声器的选择、音量控制、静音等功能。可以使用类似于NAudio来处理音频采集与播放。 2. 音频处理与分析:使用VB.NET可以实现一系列音频处理功能,如滤波、均衡器、时域、频域分析等。通过音频处理,可以改变音频数据的声音特性,使之适合于不同的测试需求。 3. 数据显示与绘图:VB.NET还可以用于数据的显示与绘图,如频谱分析图、波形图等。可以使用类似于ZedGraph来绘制各种音频测试数据的图形,并可以实现用户交互,如缩放、平移等操作。 4. 数据存储与管理:VB.NET可以处理音频数据的存储与管理。可以将音频数据保存到数据中,方便后续的分析和查询。同时,也可以使用VB.NET提供的文件操作功能,将音频数据保存为文件,如WAV、MP3等格式。 5. 用户界面设计:VB.NET提供了丰富的用户界面设计工具,可以设计出直观友好的音频测试仪器界面。可以使用类似于Windows Forms或WPF来创建各种控件和界面,以满足用户的操作需求。 6. 测试报告生成:使用VB.NET可以生成测试报告,将测试结果以表格、图表等形式展示给用户。可以使用类似于iTextSharp来实现PDF报告的生成。 总之,VB.NET在开发音频测试仪器方面具有很大的灵活性和扩展性,可以根据不同的需求进行定制化开发,实现各种功能和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值