Stereo Plate Reverb for Teensy4.x

Thanks!! I will definitely have a look at the freeze effect. Could be very cool to have a separate button to enable this or use it when you max-out the room size knob. I will let you know how it goes.
 
Pio-really nice work! I was wondering if you can point me to a reference that explains some of the math theory behind the plate reverb algorithm?
 
OK, I think I found a good reference. Dattorro, J. (1997). Effect design part 1: Reverberator and other filters

Thanks
 
Is it possibile to ad a shimmer in this amazing reverb?
It should be amazing!!

Shimmer requires a pitch shifter somewhere inside the reverb tank. That'll need more time to implement. At some point i'm going to add it, esp, since i've built myself a new hardware platform for testing and working on a new components:

6UMTR4ll.png

ST4UuwGl.jpg


I added a new version of the plate reverb code, written for the OpenAudio_ArduinoLibrary by chipaudette

https://github.com/hexeguitar/t40fx/tree/main/Hx_PlateReverb_F32

It includes the new freeze function. The freeze can become quite "clicky" with low density values. Works the best with density set to 1.0f. An interesting effect, kinds of smeared up looper, similar to what EHX Freeze pedal produces.
Freeze should actually "freeze" the other reverb settings in order to maintain the infinite reverb. For experimenting purposes i haven't implemented it. So, after enabling the freeze, changing the reverb time will make it fade away. The same with reverb internal filters (hi/lo loss), they can make the freeze fade away into bass sound or loose the bass and make a "swooosh" fade out using highpass settings.

There is also another new module for the OpenAudio: an interesting approach for so called "no phasing" stereo enhancer:
https://github.com/hexeguitar/t40fx/tree/main/Hx_MonoToStereo_F32
Link to sound sample included in the repo.

Piotr
 
Well, after designing a board that has:

  • 14 pots
  • 1 encoder
  • small 0.96" IPS display
  • 3 footswitches
  • optional hardware midi on Serial2
  • I2C + SPI expander headers
  • expression pedal input
  • WM8731 codec
  • analog dry path + electronic bypass (4066)
  • 3 x HD107s RGB leds
i discovered that i can use webMIDI + webSerial and make a custom html page with any controls i want + serial console for reporting back anything from the firmware. And use the escape sequences to color the output for the terminal. Kinda makes all these pots obsolete, at least for developing stage ;)

65GCXBrh.png


Currently testing the plate reverb + IR stereo cabinet simulator + 2 x infinite/barperpole/shepard phaser (fun! will be the next module added to the lib).
 
Shimmer requires a pitch shifter somewhere inside the reverb tank. That'll need more time to implement. At some point i'm going to add it, esp, since i've built myself a new hardware platform for testing and working on a new components:

6UMTR4ll.png

ST4UuwGl.jpg


I added a new version of the plate reverb code, written for the OpenAudio_ArduinoLibrary by chipaudette

https://github.com/hexeguitar/t40fx/tree/main/Hx_PlateReverb_F32

It includes the new freeze function. The freeze can become quite "clicky" with low density values. Works the best with density set to 1.0f. An interesting effect, kinds of smeared up looper, similar to what EHX Freeze pedal produces.
Freeze should actually "freeze" the other reverb settings in order to maintain the infinite reverb. For experimenting purposes i haven't implemented it. So, after enabling the freeze, changing the reverb time will make it fade away. The same with reverb internal filters (hi/lo loss), they can make the freeze fade away into bass sound or loose the bass and make a "swooosh" fade out using highpass settings.

There is also another new module for the OpenAudio: an interesting approach for so called "no phasing" stereo enhancer:
https://github.com/hexeguitar/t40fx/tree/main/Hx_MonoToStereo_F32
Link to sound sample included in the repo.

Piotr

Piotr, been fan of your work for years now!. Quick question, noticed that you extended the usb connector to the side of the board, how does it perform that way? did you trace it as a differential pair?
 
I tested the reverb and it's awesome, modified some parameters to my taste. Now I'm working on the modulation, I want to increase it and have a parameter to modify it but I can't. Tried to modify the headers that sets the LFO amplitude but no heareable effect, can you shine some light about this?

Code:
[COLOR="#FF0000"]#define LFO_AMPL_BITS       (5)                             // 2^LFO_AMPL_BITS will be the LFO amplitude[/COLOR] 
#define LFO_AMPL            ((1<<LFO_AMPL_BITS) + 1)        // lfo amplitude
#define LFO_READ_OFFSET     (LFO_AMPL>>1)                   // read offset = half the amplitude
#define LFO_FRAC_BITS       (16 - LFO_AMPL_BITS)            // fractional part used for linear interpolation
#define LFO_FRAC_MASK       ((1<<LFO_FRAC_BITS)-1)          // mask for the above

