Collection of tools useful for audio production
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.

200 lines
7.5KB

  1. /*
  2. * Custom types to store LADSPA-RDF information
  3. * Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * For a full copy of the GNU General Public License see the COPYING file
  16. */
  17. #ifndef LADSPA_RDF_INCLUDED
  18. #define LADSPA_RDF_INCLUDED
  19. // FIXME - use LADSPA_PORT_UNIT_xxx
  20. #include <cstdlib>
  21. // Base Types
  22. typedef float LADSPA_Data;
  23. typedef int LADSPA_Property;
  24. typedef unsigned long long LADSPA_PluginType;
  25. // Unit Types
  26. #define LADSPA_UNIT_DB 0x01
  27. #define LADSPA_UNIT_COEF 0x02
  28. #define LADSPA_UNIT_HZ 0x04
  29. #define LADSPA_UNIT_S 0x08
  30. #define LADSPA_UNIT_MS 0x10
  31. #define LADSPA_UNIT_MIN 0x20
  32. #define LADSPA_UNIT_CLASS_AMPLITUDE (LADSPA_UNIT_DB|LADSPA_UNIT_COEF)
  33. #define LADSPA_UNIT_CLASS_FREQUENCY (LADSPA_UNIT_HZ)
  34. #define LADSPA_UNIT_CLASS_TIME (LADSPA_UNIT_S|LADSPA_UNIT_MS|LADSPA_UNIT_MIN)
  35. #define LADSPA_IS_UNIT_DB(x) ((x) == LADSPA_UNIT_DB)
  36. #define LADSPA_IS_UNIT_COEF(x) ((x) == LADSPA_UNIT_COEF)
  37. #define LADSPA_IS_UNIT_HZ(x) ((x) == LADSPA_UNIT_HZ)
  38. #define LADSPA_IS_UNIT_S(x) ((x) == LADSPA_UNIT_S)
  39. #define LADSPA_IS_UNIT_MS(x) ((x) == LADSPA_UNIT_MS)
  40. #define LADSPA_IS_UNIT_MIN(x) ((x) == LADSPA_UNIT_MIN)
  41. #define LADSPA_IS_UNIT_CLASS_AMPLITUDE(x) ((x) & LADSPA_UNIT_CLASS_AMPLITUDE)
  42. #define LADSPA_IS_UNIT_CLASS_FREQUENCY(x) ((x) & LADSPA_UNIT_CLASS_FREQUENCY)
  43. #define LADSPA_IS_UNIT_CLASS_TIME(x) ((x) & LADSPA_UNIT_CLASS_TIME)
  44. // Port Types (Official API)
  45. #define LADSPA_PORT_INPUT 0x1
  46. #define LADSPA_PORT_OUTPUT 0x2
  47. #define LADSPA_PORT_CONTROL 0x4
  48. #define LADSPA_PORT_AUDIO 0x8
  49. // Port Hints
  50. #define LADSPA_PORT_UNIT 0x1
  51. #define LADSPA_PORT_DEFAULT 0x2
  52. #define LADSPA_PORT_LABEL 0x4
  53. #define LADSPA_PORT_HAS_UNIT(x) ((x) & LADSPA_PORT_UNIT)
  54. #define LADSPA_PORT_HAS_DEFAULT(x) ((x) & LADSPA_PORT_DEFAULT)
  55. #define LADSPA_PORT_HAS_LABEL(x) ((x) & LADSPA_PORT_LABEL)
  56. // Plugin Types
  57. #define LADSPA_CLASS_UTILITY 0x000000001LL
  58. #define LADSPA_CLASS_GENERATOR 0x000000002LL
  59. #define LADSPA_CLASS_SIMULATOR 0x000000004LL
  60. #define LADSPA_CLASS_OSCILLATOR 0x000000008LL
  61. #define LADSPA_CLASS_TIME 0x000000010LL
  62. #define LADSPA_CLASS_DELAY 0x000000020LL
  63. #define LADSPA_CLASS_PHASER 0x000000040LL
  64. #define LADSPA_CLASS_FLANGER 0x000000080LL
  65. #define LADSPA_CLASS_CHORUS 0x000000100LL
  66. #define LADSPA_CLASS_REVERB 0x000000200LL
  67. #define LADSPA_CLASS_FREQUENCY 0x000000400LL
  68. #define LADSPA_CLASS_FREQUENCY_METER 0x000000800LL
  69. #define LADSPA_CLASS_FILTER 0x000001000LL
  70. #define LADSPA_CLASS_LOWPASS 0x000002000LL
  71. #define LADSPA_CLASS_HIGHPASS 0x000004000LL
  72. #define LADSPA_CLASS_BANDPASS 0x000008000LL
  73. #define LADSPA_CLASS_COMB 0x000010000LL
  74. #define LADSPA_CLASS_ALLPASS 0x000020000LL
  75. #define LADSPA_CLASS_EQ 0x000040000LL
  76. #define LADSPA_CLASS_PARAEQ 0x000080000LL
  77. #define LADSPA_CLASS_MULTIEQ 0x000100000LL
  78. #define LADSPA_CLASS_AMPLITUDE 0x000200000LL
  79. #define LADSPA_CLASS_PITCH 0x000400000LL
  80. #define LADSPA_CLASS_AMPLIFIER 0x000800000LL
  81. #define LADSPA_CLASS_WAVESHAPER 0x001000000LL
  82. #define LADSPA_CLASS_MODULATOR 0x002000000LL
  83. #define LADSPA_CLASS_DISTORTION 0x004000000LL
  84. #define LADSPA_CLASS_DYNAMICS 0x008000000LL
  85. #define LADSPA_CLASS_COMPRESSOR 0x010000000LL
  86. #define LADSPA_CLASS_EXPANDER 0x020000000LL
  87. #define LADSPA_CLASS_LIMITER 0x040000000LL
  88. #define LADSPA_CLASS_GATE 0x080000000LL
  89. #define LADSPA_CLASS_SPECTRAL 0x100000000LL
  90. #define LADSPA_CLASS_NOTCH 0x200000000LL
  91. #define LADSPA_GROUP_DYNAMICS (LADSPA_CLASS_DYNAMICS|LADSPA_CLASS_COMPRESSOR|LADSPA_CLASS_EXPANDER|LADSPA_CLASS_LIMITER|LADSPA_CLASS_GATE)
  92. #define LADSPA_GROUP_AMPLITUDE (LADSPA_CLASS_AMPLITUDE|LADSPA_CLASS_AMPLIFIER|LADSPA_CLASS_WAVESHAPER|LADSPA_CLASS_MODULATOR|LADSPA_CLASS_DISTORTION|LADSPA_GROUP_DYNAMICS)
  93. #define LADSPA_GROUP_EQ (LADSPA_CLASS_EQ|LADSPA_CLASS_PARAEQ|LADSPA_CLASS_MULTIEQ)
  94. #define LADSPA_GROUP_FILTER (LADSPA_CLASS_FILTER|LADSPA_CLASS_LOWPASS|LADSPA_CLASS_HIGHPASS|LADSPA_CLASS_BANDPASS|LADSPA_CLASS_COMB|LADSPA_CLASS_ALLPASS|LADSPA_CLASS_NOTCH)
  95. #define LADSPA_GROUP_FREQUENCY (LADSPA_CLASS_FREQUENCY|LADSPA_CLASS_FREQUENCY_METER|LADSPA_GROUP_FILTER|LADSPA_GROUP_EQ|LADSPA_CLASS_PITCH)
  96. #define LADSPA_GROUP_SIMULATOR (LADSPA_CLASS_SIMULATOR|LADSPA_CLASS_REVERB)
  97. #define LADSPA_GROUP_TIME (LADSPA_CLASS_TIME|LADSPA_CLASS_DELAY|LADSPA_CLASS_PHASER|LADSPA_CLASS_FLANGER|LADSPA_CLASS_CHORUS|LADSPA_CLASS_REVERB)
  98. #define LADSPA_GROUP_GENERATOR (LADSPA_CLASS_GENERATOR|LADSPA_CLASS_OSCILLATOR)
  99. #define LADSPA_IS_PLUGIN_DYNAMICS(x) ((x) & LADSPA_GROUP_DYNAMICS)
  100. #define LADSPA_IS_PLUGIN_AMPLITUDE(x) ((x) & LADSPA_GROUP_AMPLITUDE)
  101. #define LADSPA_IS_PLUGIN_EQ(x) ((x) & LADSPA_GROUP_EQ)
  102. #define LADSPA_IS_PLUGIN_FILTER(x) ((x) & LADSPA_GROUP_FILTER)
  103. #define LADSPA_IS_PLUGIN_FREQUENCY(x) ((x) & LADSPA_GROUP_FREQUENCY)
  104. #define LADSPA_IS_PLUGIN_SIMULATOR(x) ((x) & LADSPA_GROUP_SIMULATOR)
  105. #define LADSPA_IS_PLUGIN_TIME(x) ((x) & LADSPA_GROUP_TIME)
  106. #define LADSPA_IS_PLUGIN_GENERATOR(x) ((x) & LADSPA_GROUP_GENERATOR)
  107. // Scale Point
  108. struct LADSPA_RDF_ScalePoint {
  109. LADSPA_Data Value;
  110. const char* Label;
  111. LADSPA_RDF_ScalePoint()
  112. : Value(0.0f),
  113. Label(nullptr) {}
  114. ~LADSPA_RDF_ScalePoint()
  115. {
  116. if (Label)
  117. ::free((void*)Label);
  118. }
  119. };
  120. // Port
  121. struct LADSPA_RDF_Port {
  122. LADSPA_Property Type;
  123. LADSPA_Property Hints;
  124. const char* Label;
  125. LADSPA_Data Default;
  126. LADSPA_Property Unit;
  127. unsigned long ScalePointCount;
  128. LADSPA_RDF_ScalePoint* ScalePoints;
  129. LADSPA_RDF_Port()
  130. : Type(0x0),
  131. Hints(0x0),
  132. Label(nullptr),
  133. Default(0.0f),
  134. Unit(0),
  135. ScalePointCount(0),
  136. ScalePoints(nullptr) {}
  137. ~LADSPA_RDF_Port()
  138. {
  139. if (Label)
  140. ::free((void*)Label);
  141. if (ScalePoints)
  142. delete[] ScalePoints;
  143. }
  144. };
  145. // Plugin
  146. struct LADSPA_RDF_Descriptor {
  147. LADSPA_PluginType Type;
  148. unsigned long UniqueID;
  149. const char* Title;
  150. const char* Creator;
  151. unsigned long PortCount;
  152. LADSPA_RDF_Port* Ports;
  153. LADSPA_RDF_Descriptor()
  154. : Type(0x0),
  155. UniqueID(0),
  156. Title(nullptr),
  157. Creator(nullptr),
  158. PortCount(0),
  159. Ports(nullptr) {}
  160. ~LADSPA_RDF_Descriptor()
  161. {
  162. if (Title)
  163. ::free((void*)Title);
  164. if (Creator)
  165. ::free((void*)Creator);
  166. if (Ports)
  167. delete[] Ports;
  168. }
  169. };
  170. #endif // LADSPA_RDF_INCLUDED