Qt Charts_Audio实践
来源:互联网 发布:淘宝限时秒杀11元 编辑:程序博客网 时间:2024/05/21 04:44
这里完全是照搬帮助文档中的代码生成的程序
上预览图
工程文件代码
#-------------------------------------------------## Project created by QtCreator 2017-02-06T13:52:31##-------------------------------------------------QT += core guiQT += charts multimediagreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = qchart_Audio_ProjectTEMPLATE = appDEFINES += QT_DEPRECATED_WARNINGSSOURCES += main.cpp\ widget.cpp \ xyseriesiodevice.cppHEADERS += widget.h \ xyseriesiodevice.hFORMS += widget.uitarget.path = $$[QT_INSTALL_EXAMPLES]/charts/audioINSTALLS += target
widget.h文件代码
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QtCharts/QChartGlobal>namespace Ui {class Widget;}QT_CHARTS_BEGIN_NAMESPACEclass QLineSeries;class QChart;QT_CHARTS_END_NAMESPACEQT_CHARTS_USE_NAMESPACEclass XYSeriesIODevice;class QAudioInput;class Widget : public QWidget{ Q_OBJECTpublic: 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_NAMESPACEWidget::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_NAMESPACEclass QXYSeries;QT_CHARTS_END_NAMESPACEQT_CHARTS_USE_NAMESPACEclass XYSeriesIODevice : public QIODevice{ Q_OBJECTpublic: 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;}
1 0
- Qt Charts_Audio实践
- QT实践
- Qt实践之2048:
- Qt Charts实践
- Qt BarChart实践
- Qt Creator:Webkit实践
- QT 操作记录,待实践
- 【Qt入门实践】布局器
- Qt之qInstallMessageHandler(实践)
- 工程实践QT部分之一(准备工作)
- QT 画图实践(1)--坐标变换
- 【Qt入门实践】数据库xml操作
- 【Qt入门实践】QObject使用总结
- 【Qt入门实践】常用代码规范
- QT工程pro设置实践(with QtCreator)
- Qt Creator 管理多工程的实践
- 【Qt入门实践】Qt之哲学家问题(linux 多线程)
- 【Qt入门实践】Linux下Qt开发环境的搭建
- 蓝桥-图3-深度优先遍历-地图最短路径
- Java开发必会的Linux命令
- 轻量级ORM框架——第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
- 【解决办法】Hadoop安装完后,启动时报Error: JAVA_HOME is not set and could not be found.
- Ubuntu OpenVPN设置方法图文教程
- Qt Charts_Audio实践
- CentOS 6.6下Redis安装配置记录
- JS和CSS实现响应式
- 点积的应用
- UVA 10462 Is There A Second Way Left?
- 蓝桥杯 操作格子 线段树
- Linux 测试网速
- 深入理解Java 8 Lambda-类库篇
- java的(PO,VO,TO,BO,DAO,POJO)解释