画多个动态波形需要使用哪个控件?

踏岸寻柳 2020-02-01 11:13:08
写了个多通道(8个通道)录音机,想实时显示各个通道采集音频的波形。

试了试 TPerformanceGraph 组件:

for(int j = 0; j < channels; j++)
{
value = pData[0];
value += 16000;
m_ppPerfGraph[j]->DataPoint(clRed, value);
m_ppPerfGraph[j]->Update();
}


但是发现性能太差,UI界面基本卡死;或者是我不会用?
...全文
396 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2020-02-02
  • 打赏
  • 举报
回复
Image的Canvas自绘如何?
ooolinux 2020-02-02
  • 打赏
  • 举报
回复
引用 3 楼 踏岸寻柳 的回复:
[quote=引用 1 楼 ooolinux 的回复:] Image的Canvas自绘如何?
具体应该怎么做呢?

	for(int x = 0; x < Image1->Width; x++)
	{
		for(int y = 1; y <= 8; y++)
		{
			Image1->Canvas->Pixels[x][y * 10] = clBlue;
		}
	}
这样倒是可以以Pixel方式对样点进行显示,但是能够显示的内容毕竟还是太少,受限于Image的宽度[/quote] 如果动态移动画布的话,比如把右边80%区域左移,右边新的20%区域上接着画。
踏岸寻柳 2020-02-02
  • 打赏
  • 举报
回复
引用 2 楼 早打大打打核战争 的回复:
试试这个:http://www.delphiarea.com/products/delphi-packages/waveaudio/
你这个是一系列组件,主要是Wave音频的录制及播放功能 我这边已经解决了录制问题,现在需要通过UI来呈现录制的数据,还有其他可用的组件吗
踏岸寻柳 2020-02-02
  • 打赏
  • 举报
回复
引用 1 楼 ooolinux 的回复:
Image的Canvas自绘如何?
具体应该怎么做呢?

	for(int x = 0; x < Image1->Width; x++)
	{
		for(int y = 1; y <= 8; y++)
		{
			Image1->Canvas->Pixels[x][y * 10] = clBlue;
		}
	}
这样倒是可以以Pixel方式对样点进行显示,但是能够显示的内容毕竟还是太少,受限于Image的宽度
在项目程序设计的过程中,由于要求比较苛刻,这个波形控件的功能有点不能满足我的需求,于是在一个风雷交加的晚上,我暗暗下定决心,面对这座大山进行代码的修改。到目前为止,我对这个控件做出来了多处修改,具体修改内容如下: (1)修改了“默认坐标范围”的功能,它现在表示在接收数据的时候,横坐标范围不变,波形图像一直向左平移,且波形的结尾处一直处于波形控件的右边。 (2)简化了放大波形的过程,添加了波形缩小的功能。 (3) 添加了波形拖动的功能,可以很方便的查看历史记录。 (4)添加显示曲线坐标的功能,可以很方便的显示出曲线上某一点的实际坐标,matlab风格的。 (5)添加了截图的功能。 (6) 添加了清屏的按钮。 (7)支持文件内容的读取与显示(由于显示风格比较复杂,没有把波形的储存集成到控件本身,需要用外部的程序进行实现,这段代码在下边会详细介绍,代码很简单,容易实现)。 (8)支持纯链表显示(就是原控件的工作模式),纯文件内容显示,链表和文件混合显示,方便对历史波形进行查看。 (9)在显示波形之前,添加了设置波形显示模式的内容,可以方便不同情况下的显示状况(这一点在下边详细介绍,在这里不做解释)。 (10)优化了部分驱动算法,删除了部分没用的代码(可能是楼主调试的时候忘了删除无用代码吧)。
基于C#的波形显示控件的实现源码 计算机技术的飞速发展使得其在自动化系统中的应用日益增强。大量监控、图像数据显示软件活跃在自动化工业及自动化教学领域。同时,软件系统的日益复杂化使得模块化开发变得尤为重要。本课题所设计的基于C#的波形显示控件就可在微软.NET平台下进行代码功能重用,达到模块化开发和快速开发的目的,使得程序员能够集中精力设计软件的具体业务流程,而不必担心波形呈现的问题。 本文先介绍了.NET平台下用户控件开发的基本方法,以及用C#描述的GDI+图形开发技术,然后提出一种基于C#的波形显示控件的设计思路,并对波形坐标值转换、坐标标尺、工具栏、局部放大等具体的设计细节进行详细解析。 本课题设计的波形显示控件实现了同时显示多条数据曲线、局部放大查看、波形显示自动调整最佳坐标范围、动态显示波形等功能。创新之处在于设计了一种方法,使得波形显示控件的坐标轴的起点值和终点值能够以浮点数显示,并自动根据当前波形显示控件的大小,描绘出符合用户视觉的坐标标尺。 波形显示控件实现的功能 (1) 多条波形数据的显示。 该波形显示控件能够同时显示多条波形数据,用户能够控制每条波形数据的显示颜色、线宽、线帽、以及线转折的样式。并且提供了三种波形数据显示的方式:连续数据线、离散点、条形图。 (2) 友好坐标标尺的显示。 该波形显示控件能够根据当前显示数据的坐标范围,友好地显示坐标标尺。例如X轴坐标起始值为34.2,结束坐标值为100.7,则控件不是简单得将坐标10等分并显示并不友好的坐标值,而是通过计算当前波形显示控件的大小,显示40、50……这样的友好的坐标值,并判断是否需要继续在40到50的坐标值之间显示更小分度的坐标值。 (3) 波形显示区域网格的显示。 该波形显示控件可以显示同坐标标尺的坐标线相对应的网格,使得用户能够更直观地观察波形数据。 (4) 波形的局部放大。 该波形显示控件提供了波形局部放大的功能。并根据实际使用和测试,控制了波形放大的精度,以免产生数据溢出的问题。 (5) 坐标自动调整。 该波形显示控件能够根据当前要显示的波形数据的值,自动选择最佳的坐标范围,来直观地在控件波形显示区域显示完整的波形曲线。 (6) 外观颜色方案的修改。 该波形显示控件能够修改外观样式,诸如背景色、网格颜色、坐标线颜色、坐标值颜色等都可以进行调整,以使控件外观能够符合软件整体风格。 (7) 其他细节。 该波形显示控件还设计了一个工具栏,可以方面地使用网格显示、局部放大、坐标自动调整、恢复默认坐标功能。另外还设计右键菜单,能够显示当前鼠标位置的具体坐标值,以及工具栏按钮的快捷按钮。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