3D Audio GSoC:
[blender.git] / intern / audaspace / intern / AUD_SequencerEntry.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_SequencerEntry.h
28  *  \ingroup audaspaceintern
29  */
30
31
32 #ifndef AUD_SEQUENCERENTRY
33 #define AUD_SEQUENCERENTRY
34
35 #include "AUD_Reference.h"
36 #include "AUD_AnimateableProperty.h"
37 #include "AUD_IFactory.h"
38
39 class AUD_SequencerEntry
40 {
41         friend class AUD_SequencerHandle;
42 private:
43         int m_status;
44         int m_pos_status;
45         int m_sound_status;
46         int m_id;
47
48         AUD_Reference<AUD_IFactory> m_sound;
49         float m_begin;
50         float m_end;
51         float m_skip;
52         bool m_muted;
53         bool m_relative;
54         float m_volume_max;
55         float m_volume_min;
56         float m_distance_max;
57         float m_distance_reference;
58         float m_attenuation;
59         float m_cone_angle_outer;
60         float m_cone_angle_inner;
61         float m_cone_volume_outer;
62
63         AUD_AnimateableProperty m_volume;
64         AUD_AnimateableProperty m_panning;
65         AUD_AnimateableProperty m_pitch;
66         AUD_AnimateableProperty m_location;
67         AUD_AnimateableProperty m_orientation;
68
69 public:
70         AUD_SequencerEntry(AUD_Reference<AUD_IFactory> sound, float begin, float end, float skip, int id);
71
72         void setSound(AUD_Reference<AUD_IFactory> sound);
73
74         void move(float begin, float end, float skip);
75         void mute(bool mute);
76
77         int getID() const;
78
79         /**
80          * Checks whether the source location, velocity and orientation are relative
81          * to the listener.
82          * \return Whether the source is relative.
83          */
84         bool isRelative();
85
86         /**
87          * Sets whether the source location, velocity and orientation are relative
88          * to the listener.
89          * \param relative Whether the source is relative.
90          * \return Whether the action succeeded.
91          */
92         void setRelative(bool relative);
93
94         /**
95          * Retrieves the maximum volume of a source.
96          * \return The maximum volume.
97          */
98         float getVolumeMaximum();
99
100         /**
101          * Sets the maximum volume of a source.
102          * \param volume The new maximum volume.
103          * \return Whether the action succeeded.
104          */
105         void setVolumeMaximum(float volume);
106
107         /**
108          * Retrieves the minimum volume of a source.
109          * \return The minimum volume.
110          */
111         float getVolumeMinimum();
112
113         /**
114          * Sets the minimum volume of a source.
115          * \param volume The new minimum volume.
116          * \return Whether the action succeeded.
117          */
118         void setVolumeMinimum(float volume);
119
120         /**
121          * Retrieves the maximum distance of a source.
122          * If a source is further away from the reader than this distance, the
123          * volume will automatically be set to 0.
124          * \return The maximum distance.
125          */
126         float getDistanceMaximum();
127
128         /**
129          * Sets the maximum distance of a source.
130          * If a source is further away from the reader than this distance, the
131          * volume will automatically be set to 0.
132          * \param distance The new maximum distance.
133          * \return Whether the action succeeded.
134          */
135         void setDistanceMaximum(float distance);
136
137         /**
138          * Retrieves the reference distance of a source.
139          * \return The reference distance.
140          */
141         float getDistanceReference();
142
143         /**
144          * Sets the reference distance of a source.
145          * \param distance The new reference distance.
146          * \return Whether the action succeeded.
147          */
148         void setDistanceReference(float distance);
149
150         /**
151          * Retrieves the attenuation of a source.
152          * \return The attenuation.
153          */
154         float getAttenuation();
155
156         /**
157          * Sets the attenuation of a source.
158          * This value is used for distance calculation.
159          * \param factor The new attenuation.
160          * \return Whether the action succeeded.
161          */
162         void setAttenuation(float factor);
163
164         /**
165          * Retrieves the outer angle of the cone of a source.
166          * \return The outer angle of the cone.
167          */
168         float getConeAngleOuter();
169
170         /**
171          * Sets the outer angle of the cone of a source.
172          * \param angle The new outer angle of the cone.
173          * \return Whether the action succeeded.
174          */
175         void setConeAngleOuter(float angle);
176
177         /**
178          * Retrieves the inner angle of the cone of a source.
179          * \return The inner angle of the cone.
180          */
181         float getConeAngleInner();
182
183         /**
184          * Sets the inner angle of the cone of a source.
185          * \param angle The new inner angle of the cone.
186          * \return Whether the action succeeded.
187          */
188         void setConeAngleInner(float angle);
189
190         /**
191          * Retrieves the outer volume of the cone of a source.
192          * The volume between inner and outer angle is interpolated between inner
193          * volume and this value.
194          * \return The outer volume of the cone.
195          */
196         float getConeVolumeOuter();
197
198         /**
199          * Sets the outer volume of the cone of a source.
200          * The volume between inner and outer angle is interpolated between inner
201          * volume and this value.
202          * \param volume The new outer volume of the cone.
203          * \return Whether the action succeeded.
204          */
205         void setConeVolumeOuter(float volume);
206 };
207
208 #endif //AUD_SEQUENCERENTRY