Riviera: Fast hybrid algorithmic reverb for modeling high-dimensional spaces (Hyper-Room Reverb)
Version: 1.3.1
Date: 1/30/2018
Author: Yuancheng [Mike] Luo
OSs: Win 7+, Mac OSX 10.7+ 

--------------------------------------------------------
Description: 
Riviera is a fast simulation of low-to-high order specular acoustic reflections within N-dimensional orthotope volumes (line, plate, room, tesseract, etc) or what I call "vooms" (volume + room). Normally, computing within high-dimension spaces is computationally expensive but some clever maths (see website) reduced the asymptotic costs to the point of practical use (e.g. a Reverb plugin). Combining this with fast time-varying frequency decay, some interesting sounding impulse responses (IRs) could be crafted. 

--------------------------------------------------------
Installation instructions:

Place the VST2 plugin (Riviera.dll for PC, Riviera.vst for mac) and VST3 plugin (Riviera.vst3 for PC) into their respective plugin directories.

e.g.
x86 or Win32 builds
C:\Program Files (x86)\Common Files\VSTPlugins
C:\Program Files (x86)\Common Files\VST3

x64 builds
C:\Program Files\Common Files\VSTPlugins
C:\Program Files\Common Files\VST3

mac universal build (i386 + x86_64) (OSX 10.7+)
/Library/Audio/Plug-Ins/VST/


For mac AU, place Riviera.component into the plugin directories.

e.g.
mac universal build (i386 + x86_64) (OSX 10.7+)
/Library/Audio/Plug-Ins/Components/


--------------------------------------------------------
Controls:
-Fine-grain adjustments of knob are possible with the mouse wheel + holding down either shift or ctr on keyboard.
-Double-click a parameter will reset it to default.

Voom (N-Orthotope) panel:  Generalization of room into arbitrary dimensions.
5 faders, each with three knobs determine the characteristics of each dimension of the voom.

Size: The length of the dimension in meters. The sound-source is effectively placed at the center of this dimension. Enlarging this tends to increase RT60 and sense of "spaciousness" due to greater separation of early reflections.

Depth: Where you (the listener) is positioned in whole (integer) meters relative to the center of the room. 0 percent is coincident to the sound-source so there's maximal delay between the direct sound and early reflections. 50 percent is coincident to the "wall" or boundary so the direct and early reflections are less distinguishable from reverb. Note that the IR is computed for depths that would map to whole meters so for a 6 meter dimension, there are only 4 positions the listener can be in (0, 1, 2, 3 meters from center).

Reflection: The dB loss incured per reflection between sound-source and boundary. Setting this to low values (e.g. 0.1 dB loss) will largely increase RT60 which got truncated to 5 seconds for performance reasons.

V1-V5 buttons: Enable/disable individual dimensions; enabling any combination of the N buttons generates an N-D room, disabling all dimensions will cause bypass. e.g. enabling (V1, V3, V5) generates a 3D room as does (V2, V3, V4). Note that in higher dimensional vooms, the reverb build-up creates a swell if you aren't coincident to the sound-source so there's hardly any distinction between direct, early, and late reflections. This motivates some time manipulation controls so that we may listen in these spaces.

Time panel: Manipulates geometry, distances between direct/early/late reflections, and more.

Stretch: A form of super-sampling of the underlying space which has the effect of spacing all the reflections out. This is geometrically equivalent to scaling your the voom and depth by a constant which will allow us to achieve long reverb tails.
1: no change
>1: Oversample geometry for longer IR
Note that freq. decay is applied after the fact so the reported RT60 will not scale proportionately.

Reverse: Mirrors the first % of the IR to create a pre-verb / pre-fading effect. 0% default gives no pre-verb where the first non-zero tap is the direct onset of the sound-source. 100% completely reverses the IR.

Sampling: Biases the sampling of the underlying geometry towards either earlier or later reflections ones. In physical terms, this is modeling variable acceleration of the speed-of-sound without annoying Doppler effects. If late is oversampled (sound-velocty accelerates over time), the result is a long IR with distinct (well-separated) early reflections (more like echos). If early is oversampled (sound-velocity decelerates overtime), the result is a short IR with a very fast attack with a diminished reverb tail as all the earlier reflections have been compressed towards the direct sound-source.

