当前位置: 首页 > article >正文

演示:基于WPF的DrawingVisual开发的频谱图和律动图

一、目的:基于WPF的DrawingVisual开发的频谱图和律动图


二、效果演示


波形图

极坐标

 律动图极坐标图

律动图柱状图

Dock布局组合效果

三、环境


VS2022,Net7,Win10,NVIDIA RTX A2000

四、主要功能

支持设置起始频率,终止频率,中心频率,频率宽度,最小功率和最大功率设置

通过以上参数设置可以控制限制坐标轴的范围 

支持显示Fps(刷新率)

本示例可以看到FPS在40-50左右 

支持播放.MP3.WAV等音频文件

支持缩放平移等操作

支持ToolTip鼠标悬停显示频谱信息

支持暂停/播放操作

五、性能

渲染数据量情况(4000左右

        本示例中使用0-20000Hz范围数据,采样使用FftSize.Fft8192,实际渲染点4094

刷新率情况

        关于刷新率对数据量,数据种类,硬件环境等都有关系

        本示例显卡型号使用的:NVIDIA RTX A2000,示例中对于普通歌曲音频来说可以渲染到50-60帧/秒,本机显示器设置的刷新率是60Hz(一般显示器基本都是60Hz)

CPU和GPU使用情况

可以看到CPU占用10-20%左右GPU占用10-15%左右

总结:综上总结,在当前环境下,渲染音频数据4000左右个点,刷新率可以达到55+左右

对于以上结果,不同机器环境,数据样式,显示方式等都会有影响,比如:

1、同样的数据,显示全屏和小窗口性能不一样,全屏FPS会有所下降而且很明显;

2、对于幅度波动比较大且不规则的数据,比如随机生成的数据,FPS会有所下降(目前还没有验证)

3、数据点数越多FPS会下降,相反越少可以提高FPS

六、参考

主要绘制方式

使用DrawingContext绘制,将数据生成Geometry通过DrawGeometry绘制

个人总结绘制高性能图谱时的参考意见

1、使用轻量的绘图方式,比如:DrawingVisual(可以应用硬件加速渲染);

2、尽量减少数据量,越少的数据绘制性能越高;

3、将绘制线程和更新数据线程分开,绘制线程中不要写太多逻辑尽量简单;

4、显示的范围尽量不要太大,越小的屏幕范围性能越高;

5、条件允许尽量提高硬件环境,最主要提高GPU环境;

6、Visual Studio环境和Debug环境都会影响绘制性能,可以打包或生成Release测试最终性能;

        以上是个人总结的参考意见,实际开发中还是需要根据具体情况去做优化,在调试中不断去挖掘哪些操作可能影响到渲染性能

七、演示视频

【WPF-Spectrogram】频谱分析仪_哔哩哔哩_bilibili

需要了解的知识点 

DrawingContext Class (System.Windows.Media) | Microsoft Learn 

System.Windows.Controls 命名空间 | Microsoft Learn

控件库 - WPF .NET Framework | Microsoft Learn

WPF 介绍 | Microsoft Learn

XAML概述 - WPF .NET | Microsoft Learn

Windows Presentation Foundation 简介 - WPF .NET | Microsoft Learn

使用 Visual Studio 创建新应用教程 - WPF .NET | Microsoft Learn

了解更多

适用于 .NET 8 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

适用于 .NET 7 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

Reference Source

Sysinternals - Sysinternals | Microsoft Learn

Windows app development documentation - Windows apps | Microsoft Learn

欢迎使用 Expression Blend | Microsoft Learn

https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/?view=netdesktop-7.0&WT.mc_id=MVP_380318

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频


http://www.kler.cn/a/324281.html

相关文章:

  • python 多进程,程序运行越来越慢踩坑
  • 技术理论||02空中三角测量
  • Notepad++的完美替代
  • 高级数据结构——hash表与布隆过滤器
  • stm32——通用定时器时钟知识点
  • hrnet人体关键点检测模型适配atlas笔记
  • Meta首款多模态Llama 3.2开源:支持图像推理,还有可在手机上运行的版本 | LeetTalk Daily...
  • Python连接Kafka收发数据等操作
  • [leetcode]53_最大子数组(序列)和
  • 2024年空间计算/XR的现状:双子座阶段的探索与展望
  • 关于电商API接口接入及其相关应用分析【主流电商API接口】
  • 音视频处理工具FFmpeg与Java结合的简单使用
  • 【计算机网络 - 基础问题】每日 3 题(二十七)
  • Stable Diffusion绘画 | Checkpoint Merger 模型融合
  • 如何区分这个ip是真实ip,不是虚假的ip
  • 论文阅读 - SWATTING Spambots: Real-time Detection of Malicious Bots on X
  • RabbitMQ的高级特性-延迟队列
  • 个人计算机与网络的安全
  • 初探shell与bash使用指南
  • spring cloud Gateway网关
  • 网络编程(12)——完善粘包处理操作(id字段)
  • 【最新】微信小程序连接onenet——stm32+esp8266+onenet实现查看温湿度,控制单片机
  • 探索CefSharp,Cefsharp浏览器能做自动填表和模拟登录
  • 长芯微LPQ76930锂电池组保护芯片完全P2P替代BQ76930
  • 江协科技STM32学习- P20 实验-TIM编码器接口测速
  • windows安装Redis以后配置远程访问