Rhythmic Delay v2


In a previous post I mentioned adapting a basic delay program for the PedalPCB Terrarium pedal (using the Daisy platform) to mimic the four delay heads in a Binson Echorec. This is about an updated version of that program where some issues have been addressed and more features have been added. 

My Terrarium build with a Daisy inside. 
As a note, this program does not try to perfectly mimic the Binson Echorec. I have laid eyes on a Binson Echorec - let along played through one, so I am not an authority on how they sound. This programs tries to take the rhythmic nature of the Echorec and make something similar that sounds good and is fun to play. This program can do normal delay sounds (single head, minimal feedback), but where it likes to live is really space filling drawn out delays. I have no idea how it sounds in a band setting with other instruments - but I have been getting lost in it while annoying my neighbors with huge rhythmic sounds. 

The code for the Rhythmic Delay v2 along with a compiled .bin file and a README are posted here on GitHub.  

* Here is a demo video I made for the Rhythmic Delay v2. There is also an even shorter demo focused on the near-infinite-feedback footswitch.

1kHz Whine

The Terrarium (and reportedly some official Electro-Smith products) suffer from a pretty narrow 1kHz noise line ('whine' is a pretty good descriptor). This noise line is due to the processing of the Daisy spiking at a really consistent spacing and yanking the ground/power lines around when the processing spikes. This processing spike happens at a frequency of samplerate/blocksize. The samplerate is how often the chip samples and processes audio (default = 48kHz), and the blocksize is how much of the sampled audio is put into a chuck to process at a time (default = 48). So with the defaults 48 samples of 1/48,000 seconds are processed as a time, this produces a processing spike every 48kHz/48 = 1kHz, hence the "1kHz whine". 

1kHz is right in the audible range, so with the default values a persistent whine is present whenever the Daisy/Terrarium processing audio. There have been suggestions on how to help mitigate this whine with hardware, including using an isolator like in the Daisy Petal for the opamp voltages, but if you already have a Terrarium those fixes are not really practical. There are luckily some software/program mitigations that can be made to help lessen or eliminate the whine though. I was able to include two of these strategies into the Rhythmic Delay v2 and think the whine is eliminated completely (at least in my builds and a few others who were kind enough to test the program for me). 

One whine mitigation is to make the blocksize=2 or 1 so with the default samplerate of 48kHz the whine frequency is 24kHz or 48kHz which are above the range of human hearing. When setting the blocksize to 1 the amount of time the processing has to be done in goes for 1 millisecond to 1/48 millseconds, this can create issues for running some tasks. The second mitigation I implemented was to keep the processing minimized because of this new constraint. In the ProcessControls section of the program switches, potentiometers, and LEDs are read/controlled and converted into processing control parameters. Instead of doing everything in the ProcessControls function for every block of audio I split it into four so only 1/4 of the ProcessControls gets ran in a single block. 

Age / Swell

Age and Swell are the new features for the Rhythmic Delay v2. Age is the center bottom control and swell is the bottom right control. 

Age adds some modulation to the repeats for the first half of the control and then adds artifacts that kind of sound like degradation to the modulation for the second half of the control. The modulation is pretty subtle and is a combination of a few different things that add up to a wobbly occasionally glitchy adjustment to the length of the delay. The degradation part is kind of a 'code bend'. I was messing around with the delay modulation and ended up switching delay times too fast with random values and it caused the audio to get distorted and strange. I thought the sound was kind of cool, so I started using wrong values for the delay modulation on purpose and pretended that was the plan the whole time by calling it 'degradation'. 

The swell control is an interpretation of the faux reverb found on the original Binson Echorecs where the delayed signal was fed back through all four delay heads. I have never played (or even seen...) an Echorec, so I used the idea of the Echorec swell setting and turned it into something that I think sounds pretty good. The swell control on the Rhythmic Delay v2 is really a mix control that adjusts the amount of signal from a separate four head delay that is added to the original delays. The swell four head delays are all always on and takes as an input the original delays, this makes the added swell delays bubble up behind the original delays as they fade out. I really like how it sounds because it lets the rhythm of the original delays be heard, but adds to the ambience after them. 

Other Tweaks

I added a few other minor tweaks to this new version of the Rhythmic Delay. I adjusted the taper on the delay time control so now more knob sweep in spent at intermediate times than at very short or very l0ng times. In the v1 when the delay effect was turned 'off' with the footswitch you would not hear the repeat tails....but they would not be cleared from memory and could be heard if the pedal was re-engaged before the repeats died out. Now the repeats die out faster when the pedal is switched off.....but I think this could still improve more. 

The runaway feedback that was triggered by the right footswitch never had a natural feeling to me, so I switched it out for an near-infinite feedback control instead. This produces a sound-on-sound feel where the repeats go on for a long time (but not forever) but can still be added to by continued playing. I think it works works best if you alternate releasing and pressing the second footswitch as you play. There is a short clip here showing the secondary footswitch effect. 

I extending the upper range of the feedback knob to allow for self-oscillation now. 

I left some things in the code that I used while developing the program but are not in use with the final v2 version. One of these things is sending things out from the DAC outputs to look at with an oscilloscope, I did this while setting the modulation for the Age control. In the variable definition section a the top of the code there is a 'dac_output=false', if you want to send output to the DAC you can change this to 'dac_output=true'. Because of the pins used for the LEDs on the Terrarium though you will not be able to use the DAC output and the default LEDs at the same time. The other extra was using a few switches I added to the top of my Terrarium build. These switches have to be initialized differently than the standard Terrarium build switches because the Terrarium piggy-backs off the Daisy Petal framework, but my Terrarium build has more switches than the Petal so I had to setup extra ones myself. These features should not affect the way the program runs at all, but where left in just so other people did not have to figure out how to use them if they wanted to do more things in the future. 





Comments

  1. I admire your work and I love the design of the enclosure. Just curious, what is the third LED for?

    ReplyDelete

Post a Comment

Popular Posts