Tabula Sonora 0.1.0
A native C++20 implementation of the Roland Sound Canvas VA synth voice
Loading...
Searching...
No Matches
ts::Reverb Class Referencefinal

The GS reverb: a Schroeder/Dattorro tank transcribed from the engine. More...

#include <tabulasonora/send_effects.hpp>

Inheritance diagram for ts::Reverb:
ts::Effect

Public Member Functions

 Reverb (const ReverbPreset &preset)
void reset () override
 Clears all internal state.
void process (std::span< const float > input, std::span< float > left, std::span< float > right) override
 Processes a block.
void process (std::span< const float > input, std::span< const float > chorus_left, std::span< const float > chorus_right, std::span< float > left, std::span< float > right)
 Processes a block with the chorus feeding into it; either chorus span may be empty.
Public Member Functions inherited from ts::Effect
virtual ~Effect ()=default

Static Public Member Functions

static Reverb for_type (std::optional< int > type)
 Creates a reverb for a GS type 0–7, or the default when none is given.
static double send_gain (int controller) noexcept
 The send-bus gain for CC#91. Linear in the controller, unlike the volume law.

Static Public Attributes

static constexpr int ring_size = 65536
 Size of the shared delay ring.

Detailed Description

The GS reverb: a Schroeder/Dattorro tank transcribed from the engine.

Input conditioner, then four series allpass diffusers, then two parallel tanks each with a damping lowpass and two nested allpasses, then eight output taps. All eight GS types share this topology — Delay and PanDelay simply zero the diffusers and collapse to a single long tap.

The write cursor decrements, so every tap offset is added to it.

Constructor & Destructor Documentation

◆ Reverb()

ts::Reverb::Reverb ( const ReverbPreset & preset)
inlineexplicit

Member Function Documentation

◆ for_type()

Reverb ts::Reverb::for_type ( std::optional< int > type)
staticnodiscard

Creates a reverb for a GS type 0–7, or the default when none is given.

◆ send_gain()

double ts::Reverb::send_gain ( int controller)
inlinestaticnodiscardnoexcept

The send-bus gain for CC#91. Linear in the controller, unlike the volume law.

◆ reset()

void ts::Reverb::reset ( )
overridevirtual

Clears all internal state.

Implements ts::Effect.

◆ process() [1/2]

void ts::Reverb::process ( std::span< const float > input,
std::span< float > left,
std::span< float > right )
overridevirtual

Processes a block.

Implements ts::Effect.

◆ process() [2/2]

void ts::Reverb::process ( std::span< const float > input,
std::span< const float > chorus_left,
std::span< const float > chorus_right,
std::span< float > left,
std::span< float > right )

Processes a block with the chorus feeding into it; either chorus span may be empty.

Member Data Documentation

◆ ring_size

int ts::Reverb::ring_size = 65536
staticconstexpr

Size of the shared delay ring.


The documentation for this class was generated from the following file: