Reverb.cpp (6058B)
1 /* 2 ZynAddSubFX - a software synthesizer 3 4 Reverb.cpp - DPF + Zyn Plugin for Reverb 5 Copyright (C) 2015 Filipe Coelho 6 Author: Filipe Coelho 7 8 This program is free software; you can redistribute it and/or 9 modify it under the terms of the GNU General Public License 10 as published by the Free Software Foundation; either version 2 11 of the License, or (at your option) any later version. 12 */ 13 14 // DPF includes 15 #include "../AbstractFX.hpp" 16 17 // ZynAddSubFX includes 18 #include "Effects/Reverb.h" 19 20 /* ------------------------------------------------------------------------------------------------------------ 21 * Reverb plugin class */ 22 23 class ReverbPlugin : public AbstractPluginFX<zyn::Reverb> 24 { 25 public: 26 ReverbPlugin() 27 : AbstractPluginFX(13, 13) {} 28 29 protected: 30 /* -------------------------------------------------------------------------------------------------------- 31 * Information */ 32 33 /** 34 Get the plugin label. 35 This label is a short restricted name consisting of only _, a-z, A-Z and 0-9 characters. 36 */ 37 const char* getLabel() const noexcept override 38 { 39 return "Reverb"; 40 } 41 42 /** 43 Get an extensive comment/description about the plugin. 44 */ 45 const char* getDescription() const noexcept override 46 { 47 // TODO 48 return ""; 49 } 50 51 /** 52 Get the plugin unique Id. 53 This value is used by LADSPA, DSSI and VST plugin formats. 54 */ 55 int64_t getUniqueId() const noexcept override 56 { 57 return d_cconst('Z', 'X', 'r', 'v'); 58 } 59 60 /* -------------------------------------------------------------------------------------------------------- 61 * Init */ 62 63 /** 64 Initialize the parameter @a index. 65 This function will be called once, shortly after the plugin is created. 66 */ 67 void initParameter(uint32_t index, Parameter& parameter) noexcept override 68 { 69 parameter.hints = kParameterIsInteger; 70 parameter.unit = ""; 71 parameter.ranges.min = 0.0f; 72 parameter.ranges.max = 127.0f; 73 74 switch (index) 75 { 76 case 0: 77 parameter.hints |= kParameterIsAutomable; 78 parameter.name = "Time"; 79 parameter.symbol = "time"; 80 parameter.ranges.def = 63.0f; 81 break; 82 case 1: 83 parameter.name = "Delay"; 84 parameter.symbol = "delay"; 85 parameter.ranges.def = 24.0f; 86 break; 87 case 2: 88 parameter.hints |= kParameterIsAutomable; 89 parameter.name = "Feedback"; 90 parameter.symbol = "fb"; 91 parameter.ranges.def = 0.0f; 92 break; 93 case 3: 94 // FIXME: unused 95 parameter.name = "bw (unused)"; 96 parameter.symbol = "unused_bw"; 97 parameter.ranges.def = 0.0f; 98 break; 99 case 4: 100 // FIXME: unused 101 parameter.name = "E/R (unused)"; 102 parameter.symbol = "unused_er"; 103 parameter.ranges.def = 0.0f; 104 break; 105 case 5: 106 parameter.name = "Low-Pass Filter"; 107 parameter.symbol = "lpf"; 108 parameter.ranges.def = 85.0f; 109 break; 110 case 6: 111 parameter.name = "High-Pass Filter"; 112 parameter.symbol = "hpf"; 113 parameter.ranges.def = 5.0f; 114 break; 115 case 7: 116 parameter.hints |= kParameterIsAutomable; 117 parameter.name = "Damp"; 118 parameter.symbol = "damp"; 119 parameter.ranges.def = 83.0f; 120 parameter.ranges.min = 64.0f; 121 break; 122 case 8: 123 parameter.name = "Type"; 124 parameter.symbol = "type"; 125 parameter.ranges.def = 1.0f; 126 parameter.ranges.max = 2.0f; 127 /* 128 TODO: support for scalePoints in DPF 129 scalePoints[0].label = "Random"; 130 scalePoints[1].label = "Freeverb"; 131 scalePoints[2].label = "Bandwidth"; 132 scalePoints[0].value = 0.0f; 133 scalePoints[1].value = 1.0f; 134 scalePoints[2].value = 2.0f; 135 */ 136 break; 137 case 9: 138 parameter.name = "Room size"; 139 parameter.symbol = "size"; 140 parameter.ranges.def = 64.0f; 141 parameter.ranges.min = 1.0f; 142 break; 143 case 10: 144 parameter.name = "Bandwidth"; 145 parameter.symbol = "bw"; 146 parameter.ranges.def = 20.0f; 147 break; 148 } 149 } 150 151 /** 152 Set the name of the program @a index. 153 This function will be called once, shortly after the plugin is created. 154 */ 155 void initProgramName(uint32_t index, String& programName) noexcept override 156 { 157 switch (index) 158 { 159 case 0: 160 programName = "Cathedral 1"; 161 break; 162 case 1: 163 programName = "Cathedral 2"; 164 break; 165 case 2: 166 programName = "Cathedral 3"; 167 break; 168 case 3: 169 programName = "Hall 1"; 170 break; 171 case 4: 172 programName = "Hall 2"; 173 break; 174 case 5: 175 programName = "Room 1"; 176 break; 177 case 6: 178 programName = "Room 2"; 179 break; 180 case 7: 181 programName = "Basement"; 182 break; 183 case 8: 184 programName = "Tunnel"; 185 break; 186 case 9: 187 programName = "Echoed 1"; 188 break; 189 case 10: 190 programName = "Echoed 2"; 191 break; 192 case 11: 193 programName = "Very Long 1"; 194 break; 195 case 12: 196 programName = "Very Long 2"; 197 break; 198 } 199 } 200 201 DISTRHO_DECLARE_NON_COPY_CLASS(ReverbPlugin) 202 }; 203 204 /* ------------------------------------------------------------------------------------------------------------ 205 * Create plugin, entry point */ 206 207 START_NAMESPACE_DISTRHO 208 209 Plugin* createPlugin() 210 { 211 return new ReverbPlugin(); 212 } 213 214 END_NAMESPACE_DISTRHO