I write a program for the development of musical abilities. It is based on the real-time(low latency) sound processing. It must be cross-platform and ready for porting to a microcontroller.
I use PortAudio library for audio I/O, Iowa Hills functions for Band-pass filtering, LAME MP3 Encoder for mp3 encoding. I also need to have functions for Vibrato effect (https://en.wikipedia.org/wiki/Vibrato) and Soft-Knee Dynamic range compression (https://en.wikipedia.org/wiki/Dynamic_range_compression#Soft_and_hard_knees). And I have found the necessary functions in the sources of Chaotic-DAW.
That's an example how I use it:
#include "daw/effects/rosic_Vibrato.h"
using namespace rosic;
Vibrato Vbr;
Vbr.setAverageDelayTime(1.0); // for the lowest delay
Vbr.setDepth(vibrato_depth);
Vbr.setCycleLength(vibrato_period);
Vbr.setDryWetRatio(vibrato_drywet);
//...
int MyClass::process( const void *input, void *output,
unsigned long,
const PaStreamCallbackTimeInfo *,
PaStreamCallbackFlags,
void * )
{
//...
for(int i=0; i<BufferSize; i++)
Vbr.getSampleFrame(&output[i]); // process a sample
//...
}
Chaotic-DAW functions work fine.
The problem is that Chaotic-DAW has a very large and extensive class hierarchy. Therefore, I can not port my program to microcontroller, and after adding a Vibrato effect, I even can not port it to Mac OS X.
So, I'm looking for lite & platform-independent solution for adding a Vibarto effect and Soft-Knee Dynamic range compression (and maybe some similar) to the program.