tmp
[blender.git] / extern / audaspace / include / sequence / Sequence.h
1 /*******************************************************************************
2  * Copyright 2009-2016 Jörg Müller
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16
17 #pragma once
18
19 /**
20  * @file Sequence.h
21  * @ingroup sequence
22  * The Sequence class.
23  */
24
25 #include "ISound.h"
26 #include "respec/Specification.h"
27 #include "devices/I3DDevice.h"
28 #include "sequence/AnimateableProperty.h"
29
30 #include <list>
31
32 AUD_NAMESPACE_BEGIN
33
34 class SequenceEntry;
35 class SequenceData;
36
37 /**
38  * This sound represents sequenced entries to play a sound scene.
39  */
40 class AUD_API Sequence : public ISound
41 {
42         friend class SequenceReader;
43 private:
44         /// The sequence.
45         std::shared_ptr<SequenceData> m_sequence;
46
47         // delete copy constructor and operator=
48         Sequence(const Sequence&) = delete;
49         Sequence& operator=(const Sequence&) = delete;
50
51 public:
52         /**
53          * Creates a new sound scene.
54          * \param specs The output audio data specification.
55          * \param fps The FPS of the scene.
56          * \param muted Whether the whole scene is muted.
57          */
58         Sequence(Specs specs, float fps, bool muted);
59
60         /**
61          * Retrieves the audio output specification.
62          * \return The specification.
63          */
64         Specs getSpecs();
65
66         /**
67          * Sets the audio output specification.
68          * \param specs The new specification.
69          */
70         void setSpecs(Specs specs);
71
72         /**
73          * Retrieves the scene's FPS.
74          * \return The scene's FPS.
75          */
76         float getFPS() const;
77
78         /**
79          * Sets the scene's FPS.
80          * \param fps The new FPS.
81          */
82         void setFPS(float fps);
83
84         /**
85          * Sets the muting state of the scene.
86          * \param muted Whether the scene is muted.
87          */
88         void mute(bool muted);
89
90         /**
91          * Retrieves the muting state of the scene.
92          * \return Whether the scene is muted.
93          */
94         bool isMuted() const;
95
96         /**
97          * Retrieves the speed of sound.
98          * This value is needed for doppler effect calculation.
99          * \return The speed of sound.
100          */
101         float getSpeedOfSound() const;
102
103         /**
104          * Sets the speed of sound.
105          * This value is needed for doppler effect calculation.
106          * \param speed The new speed of sound.
107          */
108         void setSpeedOfSound(float speed);
109
110         /**
111          * Retrieves the doppler factor.
112          * This value is a scaling factor for the velocity vectors of sources and
113          * listener which is used while calculating the doppler effect.
114          * \return The doppler factor.
115          */
116         float getDopplerFactor() const;
117
118         /**
119          * Sets the doppler factor.
120          * This value is a scaling factor for the velocity vectors of sources and
121          * listener which is used while calculating the doppler effect.
122          * \param factor The new doppler factor.
123          */
124         void setDopplerFactor(float factor);
125
126         /**
127          * Retrieves the distance model.
128          * \return The distance model.
129          */
130         DistanceModel getDistanceModel() const;
131
132         /**
133          * Sets the distance model.
134          * \param model distance model.
135          */
136         void setDistanceModel(DistanceModel model);
137
138         /**
139          * Retrieves one of the animated properties of the sound.
140          * \param type Which animated property to retrieve.
141          * \return A pointer to the animated property, valid as long as the
142          *         sound is.
143          */
144         AnimateableProperty* getAnimProperty(AnimateablePropertyType type);
145
146         /**
147          * Adds a new entry to the scene.
148          * \param sound The sound this entry should play.
149          * \param begin The start time.
150          * \param end The end time or a negative value if determined by the sound.
151          * \param skip How much seconds should be skipped at the beginning.
152          * \return The entry added.
153          */
154         std::shared_ptr<SequenceEntry> add(std::shared_ptr<ISound> sound, float begin, float end, float skip);
155
156         /**
157          * Removes an entry from the scene.
158          * \param entry The entry to remove.
159          */
160         void remove(std::shared_ptr<SequenceEntry> entry);
161
162         /**
163          * Creates a new reader with high quality resampling.
164          * \return The new reader.
165          */
166         std::shared_ptr<IReader> createQualityReader();
167
168         virtual std::shared_ptr<IReader> createReader();
169 };
170
171 AUD_NAMESPACE_END