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 'extern/audaspace/src/fx/PlaybackManager.cpp')
-rw-r--r--extern/audaspace/src/fx/PlaybackManager.cpp186
1 files changed, 186 insertions, 0 deletions
diff --git a/extern/audaspace/src/fx/PlaybackManager.cpp b/extern/audaspace/src/fx/PlaybackManager.cpp
new file mode 100644
index 00000000000..0fbeeba04e2
--- /dev/null
+++ b/extern/audaspace/src/fx/PlaybackManager.cpp
@@ -0,0 +1,186 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/PlaybackManager.h"
+#include "fx/VolumeSound.h"
+
+#include <stdexcept>
+
+AUD_NAMESPACE_BEGIN
+PlaybackManager::PlaybackManager(std::shared_ptr<IDevice> device) :
+ m_device(device), m_currentKey(0)
+{
+}
+
+unsigned int PlaybackManager::addCategory(std::shared_ptr<PlaybackCategory> category)
+{
+ bool flag = true;
+ unsigned int k = -1;
+ do {
+ auto iter = m_categories.find(m_currentKey);
+ if(iter == m_categories.end())
+ {
+ m_categories[m_currentKey] = category;
+ k = m_currentKey;
+ m_currentKey++;
+ flag = false;
+ }
+ else
+ m_currentKey++;
+ } while(flag);
+
+ return k;
+}
+
+unsigned int PlaybackManager::addCategory(float volume)
+{
+ std::shared_ptr<PlaybackCategory> category = std::make_shared<PlaybackCategory>(m_device);
+ category->setVolume(volume);
+ bool flag = true;
+ unsigned int k = -1;
+ do {
+ auto iter = m_categories.find(m_currentKey);
+ if(iter == m_categories.end())
+ {
+ m_categories[m_currentKey] = category;
+ k = m_currentKey;
+ m_currentKey++;
+ flag = false;
+ }
+ else
+ m_currentKey++;
+ } while(flag);
+
+ return k;
+}
+
+std::shared_ptr<IHandle> PlaybackManager::play(std::shared_ptr<ISound> sound, unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+ std::shared_ptr<PlaybackCategory> category;
+
+ if(iter != m_categories.end())
+ {
+ category = iter->second;
+ }
+ else
+ {
+ category = std::make_shared<PlaybackCategory>(m_device);
+ m_categories[catKey] = category;
+ }
+ return category->play(sound);
+}
+
+bool PlaybackManager::resume(unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ iter->second->resume();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+bool PlaybackManager::pause(unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ iter->second->pause();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+float PlaybackManager::getVolume(unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ return iter->second->getVolume();
+ }
+ else
+ {
+ return -1.0;
+ }
+}
+
+bool PlaybackManager::setVolume(float volume, unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ iter->second->setVolume(volume);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+bool PlaybackManager::stop(unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ iter->second->stop();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+void PlaybackManager::clean()
+{
+ for(auto cat : m_categories)
+ cat.second->cleanHandles();
+}
+
+bool PlaybackManager::clean(unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ iter->second->cleanHandles();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+std::shared_ptr<IDevice> PlaybackManager::getDevice()
+{
+ return m_device;
+}
+AUD_NAMESPACE_END