Qt4中学习使用QtCharts绘图二:声波绘制
1、实例编写环境
操作系统:Windows 10 企业版
开发工具:Visual Studio 2010 旗舰版
开发环境:Qt4.8.6,QtCharts
编程语言:C++
2、实例涉及的内容
本实例主要是通过获取电脑的自带音频输入设备获取声音信息,然后通过使用QtCharts对声波进行绘制。涉及主要类有:QAudioDeviceInfo、QAudioInput、QAudioFormat、QIODevice。在使用Qt库进行开发时候,大家使用频率较高的多数为Qt的界面控件类,大家也就都比较熟悉了。
QAudioDeviceInfo:该类提供了查询音频设备及其功能的接口。
QAudioInput:该类提供用于从音频输入设备接收音频数据的接口。
QAudioFormat:该类除了包含音频流的编码信息之外,还包含了其它参数信息。这些额外的参数进一步指明了:频率、通道数量、样本大小、样本类型和字节顺序等信息。
QIODevice:该类是Qt中所有IO设备的基类接口(在笔者的实际工作中很少自己主动重写QIODevice类来实现某些功能,通常Qt中已经实现QFile、QTextStream、QDataStream等功能已经足够完善)。3、实例效果
4、关键代码片段
void QtChartAudio::Initialize() { //创建并设置绘图要素// m_chart = ui.graphicsView->chart(); m_chart->setTheme(QChart::ChartThemeDark); m_series = new QLineSeries; m_chart->addSeries(m_series); m_axisX = new QValueAxis; m_axisX->setRange(0,DataSource::sampleCount); m_axisX->setLabelFormat("%g"); m_axisX->setTitleText(QString::fromLocal8Bit("采样率")); m_axisX->setLabelsColor(QColor(255,255,0)); m_axisY = new QValueAxis; m_axisY->setRange(-1,1); m_axisY->setTitleText(QString::fromLocal8Bit("音频水平")); m_axisY->setLabelsColor(QColor(255,255,0)); m_chart->addAxis(m_axisX,Qt::AlignBottom); m_series->attachAxis(m_axisX); m_chart->addAxis(m_axisY,Qt::AlignLeft); m_series->attachAxis(m_axisY); m_chart->legend()->hide(); m_chart->setTitleBrush(QBrush(QColor(0,255,255))); m_chart->setTitleFont(QFont(QString::fromLocal8Bit("宋体"),15)); m_chart->setTitle(QString::fromLocal8Bit("从麦克风采集数据绘制音频数据")); m_chart->setFont(QFont(QString::fromLocal8Bit("宋体"),19)); //设置音频格式// QAudioFormat formatAudio; formatAudio.setSampleRate(8000); formatAudio.setChannelCount(1); formatAudio.setSampleSize(8); formatAudio.setCodec("audio/pcm"); formatAudio.setByteOrder(QAudioFormat::LittleEndian); formatAudio.setSampleType(QAudioFormat::UnSignedInt); m_audioInput = new QAudioInput(QAudioDeviceInfo::defaultInputDevice(),formatAudio,this); //开始传输数据// m_dataSource = new DataSource(m_series,this); m_dataSource->open(QIODevice::WriteOnly); m_audioInput->start(m_dataSource); }
qint64 DataSource::writeData(const char *data, qint64 len) { //更新麦克风采集的音频数据// int resolution = 4; if (m_buffer.isEmpty()) { m_buffer.reserve(sampleCount); for (int i = 0; i < sampleCount; ++i) m_buffer.append(QPointF(i, 0)); } int start = 0; const int availableSamples = int(len) / resolution; if (availableSamples < sampleCount) { start = sampleCount - availableSamples; for (int s = 0; s < start; ++s) m_buffer[s].setY(m_buffer.at(s + availableSamples).y()); } for (int s = start; s < sampleCount; ++s, data += resolution) m_buffer[s].setY(qreal(uchar(*data) -128) / qreal(128)); m_series->replace(m_buffer); return (sampleCount - start) * resolution; }
5、实例源码获取
完整的实例代码,请在在笔者的下载中心搜索下载(查找本博客同名标题资源进行下载)。如有任何发现任何问题或者疑问,可以留言或者联系作者进行反馈哦!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
pyecharts在数据可视化中的应用详解
使用pyecharts进行数据可视化 安装 pip install pyecharts也可以在pycharm软件里进行下载pyecharts库包。 下载成功后进行查询版本号 importpyecharts print(pyecharts.__version__) pyecharts的中文官网 可以查看pyecharts的中文官网介绍http://pyecharts.org/#/zh-cn/intro。 一般的使用方法 add() 该方法主要用于添加图表的数据和设置各种配置项。 show_config() 用于打印输出图表的所有配置项 render() 该方法默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置,如 render(r"e:my_first_chart.html"),文件用浏览器打开。 注意* 默认的编码类型为 UTF-8,在 Python3 中是没什么问题的,Python3 对中文的支持好很多。但是在 Python2 中,编码的处理是个很头疼的问题,暂时没能找到完美的解决方法,目前只能通过文本编辑器自己进行二次编码,我用的是 ...
- 下一篇
从 GPU、TPU,到 Web 端、移动端,深度学习框架部署训练开始变简单
早些时候的统计显示,今年3月,深度学习框架集中爆发。5月,有人发布可以直接在 iphone11上训练神经网络的开源项目。日前,百度开源国内首个可直接运行在 Web 端的深度学习框架 Paddle.js。这些都使深度学习框架的部署和训练变得简单。 深度学习框架提供一系列的深度学习组件,开发者选择一套框架之后,可以自定义数据集、算法、参数等,通过训练得到模型参数。就像一套供自由拼装的积木,玩家可直接搭建模型,而不用先去做木工,造方块。 3月开源的华为全场景 AI 计算框架 MindSpore;旷视深度学习框架天元 MegEngine;清华大学发布基于元算子和动态编译的深度学习框架计图 Jittor,就提供了国产 AI 训练的“积木”。 深度学习框架训练模型通常要求设备具有强大的算力,因此过去多是在 GPU 或是 TPU 上训练,之后再压缩部署到各终端设备。上述的三个框架也不例外。一些较为常见的、可以部署在 Web 端的框架也都尚未支持端训练。比如东京大学机器智能实验室的 WenDNN,只支持任务的推断阶段,不能用在训练阶段。Keras.js 只支持 Keras 生成的模型,不支持模型训练,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8