summaryrefslogtreecommitdiffstats
path: root/sigen/Audio.h
blob: d84ab0f054af8f407865a94f92d3efa4bd941140 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
 * Copyright 2008 Ben Boeckel <MathStuf@gmail.com>
 * 
 * This program 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, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef SIGEN_AUDIO
#define SIGEN_AUDIO

// Qt includes
#include <QList>
#include <QObject>

// Phonon includes
#include <Phonon/AudioOutput>
#include <Phonon/MediaObject>

class Audio : public QObject
{
    Q_OBJECT
    
    public:
        inline Audio() :
                m_output(Phonon::MusicCategory),
                m_started(false)
        {
        }
        inline ~Audio()
        {
            clear();
        }
        
        void playSFX(const QString& url);
        void playMusic(const QString& url);
        
        void prune();
        void clear();
        
        inline double volume()
        {
            return m_output.volume();
        }
        inline void setVolume(const double volume)
        {
            m_output.setVolume(volume);
        }
    private slots:
        inline void loopMusic()
        {
            m_music.enqueue(m_musicUrl);
        }
    private:
        inline void start()
        {
            if (!m_started)
                connect(&m_music, SIGNAL(aboutToFinish()), this, SLOT(loopMusic()));
        }
        
        QList<Phonon::MediaObject*> m_curPlay;
        Phonon::MediaObject m_music;
        QString m_musicUrl;
        Phonon::AudioOutput m_output;
        bool m_started;
};

#endif