1 /*
2  * Dragonfly Reverb, copyright (c) 2019 Michael Willis, Rob van den Berg
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 3 of
7  * the License, or any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * For a full copy of the GNU General Public License see the LICENSE file.
15  */
16 
17 #include <cstdint>
18 #include <Param.hpp>
19 
20 #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED
21 #define DISTRHO_PLUGIN_INFO_H_INCLUDED
22 
23 #define DISTRHO_PLUGIN_BRAND "Dragonfly"
24 #define DISTRHO_PLUGIN_NAME  "Dragonfly Room Reverb"
25 #define DISTRHO_PLUGIN_URI   "urn:dragonfly:room"
26 
27 #define DISTRHO_PLUGIN_HAS_UI        1
28 #define DISTRHO_PLUGIN_IS_RT_SAFE    1
29 #define DISTRHO_PLUGIN_NUM_INPUTS    2
30 #define DISTRHO_PLUGIN_NUM_OUTPUTS   2
31 #define DISTRHO_PLUGIN_WANT_STATE    1
32 
33 #define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:ReverbPlugin"
34 
35 enum Parameters
36 {
37     paramDry = 0,
38     paramEarly,
39     paramEarlySend,
40     paramLate,
41     paramSize,
42     paramWidth,
43     paramPredelay,
44     paramDecay,
45     paramDiffuse,
46     paramSpin,
47     paramWander,
48     paramInHighCut,
49     paramEarlyDamp,
50     paramLateDamp,
51     paramBoost,
52     paramBoostLPF,
53     paramInLowCut,
54     paramCount
55 };
56 
57 static Param PARAMS[paramCount] = {
58   {paramDry,        "Dry Level",    "dry_level",      0.0f,   100.0f,   "%"},
59   {paramEarly,      "Early Level",  "early_level",    0.0f,   100.0f,   "%"},
60   {paramEarlySend,  "Early Send",   "early_send",     0.0f,   100.0f,   "%"},
61   {paramLate,       "Late Level",   "late_level",     0.0f,   100.0f,   "%"},
62   {paramSize,       "Size",         "size",           8.0f,    32.0f,   "m"},
63   {paramWidth,      "Width",        "width",         50.0f,   150.0f,   "%"},
64   {paramPredelay,   "Predelay",     "predelay",       0.0f,   100.0f,  "ms"},
65   {paramDecay,      "Decay",        "decay",          0.1f,    10.0f,   "s"},
66   {paramDiffuse,    "Diffuse",      "diffuse",        0.0f,   100.0f,   "%"},
67   {paramSpin,       "Spin",         "spin",           0.0f,     5.0f,  "Hz"},
68   {paramWander,     "Wander",       "wander",         0.0f,   100.0f,   "%"},
69   {paramInHighCut,  "High Cut",     "in_high_cut", 1000.0f, 16000.0f,  "Hz"},
70   {paramEarlyDamp,  "Early Damp",   "early_damp",  1000.0f, 16000.0f,  "Hz"},
71   {paramLateDamp,   "Late Damp",    "late_damp",   1000.0f, 16000.0f,  "Hz"},
72   {paramBoost,      "Low Boost",    "low_boost",      0.0f,   100.0f,   "%"},
73   {paramBoostLPF,   "Boost Freq",   "boost_freq",    50.0f,  1050.0f,  "Hz"},
74   {paramInLowCut,   "Low Cut",      "in_low_cut",     0.0f,   200.0f,  "Hz"}
75 };
76 
77 const int NUM_BANKS = 5;
78 const int PRESETS_PER_BANK = 5;
79 
80 typedef struct {
81   const char *name;
82   const float params[paramCount];
83 } Preset;
84 
85 typedef struct {
86   const char *name;
87   const Preset presets[PRESETS_PER_BANK];
88 } Bank;
89 
90 static Bank banks[NUM_BANKS] = {
91   {
92     "Small", {               // dry, early, e. send, late, size, width, delay, decay, diffuse, spin, wander, high cut, early damp, late damp, bass boost, boost lpf, low cut
93       {"Small Bright Room",  { 80.0,  10.0,    20.0, 20.0,  8.0,  90.0,   4.0,   0.2,    60.0,  0.4,   40.0,    16000,      16000,     16000,       20.0,       600,    4.0}},
94       {"Small Clear Room",   { 80.0,  10.0,    20.0, 20.0,  8.0,  90.0,   4.0,   0.2,    60.0,  0.8,   40.0,    16000,      11200,     10000,       40.0,       600,    4.0}},
95       {"Small Dark Room",    { 80.0,  10.0,    20.0, 20.0,  8.0,  90.0,   4.0,   0.3,    70.0,  1.6,   20.0,    16000,       6400,      5500,       60.0,      1000,    4.0}},
96       {"Small Drum Room",    { 80.0,  10.0,    20.0, 20.0,  9.0,  90.0,   8.0,   0.2,    24.0,  2.1,   10.0,    16000,       8200,      7000,       40.0,       400,    4.0}},
97       {"Small Vocal Room",   { 80.0,  10.0,    20.0, 20.0,  8.0,  90.0,   0.0,   0.3,    86.0,  2.4,   12.0,    16000,       7600,      6400,       20.0,       400,    4.0}}
98     }
99   },
100   {
101     "Medium", {              // dry, early, e. send, late, size, width, delay, decay, diffuse, spin, wander, high cut, early damp, late damp, bass boost, boost lpf, low cut
102       {"Medium Bright Room", { 80.0,  10.0,    20.0, 20.0, 12.0, 100.0,   8.0,   0.4,    60.0,  0.4,   40.0,    16000,      16000,     14000,       25.0,       600,    4.0}},
103       {"Medium Clear Room",  { 80.0,  10.0,    20.0, 20.0, 12.0, 100.0,   8.0,   0.4,    70.0,  0.8,   40.0,    16000,      10000,      9400,       50.0,       600,    4.0}},
104       {"Medium Dark Room",   { 80.0,  10.0,    20.0, 20.0, 12.0, 100.0,   8.0,   0.5,    70.0,  1.6,   20.0,    16000,       5800,      4600,       70.0,      1000,    4.0}},
105       {"Medium Drum Room",   { 80.0,  10.0,    20.0, 20.0, 12.0, 100.0,  12.0,   0.4,    32.0,  2.4,   10.0,    16000,       8000,      6000,       50.0,       300,    4.0}},
106       {"Medium Vocal Room",  { 80.0,  10.0,    20.0, 20.0, 12.0, 100.0,   2.0,   0.6,    92.0,  2.7,   12.0,    16000,       8000,      6000,       25.0,       400,    4.0}}
107     }
108   },
109   {
110     "Large", {               // dry, early, e. send, late, size, width, delay, decay, diffuse, spin, wander, high cut, early damp, late damp, bass boost, boost lpf, low cut
111       {"Large Bright Room",  { 80.0,  10.0,    20.0, 20.0, 15.0, 100.0,  12.0,   0.7,    70.0,  0.4,   40.0,    16000,      16000,     14000,       30.0,       600,    4.0}},
112       {"Large Clear Room",   { 80.0,  10.0,    20.0, 20.0, 15.0, 100.0,  12.0,   0.7,    80.0,  0.4,   40.0,    16000,       9400,      8500,       60.0,       600,    4.0}},
113       {"Large Dark Room",    { 80.0,  10.0,    20.0, 20.0, 15.0, 100.0,  12.0,   0.8,    80.0,  1.6,   20.0,    16000,       5200,      4000,       80.0,      1000,    4.0}},
114       {"Large Drum Room",    { 80.0,  10.0,    20.0, 20.0, 14.0, 100.0,  16.0,   0.7,    40.0,  2.7,   10.0,    16000,       8000,      5000,       60.0,       300,    4.0}},
115       {"Large Vocal Room",   { 80.0,  10.0,    20.0, 20.0, 15.0, 100.0,   4.0,   1.0,    98.0,  3.1,   12.0,    16000,       7000,      5000,       30.0,       400,    4.0}}
116     }
117   },
118   {
119     "Halls", {               // dry, early, e. send, late, size, width, delay, decay, diffuse, spin, wander, high cut, early damp, late damp, bass boost, boost lpf, low cut
120       {"Bright Hall",        { 80.0,  10.0,    20.0, 20.0, 24.0, 100.0,  12.0,   1.6,    78.0,  0.4,   40.0,    16000,      16000,     14000,       30.0,       600,    4.0}},
121       {"Clear Hall",         { 80.0,  10.0,    20.0, 20.0, 24.0, 100.0,  12.0,   1.6,    84.0,  0.4,   40.0,    16000,      14000,     12000,       60.0,       600,    4.0}},
122       {"Dark Hall",          { 80.0,  10.0,    20.0, 20.0, 24.0, 100.0,  12.0,   1.9,    80.0,  1.6,   20.0,    16000,       8000,      6000,       80.0,      1000,    4.0}},
123       {"Percussion Hall",    { 80.0,  10.0,    20.0, 20.0, 20.0, 100.0,  16.0,   1.5,    40.0,  2.7,   10.0,    16000,       7000,      5000,       60.0,       300,    4.0}},
124       {"Vocal Hall",         { 80.0,  10.0,    20.0, 20.0, 25.0, 100.0,   4.0,   2.0,    98.0,  3.1,   12.0,    16000,       6000,      5000,       30.0,       400,    4.0}}
125     }
126   },
127   {
128     "Effects", {             // dry, early, e. send, late, size, width, delay, decay, diffuse, spin, wander, high cut, early damp, late damp, bass boost, boost lpf, low cut
129       {"Bright Plate",       { 80.0,  10.0,    20.0, 20.0, 10.0, 100.0,   0.0,   1.8,    78.0,  1.6,   40.0,    16000,      16000,     15000,       10.0,      1000,    4.0}},
130       {"Dark Plate",         { 80.0,  10.0,    20.0, 20.0, 10.0, 100.0,   0.0,   2.0,    78.0,  0.4,   20.0,    16000,       5200,      4000,       40.0,       500,    4.0}},
131       {"Brick Wall",         { 80.0,  10.0,    20.0, 20.0, 20.0,  80.0,  80.0,   0.4,    12.0,  0.2,    5.0,    16000,      16000,     15000,       10.0,       200,    4.0}},
132       {"Echo Chamber",       { 80.0,  10.0,    20.0, 20.0, 12.0, 120.0,  10.0,   4.0,    24.0,  2.3,   80.0,    16000,      12000,      9000,       20.0,       500,    4.0}},
133       {"Long Tunnel",        { 80.0,  10.0,    20.0, 20.0, 25.0,  50.0,   0.0,   8.0,    90.0,  0.4,   10.0,    16000,       8000,      6000,       50.0,       500,    4.0}},
134     }
135   }
136 };
137 
138 const int DEFAULT_BANK   = 1; // Medium Rooms
139 const int DEFAULT_PRESET = 1; // Second preset in each bank
140 
141 
142 #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED
143