widget.cpp
80 lines
| 2.5 KiB
| text/x-c
|
CppLexer
Miikka Heikkinen
|
r2435 | /**************************************************************************** | ||
** | ||||
Titta Heikkala
|
r2776 | ** Copyright (C) 2015 The Qt Company Ltd | ||
Miikka Heikkinen
|
r2435 | ** All rights reserved. | ||
Titta Heikkala
|
r2776 | ** For any questions to The Qt Company, please use contact form at http://qt.io | ||
Miikka Heikkinen
|
r2435 | ** | ||
Titta Heikkala
|
r2740 | ** This file is part of the Qt Charts module. | ||
Miikka Heikkinen
|
r2435 | ** | ||
Titta Heikkala
|
r2740 | ** Licensees holding valid commercial license for Qt may use this file in | ||
** accordance with the Qt License Agreement provided with the Software | ||||
** or, alternatively, in accordance with the terms contained in a written | ||||
Titta Heikkala
|
r2776 | ** agreement between you and The Qt Company. | ||
Miikka Heikkinen
|
r2435 | ** | ||
** If you have questions regarding the use of this file, please use | ||||
Titta Heikkala
|
r2740 | ** contact form at http://qt.io | ||
Miikka Heikkinen
|
r2435 | ** | ||
****************************************************************************/ | ||||
Marek Rosa
|
r2155 | #include "widget.h" | ||
Titta Heikkala
|
r2714 | #include <QtMultimedia/QAudioDeviceInfo> | ||
#include <QtMultimedia/QAudioInput> | ||||
#include <QtCharts/QChartView> | ||||
#include <QtCharts/QLineSeries> | ||||
#include <QtCharts/QChart> | ||||
#include <QtWidgets/QVBoxLayout> | ||||
#include <QtCharts/QValueAxis> | ||||
Marek Rosa
|
r2155 | #include "xyseriesiodevice.h" | ||
Titta Heikkala
|
r2712 | QT_CHARTS_USE_NAMESPACE | ||
Marek Rosa
|
r2155 | |||
Widget::Widget(QWidget *parent) | ||||
: QWidget(parent), | ||||
m_device(0), | ||||
m_chart(0), | ||||
m_series(0), | ||||
m_audioInput(0) | ||||
{ | ||||
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; | ||||
Marek Rosa
|
r2214 | axisX->setRange(0, 2000); | ||
axisX->setLabelFormat("%g"); | ||||
Michal Klocek
|
r2273 | axisX->setTitleText("Samples"); | ||
Marek Rosa
|
r2155 | QValueAxis *axisY = new QValueAxis; | ||
Marek Rosa
|
r2214 | axisY->setRange(-1, 1); | ||
Michal Klocek
|
r2273 | axisY->setTitleText("Audio level"); | ||
m_chart->setAxisX(axisX, m_series); | ||||
Marek Rosa
|
r2155 | m_chart->setAxisY(axisY, m_series); | ||
Marek Rosa
|
r2159 | m_chart->legend()->hide(); | ||
Marek Rosa
|
r2214 | m_chart->setTitle("Data from the microphone"); | ||
Marek Rosa
|
r2155 | |||
QVBoxLayout *mainLayout = new QVBoxLayout; | ||||
mainLayout->addWidget(chartView); | ||||
setLayout(mainLayout); | ||||
QAudioFormat formatAudio; | ||||
Tero Ahola
|
r2239 | formatAudio.setSampleRate(8000); | ||
formatAudio.setChannelCount(1); | ||||
Marek Rosa
|
r2155 | 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(); | ||||
} | ||||