Collection of DPF-based plugins for packaging
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

243 lines
8.1KB

  1. /*
  2. * DISTRHO MVerb, a DPF'ied MVerb.
  3. * Copyright (c) 2010 Martin Eastwood
  4. * Copyright (C) 2015-2022 Filipe Coelho <falktx@falktx.com>
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License as
  8. * published by the Free Software Foundation; either version 3 of
  9. * the License, or any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * For a full copy of the GNU General Public License see the LICENSE file.
  17. */
  18. #include "DistrhoPluginMVerb.hpp"
  19. START_NAMESPACE_DISTRHO
  20. // -----------------------------------------------------------------------
  21. DistrhoPluginMVerb::DistrhoPluginMVerb()
  22. : Plugin(MVerb<float>::NUM_PARAMS, 5, 0) // 5 program, 0 states
  23. {
  24. fVerb.setSampleRate(getSampleRate());
  25. // set initial values
  26. loadProgram(0);
  27. }
  28. // -----------------------------------------------------------------------
  29. // Init
  30. void DistrhoPluginMVerb::initAudioPort(bool input, uint32_t index, AudioPort& port)
  31. {
  32. port.groupId = kPortGroupStereo;
  33. Plugin::initAudioPort(input, index, port);
  34. }
  35. void DistrhoPluginMVerb::initParameter(uint32_t index, Parameter& parameter)
  36. {
  37. parameter.unit = "%";
  38. parameter.ranges.min = 0.0f;
  39. parameter.ranges.max = 100.0f;
  40. // default values taken from 1st preset
  41. switch (index)
  42. {
  43. case MVerb<float>::DAMPINGFREQ:
  44. parameter.hints = kParameterIsAutomatable;
  45. parameter.name = "Damping";
  46. parameter.symbol = "damping";
  47. parameter.ranges.def = 0.5f * 100.0f;
  48. break;
  49. case MVerb<float>::DENSITY:
  50. parameter.hints = kParameterIsAutomatable;
  51. parameter.name = "Density";
  52. parameter.symbol = "density";
  53. parameter.ranges.def = 0.5f * 100.0f;
  54. break;
  55. case MVerb<float>::BANDWIDTHFREQ:
  56. parameter.hints = kParameterIsAutomatable;
  57. parameter.name = "Bandwidth";
  58. parameter.symbol = "bandwidth";
  59. parameter.ranges.def = 0.5f * 100.0f;
  60. break;
  61. case MVerb<float>::DECAY:
  62. parameter.hints = kParameterIsAutomatable;
  63. parameter.name = "Decay";
  64. parameter.symbol = "decay";
  65. parameter.ranges.def = 0.5f * 100.0f;
  66. break;
  67. case MVerb<float>::PREDELAY:
  68. parameter.hints = kParameterIsAutomatable;
  69. parameter.name = "Predelay";
  70. parameter.symbol = "predelay";
  71. parameter.ranges.def = 0.5f * 100.0f;
  72. break;
  73. case MVerb<float>::SIZE:
  74. parameter.hints = kParameterIsAutomatable;
  75. parameter.name = "Size";
  76. parameter.symbol = "size";
  77. parameter.ranges.def = 0.75f * 100.0f;
  78. parameter.ranges.min = 0.05f * 100.0f;
  79. break;
  80. case MVerb<float>::GAIN:
  81. parameter.hints = kParameterIsAutomatable;
  82. parameter.name = "Gain";
  83. parameter.symbol = "gain";
  84. parameter.ranges.def = 1.0f * 100.0f;
  85. break;
  86. case MVerb<float>::MIX:
  87. parameter.hints = kParameterIsAutomatable;
  88. parameter.name = "Mix";
  89. parameter.symbol = "mix";
  90. parameter.ranges.def = 0.5f * 100.0f;
  91. break;
  92. case MVerb<float>::EARLYMIX:
  93. parameter.hints = kParameterIsAutomatable;
  94. parameter.name = "Early/Late Mix";
  95. parameter.symbol = "earlymix";
  96. parameter.ranges.def = 0.5f * 100.0f;
  97. break;
  98. }
  99. }
  100. void DistrhoPluginMVerb::initProgramName(uint32_t index, String& programName)
  101. {
  102. switch(index)
  103. {
  104. case 0:
  105. programName = "Halves";
  106. break;
  107. case 1:
  108. programName = "Dark";
  109. break;
  110. case 2:
  111. programName = "Cupboard";
  112. break;
  113. case 3:
  114. programName = "Stadium";
  115. break;
  116. case 4:
  117. programName = "Subtle";
  118. break;
  119. }
  120. }
  121. // -----------------------------------------------------------------------
  122. // Internal data
  123. float DistrhoPluginMVerb::getParameterValue(uint32_t index) const
  124. {
  125. return fVerb.getParameter(static_cast<int>(index)) * 100.0f;
  126. }
  127. void DistrhoPluginMVerb::setParameterValue(uint32_t index, float value)
  128. {
  129. fVerb.setParameter(static_cast<int>(index), value / 100.0f);
  130. }
  131. void DistrhoPluginMVerb::loadProgram(uint32_t index)
  132. {
  133. // NOTE: DAMPINGFREQ is reversed
  134. switch(index)
  135. {
  136. case 0:
  137. fVerb.setParameter(MVerb<float>::DAMPINGFREQ, 0.5f);
  138. fVerb.setParameter(MVerb<float>::DENSITY, 0.5f);
  139. fVerb.setParameter(MVerb<float>::BANDWIDTHFREQ, 0.5f);
  140. fVerb.setParameter(MVerb<float>::DECAY, 0.5f);
  141. fVerb.setParameter(MVerb<float>::PREDELAY, 0.5f);
  142. fVerb.setParameter(MVerb<float>::SIZE, 0.75f);
  143. fVerb.setParameter(MVerb<float>::GAIN, 1.0f);
  144. fVerb.setParameter(MVerb<float>::MIX, 0.5f);
  145. fVerb.setParameter(MVerb<float>::EARLYMIX, 0.5f);
  146. break;
  147. case 1:
  148. fVerb.setParameter(MVerb<float>::DAMPINGFREQ, 0.1f);
  149. fVerb.setParameter(MVerb<float>::DENSITY, 0.5f);
  150. fVerb.setParameter(MVerb<float>::BANDWIDTHFREQ, 0.1f);
  151. fVerb.setParameter(MVerb<float>::DECAY, 0.5f);
  152. fVerb.setParameter(MVerb<float>::PREDELAY, 0.0f);
  153. fVerb.setParameter(MVerb<float>::SIZE, 0.5f);
  154. fVerb.setParameter(MVerb<float>::GAIN, 1.0f);
  155. fVerb.setParameter(MVerb<float>::MIX, 0.5f);
  156. fVerb.setParameter(MVerb<float>::EARLYMIX, 0.75f);
  157. break;
  158. case 2:
  159. fVerb.setParameter(MVerb<float>::DAMPINGFREQ, 1.0f);
  160. fVerb.setParameter(MVerb<float>::DENSITY, 0.5f);
  161. fVerb.setParameter(MVerb<float>::BANDWIDTHFREQ, 1.0f);
  162. fVerb.setParameter(MVerb<float>::DECAY, 0.5f);
  163. fVerb.setParameter(MVerb<float>::PREDELAY, 0.0f);
  164. fVerb.setParameter(MVerb<float>::SIZE, 0.25f);
  165. fVerb.setParameter(MVerb<float>::GAIN, 1.0f);
  166. fVerb.setParameter(MVerb<float>::MIX, 0.35f);
  167. fVerb.setParameter(MVerb<float>::EARLYMIX, 0.75f);
  168. break;
  169. case 3:
  170. fVerb.setParameter(MVerb<float>::DAMPINGFREQ, 1.0f);
  171. fVerb.setParameter(MVerb<float>::DENSITY, 0.5f);
  172. fVerb.setParameter(MVerb<float>::BANDWIDTHFREQ, 1.0f);
  173. fVerb.setParameter(MVerb<float>::DECAY, 0.5f);
  174. fVerb.setParameter(MVerb<float>::PREDELAY, 0.0f);
  175. fVerb.setParameter(MVerb<float>::SIZE, 1.0f);
  176. fVerb.setParameter(MVerb<float>::GAIN, 1.0f);
  177. fVerb.setParameter(MVerb<float>::MIX, 0.35f);
  178. fVerb.setParameter(MVerb<float>::EARLYMIX, 0.75f);
  179. break;
  180. case 4:
  181. fVerb.setParameter(MVerb<float>::DAMPINGFREQ, 1.0f);
  182. fVerb.setParameter(MVerb<float>::DENSITY, 0.5f);
  183. fVerb.setParameter(MVerb<float>::BANDWIDTHFREQ, 1.0f);
  184. fVerb.setParameter(MVerb<float>::DECAY, 0.5f);
  185. fVerb.setParameter(MVerb<float>::PREDELAY, 0.0f);
  186. fVerb.setParameter(MVerb<float>::SIZE, 0.5f);
  187. fVerb.setParameter(MVerb<float>::GAIN, 1.0f);
  188. fVerb.setParameter(MVerb<float>::MIX, 0.15f);
  189. fVerb.setParameter(MVerb<float>::EARLYMIX, 0.75f);
  190. break;
  191. }
  192. fVerb.reset();
  193. }
  194. // -----------------------------------------------------------------------
  195. // Process
  196. void DistrhoPluginMVerb::activate()
  197. {
  198. fVerb.reset();
  199. }
  200. void DistrhoPluginMVerb::run(const float** inputs, float** outputs, uint32_t frames)
  201. {
  202. fVerb.process(inputs, outputs, static_cast<int>(frames));
  203. }
  204. // -----------------------------------------------------------------------
  205. // Callbacks
  206. void DistrhoPluginMVerb::sampleRateChanged(double newSampleRate)
  207. {
  208. fVerb.setSampleRate(newSampleRate);
  209. }
  210. // -----------------------------------------------------------------------
  211. Plugin* createPlugin()
  212. {
  213. return new DistrhoPluginMVerb();
  214. }
  215. // -----------------------------------------------------------------------
  216. END_NAMESPACE_DISTRHO