summaryrefslogtreecommitdiff
path: root/Runtime/Audio/AudioSourceFilter.cpp
blob: 21a072fbb5af881d1b0314013b38c80ad01bac71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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