UBMicrophoneInput.h 2.18 KB
Newer Older
Craig Watson's avatar
Craig Watson committed
1
/*
2
 * Copyright (C) 2015-2018 Département de l'Instruction Publique (DIP-SEM)
Craig Watson's avatar
Craig Watson committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
 *
 * This file is part of OpenBoard.
 *
 * OpenBoard is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 3 of the License,
 * with a specific linking exception for the OpenSSL project's
 * "OpenSSL" library (or with modified versions of it that use the
 * same license as the "OpenSSL" library).
 *
 * OpenBoard is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OpenBoard. If not, see <http://www.gnu.org/licenses/>.
 */

22 23 24 25 26 27 28
#ifndef UBMICROPHONEINPUT_H
#define UBMICROPHONEINPUT_H

#include <QtCore>
#include <QAudioInput>

/**
Craig Watson's avatar
Craig Watson committed
29 30 31
 * @brief The UBMicrophoneInput class captures uncompressed sound from a microphone.
 *
 * Audio samples can be read by connecting to the dataAvailable signal.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
 */
class UBMicrophoneInput : public QObject
{
    Q_OBJECT

public:
    UBMicrophoneInput();
    virtual ~UBMicrophoneInput();

    bool init();
    void start();
    void stop();

    static QStringList availableDevicesNames();
    void setInputDevice(QString name = "");

    int channelCount();
    int sampleRate();
    int sampleSize();
    int sampleFormat();
    QString codec();

signals:
Craig Watson's avatar
Craig Watson committed
55
    /// Send the new audio level, between 0 and 255
56 57 58 59 60 61 62 63 64 65 66 67
    void audioLevelChanged(quint8 level);

    /// Emitted when new audio data is available
    void dataAvailable(QByteArray data);

    void error(QString message);

private slots:
    void onAudioInputStateChanged(QAudio::State state);
    void onDataReady();

private:
68 69
    double sampleRelativeLevel(const char* sample);
    quint8 audioLevel(const QByteArray& data);
70 71 72 73 74 75 76 77
    QString getErrorString(QAudio::Error errorCode);

    QAudioInput* mAudioInput;
    QIODevice * mIODevice;
    QAudioDeviceInfo mAudioDeviceInfo;
    QAudioFormat mAudioFormat;

    qint64 mSeekPos;
78
    quint8 mLastAudioLevel;
79 80 81
};

#endif // UBMICROPHONEINPUT_H