Phaser.cpp (6361B)
1 /* 2 ZynAddSubFX - a software synthesizer 3 4 Phaser.cpp - DPF + Zyn Plugin for Phaser 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/Phaser.h" 19 20 /* ------------------------------------------------------------------------------------------------------------ 21 * Phaser plugin class */ 22 23 class PhaserPlugin : public AbstractPluginFX<zyn::Phaser> 24 { 25 public: 26 PhaserPlugin() 27 : AbstractPluginFX(15, 12) {} 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 "Phaser"; 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', 'p', 'h'); 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|kParameterIsAutomable; 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.name = "LFO Frequency"; 78 parameter.symbol = "lfofreq"; 79 parameter.ranges.def = 36.0f; 80 break; 81 case 1: 82 parameter.name = "LFO Randomness"; 83 parameter.symbol = "lforand"; 84 parameter.ranges.def = 0.0f; 85 break; 86 case 2: 87 parameter.name = "LFO Type"; 88 parameter.symbol = "lfotype"; 89 parameter.ranges.def = 0.0f; 90 parameter.ranges.max = 1.0f; 91 /* 92 TODO: support for scalePoints in DPF 93 scalePoints[0].label = "Sine"; 94 scalePoints[1].label = "Triangle"; 95 scalePoints[0].value = 0.0f; 96 scalePoints[1].value = 1.0f; 97 */ 98 break; 99 case 3: 100 parameter.name = "LFO Stereo"; 101 parameter.symbol = "lfostereo"; 102 parameter.ranges.def = 64.0f; 103 break; 104 case 4: 105 parameter.name = "Depth"; 106 parameter.symbol = "depth"; 107 parameter.ranges.def = 110.0f; 108 break; 109 case 5: 110 parameter.name = "Feedback"; 111 parameter.symbol = "fb"; 112 parameter.ranges.def = 64.0f; 113 break; 114 case 6: 115 parameter.name = "Stages"; 116 parameter.symbol = "stages"; 117 parameter.ranges.def = 1.0f; 118 parameter.ranges.min = 1.0f; 119 parameter.ranges.max = 12.0f; 120 break; 121 case 7: 122 parameter.name = "L/R Cross|Offset"; 123 parameter.symbol = "lrcross"; 124 parameter.ranges.def = 0.0f; 125 break; 126 case 8: 127 parameter.hints |= kParameterIsBoolean; 128 parameter.name = "Subtract Output"; 129 parameter.symbol = "subsout"; 130 parameter.ranges.def = 0.0f; 131 parameter.ranges.max = 1.0f; 132 break; 133 case 9: 134 parameter.name = "Phase|Width"; 135 parameter.symbol = "phase"; 136 parameter.ranges.def = 20.0f; 137 break; 138 case 10: 139 parameter.hints |= kParameterIsBoolean; 140 parameter.name = "Hyper"; 141 parameter.symbol = "hyper"; 142 parameter.ranges.def = 0.0f; 143 parameter.ranges.max = 1.0f; 144 break; 145 case 11: 146 parameter.name = "Distortion"; 147 parameter.symbol = "dist"; 148 parameter.ranges.def = 0.0f; 149 break; 150 case 12: 151 parameter.hints |= kParameterIsBoolean; 152 parameter.name = "Analog"; 153 parameter.symbol = "analog"; 154 parameter.ranges.def = 0.0f; 155 parameter.ranges.max = 1.0f; 156 break; 157 } 158 } 159 160 /** 161 Set the name of the program @a index. 162 This function will be called once, shortly after the plugin is created. 163 */ 164 void initProgramName(uint32_t index, String& programName) noexcept override 165 { 166 switch (index) 167 { 168 case 0: 169 programName = "Phaser 1"; 170 break; 171 case 1: 172 programName = "Phaser 2"; 173 break; 174 case 2: 175 programName = "Phaser 3"; 176 break; 177 case 3: 178 programName = "Phaser 4"; 179 break; 180 case 4: 181 programName = "Phaser 5"; 182 break; 183 case 5: 184 programName = "Phaser 6"; 185 break; 186 case 6: 187 programName = "Analog Phaser 1"; 188 break; 189 case 7: 190 programName = "Analog Phaser 2"; 191 break; 192 case 8: 193 programName = "Analog Phaser 3"; 194 break; 195 case 9: 196 programName = "Analog Phaser 4"; 197 break; 198 case 10: 199 programName = "Analog Phaser 5"; 200 break; 201 case 11: 202 programName = "Analog Phaser 6"; 203 break; 204 } 205 } 206 207 DISTRHO_DECLARE_NON_COPY_CLASS(PhaserPlugin) 208 }; 209 210 /* ------------------------------------------------------------------------------------------------------------ 211 * Create plugin, entry point */ 212 213 START_NAMESPACE_DISTRHO 214 215 Plugin* createPlugin() 216 { 217 return new PhaserPlugin(); 218 } 219 220 END_NAMESPACE_DISTRHO