Initial commit
[camargo/neiasound.git] / src / nSoundSystem.h
1 #ifndef NSOUNDSYSTEM_H
2 #define NSOUNDSYSTEM_H
3
4 #include <QObject>
5 #include <QHash>
6 #include "nSoundSourceRole.h"
7 #include "nSoundFormat.h"
8
9 // *sigh* ugly but necessary
10 struct ALCcontext_struct;
11 struct ALCdevice_struct;
12 typedef struct ALCcontext_struct ALCcontext;
13 typedef struct ALCdevice_struct ALCdevice;
14
15 class nSoundSource;
16 class nSoundBuffer;
17 class nSoundListener;
18 class nSoundStreamer;
19 class nSoundStreamerPlaylist;
20
21 class nSoundSystem : public QObject
22 {
23     Q_OBJECT
24     Q_PROPERTY(int supportedAuxiliarySends READ supportedAuxiliarySends)
25     Q_PROPERTY(qreal masterGain READ masterGain WRITE setMasterGain NOTIFY masterGainChanged)
26     Q_PROPERTY(nSoundListener * listener READ listener)
27     Q_PROPERTY(ALCcontext * openalContext READ openalContext)
28     Q_PROPERTY(ALCdevice * openalDevice READ openalDevice)
29     Q_ENUMS(nSoundFormat)
30     Q_ENUMS(nSoundSourceRole)
31 public:
32     explicit nSoundSystem(QObject *parent = 0);
33     virtual ~nSoundSystem();
34
35     ALCcontext * openalContext(){return m_context;}
36     ALCdevice * openalDevice(){return m_device;}
37
38     nSoundListener * listener(){return m_listener;}
39
40     qreal masterGain();
41
42     int supportedAuxiliarySends(){return m_numSends;}
43
44 signals:
45
46     void masterGainChanged(qreal arg);
47
48 public slots:
49
50     void update(qreal);
51
52     void setMasterGain(qreal gain);
53
54     nSoundSource * createSource(QString name = "", nSoundSourceRole = SSR_SFX);
55     nSoundSource * source(QString name);
56     bool destroySource(QString name);
57     bool destroySource(nSoundSource * source);
58
59     nSoundBuffer * createBuffer(QString name);
60     nSoundBuffer * buffer(QString name);
61     bool destroyBuffer(QString name);
62     bool destroyBuffer(nSoundBuffer * buffer);
63
64
65     nSoundStreamer * createStreamer(QString name, nSoundSource * source, nSoundStreamerPlaylist * playlist = 0);
66     nSoundStreamerPlaylist * createStreamerPlaylist(QObject * parent);
67     nSoundStreamer * streamer(QString name);
68     bool destroyStreamer(QString name);
69     bool destroyStreamer(nSoundStreamer * streamer);
70
71 private:
72     QHash<QString, nSoundSource*> m_sources;
73     QHash<QString, nSoundBuffer*> m_buffers;
74     QHash<QString, nSoundStreamer*> m_streamers;
75
76     nSoundListener * m_listener;
77
78     bool m_success;
79     int m_numSends;
80     ALCcontext * m_context;
81     ALCdevice * m_device;
82     qreal m_masterGain;
83 };
84
85 #endif // NSOUNDSYSTEM_H