/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** 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 Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file.  Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: http://www.gnu.org/copyleft/fdl.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \example audiorecorder
    \title Audio Recorder Example
    \ingroup multimedia_examples
    \brief The Audio Recorder Example shows how to create a simple audio recorder.

    It demonstrates the discovery of the supported devices and codecs and the use
    of recording functions in the QAudioRecorder class.

    \image audiorecorder.png

    \include examples-run.qdocinc

    \section1 Displaying the Window and Audio Settings

    We display a window for the user to select the appropriate audio input,
    codec, container, and sample rate. Allow a setting of either quality or
    bitrate. Finally, the output file can be selected and recording can be
    started.

    The lists are setup using the \l{QAudioRecorder::audioInputs()}{audioInputs()},
    \l{QAudioRecorder::supportedAudioCodecs()}{supportedAudioCodecs()},
    \l{QAudioRecorder::supportedContainers()}{supportedContainers()},
    \l{QAudioRecorder::supportedContainers()}{supportedContainers()}, and
    \l{QAudioRecorder::supportedAudioSampleRates()}{supportedAudioSampleRates()}
    methods. The quality slider is setup from 0 (zero) to
    \l{QMultimedia::VeryHighQuality} with a default value of
    \l{QMultimedia::NormalQuality}, while the bitrates are hardcoded
    into the list.

    \section1 Recording Audio

    To record audio we simply create a QAudioRecorder object.

    \code
    audioRecorder = new QAudioRecorder(this);
    \endcode

    And setup the lists as described above. The text on the record and pause
    buttons are toggled depending on the \l{QMediaRecorder::State}{state} of
    the \c audioRecorder object. This means that if the state is
    \l{QMediaRecorder::StoppedState} then the button text will be "Record" and
    "Pause". In \l{QMediaRecorder::RecordingState} the record button will have
    the text "Stop", and in \l{QMediaRecorder::PausedState} the pause button
    will have the text "Resume".

    Pressing the buttons will also result in a toggle based on the state. If
    recording is stopped, then pressing the record button will setup the
    \l{QAudioEncoderSettings} based on the values of the selection lists,
    will set the encoding settings and container on the \c audioRecorder
    object, and start recording using the
    \l{QMediaRecorder::record()}{record()} method.

    \code
        QAudioEncoderSettings settings;
        settings.setCodec(boxValue(ui->audioCodecBox).toString());
        settings.setSampleRate(boxValue(ui->sampleRateBox).toInt());
        settings.setBitRate(boxValue(ui->bitrateBox).toInt());
        settings.setQuality(QMultimedia::EncodingQuality(ui->qualitySlider->value()));
        settings.setEncodingMode(ui->constantQualityRadioButton->isChecked() ?
                                 QMultimedia::ConstantQualityEncoding :
                                 QMultimedia::ConstantBitRateEncoding);

        QString container = boxValue(ui->containerBox).toString();

        audioRecorder->setEncodingSettings(settings, QVideoEncoderSettings(), container);
        audioRecorder->record();
    \endcode

    While recording, the status bar of the application is updated with duration information
    from the \l{QMediaRecorder::durationChanged()}{durationChanged} signal from the
    \c audioRecorder object.

    \code
    ui->statusbar->showMessage(tr("Recorded %1 sec").arg(duration / 1000));
    \endcode
*/
