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