The Acid Kit: new modules for the Rack x0x crowd!

Hello hello!

I’m here to announce the immediate availability of beta builds for 3 new modules! This very acid digression is what distracted me from my other module projects…

WDR-8 is a plugin with only one module for now. TAK contains AcidStation and Acid Composer.
From left to right we have:

WDR-8 Snare: Roland TR-808 snare emulation, as faithful as possible yet tuning and envelope controls allow different snare and percussive sounds. WDR stands for “Wave Digital Rhythm”, a nod to the original machine (Transistor Rhythm) and Wave Digital Filters (WDF), which is a modular circuit modelling method, used in this module (and several upcoming others!) to recreate some parts of the electronics found in these machines.

Features:

  • Drum shell “resonators” with adjustable frequency and volume, main tuning affecting both
  • Noise path going into an “analog” envelope with direct control over discrete components values, affecting attack and decay. High-pass filter with cutoff and resonance controls.
  • Tone (resonators mix) and Snappy (noise level), Accent level and volume are original knobs
  • CV inputs with modulation attenuators for Tone, Snappy, noise envelope decay and resonators main tuning

The TR-808 Snare has been obsessing me for more than a year and I wasn’t satisfied with the current options in the library. A lot of time went into reading and trying to understand the schematics, then simulate it using engineering tools and finally figuring out how to emulate it using WDF. Actually, recent developments in the WDF library used are used literally as-is for the resonators.

Have fun and let me know if you have any suggestion, comment or questions!

:floppy_disk: Get the beta here! :rotating_light: There is no output clamping, be careful if you crank both accent and volume up!

Code

TAK AcidStation: Around the same time as the 808, Roland released yet another machine that became as much if not more influential, up to this day: the TB-303 Bassline synthesizer. The 303 featured a transistor ladder filter borrowed from common synth designs at the time (more precisely Moog iirc) paired with a relatively basic saw or pulse oscillator. The rest is history that some here likely have witnessed first hand while I was way too young at that time.
AcidStation is an envelope generator, a filter and a VCA stitched together. The envelope and filter are from Substation opensource. Good care was taken to reproduce the VCA and VCF envelopes faithfully in terms of shape and timing. The VCA decay’s default value is what it is normally fixed at. The ranges of the VCF decay, the filter cutoff and resonance are broader than on a 303, allowing more variations. Try it with a short VCA decay!
The Hold button mimics a popular mod on the 303 that enabled infinite sustain, yay! Drive is a nice bonus, also courtesy of Substation’s Saturating mixer.

Link below. :arrow_down_small:

TAK Acid Composer: After working on the filter and envelopes, it became clear that there was more to the sound of aciiiid than just the right ladder. As I found out, the sequencer plays a big part in selling the distinctive sound of the 303, through specific behaviours regarding gate, notes with slide and/or accent and tied notes. Acid Composer is experimental and unfinished but has proven an interesting experiment so far. I can safely say that a good mix of slides, accents, ties and octave up or down may eventually matter more than a catchy note sequence. That’s right, type in random stuff and adjust until it sounds ok.

Each line of the display at the top contains informations that are parsed into a pattern:

  • Infos: letter identifier, length (:sob:BROKEN) and transpose, eg. +2 is 2 semitones up
  • Notes: note letters from a to g, 2 letters per step, second letter is either # (sharp) or b (flat)
  • Up/Down: either u/U for one octave up, d/D one octave down or space for normal octave
  • Acc/Sli: either a/A for accented note, s/S for a slid note
  • Time: o is play a note, _ is tie, space is no note

:floppy_disk: Get the beta here! - Code

As a bonus, TAK includes 2 wavetables made from simulation of the TB-303 oscillators. Namely, the pulse features very unique PWM that is frequency-dependent. Both are 2048 points.

Not very practical (yet) but patterns can be shared like this, copy/paste line by line:

c bbg c#c#c c c d ebf g eb  dbb
 d ud ddd   u  
A S     A   A S   A A   A   A A
ooooooooooooo_oo

Oh, and go grab Substation now!

22 Likes

Good work! Great concepts!

WDR-8 is my favorite, it sounds really nice.

Is there a way to make it more CPU efficient?

Very nice. I look forward to what else you are working on.

Acid composer crashes rack here (win7-rack2.06)

Thanks for reporting! I don’t have a Windows 7 computer to test and debug this. Any reason you’re not using 2.1.2? EDIT: Of course it was my own doing! See below

Crashes on Windows 10 as well, GDB log & fix PR posted here:

1 Like

I have also noticed for my own modulrs. Those github builds fail for older windows versions.

Is the plan for these modules to get released into the library eventually or to stay as manual installs?

Thanks! The crash should be fixed now

@wemizio → Updated Windows build: TAK-2.0.0-nightly-0010e99-win.vcvplugin

