Audio plugin host https://kx.studio/carla
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.

172 lines
6.2KB

  1. /*
  2. * Carla Bridge utils
  3. * Copyright (C) 2013-2014 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License as
  7. * published by the Free Software Foundation; either version 2 of
  8. * the License, or 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 doc/GPL.txt file.
  16. */
  17. #ifndef CARLA_BRIDGE_UTILS_HPP_INCLUDED
  18. #define CARLA_BRIDGE_UTILS_HPP_INCLUDED
  19. #include "CarlaRingBuffer.hpp"
  20. // -----------------------------------------------------------------------
  21. enum PluginBridgeInfoType {
  22. kPluginBridgeAudioCount = 0,
  23. kPluginBridgeMidiCount,
  24. kPluginBridgeParameterCount,
  25. kPluginBridgeProgramCount,
  26. kPluginBridgeMidiProgramCount,
  27. kPluginBridgePluginInfo,
  28. kPluginBridgeParameterInfo,
  29. kPluginBridgeParameterData,
  30. kPluginBridgeParameterRanges,
  31. kPluginBridgeProgramInfo,
  32. kPluginBridgeMidiProgramInfo,
  33. kPluginBridgeConfigure,
  34. kPluginBridgeSetParameterValue,
  35. kPluginBridgeSetDefaultValue,
  36. kPluginBridgeSetProgram,
  37. kPluginBridgeSetMidiProgram,
  38. kPluginBridgeSetCustomData,
  39. kPluginBridgeSetChunkData,
  40. kPluginBridgeUpdateNow,
  41. kPluginBridgeError
  42. };
  43. enum PluginBridgeOpcode {
  44. kPluginBridgeOpcodeNull = 0,
  45. kPluginBridgeOpcodeSetAudioPool = 1, // long
  46. kPluginBridgeOpcodeSetBufferSize = 2, // int
  47. kPluginBridgeOpcodeSetSampleRate = 3, // float
  48. kPluginBridgeOpcodeSetParameter = 4, // int, float
  49. kPluginBridgeOpcodeSetProgram = 5, // int
  50. kPluginBridgeOpcodeSetMidiProgram = 6, // int
  51. kPluginBridgeOpcodeMidiEvent = 7, // long, int, char[] (long = timeFrame, int = size max 4)
  52. kPluginBridgeOpcodeProcess = 8,
  53. kPluginBridgeOpcodeQuit = 9
  54. };
  55. const char* const CARLA_BRIDGE_MSG_HIDE_GUI = "CarlaBridgeHideGUI"; //!< Plugin -> Host call, tells host GUI is now hidden
  56. const char* const CARLA_BRIDGE_MSG_SAVED = "CarlaBridgeSaved"; //!< Plugin -> Host call, tells host state is saved
  57. #if 0
  58. const char* const CARLA_BRIDGE_MSG_SAVE_NOW = "CarlaBridgeSaveNow"; //!< Host -> Plugin call, tells plugin to save state now
  59. const char* const CARLA_BRIDGE_MSG_SET_CHUNK = "CarlaBridgeSetChunk"; //!< Host -> Plugin call, tells plugin to set chunk in file \a value
  60. const char* const CARLA_BRIDGE_MSG_SET_CUSTOM = "CarlaBridgeSetCustom"; //!< Host -> Plugin call, tells plugin to set a custom data set using \a value ("type·key·rvalue").
  61. //If \a type is 'chunk' or 'binary' \a rvalue refers to chunk file.
  62. #endif
  63. // -----------------------------------------------------------------------
  64. PRE_PACKED_STRUCTURE
  65. struct BridgeShmControl {
  66. union {
  67. void* runServer;
  68. char _padServer[32];
  69. };
  70. union {
  71. void* runClient;
  72. char _padClient[32];
  73. };
  74. RingBuffer ringBuffer;
  75. } POST_PACKED_STRUCTURE;
  76. // -----------------------------------------------------------------------
  77. static inline
  78. const char* PluginBridgeInfoType2str(const PluginBridgeInfoType type) noexcept
  79. {
  80. switch (type)
  81. {
  82. case kPluginBridgeAudioCount:
  83. return "kPluginBridgeAudioCount";
  84. case kPluginBridgeMidiCount:
  85. return "kPluginBridgeMidiCount";
  86. case kPluginBridgeParameterCount:
  87. return "kPluginBridgeParameterCount";
  88. case kPluginBridgeProgramCount:
  89. return "kPluginBridgeProgramCount";
  90. case kPluginBridgeMidiProgramCount:
  91. return "kPluginBridgeMidiProgramCount";
  92. case kPluginBridgePluginInfo:
  93. return "kPluginBridgePluginInfo";
  94. case kPluginBridgeParameterInfo:
  95. return "kPluginBridgeParameterInfo";
  96. case kPluginBridgeParameterData:
  97. return "kPluginBridgeParameterData";
  98. case kPluginBridgeParameterRanges:
  99. return "kPluginBridgeParameterRanges";
  100. case kPluginBridgeProgramInfo:
  101. return "kPluginBridgeProgramInfo";
  102. case kPluginBridgeMidiProgramInfo:
  103. return "kPluginBridgeMidiProgramInfo";
  104. case kPluginBridgeConfigure:
  105. return "kPluginBridgeConfigure";
  106. case kPluginBridgeSetParameterValue:
  107. return "kPluginBridgeSetParameterValue";
  108. case kPluginBridgeSetDefaultValue:
  109. return "kPluginBridgeSetDefaultValue";
  110. case kPluginBridgeSetProgram:
  111. return "kPluginBridgeSetProgram";
  112. case kPluginBridgeSetMidiProgram:
  113. return "kPluginBridgeSetMidiProgram";
  114. case kPluginBridgeSetCustomData:
  115. return "kPluginBridgeSetCustomData";
  116. case kPluginBridgeSetChunkData:
  117. return "kPluginBridgeSetChunkData";
  118. case kPluginBridgeUpdateNow:
  119. return "kPluginBridgeUpdateNow";
  120. case kPluginBridgeError:
  121. return "kPluginBridgeError";
  122. }
  123. carla_stderr("CarlaBackend::PluginBridgeInfoType2str(%i) - invalid type", type);
  124. return nullptr;
  125. }
  126. static inline
  127. const char* PluginBridgeOpcode2str(const PluginBridgeOpcode opcode) noexcept
  128. {
  129. switch (opcode)
  130. {
  131. case kPluginBridgeOpcodeNull:
  132. return "kPluginBridgeOpcodeNull";
  133. case kPluginBridgeOpcodeSetAudioPool:
  134. return "kPluginBridgeOpcodeSetAudioPool";
  135. case kPluginBridgeOpcodeSetBufferSize:
  136. return "kPluginBridgeOpcodeSetBufferSize";
  137. case kPluginBridgeOpcodeSetSampleRate:
  138. return "kPluginBridgeOpcodeSetSampleRate";
  139. case kPluginBridgeOpcodeSetParameter:
  140. return "kPluginBridgeOpcodeSetParameter";
  141. case kPluginBridgeOpcodeSetProgram:
  142. return "kPluginBridgeOpcodeSetProgram";
  143. case kPluginBridgeOpcodeSetMidiProgram:
  144. return "kPluginBridgeOpcodeSetMidiProgram";
  145. case kPluginBridgeOpcodeMidiEvent:
  146. return "kPluginBridgeOpcodeMidiEvent";
  147. case kPluginBridgeOpcodeProcess:
  148. return "kPluginBridgeOpcodeProcess";
  149. case kPluginBridgeOpcodeQuit:
  150. return "kPluginBridgeOpcodeQuit";
  151. }
  152. carla_stderr("CarlaBackend::PluginBridgeOpcode2str(%i) - invalid opcode", opcode);
  153. return nullptr;
  154. }
  155. // -----------------------------------------------------------------------
  156. #endif // CARLA_BRIDGE_UTILS_HPP_INCLUDED