259c702bf868324ab9ceeb163e52816749afe9b4
[blender.git] / intern / audaspace / intern / AUD_I3DHandle.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * Copyright 2009-2011 Jörg Hermann Müller
7  *
8  * This file is part of AudaSpace.
9  *
10  * Audaspace is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * AudaSpace is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Audaspace; if not, write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23  *
24  * ***** END GPL LICENSE BLOCK *****
25  */
26
27 /** \file audaspace/intern/AUD_I3DHandle.h
28  *  \ingroup audaspaceintern
29  */
30
31
32 #ifndef AUD_I3DHANDLE
33 #define AUD_I3DHANDLE
34
35 #include "AUD_Space.h"
36 #include "AUD_3DMath.h"
37
38 /**
39  * This class represents an output device for 3D sound.
40  */
41 class AUD_I3DHandle
42 {
43 public:
44         /**
45          * Retrieves the location of a source.
46          * \return The location.
47          */
48         virtual AUD_Vector3 getSourceLocation()=0;
49
50         /**
51          * Sets the location of a source.
52          * \param location The new location.
53          * \return Whether the action succeeded.
54          */
55         virtual bool setSourceLocation(const AUD_Vector3& location)=0;
56
57         /**
58          * Retrieves the velocity of a source.
59          * \return The velocity.
60          */
61         virtual AUD_Vector3 getSourceVelocity()=0;
62
63         /**
64          * Sets the velocity of a source.
65          * \param velocity The new velocity.
66          * \return Whether the action succeeded.
67          */
68         virtual bool setSourceVelocity(const AUD_Vector3& velocity)=0;
69
70         /**
71          * Retrieves the orientation of a source.
72          * \return The orientation as quaternion.
73          */
74         virtual AUD_Quaternion getSourceOrientation()=0;
75
76         /**
77          * Sets the orientation of a source.
78          * \param orientation The new orientation as quaternion.
79          * \return Whether the action succeeded.
80          */
81         virtual bool setSourceOrientation(const AUD_Quaternion& orientation)=0;
82
83
84         /**
85          * Checks whether the source location, velocity and orientation are relative
86          * to the listener.
87          * \return Whether the source is relative.
88          */
89         virtual bool isRelative()=0;
90
91         /**
92          * Sets whether the source location, velocity and orientation are relative
93          * to the listener.
94          * \param relative Whether the source is relative.
95          * \return Whether the action succeeded.
96          */
97         virtual bool setRelative(bool relative)=0;
98
99         /**
100          * Retrieves the maximum volume of a source.
101          * \return The maximum volume.
102          */
103         virtual float getVolumeMaximum()=0;
104
105         /**
106          * Sets the maximum volume of a source.
107          * \param volume The new maximum volume.
108          * \return Whether the action succeeded.
109          */
110         virtual bool setVolumeMaximum(float volume)=0;
111
112         /**
113          * Retrieves the minimum volume of a source.
114          * \return The minimum volume.
115          */
116         virtual float getVolumeMinimum()=0;
117
118         /**
119          * Sets the minimum volume of a source.
120          * \param volume The new minimum volume.
121          * \return Whether the action succeeded.
122          */
123         virtual bool setVolumeMinimum(float volume)=0;
124
125         /**
126          * Retrieves the maximum distance of a source.
127          * If a source is further away from the reader than this distance, the
128          * volume will automatically be set to 0.
129          * \return The maximum distance.
130          */
131         virtual float getDistanceMaximum()=0;
132
133         /**
134          * Sets the maximum distance of a source.
135          * If a source is further away from the reader than this distance, the
136          * volume will automatically be set to 0.
137          * \param distance The new maximum distance.
138          * \return Whether the action succeeded.
139          */
140         virtual bool setDistanceMaximum(float distance)=0;
141
142         /**
143          * Retrieves the reference distance of a source.
144          * \return The reference distance.
145          */
146         virtual float getDistanceReference()=0;
147
148         /**
149          * Sets the reference distance of a source.
150          * \param distance The new reference distance.
151          * \return Whether the action succeeded.
152          */
153         virtual bool setDistanceReference(float distance)=0;
154
155         /**
156          * Retrieves the attenuation of a source.
157          * \return The attenuation.
158          */
159         virtual float getAttenuation()=0;
160
161         /**
162          * Sets the attenuation of a source.
163          * This value is used for distance calculation.
164          * \param factor The new attenuation.
165          * \return Whether the action succeeded.
166          */
167         virtual bool setAttenuation(float factor)=0;
168
169         /**
170          * Retrieves the outer angle of the cone of a source.
171          * \return The outer angle of the cone.
172          */
173         virtual float getConeAngleOuter()=0;
174
175         /**
176          * Sets the outer angle of the cone of a source.
177          * \param angle The new outer angle of the cone.
178          * \return Whether the action succeeded.
179          */
180         virtual bool setConeAngleOuter(float angle)=0;
181
182         /**
183          * Retrieves the inner angle of the cone of a source.
184          * \return The inner angle of the cone.
185          */
186         virtual float getConeAngleInner()=0;
187
188         /**
189          * Sets the inner angle of the cone of a source.
190          * \param angle The new inner angle of the cone.
191          * \return Whether the action succeeded.
192          */
193         virtual bool setConeAngleInner(float angle)=0;
194
195         /**
196          * Retrieves the outer volume of the cone of a source.
197          * The volume between inner and outer angle is interpolated between inner
198          * volume and this value.
199          * \return The outer volume of the cone.
200          */
201         virtual float getConeVolumeOuter()=0;
202
203         /**
204          * Sets the outer volume of the cone of a source.
205          * The volume between inner and outer angle is interpolated between inner
206          * volume and this value.
207          * \param volume The new outer volume of the cone.
208          * \return Whether the action succeeded.
209          */
210         virtual bool setConeVolumeOuter(float volume)=0;
211 };
212
213 #endif //AUD_I3DHANDLE