From 0241b0e39c4ac259c2336d074f1fa488d0e0ebcc Mon Sep 17 00:00:00 2001 From: Venugopal Shivashankar Date: Wed, 12 Dec 2012 16:35:15 +0100 Subject: Doc: Updated the \example and \snippet paths Also: - Grouped the example docs under one group. i.e. multimedia-examples - Moved the \group page here from the qtdoc repo - Moved the snippets directory under doc from doc/src Change-Id: I28fb81cf910e58101cd601fb4c440b59b0b0366d Reviewed-by: Jerome Pasion --- .../doc/snippets/multimedia-snippets/audio.cpp | 251 +++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 src/multimedia/doc/snippets/multimedia-snippets/audio.cpp (limited to 'src/multimedia/doc/snippets/multimedia-snippets/audio.cpp') diff --git a/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp b/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp new file mode 100644 index 000000000..a39f1c7f4 --- /dev/null +++ b/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp @@ -0,0 +1,251 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +/* Audio related snippets */ +#include +#include +#include + +#include "qaudiodeviceinfo.h" +#include "qaudioinput.h" +#include "qaudiooutput.h" +#include "qaudioprobe.h" +#include "qaudiodecoder.h" + +class AudioInputExample : public QObject { + Q_OBJECT +public: + void setup(); + + +public Q_SLOTS: + void stopRecording(); + void stateChanged(QAudio::State newState); + +private: + //! [Audio input class members] + QFile destinationFile; // class member. + QAudioInput* audio; // class member. + //! [Audio input class members] +}; + + +void AudioInputExample::setup() +//! [Audio input setup] +{ + destinationFile.setFileName("/tmp/test.raw"); + destinationFile.open( QIODevice::WriteOnly | QIODevice::Truncate ); + + QAudioFormat format; + // set up the format you want, eg. + format.setSampleRate(8000); + format.setChannelCount(1); + format.setSampleSize(8); + format.setCodec("audio/pcm"); + format.setByteOrder(QAudioFormat::LittleEndian); + format.setSampleType(QAudioFormat::UnSignedInt); + + QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice(); + if (!info.isFormatSupported(format)) { + qWarning()<<"default format not supported try to use nearest"; + format = info.nearestFormat(format); + } + + audio = new QAudioInput(format, this); + connect(audio, SIGNAL(stateChanged(QAudio::State)), this, SLOT(stateChanged(QAudio::State))); + + QTimer::singleShot(3000, this, SLOT(stopRecording())); + audio->start(&destinationFile); + // Records audio for 3000ms +} +//! [Audio input setup] + +//! [Audio input stop recording] +void AudioInputExample::stopRecording() +{ + audio->stop(); + destinationFile.close(); + delete audio; +} +//! [Audio input stop recording] + +//! [Audio input state changed] +void AudioInputExample::stateChanged(QAudio::State newState) +{ + switch (newState) { + case QAudio::StoppedState: + if (audio->error() != QAudio::NoError) { + // Error handling + } else { + // Finished recording + } + break; + + case QAudio::ActiveState: + // Started recording - read from IO device + break; + + default: + // ... other cases as appropriate + break; + } +} +//! [Audio input state changed] + + +class AudioOutputExample : public QObject { + Q_OBJECT +public: + void setup(); + +public Q_SLOTS: + void stateChanged(QAudio::State newState); + +private: + //! [Audio output class members] + QFile sourceFile; // class member. + QAudioOutput* audio; // class member. + //! [Audio output class members] +}; + + +void AudioOutputExample::setup() +//! [Audio output setup] +{ + sourceFile.setFileName("/tmp/test.raw"); + sourceFile.open(QIODevice::ReadOnly); + + QAudioFormat format; + // Set up the format, eg. + format.setSampleRate(8000); + format.setChannelCount(1); + format.setSampleSize(8); + format.setCodec("audio/pcm"); + format.setByteOrder(QAudioFormat::LittleEndian); + format.setSampleType(QAudioFormat::UnSignedInt); + + QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice()); + if (!info.isFormatSupported(format)) { + qWarning() << "raw audio format not supported by backend, cannot play audio."; + return; + } + + audio = new QAudioOutput(format, this); + connect(audio, SIGNAL(stateChanged(QAudio::State)), this, SLOT(stateChanged(QAudio::State))); + audio->start(&sourceFile); +} +//! [Audio output setup] + +//! [Audio output state changed] +void AudioOutputExample::stateChanged(QAudio::State newState) +{ + switch (newState) { + case QAudio::IdleState: + // Finished playing (no more data) + audio->stop(); + sourceFile.close(); + delete audio; + break; + + case QAudio::StoppedState: + // Stopped for other reasons + if (audio->error() != QAudio::NoError) { + // Error handling + } + break; + + default: + // ... other cases as appropriate + break; + } +} +//! [Audio output state changed] + +void AudioDeviceInfo() +{ + //! [Setting audio format] + QAudioFormat format; + format.setSampleRate(44100); + // ... other format parameters + format.setSampleType(QAudioFormat::SignedInt); + + QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice()); + + if (!info.isFormatSupported(format)) + format = info.nearestFormat(format); + //! [Setting audio format] + + //! [Dumping audio formats] + foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) + qDebug() << "Device name: " << deviceInfo.deviceName(); + //! [Dumping audio formats] +} + +class AudioDecodingExample : public QObject { + Q_OBJECT +public: + void decode(); + +public Q_SLOTS: + void stateChanged(QAudio::State newState); + void readBuffer(); +}; + +void AudioDecodingExample::decode() +{ + //! [Local audio decoding] + QAudioFormat desiredFormat; + desiredFormat.setChannelCount(2); + desiredFormat.setCodec("audio/x-raw"); + desiredFormat.setSampleType(QAudioFormat::UnSignedInt); + desiredFormat.setSampleRate(48000); + desiredFormat.setSampleSize(16); + + QAudioDecoder *decoder = new QAudioDecoder(this); + decoder->setAudioFormat(desiredFormat); + decoder->setSourceFilename("level1.mp3"); + + connect(decoder, SIGNAL(bufferReady()), this, SLOT(readBuffer())); + decoder->start(); + + // Now wait for bufferReady() signal and call decoder->read() + //! [Local audio decoding] +} -- cgit v1.2.3