54a8738e43f384499e3f67640e751991479a592d
[blender.git] / intern / SoundSystem / intern / SND_AudioDevice.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32 #ifndef SND_AUDIODEVICE
33 #define SND_AUDIODEVICE
34
35 #include "SND_IAudioDevice.h"
36 #include "SoundDefines.h"
37 #include "SND_IdObject.h"
38
39
40 class SND_AudioDevice : public SND_IAudioDevice
41 {
42 public:
43         SND_AudioDevice();
44         virtual ~SND_AudioDevice();
45
46         virtual bool IsInitialized();
47
48         SND_WaveCache* GetWaveCache() const;
49
50         bool GetNewId(SND_SoundObject* pObject);
51         void ClearId(SND_SoundObject* pObject);
52
53         void UseCD() const {};
54
55         /* to be implemented in derived class
56
57         virtual SND_WaveSlot* LoadSample(const STR_String& samplename,
58                                                                          void* memlocation,
59                                                                          int size) =0;
60         */
61 //      void RemoveSample(const char* filename);
62         void RemoveAllSamples();
63
64         /* to be implemented in derived class
65
66         virtual void InitListener()=0;
67         virtual void SetListenerGain(float gain) const =0;
68         virtual void SetDopplerVelocity(MT_Scalar dopplervelocity) const =0;
69         virtual void SetDopplerFactor(MT_Scalar dopplerfactor) const =0;
70         virtual void SetListenerRollOffFactor(MT_Scalar rollofffactor) const =0;
71         
72         virtual void MakeCurrent() const =0;
73
74         virtual void UpdateDevice() const =0;
75
76         virtual void SetObjectBuffer(int id, unsigned int buffer)=0; 
77         virtual int GetPlayState(int id)=0;
78         virtual void PlayObject(int id)=0;
79         virtual void StopObject(int id) const =0;
80         virtual void StopAllObjects()=0;
81         virtual void PauseObject(int id) const =0;
82
83         virtual void SetObjectLoop(int id, bool loop) const =0;
84         virtual void SetObjectLoopPoints(int id, unsigned int loopstart, unsigned int loopend) const =0;
85         virtual void SetObjectPitch(int id, MT_Scalar pitch) const =0;
86         virtual void SetObjectGain(int id, MT_Scalar gain) const =0;
87         virtual void SetObjectRollOffFactor(int id, MT_Scalar rolloff) const =0;
88         virtual void SetObjectMinGain(int id, MT_Scalar mingain) const =0;
89         virtual void SetObjectMaxGain(int id, MT_Scalar maxgain) const =0;
90         virtual void SetObjectReferenceDistance(int id, MT_Scalar referencedistance) const =0;
91
92         virtual void SetObjectTransform(int id,
93                                                                         const MT_Vector3& position,
94                                                                         const MT_Vector3& velocity,
95                                                                         const MT_Matrix3x3& orientation,        
96                                                                         const MT_Vector3& lisposition,
97                                                                         const MT_Scalar& rollofffactor) const =0;
98         virtual void ObjectIs2D(int id) const =0;
99
100         virtual void PlayCD(int track) const =0;
101         virtual void PauseCD(bool pause) const =0;
102         virtual void StopCD() const =0;
103         virtual void SetCDPlaymode(int playmode) const =0;
104         virtual void SetCDGain(MT_Scalar gain) const =0;
105         virtual float* GetSpectrum() =0;
106         */
107
108 protected:
109         bool                                                    m_audio;
110         GEN_List                                                m_idObjectList;
111         SND_IdObject*                                   m_idObjectArray[NUM_SOURCES];
112         SND_WaveCache*                                  m_wavecache;
113
114 private:
115         void             RevokeSoundObject(SND_SoundObject* pObject);
116 };
117
118 #endif //SND_AUDIODEVICE