Attenuation: This modifies the generalization of the inverse square law in higher-dimensions for sound-source energy loss. Low g causes less attenuation over distances (slow roll-off) which will emphasize the late-tail / reverb over the direct+early reflections without IR length. Large g causes more attenuation (fast roll-off) which will emphasize direct-early over reverb.
Delay: The direct sound-source normally has a non-zero time-of-arrival depending on the listener depth but for practical usage (mixing), a separate control was created for delaying the entire IR. By default, physical delay between source-listener is truncated to 0. Use this in conjunction with T0 (see below) and the mix knob to do pre-fading.

Onset (T0): Direct truncation of the early part of the IR. Use it to remove the direct sound-source onset, start the IR anywhere within the reverb tail,  or decrease pre-fading time and even gate the reverb tail with the reverse knob.

Lag: Additional latency in ms.

Frequency panel: All mediums (air, water, dry wall, glass) have frequency dependent absorption characteristics that will color the IR over time (see spectrogram). Two knobs are provided that parametrically fits a smooth function between 0 to pi radians in unnormalized frequency domain.

High/low decay or dampening: Increasing these will more quickly attenuate respective high and low frequencies from sampling_rate/2 Hz to 0 Hz over time; all freq. between have decay bounded between these two settings. Setting them equal to each other has the effect of applying frequency-independent dB loss (i.e. gain control).

Low cut Hz/Quality: Filter out low frequencies from 0 to f0 Hz with strength Q. Note that large Q will delay the signal a little (due to linear-phase) so watch the latency or use the T0 control to cut out the initial pre-ring.

FFT Size: Controls the internal max-power block-size parameter without effecting latency (default latency is twice the latency set within the DAW due to some DAWs using variable block-sizes). Decreasing this will lower peak real-time processing at the cost of increase average real-time CPU usage. Increasing this will raise peak real-time processing but with decreased the average real-time CPU usage.

Misc panel:
Your standard pan, stereo and mix (wet/dry) controls. These all have frame-buffer length latency and will not incur a recomputation of the IR.

Pan: Applies dB loss to either left or right channels.

Haas: Applies low ms delay to either left or right channels.

Mix: Basic fader between original and processed signals.

Stereo Mid/Side: Far left collapses outputs to mono, far right outputs left-right and right-left respectively.

Phase Offset: Phase delays left channel when turned left, right channel when turned right. Use this to pan the stereo image without introducing channel gain differences (pan) and slapback (Haas).

Gain: Adjsut output levels for dB gain/loss.

Fast mode: Enable this so that non-voom parameter updates are faster at the expense of more memory usage.

IR normalization: If enabled, will normalize impulse response if sum of squared exceeds 1. Otherwise, beware of speakers if you start adjusting attenuation and reflection settings too aggressively.

---
Waveform and spectrogram:
These are visualizers of the magnitude IR and IR spectrogram that were crafted. Don't rely on these instead of your ears! (unless you're interested in the science)

---
Presets: 26 configurations. Go explore and make your own! ;)

--------------------------------------------------------
Performance: 
FIRs are computed on a separate thread when parameters change during runtime and can take anywhere from a few ms to several seconds depending on complexity. On an intel-i7 laptop, the real-time thread CPU usage varies from 0.5% to 2.0% depending on reverb length (2 sec to 20 sec) and latency. Systems at minimum must have SSE2 and gain a slight improvement if AVX are enabled.

--------------------------------------------------------
Credits:
Integrations with VST2/VST3 were done using WDL-OL (enhanced Cockos' IPLUG). Thanks Oli Larkin for working on that library and targeting all those APIs and cross-platforms! Many headaches were avoided. Thanks Steinberg for developing the VST framework in the first place.

The remainder (algorithms, DSP, GUI design) were done by Yuancheng [Mike] Luo.

--------------------------------------------------------
If you like what you hear, visit my site at 
https://www.nuspaceaudio.com/
and hit the donate button ;)

Email me at luoyuancheng@gmail.com if you have any comments/feedback.

--------------------------------------------------------
License:
The software is free to use but in no event will the author be held liable for any damages arising from the use of this software. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
