68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
|
|
#include "FrameLib_AudioTrigger.h"
|
|
#include <algorithm>
|
|
|
|
// Constructor
|
|
|
|
FrameLib_AudioTrigger::FrameLib_AudioTrigger(FrameLib_Context context, FrameLib_Parameters::Serial *serialisedParameters, FrameLib_Proxy *proxy) : FrameLib_Scheduler(context, proxy, nullptr, 0, 1, 1)
|
|
{
|
|
objectReset();
|
|
}
|
|
|
|
// Info
|
|
|
|
std::string FrameLib_AudioTrigger::objectInfo(bool verbose)
|
|
{
|
|
return formatInfo("Translates non-zero samples into trigger frames: The output is an empty frame. Any non-zero audio sample triggers a frame.",
|
|
"Translates non-zero samples into trigger frames.", verbose);
|
|
}
|
|
|
|
std::string FrameLib_AudioTrigger::outputInfo(unsigned long idx, bool verbose)
|
|
{
|
|
return "Empty Trigger Frames";
|
|
}
|
|
|
|
std::string FrameLib_AudioTrigger::audioInfo(unsigned long idx, bool verbose)
|
|
{
|
|
return formatInfo("Audio Input (non-zero triggers frames)", "Audio Input", verbose);
|
|
}
|
|
|
|
// Object Reset, Block Process and Process
|
|
|
|
void FrameLib_AudioTrigger::objectReset()
|
|
{
|
|
if (mMaxBlockSize != bufferSize())
|
|
mBuffer.resize(mMaxBlockSize);
|
|
|
|
std::fill_n(mBuffer.begin(), bufferSize(), false);
|
|
|
|
mBlockSize = 0;
|
|
}
|
|
|
|
void FrameLib_AudioTrigger::blockProcess(const double * const *ins, double **outs, unsigned long blockSize)
|
|
{
|
|
// Safety
|
|
|
|
if (blockSize > bufferSize())
|
|
return;
|
|
|
|
for (unsigned long i = 0; i < blockSize; i++)
|
|
mBuffer[i] = ins[0][i];
|
|
|
|
mBlockSize = blockSize;
|
|
}
|
|
|
|
FrameLib_AudioTrigger::SchedulerInfo FrameLib_AudioTrigger::schedule(bool newFrame, bool noAdvance)
|
|
{
|
|
unsigned long offset = static_cast<unsigned long>(getCurrentTime().intVal() - getBlockStartTime().intVal());
|
|
unsigned long i;
|
|
|
|
// Find next trigger
|
|
|
|
for (i = offset + 1; i < mBlockSize; i++)
|
|
if (mBuffer[i])
|
|
break;
|
|
|
|
return SchedulerInfo(i - offset, mBuffer[offset], i < mBlockSize);
|
|
}
|