Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/audaspace/intern/AUD_Sequencer.h')
-rw-r--r--intern/audaspace/intern/AUD_Sequencer.h206
1 files changed, 206 insertions, 0 deletions
diff --git a/intern/audaspace/intern/AUD_Sequencer.h b/intern/audaspace/intern/AUD_Sequencer.h
new file mode 100644
index 00000000000..9fdf537ff97
--- /dev/null
+++ b/intern/audaspace/intern/AUD_Sequencer.h
@@ -0,0 +1,206 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * Copyright 2009-2011 Jörg Hermann Müller
+ *
+ * This file is part of AudaSpace.
+ *
+ * Audaspace is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * AudaSpace is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Audaspace; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file audaspace/intern/AUD_Sequencer.h
+ * \ingroup audaspaceintern
+ */
+
+
+#ifndef __AUD_SEQUENCER_H__
+#define __AUD_SEQUENCER_H__
+
+#include "AUD_AnimateableProperty.h"
+#include "AUD_IFactory.h"
+#include "AUD_ILockable.h"
+
+#include <list>
+#include <pthread.h>
+
+class AUD_SequencerEntry;
+
+/**
+ * This class represents sequenced entries to play a sound scene.
+ */
+class AUD_Sequencer : public AUD_ILockable
+{
+ friend class AUD_SequencerReader;
+private:
+ /// The target specification.
+ AUD_Specs m_specs;
+
+ /// The status of the sequence. Changes every time a non-animated parameter changes.
+ int m_status;
+
+ /// The entry status. Changes every time an entry is removed or added.
+ int m_entry_status;
+
+ /// The next unused ID for the entries.
+ int m_id;
+
+ /// The sequenced entries.
+ std::list<boost::shared_ptr<AUD_SequencerEntry> > m_entries;
+
+ /// Whether the whole scene is muted.
+ bool m_muted;
+
+ /// The FPS of the scene.
+ float m_fps;
+
+ /// Speed of Sound.
+ float m_speed_of_sound;
+
+ /// Doppler factor.
+ float m_doppler_factor;
+
+ /// Distance model.
+ AUD_DistanceModel m_distance_model;
+
+ /// The animated volume.
+ AUD_AnimateableProperty m_volume;
+
+ /// The animated listener location.
+ AUD_AnimateableProperty m_location;
+
+ /// The animated listener orientation.
+ AUD_AnimateableProperty m_orientation;
+
+ /// The mutex for locking.
+ pthread_mutex_t m_mutex;
+
+ // hide copy constructor and operator=
+ AUD_Sequencer(const AUD_Sequencer&);
+ AUD_Sequencer& operator=(const AUD_Sequencer&);
+
+public:
+ /**
+ * Creates a new sound scene.
+ * \param specs The output audio data specification.
+ * \param fps The FPS of the scene.
+ * \param muted Whether the whole scene is muted.
+ */
+ AUD_Sequencer(AUD_Specs specs, float fps, bool muted);
+ ~AUD_Sequencer();
+
+ /**
+ * Locks the sequence.
+ */
+ virtual void lock();
+
+ /**
+ * Unlocks the previously locked sequence.
+ */
+ virtual void unlock();
+
+ /**
+ * Sets the audio output specification.
+ * \param specs The new specification.
+ */
+ void setSpecs(AUD_Specs specs);
+
+ /**
+ * Sets the scene's FPS.
+ * \param fps The new FPS.
+ */
+ void setFPS(float fps);
+
+ /**
+ * Sets the muting state of the scene.
+ * \param muted Whether the scene is muted.
+ */
+ void mute(bool muted);
+
+ /**
+ * Retrieves the muting state of the scene.
+ * \return Whether the scene is muted.
+ */
+ bool getMute() const;
+
+ /**
+ * Retrieves the speed of sound.
+ * This value is needed for doppler effect calculation.
+ * \return The speed of sound.
+ */
+ float getSpeedOfSound() const;
+
+ /**
+ * Sets the speed of sound.
+ * This value is needed for doppler effect calculation.
+ * \param speed The new speed of sound.
+ */
+ void setSpeedOfSound(float speed);
+
+ /**
+ * Retrieves the doppler factor.
+ * This value is a scaling factor for the velocity vectors of sources and
+ * listener which is used while calculating the doppler effect.
+ * \return The doppler factor.
+ */
+ float getDopplerFactor() const;
+
+ /**
+ * Sets the doppler factor.
+ * This value is a scaling factor for the velocity vectors of sources and
+ * listener which is used while calculating the doppler effect.
+ * \param factor The new doppler factor.
+ */
+ void setDopplerFactor(float factor);
+
+ /**
+ * Retrieves the distance model.
+ * \return The distance model.
+ */
+ AUD_DistanceModel getDistanceModel() const;
+
+ /**
+ * Sets the distance model.
+ * \param model distance model.
+ */
+ void setDistanceModel(AUD_DistanceModel model);
+
+ /**
+ * Retrieves one of the animated properties of the sequence.
+ * \param type Which animated property to retrieve.
+ * \return A pointer to the animated property, valid as long as the
+ * sequence is.
+ */
+ AUD_AnimateableProperty* getAnimProperty(AUD_AnimateablePropertyType type);
+
+ /**
+ * Adds a new entry to the scene.
+ * \param sound The sound this entry should play.
+ * \param begin The start time.
+ * \param end The end time or a negative value if determined by the sound.
+ * \param skip How much seconds should be skipped at the beginning.
+ * \return The entry added.
+ */
+ boost::shared_ptr<AUD_SequencerEntry> add(boost::shared_ptr<AUD_IFactory> sound, float begin, float end, float skip);
+
+ /**
+ * Removes an entry from the scene.
+ * \param entry The entry to remove.
+ */
+ void remove(boost::shared_ptr<AUD_SequencerEntry> entry);
+};
+
+#endif //__AUD_SEQUENCER_H__