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.

434 lines
13KB

  1. /*
  2. * Carla common VST code
  3. * Copyright (C) 2011-2012 Filipe Coelho <falktx@gmail.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 CARLA_VST_INCLUDES_H
  18. #define CARLA_VST_INCLUDES_H
  19. // disable deprecated VST features (not)
  20. #define VST_FORCE_DEPRECATED 0
  21. #include <cstdint>
  22. #if VESTIGE_HEADER
  23. #include "vestige/aeffectx.h"
  24. #define audioMasterGetOutputSpeakerArrangement audioMasterGetSpeakerArrangement
  25. #define effFlagsProgramChunks (1 << 5)
  26. #define effSetProgramName 4
  27. #define effGetParamLabel 6
  28. #define effGetParamDisplay 7
  29. #define effGetVu 9
  30. #define effEditDraw 16
  31. #define effEditMouse 17
  32. #define effEditKey 18
  33. #define effEditSleep 21
  34. #define effIdentify 22
  35. #define effGetChunk 23
  36. #define effSetChunk 24
  37. #define effCanBeAutomated 26
  38. #define effString2Parameter 27
  39. #define effGetNumProgramCategories 28
  40. #define effGetProgramNameIndexed 29
  41. #define effCopyProgram 30
  42. #define effConnectInput 31
  43. #define effConnectOutput 32
  44. #define effGetInputProperties 33
  45. #define effGetOutputProperties 34
  46. #define effGetPlugCategory 35
  47. #define effGetCurrentPosition 36
  48. #define effGetDestinationBuffer 37
  49. #define effOfflineNotify 38
  50. #define effOfflinePrepare 39
  51. #define effOfflineRun 40
  52. #define effProcessVarIo 41
  53. #define effSetSpeakerArrangement 42
  54. #define effSetBlockSizeAndSampleRate 43
  55. #define effSetBypass 44
  56. #define effGetErrorText 46
  57. #define effVendorSpecific 50
  58. #define effGetTailSize 52
  59. #define effIdle 53
  60. #define effGetIcon 54
  61. #define effSetViewPosition 55
  62. #define effKeysRequired 57
  63. #define effEditKeyDown 59
  64. #define effEditKeyUp 60
  65. #define effSetEditKnobMode 61
  66. #define effGetMidiProgramName 62
  67. #define effGetCurrentMidiProgram 63
  68. #define effGetMidiProgramCategory 64
  69. #define effHasMidiProgramsChanged 65
  70. #define effGetMidiKeyName 66
  71. #define effBeginSetProgram 67
  72. #define effEndSetProgram 68
  73. #define effGetSpeakerArrangement 69
  74. #define effShellGetNextPlugin 70
  75. #define effStartProcess 71
  76. #define effStopProcess 72
  77. #define effSetTotalSampleToProcess 73
  78. #define effSetPanLaw 74
  79. #define effBeginLoadBank 75
  80. #define effBeginLoadProgram 76
  81. #define effSetProcessPrecision 77
  82. #define effGetNumMidiInputChannels 78
  83. #define effGetNumMidiOutputChannels 79
  84. #define kPlugCategSynth 2
  85. #define kPlugCategAnalysis 3
  86. #define kPlugCategMastering 4
  87. #define kPlugCategRoomFx 6
  88. #define kPlugCategRestoration 8
  89. #define kPlugCategShell 10
  90. #define kPlugCategGenerator 11
  91. #define kVstAutomationReadWrite 4
  92. #define kVstProcessLevelUnknown 0
  93. #define kVstProcessLevelUser 1
  94. #define kVstProcessLevelRealtime 2
  95. #define kVstProcessLevelOffline 4
  96. #define kVstProcessPrecision32 0
  97. #define kVstTransportChanged 1
  98. #define kVstVersion 2400
  99. struct ERect {
  100. short top, left, bottom, right;
  101. };
  102. struct VstTimeInfo_R {
  103. double samplePos, sampleRate, nanoSeconds, ppqPos, tempo, barStartPos, cycleStartPos, cycleEndPos;
  104. int32_t timeSigNumerator, timeSigDenominator, smpteOffset, smpteFrameRate, samplesToNextClock, flags;
  105. };
  106. #else
  107. #include "vst/aeffectx.h"
  108. typedef VstTimeInfo VstTimeInfo_R;
  109. #endif
  110. typedef AEffect* (*VST_Function)(audioMasterCallback);
  111. static inline
  112. bool VstPluginCanDo(AEffect* const effect, const char* const feature)
  113. {
  114. return (effect->dispatcher(effect, effCanDo, 0, 0, (void*)feature, 0.0f) == 1);
  115. }
  116. static inline
  117. const char* VstEffectOpcode2str(const int32_t opcode)
  118. {
  119. switch (opcode)
  120. {
  121. case effOpen:
  122. return "effOpen";
  123. case effClose:
  124. return "effClose";
  125. case effSetProgram:
  126. return "effSetProgram";
  127. case effGetProgram:
  128. return "effGetProgram";
  129. case effSetProgramName:
  130. return "effSetProgramName";
  131. case effGetProgramName:
  132. return "effGetProgramName";
  133. case effGetParamLabel:
  134. return "effGetParamLabel";
  135. case effGetParamDisplay:
  136. return "effGetParamDisplay";
  137. case effGetParamName:
  138. return "effGetParamName";
  139. #if ! VST_FORCE_DEPRECATED
  140. case effGetVu:
  141. return "effGetVu";
  142. #endif
  143. case effSetSampleRate:
  144. return "effSetSampleRate";
  145. case effSetBlockSize:
  146. return "effSetBlockSize";
  147. case effMainsChanged:
  148. return "effMainsChanged";
  149. case effEditGetRect:
  150. return "effEditGetRect";
  151. case effEditOpen:
  152. return "effEditOpen";
  153. case effEditClose:
  154. return "effEditClose";
  155. #if ! VST_FORCE_DEPRECATED
  156. case effEditDraw:
  157. return "effEditDraw";
  158. case effEditMouse:
  159. return "effEditMouse";
  160. case effEditKey:
  161. return "effEditKey";
  162. case effEditTop:
  163. return "effEditTop";
  164. case effEditSleep:
  165. return "effEditSleep";
  166. case effIdentify:
  167. return "effIdentify";
  168. #endif
  169. case effGetChunk:
  170. return "effGetChunk";
  171. case effSetChunk:
  172. return "effSetChunk";
  173. case effProcessEvents:
  174. return "effProcessEvents";
  175. case effCanBeAutomated:
  176. return "effCanBeAutomated";
  177. case effString2Parameter:
  178. return "effString2Parameter";
  179. #if ! VST_FORCE_DEPRECATED
  180. case effGetNumProgramCategories:
  181. return "effGetNumProgramCategories";
  182. #endif
  183. case effGetProgramNameIndexed:
  184. return "effGetProgramNameIndexed";
  185. #if ! VST_FORCE_DEPRECATED
  186. case effCopyProgram:
  187. return "effCopyProgram";
  188. case effConnectInput:
  189. return "effConnectInput";
  190. case effConnectOutput:
  191. return "effConnectOutput";
  192. #endif
  193. case effGetInputProperties:
  194. return "effGetInputProperties";
  195. case effGetOutputProperties:
  196. return "effGetOutputProperties";
  197. case effGetPlugCategory:
  198. return "effGetPlugCategory";
  199. #if ! VST_FORCE_DEPRECATED
  200. case effGetCurrentPosition:
  201. return "effGetCurrentPosition";
  202. case effGetDestinationBuffer:
  203. return "effGetDestinationBuffer";
  204. #endif
  205. case effOfflineNotify:
  206. return "effOfflineNotify";
  207. case effOfflinePrepare:
  208. return "effOfflinePrepare";
  209. case effOfflineRun:
  210. return "effOfflineRun";
  211. case effProcessVarIo:
  212. return "effProcessVarIo";
  213. case effSetSpeakerArrangement:
  214. return "effSetSpeakerArrangement";
  215. #if ! VST_FORCE_DEPRECATED
  216. case effSetBlockSizeAndSampleRate:
  217. return "effSetBlockSizeAndSampleRate";
  218. #endif
  219. case effSetBypass:
  220. return "effSetBypass";
  221. case effGetEffectName:
  222. return "effGetEffectName";
  223. #if ! VST_FORCE_DEPRECATED
  224. case effGetErrorText:
  225. return "effGetErrorText";
  226. #endif
  227. case effGetVendorString:
  228. return "effGetVendorString";
  229. case effGetProductString:
  230. return "effGetProductString";
  231. case effGetVendorVersion:
  232. return "effGetVendorVersion";
  233. case effVendorSpecific:
  234. return "effVendorSpecific";
  235. case effCanDo:
  236. return "effCanDo";
  237. case effGetTailSize:
  238. return "effGetTailSize";
  239. #if ! VST_FORCE_DEPRECATED
  240. case effIdle:
  241. return "effIdle";
  242. case effGetIcon:
  243. return "effGetIcon";
  244. case effSetViewPosition:
  245. return "effSetViewPosition";
  246. #endif
  247. case effGetParameterProperties:
  248. return "effGetParameterProperties";
  249. #if ! VST_FORCE_DEPRECATED
  250. case effKeysRequired:
  251. return "effKeysRequired";
  252. #endif
  253. case effGetVstVersion:
  254. return "effGetVstVersion";
  255. case effEditKeyDown:
  256. return "effEditKeyDown";
  257. case effEditKeyUp:
  258. return "effEditKeyUp";
  259. case effSetEditKnobMode:
  260. return "effSetEditKnobMode";
  261. case effGetMidiProgramName:
  262. return "effGetMidiProgramName";
  263. case effGetCurrentMidiProgram:
  264. return "effGetCurrentMidiProgram";
  265. case effGetMidiProgramCategory:
  266. return "effGetMidiProgramCategory";
  267. case effHasMidiProgramsChanged:
  268. return "effHasMidiProgramsChanged";
  269. case effGetMidiKeyName:
  270. return "effGetMidiKeyName";
  271. case effBeginSetProgram:
  272. return "effBeginSetProgram";
  273. case effEndSetProgram:
  274. return "effEndSetProgram";
  275. case effGetSpeakerArrangement:
  276. return "effGetSpeakerArrangement";
  277. case effShellGetNextPlugin:
  278. return "effShellGetNextPlugin";
  279. case effStartProcess:
  280. return "effStartProcess";
  281. case effStopProcess:
  282. return "effStopProcess";
  283. case effSetTotalSampleToProcess:
  284. return "effSetTotalSampleToProcess";
  285. case effSetPanLaw:
  286. return "effSetPanLaw";
  287. case effBeginLoadBank:
  288. return "effBeginLoadBank";
  289. case effBeginLoadProgram:
  290. return "effBeginLoadProgram";
  291. case effSetProcessPrecision:
  292. return "effSetProcessPrecision";
  293. case effGetNumMidiInputChannels:
  294. return "effGetNumMidiInputChannels";
  295. case effGetNumMidiOutputChannels:
  296. return "effGetNumMidiOutputChannels";
  297. default:
  298. return "unknown";
  299. }
  300. }
  301. static inline
  302. const char* VstMasterOpcode2str(const int32_t opcode)
  303. {
  304. switch (opcode)
  305. {
  306. case audioMasterAutomate:
  307. return "audioMasterAutomate";
  308. case audioMasterVersion:
  309. return "audioMasterVersion";
  310. case audioMasterCurrentId:
  311. return "audioMasterCurrentId";
  312. case audioMasterIdle:
  313. return "audioMasterIdle";
  314. #if ! VST_FORCE_DEPRECATED
  315. case audioMasterPinConnected:
  316. return "audioMasterPinConnected";
  317. case audioMasterWantMidi:
  318. return "audioMasterWantMidi";
  319. #endif
  320. case audioMasterGetTime:
  321. return "audioMasterGetTime";
  322. case audioMasterProcessEvents:
  323. return "audioMasterProcessEvents";
  324. #if ! VST_FORCE_DEPRECATED
  325. case audioMasterSetTime:
  326. return "audioMasterSetTime";
  327. case audioMasterTempoAt:
  328. return "audioMasterTempoAt";
  329. case audioMasterGetNumAutomatableParameters:
  330. return "audioMasterGetNumAutomatableParameters";
  331. case audioMasterGetParameterQuantization:
  332. return "audioMasterGetParameterQuantization";
  333. #endif
  334. case audioMasterIOChanged:
  335. return "audioMasterIOChanged";
  336. #if ! VST_FORCE_DEPRECATED
  337. case audioMasterNeedIdle:
  338. return "audioMasterNeedIdle";
  339. #endif
  340. case audioMasterSizeWindow:
  341. return "audioMasterSizeWindow";
  342. case audioMasterGetSampleRate:
  343. return "audioMasterGetSampleRate";
  344. case audioMasterGetBlockSize:
  345. return "audioMasterGetBlockSize";
  346. case audioMasterGetInputLatency:
  347. return "audioMasterGetInputLatency";
  348. case audioMasterGetOutputLatency:
  349. return "audioMasterGetOutputLatency";
  350. #if ! VST_FORCE_DEPRECATED
  351. case audioMasterGetPreviousPlug:
  352. return "audioMasterGetPreviousPlug";
  353. case audioMasterGetNextPlug:
  354. return "audioMasterGetNextPlug";
  355. case audioMasterWillReplaceOrAccumulate:
  356. return "audioMasterWillReplaceOrAccumulate";
  357. #endif
  358. case audioMasterGetCurrentProcessLevel:
  359. return "audioMasterGetCurrentProcessLevel";
  360. case audioMasterGetAutomationState:
  361. return "audioMasterGetAutomationState";
  362. case audioMasterOfflineStart:
  363. return "audioMasterOfflineStart";
  364. case audioMasterOfflineRead:
  365. return "audioMasterOfflineRead";
  366. case audioMasterOfflineWrite:
  367. return "audioMasterOfflineWrite";
  368. case audioMasterOfflineGetCurrentPass:
  369. return "audioMasterOfflineGetCurrentPass";
  370. case audioMasterOfflineGetCurrentMetaPass:
  371. return "audioMasterOfflineGetCurrentMetaPass";
  372. #if ! VST_FORCE_DEPRECATED
  373. case audioMasterSetOutputSampleRate:
  374. return "audioMasterSetOutputSampleRate";
  375. case audioMasterGetOutputSpeakerArrangement:
  376. return "audioMasterGetOutputSpeakerArrangement";
  377. #endif
  378. case audioMasterGetVendorString:
  379. return "audioMasterGetVendorString";
  380. case audioMasterGetProductString:
  381. return "audioMasterGetProductString";
  382. case audioMasterGetVendorVersion:
  383. return "audioMasterGetVendorVersion";
  384. case audioMasterVendorSpecific:
  385. return "audioMasterVendorSpecific";
  386. #if ! VST_FORCE_DEPRECATED
  387. case audioMasterSetIcon:
  388. return "audioMasterSetIcon";
  389. #endif
  390. case audioMasterCanDo:
  391. return "audioMasterCanDo";
  392. case audioMasterGetLanguage:
  393. return "audioMasterGetLanguage";
  394. #if ! VST_FORCE_DEPRECATED
  395. case audioMasterOpenWindow:
  396. return "audioMasterOpenWindow";
  397. case audioMasterCloseWindow:
  398. return "audioMasterCloseWindow";
  399. #endif
  400. case audioMasterGetDirectory:
  401. return "audioMasterGetDirectory";
  402. case audioMasterUpdateDisplay:
  403. return "audioMasterUpdateDisplay";
  404. case audioMasterBeginEdit:
  405. return "audioMasterBeginEdit";
  406. case audioMasterEndEdit:
  407. return "audioMasterEndEdit";
  408. case audioMasterOpenFileSelector:
  409. return "audioMasterOpenFileSelector";
  410. case audioMasterCloseFileSelector:
  411. return "audioMasterCloseFileSelector";
  412. #if ! VST_FORCE_DEPRECATED
  413. case audioMasterEditFile:
  414. return "audioMasterEditFile";
  415. case audioMasterGetChunkFile:
  416. return "audioMasterGetChunkFile";
  417. case audioMasterGetInputSpeakerArrangement:
  418. return "audioMasterGetInputSpeakerArrangement";
  419. #endif
  420. default:
  421. return "unknown";
  422. }
  423. }
  424. #endif // CARLA_VST_INCLUDES_H