zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

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