950e0fd95507209b88dfc711c52756ced4986cf6
[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         AUD_AnimateableProperty* getAnimProperty(AUD_AnimateablePropertyType type);
80
81         /**
82          * Checks whether the source location, velocity and orientation are relative
83          * to the listener.
84          * \return Whether the source is relative.
85          */
86         bool isRelative();
87
88         /**
89          * Sets whether the source location, velocity and orientation are relative
90          * to the listener.
91          * \param relative Whether the source is relative.
92          * \return Whether the action succeeded.
93          */
94         void setRelative(bool relative);
95
96         /**
97          * Retrieves the maximum volume of a source.
98          * \return The maximum volume.
99          */
100         float getVolumeMaximum();
101
102         /**
103          * Sets the maximum volume of a source.
104          * \param volume The new maximum volume.
105          * \return Whether the action succeeded.
106          */
107         void setVolumeMaximum(float volume);
108
109         /**
110          * Retrieves the minimum volume of a source.
111          * \return The minimum volume.
112          */
113         float getVolumeMinimum();
114
115         /**
116          * Sets the minimum volume of a source.
117          * \param volume The new minimum volume.
118          * \return Whether the action succeeded.
119          */
120         void setVolumeMinimum(float volume);
121
122         /**
123          * Retrieves the maximum distance of a source.
124          * If a source is further away from the reader than this distance, the
125          * volume will automatically be set to 0.
126          * \return The maximum distance.
127          */
128         float getDistanceMaximum();
129
130         /**
131          * Sets the maximum distance of a source.
132          * If a source is further away from the reader than this distance, the
133          * volume will automatically be set to 0.
134          * \param distance The new maximum distance.
135          * \return Whether the action succeeded.
136          */
137         void setDistanceMaximum(float distance);
138
139         /**
140          * Retrieves the reference distance of a source.
141          * \return The reference distance.
142          */
143         float getDistanceReference();
144
145         /**
146          * Sets the reference distance of a source.
147          * \param distance The new reference distance.
148          * \return Whether the action succeeded.
149          */
150         void setDistanceReference(float distance);
151
152         /**
153          * Retrieves the attenuation of a source.
154          * \return The attenuation.
155          */
156         float getAttenuation();
157
158         /**
159          * Sets the attenuation of a source.
160          * This value is used for distance calculation.
161          * \param factor The new attenuation.
162          * \return Whether the action succeeded.
163          */
164         void setAttenuation(float factor);
165
166         /**
167          * Retrieves the outer angle of the cone of a source.
168          * \return The outer angle of the cone.
169          */
170         float getConeAngleOuter();
171
172         /**
173          * Sets the outer angle of the cone of a source.
174          * \param angle The new outer angle of the cone.
175          * \return Whether the action succeeded.
176          */
177         void setConeAngleOuter(float angle);
178
179         /**
180          * Retrieves the inner angle of the cone of a source.
181          * \return The inner angle of the cone.
182          */
183         float getConeAngleInner();
184
185         /**
186          * Sets the inner angle of the cone of a source.
187          * \param angle The new inner angle of the cone.
188          * \return Whether the action succeeded.
189          */
190         void setConeAngleInner(float angle);
191
192         /**
193          * Retrieves the outer volume of the cone of a source.
194          * The volume between inner and outer angle is interpolated between inner
195          * volume and this value.
196          * \return The outer volume of the cone.
197          */
198         float getConeVolumeOuter();
199
200         /**
201          * Sets the outer volume of the cone of a source.
202          * The volume between inner and outer angle is interpolated between inner
203          * volume and this value.
204          * \param volume The new outer volume of the cone.
205          * \return Whether the action succeeded.
206          */
207         void setConeVolumeOuter(float volume);
208 };
209
210 #endif //AUD_SEQUENCERENTRY