
c# NAudio 采集麦克风电平并显示在progressBar 2021-02-16
发布日期:2021-05-10 23:37:17
浏览次数:27
分类:精选文章
本文共 4113 字,大约阅读时间需要 13 分钟。
一、写在前面
进度条(ProgressBar)是UI界面组件,用于显示一个耗时操作的进度。通过动态显示百分比,避免用户等待感。在录音控件中,特别是在音频处理应用中,显示音频电平信息尤为重要。笔者使用ProgressBar显示麦克风电平并实现了动态更新,最终效果如附图所示(麦克风电平动态显示为最右边,主音量电平为左侧)。二、创建垂直显示的ProgressBar
要创建垂直显示的ProgressBar,只需新建一个类,并添加以下代码到你的新建项目中。namespace VerticalProgressB { public class VerticalProgressBar : ProgressBar { protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.Style |= 0x04; return cp; } } private void InitializeComponent() { this.SuspendLayout(); this.ResumeLayout(false); } } }
将命名空间(VerticalProgressB)引用到项目中即可实现水平或垂直处显示,根据需求选择。
附图二展示了垂直进度条在控制面板的使用情况。三、使用NAudio库
3.1 了解NAudio作者
NAudio是由Mark Heath开发的开源C#音频处理库,主要用于多媒体编码、播放和录音。Mark Heath位于英国南安普顿的NICE CTI系统公司,专注于.NET开发,尤其是客户端技术和音频处理。3.2 安装NAudio
通过NuGet管理器安装NAudio:- 右键点击项目根目录,选择“NuGet管理器”。
- 刚拖动“管理解决方案的NuGet程序包”对话框。
- 搜索“NAudio”,选择合适版本(如1.6)并安装。安装完成后,NAudio及相关组件会自动引用到项目中。
3.3 获得麦克风电平信息
以下代码示例展示了如何在NAudio中获取麦克风设备信息并获取电平值:private MMDevice speskDevice; // 初始化麦克风设备 private void MMDeviceEnumeratorInit() { MMDeviceEnumerator devEnum = new MMDeviceEnumerator(); speskDevice = devEnum.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia); } private void GetDevicName() { MMDeviceCollection deviceCollection = devEnum.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active); combobox_Mic_1.Items.AddRange(deviceCollection.ToArray()); // 其他麦克风设备类似处理 } private IWaveIn waveIn; private void StartRecording() { if (waveIn != null) return; var format = new WaveFormat(8000, 1); // 8kHz单声频,1位深度 waveIn = new WaveIn { WaveFormat = format }; waveIn.DataAvailable += WaveIn_DataAvailable; waveIn.StartRecording(); } private int MicValue; private void WaveIn_DataAvailable(object sender, WaveInEventArgs e) { short s = BitConverter.ToInt16(e.Buffer, 0); MicValue = Math.Abs((int)s / 50); // 转换电平值为百分比 if (MicValue >= 200) MicValue = 200; } // 定时刷新电平值 private void Timer_Mic_Tick(object sender, EventArgs e) { MMDeviceEnumeratorInit(); if (combox_Mic.SelectedItem != null && MicOnOff_1) { var device = (MMDevice)combox_Mic.SelectedItem; vpb_Voice_R.Value = MicValue; } } // 定时器设置 private System.Threading.Timer timer; public bool MicOnOff_1 = true; // 用于控制是否显示电平值 public VerticalProgressBar.verticalProgressBar verticalProgressBar; // 初始化定时器 timer = new Timer(1000); timer.Enabled = true; timer.Tick += Timer_Mic_Tick; // 开始采集麦克风信号 StartRecording();
3.4 进度条设置与显示
更新进度条时,可以为每个通道设定不同的值。例如,此代码设定主音量为左侧进度条:// 设定主音量条为左侧 this.tbr_Voice_L.Location = new System.Windows.Forms.Point(10, 10);
3.5 注意事项
- 正则引用:确保所有组件在设计时已拖动到_form.sharp中。
- 自动维护:在Dispose事件中确保清理资源。
- 特殊情况:当麦克风被静音或断开时,值为0。
3.6 示例代码片段
以下示例代码展示了如何在_form.cs中实现麦克风电平显示:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using NAudio; namespace VerticalProgressB { public partial class Form1 : Form { private VerticalProgressBar verticalProgressBar; private IWaveIn waveIn; // 其他字段如命名空间请根据实际需求添加 public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // 使用 VerticalProgressB 命名空间中的 VerticalProgressBar verticalProgressBar = new VerticalProgressBar(); // 设置进度条位置和样式 // 初始化麦克风设备 MMDeviceEnumerator devEnum = new MMDeviceEnumerator(); speskDevice = devEnum.GetDefaultAudioEndpoint(DataFlow Render, Role.Multimedia); } // 其他事件不需要改动,已默认处理 protected override void Dispose(params object[] array) { if (components != null) components.Dispose(); base.Dispose(array); } } }
三、下载与引用
通过上述步骤,你可以轻松完成NAudio的下载与集成。当你完成以上代码,DWORD值的确切数值取决于你的麦克风电平设置。对于更高级的录音或多音轨处理,将需要更多的NAudio功能。希望你在项目中有一个愉快的体验!发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月13日 01时12分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
机器学习全教程
2019-03-14
ubuntu配置环境变量(变量不重复)
2019-03-14
idea在连接mysql数据库时区错误
2019-03-14
2021-05-14
2019-03-14
Kali-linux:nmap命令
2019-03-14
php端口直驱网络打印机,能自定义格式
2019-03-14
s3c2440 ads程序移植到keil中(一) 初步完成
2019-03-14
工程经济—建设工程定额
2019-03-14
工程经济—工程量清单编制
2019-03-14
1Z204050、施工质量不合格的处理
2019-03-14
1Z308020、民事诉讼制度
2019-03-14
JSP中的九大内置对象
2019-03-14
【字节网盘】九款超好看不同页面404源码
2019-03-14
两款404页面自动跳转源码html
2019-03-14
二改广告横幅在线制作源码 美化版
2019-03-14
服饰贴图定制小程序V1.2.4安装更新一体包+小程序前端
2019-03-14
一款好看新颖的404页面源码
2019-03-14
创意沙雕黑色蝙蝠侠/小丑动态404页面源码
2019-03-14
使用Mac OS X如何开启和配置防火墙
2019-03-14
格式化Mac硬盘---DoYourData Super Eraser安全、快速
2019-03-14