1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt Charts module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 or (at your option) any later version
20** approved by the KDE Free Qt Foundation. The licenses are as published by
21** the Free Software Foundation and appearing in the file LICENSE.GPL3
22** included in the packaging of this file. Please review the following
23** information to ensure the GNU General Public License requirements will
24** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25**
26** $QT_END_LICENSE$
27**
28****************************************************************************/
29
30#include "widget.h"
31#include "xyseriesiodevice.h"
32
33#include <QtMultimedia/QAudioDeviceInfo>
34#include <QtMultimedia/QAudioInput>
35
36#include <QtCharts/QChartView>
37#include <QtCharts/QLineSeries>
38#include <QtCharts/QChart>
39#include <QtCharts/QValueAxis>
40
41#include <QtWidgets/QVBoxLayout>
42
43QT_CHARTS_USE_NAMESPACE
44
45Widget::Widget(const QAudioDeviceInfo &deviceInfo, QWidget *parent) :
46 QWidget(parent),
47 m_chart(new QChart),
48 m_series(new QLineSeries)
49{
50 QChartView *chartView = new QChartView(m_chart);
51 chartView->setMinimumSize(minw: 800, minh: 600);
52 m_chart->addSeries(series: m_series);
53 QValueAxis *axisX = new QValueAxis;
54 axisX->setRange(min: 0, max: XYSeriesIODevice::sampleCount);
55 axisX->setLabelFormat("%g");
56 axisX->setTitleText("Samples");
57 QValueAxis *axisY = new QValueAxis;
58 axisY->setRange(min: -1, max: 1);
59 axisY->setTitleText("Audio level");
60 m_chart->addAxis(axis: axisX, alignment: Qt::AlignBottom);
61 m_series->attachAxis(axis: axisX);
62 m_chart->addAxis(axis: axisY, alignment: Qt::AlignLeft);
63 m_series->attachAxis(axis: axisY);
64 m_chart->legend()->hide();
65 m_chart->setTitle("Data from the microphone (" + deviceInfo.deviceName() + ')');
66
67 QVBoxLayout *mainLayout = new QVBoxLayout(this);
68 mainLayout->addWidget(chartView);
69
70 QAudioFormat formatAudio;
71 formatAudio.setSampleRate(8000);
72 formatAudio.setChannelCount(1);
73 formatAudio.setSampleSize(8);
74 formatAudio.setCodec("audio/pcm");
75 formatAudio.setByteOrder(QAudioFormat::LittleEndian);
76 formatAudio.setSampleType(QAudioFormat::UnSignedInt);
77
78 m_audioInput = new QAudioInput(deviceInfo, formatAudio, this);
79
80 m_device = new XYSeriesIODevice(m_series, this);
81 m_device->open(mode: QIODevice::WriteOnly);
82
83 m_audioInput->start(device: m_device);
84}
85
86Widget::~Widget()
87{
88 m_audioInput->stop();
89 m_device->close();
90}
91

source code of qtcharts/examples/charts/audio/widget.cpp