summaryrefslogtreecommitdiffstats
path: root/src/multimedia/doc/snippets/multimedia-snippets/audiorecorder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/doc/snippets/multimedia-snippets/audiorecorder.cpp')
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/audiorecorder.cpp213
1 files changed, 213 insertions, 0 deletions
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/audiorecorder.cpp b/src/multimedia/doc/snippets/multimedia-snippets/audiorecorder.cpp
new file mode 100644
index 000000000..e0f136910
--- /dev/null
+++ b/src/multimedia/doc/snippets/multimedia-snippets/audiorecorder.cpp
@@ -0,0 +1,213 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtWidgets>
+
+#include <qaudiorecorder.h>
+#include <qmediaservice.h>
+
+#include <QtMultimedia/qaudioformat.h>
+
+#include "audiorecorder.h"
+
+AudioRecorder::AudioRecorder()
+{
+//! [create-objs-1]
+ capture = new QAudioRecorder();
+//! [create-objs-1]
+
+ // set a default file
+ capture->setOutputLocation(QUrl("test.raw"));
+
+ QWidget *window = new QWidget;
+ QGridLayout* layout = new QGridLayout;
+
+ QLabel* deviceLabel = new QLabel;
+ deviceLabel->setText("Devices");
+ deviceBox = new QComboBox(this);
+ deviceBox->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+
+ QLabel* codecLabel = new QLabel;
+ codecLabel->setText("Codecs");
+ codecsBox = new QComboBox(this);
+ codecsBox->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+
+ QLabel* qualityLabel = new QLabel;
+ qualityLabel->setText("Quality");
+ qualityBox = new QComboBox(this);
+ qualityBox->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+
+//! [device-list]
+ for(int i = 0; i < audiosource->deviceCount(); i++)
+ deviceBox->addItem(audiosource->name(i));
+//! [device-list]
+
+//! [codec-list]
+ QStringList codecs = capture->supportedAudioCodecs();
+ for(int i = 0; i < codecs.count(); i++)
+ codecsBox->addItem(codecs.at(i));
+//! [codec-list]
+
+ qualityBox->addItem("Low");
+ qualityBox->addItem("Medium");
+ qualityBox->addItem("High");
+
+ connect(capture, SIGNAL(durationChanged(qint64)), this, SLOT(updateProgress(qint64)));
+ connect(capture, SIGNAL(stateChanged(QMediaRecorder::State)), this, SLOT(stateChanged(QMediaRecorder::State)));
+
+ layout->addWidget(deviceLabel,0,0,Qt::AlignHCenter);
+ connect(deviceBox,SIGNAL(activated(int)),SLOT(deviceChanged(int)));
+ layout->addWidget(deviceBox,0,1,1,3,Qt::AlignLeft);
+
+ layout->addWidget(codecLabel,1,0,Qt::AlignHCenter);
+ connect(codecsBox,SIGNAL(activated(int)),SLOT(codecChanged(int)));
+ layout->addWidget(codecsBox,1,1,Qt::AlignLeft);
+
+ layout->addWidget(qualityLabel,1,2,Qt::AlignHCenter);
+ connect(qualityBox,SIGNAL(activated(int)),SLOT(qualityChanged(int)));
+ layout->addWidget(qualityBox,1,3,Qt::AlignLeft);
+
+ fileButton = new QPushButton(this);
+ fileButton->setText(tr("Output File"));
+ connect(fileButton,SIGNAL(clicked()),SLOT(selectOutputFile()));
+ layout->addWidget(fileButton,3,0,Qt::AlignHCenter);
+
+ button = new QPushButton(this);
+ button->setText(tr("Record"));
+ connect(button,SIGNAL(clicked()),SLOT(toggleRecord()));
+ layout->addWidget(button,3,3,Qt::AlignHCenter);
+
+ recTime = new QLabel;
+ recTime->setText("0 sec");
+ layout->addWidget(recTime,4,0,Qt::AlignHCenter);
+
+ window->setLayout(layout);
+ setCentralWidget(window);
+ window->show();
+
+ active = false;
+}
+
+AudioRecorder::~AudioRecorder()
+{
+ delete capture;
+ delete audiosource;
+}
+
+void AudioRecorder::updateProgress(qint64 pos)
+{
+ currentTime = pos;
+ if(currentTime == 0) currentTime = 1;
+ QString text = QString("%1 secs").arg(currentTime/1000);
+ recTime->setText(text);
+}
+
+void AudioRecorder::stateChanged(QMediaRecorder::State state)
+{
+ qWarning()<<"stateChanged() "<<state;
+}
+
+void AudioRecorder::deviceChanged(int idx)
+{
+//! [get-device]
+ for(int i = 0; i < audiosource->deviceCount(); i++) {
+ if(deviceBox->itemText(idx).compare(audiosource->name(i)) == 0)
+ audiosource->setSelectedDevice(i);
+ }
+//! [get-device]
+}
+
+void AudioRecorder::codecChanged(int idx)
+{
+ Q_UNUSED(idx);
+ //capture->setAudioCodec(codecsBox->itemText(idx));
+}
+
+void AudioRecorder::qualityChanged(int idx)
+{
+ Q_UNUSED(idx);
+ /*
+ if(capture->audioCodec().compare("audio/pcm") == 0) {
+ if(qualityBox->itemText(idx).compare("Low") == 0) {
+ // 8000Hz mono is 8kbps
+ capture->setAudioBitrate(8);
+ } else if(qualityBox->itemText(idx).compare("Medium") == 0) {
+ // 22050Hz mono is 44.1kbps
+ capture->setAudioBitrate(44);
+ } else if(qualityBox->itemText(idx).compare("High") == 0) {
+ // 44100Hz mono is 88.2kbps
+ capture->setAudioBitrate(88);
+ }
+ }
+ */
+}
+
+//! [toggle-record]
+void AudioRecorder::toggleRecord()
+{
+ if(!active) {
+ recTime->setText("0 sec");
+ currentTime = 0;
+ capture->record();
+
+ button->setText(tr("Stop"));
+ active = true;
+ } else {
+ capture->stop();
+ button->setText(tr("Record"));
+ active = false;
+ }
+}
+//! [toggle-record]
+
+void AudioRecorder::selectOutputFile()
+{
+ QStringList fileNames;
+
+ QFileDialog dialog(this);
+
+ dialog.setFileMode(QFileDialog::AnyFile);
+ if (dialog.exec())
+ fileNames = dialog.selectedFiles();
+
+ if(fileNames.size() > 0)
+ capture->setOutputLocation(QUrl(fileNames.first()));
+}