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


int MyClass::process( const void *input, void *output, 
                  unsigned long, 
                  const PaStreamCallbackTimeInfo *, 
                  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.

1 Answer 1


After much searching and asking questions, I have written my own realization for the vibrato effect: https://github.com/Bershov/Vibrato-effect. The code is not hard for understanding and works fine. In fact, the vibrato is a kind of frequency modulation. Its key concepts: variable delay, low-frequency oscillation and intelpolation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.