Merge branch 'master' of https://github.com/juhovh/shairplay into upstream
[deb_shairplay.git] / AirTV-Qt / audiooutput.h
CommitLineData
15c988f7
JB
1/**
2 * Copyright (C) 2011-2012 Juho Vähä-Herttua
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 */
14
15#ifndef AUDIOOUTPUT_H
16#define AUDIOOUTPUT_H
17
18#include <QObject>
19#include <QIODevice>
20#include <QByteArray>
21#include <QAudioFormat>
22#include <QAudioDeviceInfo>
23#include <QAudioOutput>
24#include <QIODevice>
25
26class AudioOutput : public QIODevice
27{
28 Q_OBJECT
29public:
30 explicit AudioOutput(QObject *parent = 0);
31 bool init(int bits, int channels, int samplerate);
32 bool setDevice(QAudioDeviceInfo deviceInfo);
33
34 void start();
35 void setVolume(float volume);
36 void output(const QByteArray & data);
37 void flush();
38 void stop();
39
40 qint64 readData(char *data, qint64 maxlen);
41 qint64 writeData(const char *data, qint64 len);
42 qint64 bytesAvailable() const;
43 bool isSequential() const;
44
45private:
46 void reinit();
47
48private:
49 bool m_initialized;
50 QByteArray m_buffer;
51 QAudioFormat m_format;
52 QAudioDeviceInfo m_deviceInfo;
53 QAudioOutput* m_output;
54 float m_volume;
55
56signals:
57
58public slots:
59
60private slots:
61 void notified();
62 void stateChanged(QAudio::State state);
63};
64
65#endif // AUDIOOUTPUT_H