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
8.1KB

  1. /*
  2. * Carla Bridge definitions
  3. * Copyright (C) 2013-2022 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_DEFINES_HPP_INCLUDED
  18. #define CARLA_BRIDGE_DEFINES_HPP_INCLUDED
  19. #include "CarlaDefines.h"
  20. // how much backwards compatible we are
  21. #define CARLA_PLUGIN_BRIDGE_API_VERSION_MINIMUM 6
  22. // current API version, bumped when something is added
  23. #define CARLA_PLUGIN_BRIDGE_API_VERSION_CURRENT 10
  24. // -------------------------------------------------------------------------------------------------------------------
  25. // Server sends these to client during RT
  26. enum PluginBridgeRtClientOpcode {
  27. kPluginBridgeRtClientNull = 0,
  28. kPluginBridgeRtClientSetAudioPool, // ulong/ptr
  29. kPluginBridgeRtClientSetBufferSize, // uint
  30. kPluginBridgeRtClientSetSampleRate, // double
  31. kPluginBridgeRtClientSetOnline, // bool
  32. kPluginBridgeRtClientControlEventParameter, // uint/frame, byte/chan, ushort, float
  33. kPluginBridgeRtClientControlEventMidiBank, // uint/frame, byte/chan, ushort
  34. kPluginBridgeRtClientControlEventMidiProgram, // uint/frame, byte/chan, ushort
  35. kPluginBridgeRtClientControlEventAllSoundOff, // uint/frame, byte/chan
  36. kPluginBridgeRtClientControlEventAllNotesOff, // uint/frame, byte/chan
  37. kPluginBridgeRtClientMidiEvent, // uint/frame, byte/port, byte/size, byte[]/data
  38. kPluginBridgeRtClientProcess, // uint/frames
  39. kPluginBridgeRtClientQuit
  40. };
  41. // Server sends these to client during non-RT
  42. enum PluginBridgeNonRtClientOpcode {
  43. kPluginBridgeNonRtClientNull = 0,
  44. kPluginBridgeNonRtClientVersion, // uint
  45. kPluginBridgeNonRtClientPing,
  46. kPluginBridgeNonRtClientPingOnOff, // bool
  47. kPluginBridgeNonRtClientActivate,
  48. kPluginBridgeNonRtClientDeactivate,
  49. kPluginBridgeNonRtClientInitialSetup, // uint, double
  50. kPluginBridgeNonRtClientSetParameterValue, // uint, float
  51. kPluginBridgeNonRtClientSetParameterMidiChannel, // uint, byte
  52. kPluginBridgeNonRtClientSetParameterMappedControlIndex, // uint, short
  53. kPluginBridgeNonRtClientSetProgram, // int
  54. kPluginBridgeNonRtClientSetMidiProgram, // int
  55. kPluginBridgeNonRtClientSetCustomData, // uint/size, str[], uint/size, str[], uint/size, str[]
  56. kPluginBridgeNonRtClientSetChunkDataFile, // uint/size, str[] (filename, base64 content)
  57. kPluginBridgeNonRtClientSetCtrlChannel, // short
  58. kPluginBridgeNonRtClientSetOption, // uint/option, bool
  59. kPluginBridgeNonRtClientGetParameterText, // uint
  60. kPluginBridgeNonRtClientPrepareForSave,
  61. kPluginBridgeNonRtClientRestoreLV2State,
  62. kPluginBridgeNonRtClientShowUI,
  63. kPluginBridgeNonRtClientHideUI,
  64. kPluginBridgeNonRtClientUiParameterChange, // uint, float
  65. kPluginBridgeNonRtClientUiProgramChange, // uint
  66. kPluginBridgeNonRtClientUiMidiProgramChange, // uint
  67. kPluginBridgeNonRtClientUiNoteOn, // byte, byte, byte
  68. kPluginBridgeNonRtClientUiNoteOff, // byte, byte
  69. kPluginBridgeNonRtClientQuit,
  70. // stuff added in API 7
  71. kPluginBridgeNonRtClientSetParameterMappedRange, // uint, float, float
  72. kPluginBridgeNonRtClientSetOptions, // uint
  73. // stuff added in API 8
  74. kPluginBridgeNonRtClientSetWindowTitle, // uint/size, str[]
  75. // stuff added in API 9
  76. kPluginBridgeNonRtClientEmbedUI, // ulong
  77. // stuff added in API 10
  78. kPluginBridgeNonRtClientReload,
  79. };
  80. // Client sends these to server during non-RT
  81. enum PluginBridgeNonRtServerOpcode {
  82. kPluginBridgeNonRtServerNull = 0,
  83. kPluginBridgeNonRtServerPong,
  84. kPluginBridgeNonRtServerPluginInfo1, // uint/category, uint/hints, uint/optionsAvailable, uint/optionsEnabled, long/uniqueId
  85. kPluginBridgeNonRtServerPluginInfo2, // uint/size, str[] (realName), uint/size, str[] (label), uint/size, str[] (maker), uint/size, str[] (copyright)
  86. kPluginBridgeNonRtServerAudioCount, // uint/ins, uint/outs
  87. kPluginBridgeNonRtServerMidiCount, // uint/ins, uint/outs
  88. kPluginBridgeNonRtServerCvCount, // uint/ins, uint/outs
  89. kPluginBridgeNonRtServerParameterCount, // uint/count
  90. kPluginBridgeNonRtServerProgramCount, // uint/count
  91. kPluginBridgeNonRtServerMidiProgramCount, // uint/count
  92. kPluginBridgeNonRtServerPortName, // byte/type, uint/index, uint/size, str[] (name)
  93. kPluginBridgeNonRtServerParameterData1, // uint/index, int/rindex, uint/type, uint/hints, short/cc
  94. kPluginBridgeNonRtServerParameterData2, // uint/index, uint/size, str[] (name), uint/size, str[] (symbol), uint/size, str[] (unit)
  95. kPluginBridgeNonRtServerParameterRanges, // uint/index, float/def, float/min, float/max, float/step, float/stepSmall, float/stepLarge
  96. kPluginBridgeNonRtServerParameterValue, // uint/index, float/value
  97. kPluginBridgeNonRtServerParameterValue2, // uint/index, float/value (used for init/output parameters only, don't resend values)
  98. kPluginBridgeNonRtServerParameterTouch, // uint/index, bool/touch
  99. kPluginBridgeNonRtServerDefaultValue, // uint/index, float/value
  100. kPluginBridgeNonRtServerCurrentProgram, // int/index
  101. kPluginBridgeNonRtServerCurrentMidiProgram, // int/index
  102. kPluginBridgeNonRtServerProgramName, // uint/index, uint/size, str[] (name)
  103. kPluginBridgeNonRtServerMidiProgramData, // uint/index, uint/bank, uint/program, uint/size, str[] (name)
  104. kPluginBridgeNonRtServerSetCustomData, // uint/size, str[], uint/size, str[], uint/size, str[]
  105. kPluginBridgeNonRtServerSetChunkDataFile, // uint/size, str[] (filename, base64 content)
  106. kPluginBridgeNonRtServerSetLatency, // uint/latency
  107. kPluginBridgeNonRtServerSetParameterText, // uint/index, uint/size, str[] (name)
  108. kPluginBridgeNonRtServerReady,
  109. kPluginBridgeNonRtServerSaved,
  110. kPluginBridgeNonRtServerUiClosed,
  111. kPluginBridgeNonRtServerError, // uint/size, str[]
  112. // stuff added in API 7
  113. kPluginBridgeNonRtServerVersion, // uint/version
  114. // stuff added in API 9
  115. kPluginBridgeNonRtServerRespEmbedUI, // ulong/window-id
  116. kPluginBridgeNonRtServerResizeEmbedUI, // uint/width, uint/height
  117. };
  118. // used for kPluginBridgeNonRtServerPortName
  119. enum PluginBridgePortType {
  120. kPluginBridgePortNull = 0,
  121. kPluginBridgePortAudioInput,
  122. kPluginBridgePortAudioOutput,
  123. kPluginBridgePortCvInput,
  124. kPluginBridgePortCvOutput,
  125. kPluginBridgePortMidiInput,
  126. kPluginBridgePortMidiOutput,
  127. kPluginBridgePortTypeCount
  128. };
  129. enum PluginBridgeTimeInfoFlags {
  130. kPluginBridgeTimeInfoValidBBT = 0x1
  131. };
  132. // -------------------------------------------------------------------------------------------------------------------
  133. struct BridgeSemaphore {
  134. union {
  135. void* server;
  136. char _padServer[64];
  137. };
  138. union {
  139. void* client;
  140. char _padClient[64];
  141. };
  142. };
  143. // NOTE: needs to be 64bit aligned
  144. struct BridgeTimeInfo {
  145. uint64_t playing;
  146. uint64_t frame;
  147. uint64_t usecs;
  148. uint32_t validFlags;
  149. uint32_t unused;
  150. // bbt
  151. int32_t bar, beat;
  152. float beatsPerBar, beatType;
  153. double tick, barStartTick, ticksPerBeat, beatsPerMinute;
  154. };
  155. // -------------------------------------------------------------------------------------------------------------------
  156. #endif // CARLA_BRIDGE_DEFINES_HPP_INCLUDED