summaryrefslogtreecommitdiff
path: root/Runtime/Audio/AudioSourceFilter.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Audio/AudioSourceFilter.cpp
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Audio/AudioSourceFilter.cpp')
-rw-r--r--Runtime/Audio/AudioSourceFilter.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/Runtime/Audio/AudioSourceFilter.cpp b/Runtime/Audio/AudioSourceFilter.cpp
new file mode 100644
index 0000000..21a072f
--- /dev/null
+++ b/Runtime/Audio/AudioSourceFilter.cpp
@@ -0,0 +1,68 @@
+#include "UnityPrefix.h"
+#if ENABLE_AUDIO_FMOD
+#include "AudioSourceFilter.h"
+
+IMPLEMENT_CLASS(AudioFilter)
+IMPLEMENT_OBJECT_SERIALIZE (AudioFilter)
+INSTANTIATE_TEMPLATE_TRANSFER (AudioFilter)
+
+AudioFilter::~AudioFilter ()
+{
+ Cleanup();
+}
+
+void AudioFilter::Cleanup()
+{
+ if (m_DSP)
+ {
+ m_DSP->release();
+ m_DSP = NULL;
+ }
+}
+
+void AudioFilter::AddToManager()
+{
+ if (!m_DSP)
+ Init();
+ Update();
+ Assert(m_DSP);
+ Assert(m_Type != FMOD_DSP_TYPE_UNKNOWN);
+ m_DSP->setBypass(false);
+}
+
+void AudioFilter::RemoveFromManager()
+{
+ if (m_DSP)
+ m_DSP->setBypass(true);
+}
+
+void AudioFilter::AwakeFromLoad(AwakeFromLoadMode mode)
+{
+ Super::AwakeFromLoad(mode);
+ Update();
+}
+
+void AudioFilter::Init()
+{
+ if (m_DSP == NULL && m_Type != FMOD_DSP_TYPE_FORCEINT)
+ {
+ FMOD_RESULT result = GetAudioManager().GetFMODSystem()->createDSPByType(m_Type, &m_DSP);
+ Assert (result == FMOD_OK);
+ result = m_DSP->setBypass(!GetEnabled());
+ Assert (result == FMOD_OK);
+ }
+}
+
+FMOD::DSP* AudioFilter::GetDSP()
+{
+ if (!m_DSP)
+ Init();
+ return m_DSP;
+}
+
+template<class TransferFunction>
+void AudioFilter::Transfer (TransferFunction& transfer)
+{
+ Super::Transfer (transfer);
+}
+#endif //ENABLE_AUDIO \ No newline at end of file