Qt Charts_Audio实践
这里完全是照搬帮助文档中的代码生成的程序
上预览图
工程文件代码
#-------------------------------------------------
#
# Project created by QtCreator 2017-02-06T13:52:31
#
#------------------------------------------------- QT += core gui
QT += charts multimedia greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = qchart_Audio_Project
TEMPLATE = app DEFINES += QT_DEPRECATED_WARNINGS SOURCES += main.cpp\
widget.cpp \
xyseriesiodevice.cpp HEADERS += widget.h \
xyseriesiodevice.h FORMS += widget.ui target.path = $$[QT_INSTALL_EXAMPLES]/charts/audio
INSTALLS += target
widget.h文件代码
#ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QtCharts/QChartGlobal> namespace Ui {
class Widget;
} QT_CHARTS_BEGIN_NAMESPACE
class QLineSeries;
class QChart;
QT_CHARTS_END_NAMESPACE QT_CHARTS_USE_NAMESPACE class XYSeriesIODevice; class QAudioInput; class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = 0);
~Widget(); private:
Ui::Widget *ui; XYSeriesIODevice *m_device;
QChart *m_chart;
QLineSeries *m_series;
QAudioInput *m_audioInput;
}; #endif // WIDGET_H
widget.cpp代码
#include "widget.h"
#include <QtMultimedia/QAudioDeviceInfo>
#include <QtMultimedia/QAudioInput>
#include <QtMultimedia/QAudioFormat>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QChart>
#include <QtWidgets/QVBoxLayout>
#include <QtCharts/QValueAxis>
#include "xyseriesiodevice.h"
#include "ui_widget.h" QT_CHARTS_USE_NAMESPACE Widget::Widget(QWidget *parent) :
QWidget(parent),m_device(0),
m_chart(0),
m_series(0),
m_audioInput(0),
ui(new Ui::Widget)
{
ui->setupUi(this); m_chart = new QChart;
QChartView *chartView = new QChartView(m_chart);
chartView->setMinimumSize(800, 600);
m_series = new QLineSeries;
m_chart->addSeries(m_series);
QValueAxis *axisX = new QValueAxis;
axisX->setRange(0, 2000);
axisX->setLabelFormat("%g");
axisX->setTitleText("Samples");
QValueAxis *axisY = new QValueAxis;
axisY->setRange(-1, 1);
axisY->setTitleText("Audio level");
m_chart->setAxisX(axisX, m_series);
m_chart->setAxisY(axisY, m_series);
m_chart->legend()->hide();
m_chart->setTitle("Data from the microphone"); QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(chartView);
setLayout(mainLayout); QAudioFormat formatAudio;
formatAudio.setSampleRate(8000);
formatAudio.setChannelCount(1);
formatAudio.setSampleSize(8);
formatAudio.setCodec("audio/pcm");
formatAudio.setByteOrder(QAudioFormat::LittleEndian);
formatAudio.setSampleType(QAudioFormat::UnSignedInt); QAudioDeviceInfo inputDevices = QAudioDeviceInfo::defaultInputDevice();
m_audioInput = new QAudioInput(inputDevices,formatAudio, this); m_device = new XYSeriesIODevice(m_series, this);
m_device->open(QIODevice::WriteOnly); m_audioInput->start(m_device);
} Widget::~Widget()
{
m_audioInput->stop();
m_device->close();
delete ui;
}
xyseriesiodevice.h代码
#ifndef XYSERIESIODEVICE_H
#define XYSERIESIODEVICE_H #include <QtCore/QIODevice>
#include <QtCharts/QChartGlobal> QT_CHARTS_BEGIN_NAMESPACE
class QXYSeries;
QT_CHARTS_END_NAMESPACE QT_CHARTS_USE_NAMESPACE class XYSeriesIODevice : public QIODevice
{
Q_OBJECT
public:
explicit XYSeriesIODevice(QXYSeries * series, QObject *parent = 0); protected:
qint64 readData(char * data, qint64 maxSize);
qint64 writeData(const char * data, qint64 maxSize); private:
QXYSeries *m_series;
}; #endif // XYSERIESIODEVICE_H
xyseriesiodevice.cpp代码
#include "xyseriesiodevice.h"
#include <QtCharts/QXYSeries> XYSeriesIODevice::XYSeriesIODevice(QXYSeries * series, QObject *parent) :
QIODevice(parent),
m_series(series)
{
} qint64 XYSeriesIODevice::readData(char * data, qint64 maxSize)
{
Q_UNUSED(data)
Q_UNUSED(maxSize)
return -1;
} qint64 XYSeriesIODevice::writeData(const char * data, qint64 maxSize)
{
qint64 range = 2000;
QVector<QPointF> oldPoints = m_series->pointsVector();
QVector<QPointF> points;
int resolution = 4; if (oldPoints.count() < range) {
points = m_series->pointsVector();
} else {
for (int i = maxSize/resolution; i < oldPoints.count(); i++)
points.append(QPointF(i - maxSize/resolution, oldPoints.at(i).y()));
} qint64 size = points.count();
for (int k = 0; k < maxSize/resolution; k++)
points.append(QPointF(k + size, ((quint8)data[resolution * k] - 128)/128.0)); m_series->replace(points);
return maxSize;
}
Qt Charts_Audio实践的更多相关文章
- Qt Charts实践
Qt Charts的横空出世标志着QWT,QCustomPlot .....时代的终结,让我们开始使用QtCharts吧 在Qt 5.7.0中已经集成了Qt Charts模块,需要在安装Qt的时候把C ...
- Qt BarChart实践
按照帮助文档编写 运行截图 上代码 #include "widget.h" #include "ui_widget.h" Widget::Widget(QWid ...
- 【Qt入门实践】Qt之哲学家问题(linux 多线程)
转载请注明出处:http://blog.csdn.net/feng1790291543 linux多线程实现哲学家问题,依据哲学家吃饭.拿筷子.放下筷子...... watermark/2/text/ ...
- Qt之qt4.7 和qt 4.8.4 交叉实践
开发机环境搭建: 测试环境:CentOs7.1 Ubuntu 12.0.4 操作流程: 一.编译Qt4.7.0 1)CentOS上实践 1.tar xzvf qt-everywhere-openso ...
- Qt Style Sheet实践(一):按钮及关联菜单
导读 正如web前端开发中CSS(Cascade Style Sheet)的作用一样,Qt开发中也可以使用修改版的QSS将逻辑业务和用户界面进行隔离.这样,美工设计人员和逻辑实现者可以各司其职而不受干 ...
- Qt Style Sheet实践(一):按钮及关联菜单(24K纯开源,一共四篇)
导读 正如web前端开发中CSS(Cascade Style Sheet)的作用一样,Qt开发中也可以使用修改版的QSS将逻辑业务和用户界面进行隔离.这样,美工设计人员和逻辑实现者可以各司其职而不受干 ...
- QT工程pro设置实践(with QtCreator)----非弄的像VS一样才顺手?
源地址:http://my.oschina.net/jinzei/blog/100989?fromerr=DhQJzZQe 相信大家很多和我一样,用多了微软给的便利,用人家的就十分不习惯.于是就琢磨原 ...
- 程序综合设计实践 :QT实现计算器
程序综合设计实践 :用QT实现简易计算器及贷款计算 1,项目概述 该项目目标是设计开发一个支持连续计算的包括括号( ),求余%四则运算+ - * /的计算器 Calculator 以及贷款计算功能 M ...
- Qt之课外实践——文件操作(简单清道夫)
说明:这个小项目是关于文件操作的.主要的功能有:重复文件的查找(根据文件的大小),说白了,就是讲大小相同的文件在一起显示出来,供用户自由的选择删除.这个360云盘里的文件去重还差的很远.还有空文件夹的 ...
随机推荐
- 打开eclipse出现an error has occurred.see the loh file
解决方案: 1,打开eclipse安装目录下的eclipse.ini文件:2,打开的文本文件最后添加一行--add-modules=ALL-SYSTEM3,保存重新打开Eclipse. 测试过已经ok
- 深入浅出C指针
http://bbs.9ria.com/blog-164422-18039.html 初学者在学习C语言时,通常会遇到两个瓶颈,一个是“递归”,一个是“指针”.大学老师在讲述这两个知识点时通常都是照本 ...
- scala容器使用
花了两个小时左右,学习了一下scala语言, 由于scala运行在jvm之上, 可以使用java容器也可以使用scala自带的容器. import java.util import java.util ...
- iOS程序的启动原理
一.在一些老的项目中,有很多不是通过代码添加窗口和跟控制器.是通过设置MainInterface(设置最主要的xib),在xib中通过图形化的操作设置应用程序的代理->设置窗口->设置根控 ...
- python-time、datetimme模块
time模块 1.time.time():返回当前时间的时间戳. 打印时间戳: >>> import time >>> time.time() 1530329387 ...
- Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制
转载请标明出处: http://blog.csdn.net/forezp/article/details/78616779 本文出自方志朋的博客 简介 采用openresty 开发出的api网关有很多 ...
- SpringBoot非官方教程 | 第六篇:springboot整合mybatis
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-mybatis/ 本文出自方志朋的博客 本文主要 ...
- c#实现的HTTP服务端
这次在整理一个服务组件的时候,需要涉及到HTTP的请求,HTTP是应用层,建立在TCP之上的.因此,可以用TCP服务端接收HTTP请求,只需要解析请求内容.HTPP有固定的格式,大家可以直接搜索.网上 ...
- Angularjs基础(九)
AngularJS 应用应用程序讲解 实例: <html ng-app="myNoteApp"> <head> <meat charset=" ...
- eclipse 突然debug模式不能正常运行了
eclipse 突然debug模式不能正常运行了,但非debug模式却能正常运行.debug模式不能正常启动的现象描述如下: 点击eclipse debug按钮,console窗口显示tomca ...