2016-05-07 22:10:57 +00:00
|
|
|
#include "amuse/Submix.hpp"
|
|
|
|
|
|
|
|
namespace amuse
|
|
|
|
{
|
|
|
|
|
|
|
|
void Submix::_destroy()
|
|
|
|
{
|
|
|
|
m_destroyed = true;
|
|
|
|
if (m_submix)
|
|
|
|
m_submix->m_activeSubmixes.erase(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
Submix::Submix(Engine& engine, Submix* smx)
|
|
|
|
: m_root(engine), m_submix(smx)
|
|
|
|
{
|
|
|
|
if (m_submix)
|
|
|
|
m_submix->m_activeSubmixes.insert(this);
|
|
|
|
}
|
|
|
|
|
2016-05-14 04:46:39 +00:00
|
|
|
EffectChorus& Submix::makeChorus(uint32_t baseDelay, uint32_t variation, uint32_t period)
|
2016-05-09 07:22:58 +00:00
|
|
|
{
|
2016-05-14 04:46:39 +00:00
|
|
|
return makeEffect<EffectChorus>(baseDelay, variation, period);
|
2016-05-09 07:22:58 +00:00
|
|
|
}
|
|
|
|
|
2016-05-14 04:46:39 +00:00
|
|
|
EffectDelay& Submix::makeDelay(uint32_t initDelay, uint32_t initFeedback, uint32_t initOutput)
|
2016-05-09 07:22:58 +00:00
|
|
|
{
|
2016-05-14 04:46:39 +00:00
|
|
|
return makeEffect<EffectDelay>(initDelay, initFeedback, initOutput);
|
2016-05-09 07:22:58 +00:00
|
|
|
}
|
|
|
|
|
2016-05-14 04:46:39 +00:00
|
|
|
EffectReverb& Submix::makeReverbStd(float coloration, float mix, float time,
|
|
|
|
float damping, float preDelay)
|
2016-05-09 07:22:58 +00:00
|
|
|
{
|
2016-05-14 04:46:39 +00:00
|
|
|
return makeEffect<EffectReverb>(coloration, mix, time, damping, preDelay);
|
2016-05-09 07:22:58 +00:00
|
|
|
}
|
|
|
|
|
2016-05-14 04:46:39 +00:00
|
|
|
EffectReverbHi& Submix::makeReverbHi(float coloration, float mix, float time,
|
|
|
|
float damping, float preDelay, float crosstalk)
|
|
|
|
{
|
|
|
|
return makeEffect<EffectReverbHi>(coloration, mix, time, damping, preDelay, crosstalk);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Submix::applyEffect(int16_t* audio, size_t frameCount, const ChannelMap& chanMap) const
|
|
|
|
{
|
2016-05-14 04:53:53 +00:00
|
|
|
for (const std::unique_ptr<EffectBaseTypeless>& effect : m_effectStack)
|
|
|
|
((EffectBase<int16_t>&)*effect).applyEffect(audio, frameCount, chanMap);
|
2016-05-14 04:46:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Submix::applyEffect(int32_t* audio, size_t frameCount, const ChannelMap& chanMap) const
|
|
|
|
{
|
2016-05-14 04:53:53 +00:00
|
|
|
for (const std::unique_ptr<EffectBaseTypeless>& effect : m_effectStack)
|
|
|
|
((EffectBase<int32_t>&)*effect).applyEffect(audio, frameCount, chanMap);
|
2016-05-14 04:46:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Submix::applyEffect(float* audio, size_t frameCount, const ChannelMap& chanMap) const
|
2016-05-09 07:22:58 +00:00
|
|
|
{
|
2016-05-14 04:53:53 +00:00
|
|
|
for (const std::unique_ptr<EffectBaseTypeless>& effect : m_effectStack)
|
|
|
|
((EffectBase<float>&)*effect).applyEffect(audio, frameCount, chanMap);
|
2016-05-09 07:22:58 +00:00
|
|
|
}
|
|
|
|
|
2016-05-07 22:10:57 +00:00
|
|
|
}
|