@FiroLFO Yeah thanks for bringing that up. What’s the CPU % you see? I get around 5% which is a lot, I agree. The WDF emulation is actually very efficient, what ruins it is the 4x oversampling for the noise VCA (more precisely a diode clipper model) needed to smooth out the aliasing. I’ll have to check the model itself if I can reduce the aliasing. Another solution which I’ll likely do first is to pre-render a sample of noise and use that, this should drastically reduce the CPU usage with little difference, let’s see…

2 Likes

Same here. But it’s 400% more than for others.

Adding some CV for variations increases it by another 25%.

I eventually managed to double it in some patches.

Regards, A.

They’re definitely going to be released once I’m satisfied! I might do the TR-808 hihats next and then publish WDR-8. TAK on the other hand will need more work as AcidComposer is a little buggy and incomplete right now.

Is there any particular reason you ask?

In general, I approve alternatives yet secure ways for distributing software, publishing to the library is not exactly straightforward and it feels like a non-negligible commitment.

No, just I never take it as a given that people will be publishing their modules into the library as not everyone does. As a user it does make it much less hassle if they are there though so I do appreciate the time taken.

2 Likes

Thank you for the numbers and pictures!

WDR-8:

I’ve just pushed an update that reduces the CPU usage in several ways.

:sound: Please test various parameters in a new patch before opening existing patches using the module. I’ve added clipping on the output so it shouldn’t exceed -10V to +10V!

:floppy_disk: Mac - Windows - Linux

The noise source has been changed for a simpler but faster white noise generator, let me know if the change is noticeable.

I get around 2.5% CPU usage now, it’s non-negligible just for a snare but that being said, virtual analog is almost always more demanding in terms of CPU.

Thanks for your efforts! CPU is around 2.5% for me. It is perfectly fine. The sound is still nice. Although I can’t compare to the previous version.

I clearly have a new candidate for the Most Valuable Snare Award in my collection! :slight_smile:

1 Like

If you decided to make the 808 hi-hats, have you considered adding an external signal input to be mixed into the pre-envelope signal? The Hexinverter Mutant Hats eurorack module does that and it’s a super cool feature (lets you mix in oscillators, samples, other noise sources, etc).

2 Likes

Just a heads up, I tried to build the collection from git and it can’t seem to find the Wave Digital Filter library. Didn’t see any Chow code included in the repo either.

src/AcidComposer.cpp:7:10: fatal error: chowdsp_wdf/chowdsp_wdf.h: No such file or directory
    7 | #include "chowdsp_wdf/chowdsp_wdf.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

Perhaps you didn’t run make dep first ?

$ make dep
git clone https://gitlab.com/slimechild/substation-opensource dep/slime4rack
Cloning into 'dep/slime4rack'...
warning: redirecting to https://gitlab.com/slimechild/substation-opensource.git/
remote: Enumerating objects: 249, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 249 (delta 0), reused 0 (delta 0), pack-reused 246
Receiving objects: 100% (249/249), 256.59 KiB | 7.55 MiB/s, done.
Resolving deltas: 100% (90/90), done.
git clone https://github.com/Chowdhury-DSP/chowdsp_wdf dep/chowdsp_wdf
Cloning into 'dep/chowdsp_wdf'...
remote: Enumerating objects: 443, done.
remote: Counting objects: 100% (163/163), done.
remote: Compressing objects: 100% (72/72), done.
remote: Total 443 (delta 114), reused 98 (delta 86), pack-reused 280
Receiving objects: 100% (443/443), 361.89 KiB | 3.62 MiB/s, done.
Resolving deltas: 100% (245/245), done.

That’s a great idea! That will definitely be possible :slight_smile:
How about even adding a toggle to either ADD (external + internal) or RINGMOD (external * input) this extra input?

It was actually initially planned for the Snare module to have an external input for the noise (or anything) but I didn’t have time to experiment with that and now… the panel is very busy already!

I feel I would like to lengthen or shorten the resonators decay. Making it longer is hard, I currently don’t know how I would do that. Shortening, on the other hand is simple enough but that would mean trying to fit 2 additional knobs…

Thanks for your help @Jens.Peter.Nielsen!
Indeed, Rack documentation on building plugins (VCV Manual - Building) includes this step but I tend to forget about it too :slight_smile:

To make it worth reading to anyone interested, dep in make dep stands for dependency, it’s a common term referring to pieces of code or software that the current project depends on, it often goes to a aptly named dep directory. Obviously, this code has to be available and any steps required done before the plugin is compiled together because it is at this step that it will be looking for its dependencies. A favorite of mine is VCV Prototype’s Makefile: VCV-Prototype/Makefile at v2 · VCVRack/VCV-Prototype · GitHub

As a recap, a safe first bet when building a plugin is:

make dep
make
# If you want to use the plugin right away in VCV Rack:
make install

I also like Vult’s simple solution to mix the external and internal noise like this. Very handy!

1 Like

That would be even cooler! It would be nice to have an internal/external blend knob as well. Maybe the knob could control a blend between noise and ringmodulated signal with the RING switch on, and serve as a crossfader with the RING switch off. Just a suggestion!

1 Like