这里完全是照搬帮助文档中的代码生成的程序

上预览图

工程文件代码

#-------------------------------------------------
#
# 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实践的更多相关文章

  1. Qt Charts实践

    Qt Charts的横空出世标志着QWT,QCustomPlot .....时代的终结,让我们开始使用QtCharts吧 在Qt 5.7.0中已经集成了Qt Charts模块,需要在安装Qt的时候把C ...

  2. Qt BarChart实践

    按照帮助文档编写 运行截图 上代码 #include "widget.h" #include "ui_widget.h" Widget::Widget(QWid ...

  3. 【Qt入门实践】Qt之哲学家问题(linux 多线程)

    转载请注明出处:http://blog.csdn.net/feng1790291543 linux多线程实现哲学家问题,依据哲学家吃饭.拿筷子.放下筷子...... watermark/2/text/ ...

  4. Qt之qt4.7 和qt 4.8.4 交叉实践

    开发机环境搭建: 测试环境:CentOs7.1  Ubuntu 12.0.4 操作流程: 一.编译Qt4.7.0 1)CentOS上实践 1.tar xzvf qt-everywhere-openso ...

  5. Qt Style Sheet实践(一):按钮及关联菜单

    导读 正如web前端开发中CSS(Cascade Style Sheet)的作用一样,Qt开发中也可以使用修改版的QSS将逻辑业务和用户界面进行隔离.这样,美工设计人员和逻辑实现者可以各司其职而不受干 ...

  6. Qt Style Sheet实践(一):按钮及关联菜单(24K纯开源,一共四篇)

    导读 正如web前端开发中CSS(Cascade Style Sheet)的作用一样,Qt开发中也可以使用修改版的QSS将逻辑业务和用户界面进行隔离.这样,美工设计人员和逻辑实现者可以各司其职而不受干 ...

  7. QT工程pro设置实践(with QtCreator)----非弄的像VS一样才顺手?

    源地址:http://my.oschina.net/jinzei/blog/100989?fromerr=DhQJzZQe 相信大家很多和我一样,用多了微软给的便利,用人家的就十分不习惯.于是就琢磨原 ...

  8. 程序综合设计实践 :QT实现计算器

    程序综合设计实践 :用QT实现简易计算器及贷款计算 1,项目概述 该项目目标是设计开发一个支持连续计算的包括括号( ),求余%四则运算+ - * /的计算器 Calculator 以及贷款计算功能 M ...

  9. Qt之课外实践——文件操作(简单清道夫)

    说明:这个小项目是关于文件操作的.主要的功能有:重复文件的查找(根据文件的大小),说白了,就是讲大小相同的文件在一起显示出来,供用户自由的选择删除.这个360云盘里的文件去重还差的很远.还有空文件夹的 ...

随机推荐

  1. node学习笔记(连载)

    这段时间玩了小程序.浏览器插件.koa建站,本来想写几篇文章总结一下的.迫于工作上有新需求要跟进,所以先写写读书笔记吧.公司九点上班,不过弹性工作时间,大家基本上九点半之前到.而我作为渣渣,八点半就到 ...

  2. GYM 101550 G.Game Rank(模拟)

    The gaming company Sandstorm is developing an online two player game. You have been asked to impleme ...

  3. HDU 1175 连连看(超级经典的bfs之一)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1175 连连看 Time Limit: 20000/10000 MS (Java/Others)     ...

  4. lucene&solr学习——索引维护

    1.索引库的维护 索引库删除 (1) 全删除 第一步:先对文档进行分析 public IndexWriter getIndexWriter() throws Exception { // 第一步:创建 ...

  5. Java实现双向冒泡排序

    public class BubbleSort_Two { public static void bubbleSort_Two(int[] list){ //j在最外层定义 boolean needN ...

  6. Navicat Premium 连接Oracle 数据库之配置

    Navicat Premium连接Oracle 数据库之配置 1.Oracle数据库服务器下载 Oracle官方网站下载数据库最新版本:http://www.oracle.com/technetwor ...

  7. SQL里的concat() 以及group_concat() 函数的使用

    实例参考:https://blog.csdn.net/mary19920410/article/details/76545053 一 concat()函数 1.功能:将多个字符串连接成一个字符串. 2 ...

  8. view添加毛玻璃效果两种方法

    第一种方法: UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; UIVisualEffectV ...

  9. 有个数组 我现在需要把数组里面的值按照n个一组,赋予一个新的数组

    有个数组  我现在需要把数组里面的值按照七个一组,赋予一个新的数组

  10. P1330 封锁阳光大学 DFS+染色

    题目链接:https://www.luogu.org/problemnew/show/P1330 这个题有意思,如果能想到染色,就会很简单,但若想不到就很麻烦 要想把一条边封锁,就必须且只能占据这条边 ...