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

news2024/9/29 10:43:43

一、目的:基于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.coloradmin.cn/o/2176466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我把「国产Sora」接入了「小爱」,邀你免费体验

前段时间,搞了个微信 AI 小助理-小爱(AI),爸妈玩的不亦乐乎。 零风险!零费用!我把AI接入微信群,爸妈玩嗨了,附教程(下) 不仅可以智能问答,文生图的能力也接了进来&…

HTML+CSS 水滴登录页

文章目录 一、效果演示二、Code1.HTML2.CSS 三、实现思路拆分 一、效果演示 实现了一个水滴登录页的效果。页面包含一个水滴形状的登录框和两个按钮,登录框包括用户名、密码和登录按钮,按钮分别为忘记密码和注册。整个页面的设计非常有创意,采…

每日一练 2024.9.29(1)

目录 解题思路与代码实现 一、问题分析 二、解题策略 伪代码: 三、代码实现 四、代码解析 五、解题过程总结 六、运行过程示例 示例 1: 示例 2: 七、对比分析 八、改进建议 九、总结 解题思路与代码实现 这道题目要求我们模拟买…

如何解决调试dev-出++5.11不成功问题

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&am…

【CKA】二、节点管理-设置节点不可用

2、节点管理-设置节点不可用 1. 考题内容: 2. 答题思路: 先设置节点不可用,然后驱逐节点上的pod 这道题就两条命令,直接背熟就行。 也可以查看帮助 kubectl cordon -h kubectl drain -h 参数详情: –delete-empty…

一个家越来越有钱,是因为女人身上有这3个好习惯!

在一个家庭中,女人往往扮演着举足轻重的角色。 她们不仅是家庭的支柱,也是家庭和谐与繁荣的重要因素。 正所谓“家和万事兴”,一个家庭是否能够兴旺发达,与家中女人的习惯和态度息息相关。 实际上,一个家越来越有钱…

ubuntu20.04安装CUDA与cudnn

这里写目录标题 一、NVIDIA显卡驱动安装二、安装CUDA官网找对应版本下载安装文件安装配置环境变量 三、安装cuDNN选择版本另一种下载方式 四、cuDNN与CUDA关系CUDAcuDNN的依赖关系与CPU的交互开发编程角度图示 总结 一、NVIDIA显卡驱动安装 我这里之前就装好了 使用命令 nvid…

DCDC电源设计工具(软件)(二)—— DC/DC Designer(MPS)

目录 一、简介 二、主页介绍 1、芯片选择 (1)在数据库中选择芯片 (2)通过下拉列表/具体型号选择芯片 2、编辑参数 (1)输入主要规格 (2)输入可选规格 (3&…

基于Arduino的自弹尤克里里机器人

需要项目源码资料的可以私信我 基于Arduino的自弹尤克里里机器人 一、简介二、材料清单三、工具四、实现过程步骤1:实物图步骤2:3D打印部件步骤3:组装上半部分步骤4:组装下半部分步骤5:安装导轨步骤6:设置…

人工打电话的操作步骤指南

如果有一套外呼系统,那么在功能上有哪些具体如何操作 在进行人工电话沟通时 一套清晰、高效的操作流程对于实现沟通目标至关重要 以下是详细的人工打电话操作步骤 涵盖从准备到后续跟进的全过程 如果有一套外呼系统,那么在功能上有哪些具体如何操作 …

CST仿真分析:圆柱形谐振腔的模式分析

波导谐振器一般可以由波导两端短路形成,矩形和圆柱形谐振腔比较常见。矩形谐振腔模式的表示,是从波导的TEmn和TMmn变成了TEmnp和TMmnp,p是沿z方向的周期。之所以我们这里分析圆柱形,一是三个下角标更不容易理解(TEnip和…

组合优化与凸优化 学习笔记5 对偶拉格朗日函数

有的时候约束条件有点难搞,我们可以把它放到目标函数里面。 记得之前凸函数的时候的结论吗?一大堆函数,每一段都取最大的,最后会得到一个凸函数。同理,每一段都取最小的,得到的是一个凹函数。就这样&#x…

【如何学习操作系统】——学会学习的艺术

🐟作者简介:一名大三在校生,喜欢编程🪴 🐡🐙个人主页🥇:Aic山鱼 🐠WeChat:z7010cyy 🦈系列专栏:🏞️ 前端-JS基础专栏✨前…

酒店智能开关:引领未来住宿体验的新篇章

酒店智能开关作为智能化改造的关键一环,正逐步成为提升酒店服务品质、管理效率和竞争力的新引擎。本文将深入探讨酒店智能开关的特点、应用实例及其为酒店业带来的多方面变革。 一、酒店智能开关的特点 酒店智能开关是一种基于智能化技术的电力控制设备,…

Mysql(3:Mysql事务)

目录 说明 前言 事务 ACID: 并发事务的问题: 解决方案: uddo log 和redo log的区别: 先了解数据库的页概念: redo log: undo log: 区别: mvcc: 说明 本文适合刚刚学习Java的初学者,也可以当成阿岩~的随手笔记.接下来就请道友们和我一起来学习吧! 如果本文有写的不对…

SSM环卫人员管理平台—计算机毕业设计源码36412

目 录 摘要 1 绪论 1.1背景及意义 1.2国内外研究概况 1.3研究内容 1.4 ssm框架介绍 1.5论文结构与章节安排 2 环卫人员管理平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1 功能性…

如何使用 Bittly 进行串口指令调试 - 复杂参数构建与解析

在使用串口进行数据收发时, 如果数据内容比较复杂, 例如包含了时间戳或者校验码等需要计算的数据或者需要处理不同的数据类型以及大小端等,在这种情况下常见的串口调试助手可能处理起来比较麻烦, 但使用 Bittly 的话, …

大功率蓝外光激光模组能使用多长时间?

在高科技迅猛发展的今天,大功率蓝外光激光模组作为精密光学技术的重要成果,广泛应用于科研探索、工业加工及安防监控等多个领域。其强大的光束能量与独特的波长特性,为各行各业带来了前所未有的效率提升与创新可能。然而,对于这一…

量化金融中的 AI 革命:LLMs 如何重新定义交易策略

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 量化金融领域正在经历由大型语言模型(LLMs)引起的人工智能革命,这些模型正在改变交易策略的开发和实施方式,提高市场分析的精确度,增强情绪分析和交易信号的有效性,优化算法交易策略,并强化风…

助农小程序|助农扶贫系统|基于java的助农扶贫系统小程序设计与实现(源码+数据库+文档)

助农扶贫系统小程序 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目:小程序、SpringBoot、SSM、Vue、…