zynaddsubfx

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

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