3D Audio GSoC:
[blender.git] / intern / audaspace / intern / AUD_SequencerFactory.cpp
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_SequencerFactory.cpp
28  *  \ingroup audaspaceintern
29  */
30
31
32 #include "AUD_SequencerFactory.h"
33 #include "AUD_SequencerReader.h"
34 #include "AUD_3DMath.h"
35
36 AUD_SequencerFactory::AUD_SequencerFactory(AUD_Specs specs, float fps, bool muted) :
37         m_specs(specs),
38         m_status(0),
39         m_entry_status(0),
40         m_id(0),
41         m_muted(muted),
42         m_fps(fps),
43         m_speed_of_sound(434),
44         m_doppler_factor(1),
45         m_distance_model(AUD_DISTANCE_MODEL_INVERSE_CLAMPED),
46         m_location(3),
47         m_orientation(4)
48 {
49         AUD_Quaternion q;
50         m_orientation.write(q.get());
51 }
52
53 AUD_SequencerFactory::~AUD_SequencerFactory()
54 {
55 }
56
57 void AUD_SequencerFactory::setSpecs(AUD_Specs specs)
58 {
59         m_specs = specs;
60         m_status++;
61 }
62
63 void AUD_SequencerFactory::setFPS(float fps)
64 {
65         m_fps = fps;
66 }
67
68 void AUD_SequencerFactory::mute(bool muted)
69 {
70         m_muted = muted;
71 }
72
73 bool AUD_SequencerFactory::getMute() const
74 {
75         return m_muted;
76 }
77
78 float AUD_SequencerFactory::getSpeedOfSound() const
79 {
80         return m_speed_of_sound;
81 }
82
83 void AUD_SequencerFactory::setSpeedOfSound(float speed)
84 {
85         m_speed_of_sound = speed;
86         m_status++;
87 }
88
89 float AUD_SequencerFactory::getDopplerFactor() const
90 {
91         return m_doppler_factor;
92 }
93
94 void AUD_SequencerFactory::setDopplerFactor(float factor)
95 {
96         m_doppler_factor = factor;
97         m_status++;
98 }
99
100 AUD_DistanceModel AUD_SequencerFactory::getDistanceModel() const
101 {
102         return m_distance_model;
103 }
104
105 void AUD_SequencerFactory::setDistanceModel(AUD_DistanceModel model)
106 {
107         m_distance_model = model;
108         m_status++;
109 }
110
111 AUD_AnimateableProperty* AUD_SequencerFactory::getAnimProperty(AUD_AnimateablePropertyType type)
112 {
113         switch(type)
114         {
115         case AUD_AP_VOLUME:
116                 return &m_volume;
117         case AUD_AP_LOCATION:
118                 return &m_location;
119         case AUD_AP_ORIENTATION:
120                 return &m_orientation;
121         default:
122                 return NULL;
123         }
124 }
125
126 AUD_Reference<AUD_SequencerEntry> AUD_SequencerFactory::add(AUD_Reference<AUD_IFactory> sound, float begin, float end, float skip)
127 {
128         AUD_Reference<AUD_SequencerEntry> entry = new AUD_SequencerEntry(sound, begin, end, skip, m_id++);
129
130         m_entries.push_front(entry);
131         m_entry_status++;
132
133         return entry;
134 }
135
136 void AUD_SequencerFactory::remove(AUD_Reference<AUD_SequencerEntry> entry)
137 {
138         m_entries.remove(entry);
139         m_entry_status++;
140 }
141
142 AUD_Reference<AUD_IReader> AUD_SequencerFactory::createReader()
143 {
144         return new AUD_SequencerReader(this);
145 }