#define LFO1_FREQ_HZ        (1.37f)                          // LFO1 frequency in Hz
#define LFO2_FREQ_HZ        (1.52f)                          // LFO2 frequency in Hz
 
New Year, new reverb incoming

Plate Reverb V2.0

with a lots of new or reworked features:

- pair of HP and LP filters inside the reverb tank - controls the bass/treble loss in the tail
- pair of HP and LP filters at the output shapes the reverb sound without affecting the tail length
- FREEZE function with controllable signal bleed in. Nice tool for slow changing sound scapes
- Pitch shifter with range from -1oct to +2oct. Can make harmonic reverb effects
- Shimmer effect with controllable pitch - the same range as above
- Density controls the allpass coefficients and makes the reverb sound more like echo in lower settings
- Built in dry/wet mixer

I have also reworked the delay line modulation into more effective one. There is a "chorus" control which sets the amount of modulation, but it might create clicks when changing the value. I recommend setting it once or if changing - do it while in bypass.
Bypass is designed to pass the Dry signal if the dry/wet mix is anything but 1.0. When 1.0 (full wet) reverb mutes the output. This is done for cases when external mixers are used instead of the internal one.

The reverb is a part of new library, which is an extension to the OpenAudio_ArduinoLibrary, the float32_t one made by Chip Audette.
Library is available here:

I have also created a demo project using PlatformIO, simply clone this repo:


open the PlateReverbStereo folder in PlatformIO and run upload (uncommenting the #define USE_TEENSY_AUDIO_BOARD line in main.cpp to make it work with the standard Teensy Audio Adaptor board) . All required libraries will be downloaded and installed.
Next, open the the PlateReverb.html from the Control_html folder in Chrome or Edge. Other browsers do not implement the WebMIDI and WebSerial required for the control interface.

Here is the demo of the reverb in action:

With all the pitch shifter combinations it really gets into an instrument territory. Lots of fun!
One tip for creating nice sound scapes: start with silence, no input. Turn the FREEZE on and increase BleedIn to let a bit of signal pass into the infinite reverb tail. Hit a few notes, the sound will slowly build up into a rich harmony, or chaos ;)

Hope you like it! Enjoy!
Piotr
 
Hello Pio - thanks for sharing your great work on this new reverb! After much difficulty I was able to get all the files and PlatformIO setup so that I can control the reverb from the .html file and it sounds really good. I was unable to create a working .ino using this reverb from the Arduino IDE however. I kept getting a lot of errors, tried adding as many .h files as were coming up in the error descriptions. Finally I got a missing/no such file for Audio.h which I can plainly see is present in my local folder. Previously, I had no problems making a sketch with your previous platereverbstereo effect, but this one I am having difficulty with - I suspect it is something to do with missing or duplicate library files but I don't have any ideas what I am doing wrong. I will keep working at it and see if I can make it work without the MIDI control /html gui.

Regards,
Dave
 
New incoming reverb for the library:
ReverbSC
ported from Soundpipe, original authors:
Sean Costello, Istvan Varga

This one is not to heavy on the CPU, but RAM hungry (387k).
I'm still working on fine tuning the code. There will be 2 options:
  • delay buffer placed in RAM2, about 6-7% load
  • delay buffer placed in external PSRAM (Teensy4.1), about 13% load
Compared to the original code i added and fixed a few things:
  • fixed the reverb volume dependence on the reverb time (feedback) setting
  • added bypass
  • added internal dry/wet mixer
  • added Freeze option similar to the Plate reverb
  • moved the parameter calculations out of the main audio interrupt
 
Pio, I use your reverb(s) in all my projects. So no matter what I do everything sounds rather nice at the end. Thanks for your great work!
Here is a short "thank you" improvisation: Improv which would not have worked without the lovely Plate Reverb
There is no better feedback than a piece of beautiful music with the code working somewhere inside it :) Thank you!
I do have a nice stereo ping pong modulated delay in the works, hope to post it here soon. Not a reverb, but a time based effect and it does sometimes sound as a reverb, or chorus, flanger, rotary speaker and more. Quad delay lines with quadrature output LFO do create lots of nice sounds :)
Just curious, how much RAM does the Stereo Spring Reverb use?
About 37k for the allpass+delay line buffers.
 
Back
Top