Stereo Plate Reverb for Teensy4.x

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 :)

About 37k for the allpass+delay line buffers.
Thank you!
stereo ping pong modulated delay in the works
Nice, would love if it this delay could tempo sync as well!
 
Just implemented a new tap_tempo function which can be called via MIDI clock callback, footswitch or something else.
Here is a short sample of delay synced to a drum track with MIDI clock sent via USB:
Another interesting feature is if just a tiny bit of slow modulation is applied, the 2 pair of taps will be slightly delayed due to quadrature output LFO. It creates a kind of phasing sound on each iteration, which i must say like a lot.
Edit:
A few more extreme and weird sounds with a drum loop as the source:
 
Last edited:
@Pio that sounds great! Looking forward to trying it out. Is the delay RAM heavy as well, and could it be made to use RAM2 / DMAMEM so as to not take up space in RAM1? I'm looking to use a delay with tempo sync in my xr-1 groovebox, but I'm pretty limited right now on RAM1 space.
 
The constructor takes a variable, which is the max delay time in ms and also a bool that says where to put the buffers. Default is RAM2, optional PSRAM. The latter do use more CPU as the RAM2 version.
There are 4 buffers in a stereo pingpong delay, each in size Time*SampleFreq*4(float). So yes, it is RAM heavy, but also configurable.
 
Delay is available in the library repo. No example yet, still testing it.
Lots of fun! This is the complete amp modeler with delay, reverb, IR cab sim. Delay uses 1sec buffers in extmem (PSRAM on Teensy4.1).
 
Delay is available in the library repo. No example yet, still testing it.
Lots of fun! This is the complete amp modeler with delay, reverb, IR cab sim. Delay uses 1sec buffers in extmem (PSRAM on Teensy4.1).
I will try to see if I can manage to get it working on my box. I haven't yet tried to use the `OpenAudio_ArduinoLibrary` stuff. Have you ever ventured into making a compressor or limiter? I'm trying to put a stereo compressor at the end of my stereo signal chain for a master compressor effect, but I haven't had success yet with any of the solutions I've found online.
 
I will try to see if I can manage to get it working on my box. I haven't yet tried to use the `OpenAudio_ArduinoLibrary` stuff. Have you ever ventured into making a compressor or limiter? I'm trying to put a stereo compressor at the end of my stereo signal chain for a master compressor effect, but I haven't had success yet with any of the solutions I've found online.
Ive used this: https://github.com/MarkzP/AudioEffectDynamics_F32

It's a compressor, gate, and limiter.
 
Thanks for this fantastic reverb. I've run the stereo plate reverb example on a teensy 4 with the pjrc audio shield and am amazed and how this sounds.

I saw there was previous mention of it being merged with the teensy library, but I can't find it among the effects nodes. Is there a way to use this and the other effects in your library in the audio design tool?
 
Hello. Its an very interesting and nice project. I used an Teensy4.0 and PCM5102a DAC. What do I need to change in the code to use a PCM5102a DAC? Thank for help
 
Last edited:
I tried that. But it doesn't work. No signal at OUT2 of Teensy4.0
For DAC PCM5102 I have commented out all commands of AudioControlWM8731. Thanks for a little help :)

Example project for the Stereo Plate Reverb component with Teensy40 as I2s slave and Teensy4.1 as I2s master
C:
//AudioControlWM8731              codec;
AudioInputI2S2slave                i2s_in;
AudioEffectPlateReverb_F32        reverb;
AudioOutputI2S2                 i2s_out;
 
// reverb has it's own internal dry/wet mixer
AudioConnection     cable1(i2s_in, 0, reverb, 0);
AudioConnection     cable2(i2s_in, 1, reverb, 1);
/*
AudioConnection     cable3(reverb, 0, i2s_out, 0);
AudioConnection     cable4(reverb, 1, i2s_out, 1);
*/
AudioConnection     cable3(i2s_in, 0, i2s_out, 0);
AudioConnection     cable4(i2s_in, 1, i2s_out, 1);

BasicTerm term(&DBG_SERIAL); // terminal is used to print out the status and info via WebSerial
 
Last edited:
You are mixing a floating point (_F32) component with stock 16bit Audio Library.
Use this version:


The "_i16" version is compatible with the stock Teensy audio.
Gui with the extension components is available here:

In your case the main T41 working as I2S Master determines the configuration, T4.0 in the effect module has to run with 16bit stock version, too.
 
I have an Lib problem.
c:\Users\rolfd\Documents\Arduino\libraries\hexefx_audiolib_i16-main: invalid library: no header files found :(
 
I see git added the branch name to the directory, try renaming it to:
Code:
c:\Users\rolfd\Documents\Arduino\libraries\hexefx_audiolib_i16
 
PlatformIo error:
Code:
; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:teensy40]
platform = teensy
board = teensy40
framework = arduino
lib_deps=
https://github.com/hexeguitar/hexefx_audiolib_i16.git

Screenshot 2025-05-27 134557.png
 
Inconsistent name of library hexefx_audio_I16 or hexefx_audiolib_i16 :unsure:

hexefx_audiolib_i16.h
C:
#ifndef _HEXEFX_AUDIO_I16_H
#define _HEXEFX_AUDIO_I16_H

#include "effect_platereverb_i16.h"
#include "effect_springreverb_i16.h"
#include "effect_reverbsc_i16.h"
#include "effect_delaystereo_i16.h"
#include "effect_phaserStereo_i16.h"

#include "mixer_synth8ch_i16.h"
#include "synth_waveform_ext_i16.h"

#endif // _HEXEFX_AUDIO_H
 
I have another problem. I'm using a PCM5102 DAC in I2s2 slave mode. How can I remove the AudioControl for SGTL5000 :unsure:
 
PCM5102 is configured using hardware pins. It doesn't need any software driver, so just remove any SGTL5000 related includes and functions.
The "control" objects are required only in cases where the chip has to be configured via I2C or other means to match the Teensy I2S settings.
 
OK. It works wonderfully. I tried the link to github in the platform.ini again, and then it worked :)

C:
; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:teensy40]
platform = teensy
board = teensy40
framework = arduino
build_flags = -DUSB_MIDI_SERIAL
lib_deps =
    https://github.com/hexeguitar/hexefx_audiolib_i16.git
 
Thanks for this nice tool :)
But.. There is still a small mistake. The MIX control is missing in the PlateReverbStereo web interface.

Screenshot 2025-05-27 164153.png
 
Oh, i forgot about the mix. Fixed.
You can build your own html interfaces by adding buttons (sending Midi NoteON/Off) or dials sending ControlChange.
The part where the code starts is here.
For example:
adding
<midi-encoder label="Mix\n%p" chan="1" cc="52" colour="#FFF9C4" label-scale="0.8"></midi-encoder>
creates a dial with label Mix, sending CC=52 on channel 1, \n%p puts a new line + displays the dial value.
<midi-button toggle note="4" colour="#B3E5FC" label="On/Off" label-scale="0.8"></midi-button>
creates a button sending a NoteOn/Off #4 on channel 1.
 
Thanks a lot for your fast work. I think to transfer the FX parameters from the Teensy4.1 (I2s master) to the Teensy4.0 (I2s slave and FX), I'll use the internal MIDI interface. It's fast enough and has a data buffer. That's a good idea from you (y) I tried using I2C before, but there are problems with the transmission when Teensy is in I2C slave mode. Paul is already working on a solution.

Greetings from Germany. Rolf

.
 
Last edited:
Back
Top