Misc patches: dual tremolo, bias/saturation, sample jitter, crappy delay (echo)

I’ve been writing some basic patches over the course of last week. Nothing fancy, no big DSP magic; mostly just basic manipulations of the sample stream. It’s fun!

At the moment there are…

  • DualTremoloPatch.hpp - Two independent tremolo LFOs.
  • BiasPatch.hpp - A saturation/distortion effect: adjust amplitude bias while retaining high peaks.
  • SimpleDelayPatch.hpp - A basic delay (echo) effect. Somewhat broken.
  • SampleJitterPatch.hpp - A distortion effect: delays incoming samples by random amounts of time.

You can find the code for my patches here, with likely more to come over the next few weeks:

(Note that I work in a “test” branch, I’m reserving “main” for upstream code.)

Added two more patches:

  • TripleTremoloPatch.hpp – Three independent tremolo LFOs.
  • BiasedDelayPatch.hpp – A basic delay effect with sample bias modulation. My favourite so far, it can produce great nonlinear saturation effects, however its behaviour is highly dependent on the audio source.

Great ! Thanks a lot for contributing Martin!

hey martind2, thanks for contributing!

i’ve been working through some of your patches and learning a lot. i will now repay your kindness with the annoyance of questions.

  1. in the dual tremolo, you use a buffer instead of writing values directly into the output buffer. what are some of the benefits you are looking for by doing this? i understand buffering in general, so this is more of an owl specific question.
  2. what compiler/toolchain are you using? my visual studio express 2010 hasn’t been crazy about a few very small regions of your code. do i have to reconfigure or something?

again, awesome, thanks, hope you stay active!

Thanks for the kind words!

Yeah it makes no sense that I’m writing into the input buffer and then copying that to the output buffer. I’ll accept any patches that correct this :slight_smile:

I’m using Xcode 4.6.3. What are the problems you’re seeing in VSE2010? My C++ is fairly rusty; there’s a good chance I’ve done stupid things.

Hey,

You’ve got pretty good odds on the patch contest, good luck!

This is the main error message I get: error C2864: ‘TripleTremoloPatch::MIN_FREQ’ : only static const integral data members can be initialized within a class

To get these errors out of my way, I just put in a constructor that initializes all the variables. My C++ isn’t rusty, it’s non-existent. I come from a Java/C# background and have just been working on C/C++ for the last few months. I’ve also been reading up on DSP stuff and this project is the best learning environment I could imagine. I feel like I’m taking leaps and bounds every day. Please keep developing patches, please. I’m going to tune up my bitcrusher a little more and then post it. Guess I’m going to need a GitHub account…

Later

GitHub in the house!

Here’s my contribution to the contest:

Don’t think the bit reduction is doing what I want it to do, but hey, you gotta start somewhere and hey, I’m having a helluva good time playing around with this stuff.

this project is the best learning environment I could imagine

Yes! I agree. Most of my patches I wrote in short pockets of time while waiting for something else, at least two while on the bus to work. I love that the restricted environment allows you to get something great done very quickly.

only static const integral data members can be initialized within a class

Ah. I guess the alternative fix would be to turn…
const float MIN_FREQ = 0.5;
into:
static const float MIN_FREQ = 0.5;

(I don’t remember if C++ coders frown on #defines as an alternative means of declaring constants.)

Edit Oh wait, of course float isn’t an integral type. So yeah, what you suggested works.