wpf 音频波形图_C# NAudio录音和播放音频文件及实时绘制音频波形图(从音频流数据获取,而非设备获取)...

下午写了一篇关于NAudio的录音、播放和波形图的博客,不太满意,感觉写的太乱,又总结了下

NAudio是个相对成熟、开源的C#音频开发工具,它包含录音、播放录音、格式转换、混音调整等功能。本次介绍主要功能有音频、录音文件播放、实时音频流波形图显示等。具体如下:

1. 录音

NAudio录音主要使用WaveIn和WaveFileWriter两个类

1.1   WaveIn

WaveIn的功能是对录音的音频参数进行设置以及对数据的采集,参数如通道数、采样率、平均数据传输速率(WaveFormat)、数据回调事件、录音停止回调函数等参数

其中,DataAvailable为数据回调参数,是在录音时实时将录音数据传递出来,有需要使用录音数据的可以订阅该事件进行接收业务和相关处理。

1.2   WaveFileWriter

该类是创建相对应格式的音频文件,并提供想对应的写入数据方法、保存方法等,具体如下:

public classWaveFileWriter : Stream

{publicWaveFileWriter(Stream outStream, WaveFormat format);public WaveFileWriter(stringfilename, WaveFormat format);~WaveFileWriter();public override long Position { get; set; }public override bool CanWrite { get; }public override bool CanRead { get; }public WaveFormat WaveFormat { get; }public TimeSpan TotalTime { get; }public override long Length

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF 中可以使用 Canvas 控件来绘制心电波形图。以下是一个简单的绘制方法: 1. 创建一个 Canvas 控件,定义它的宽度和高度。 2. 使用 Path 类来创建一个 PathGeometry 对象,用于表示心电波形的路径。 3. 创建一个 PolyLineSegment 对象,用于表示心电波形的线段。 4. 将 PolyLineSegment 对象添加到 PathGeometry 中。 5. 使用 Path 类的 Data 属性将 PathGeometry 对象设置为路径数据。 6. 将 Path 对象添加到 Canvas 控件中。 示例代码(假设心电波形数据存储在一个名为 data 的数组中): ```xml <Canvas Width="500" Height="200"> <Path Stroke="Red" StrokeThickness="2"> <Path.Data> <PathGeometry> <PathFigure StartPoint="0,100"> <PolyLineSegment Points="0,100"/> </PathFigure> </PathGeometry> </Path.Data> </Path> </Canvas> ``` 在代码中,我们将起点设置为 (0,100),表示心电波形的起始位置。然后,我们将 PolyLineSegment 的 Points 属性设置为一个空的字符串,这样我们可以在后面的代码中动态地添加点。 接下来,我们可以在代码中使用一个计时器来定期更新心电波形的数据。在每个时间间隔中,我们可以将新的数据点添加到 PolyLineSegment 中,并重新绘制心电波形。 示例代码: ```csharp private void Timer_Tick(object sender, EventArgs e) { // 获取最新的心电波形数据 double[] data = GetData(); // 获取 Path 对象和 PathGeometry 对象 Path path = canvas.Children.OfType<Path>().First(); PathGeometry geometry = path.Data as PathGeometry; // 获取 PolyLineSegment 对象并添加新的数据点 PolyLineSegment segment = geometry.Figures.First().Segments.OfType<PolyLineSegment>().First(); for (int i = 0; i < data.Length; i++) { segment.Points.Add(new Point(i, 100 - data[i])); } // 重新绘制心电波形 path.Data = geometry; } ``` 在代码中,我们首先获取最新的心电波形数据,然后获取 Canvas 控件中的 Path 对象和 PathGeometry 对象。接着,我们获取 PolyLineSegment 对象并将新的数据点添加到它的 Points 属性中。最后,我们重新将 PathGeometry 对象设置为 Path 的 Data 属性,以便重新绘制心电波形。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值