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.

435 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. #define VSTCALLBACK
  100. struct ERect {
  101. short top, left, bottom, right;
  102. };
  103. struct VstTimeInfo_R {
  104. double samplePos, sampleRate, nanoSeconds, ppqPos, tempo, barStartPos, cycleStartPos, cycleEndPos;
  105. int32_t timeSigNumerator, timeSigDenominator, smpteOffset, smpteFrameRate, samplesToNextClock, flags;
  106. };
  107. #else
  108. #include "vst/aeffectx.h"
  109. typedef VstTimeInfo VstTimeInfo_R;
  110. #endif
  111. typedef AEffect* (*VST_Function)(audioMasterCallback);
  112. static inline
  113. bool vstPluginCanDo(AEffect* const effect, const char* const feature)
  114. {
  115. return (effect->dispatcher(effect, effCanDo, 0, 0, (void*)feature, 0.0f) == 1);
  116. }
  117. static inline
  118. const char* vstEffectOpcode2str(const int32_t opcode)
  119. {
  120. switch (opcode)
  121. {
  122. case effOpen:
  123. return "effOpen";
  124. case effClose:
  125. return "effClose";
  126. case effSetProgram:
  127. return "effSetProgram";
  128. case effGetProgram:
  129. return "effGetProgram";
  130. case effSetProgramName:
  131. return "effSetProgramName";
  132. case effGetProgramName:
  133. return "effGetProgramName";
  134. case effGetParamLabel:
  135. return "effGetParamLabel";
  136. case effGetParamDisplay:
  137. return "effGetParamDisplay";
  138. case effGetParamName:
  139. return "effGetParamName";
  140. #if ! VST_FORCE_DEPRECATED
  141. case effGetVu:
  142. return "effGetVu";
  143. #endif
  144. case effSetSampleRate:
  145. return "effSetSampleRate";
  146. case effSetBlockSize:
  147. return "effSetBlockSize";
  148. case effMainsChanged:
  149. return "effMainsChanged";
  150. case effEditGetRect:
  151. return "effEditGetRect";
  152. case effEditOpen:
  153. return "effEditOpen";
  154. case effEditClose:
  155. return "effEditClose";
  156. #if ! VST_FORCE_DEPRECATED
  157. case effEditDraw:
  158. return "effEditDraw";
  159. case effEditMouse:
  160. return "effEditMouse";
  161. case effEditKey:
  162. return "effEditKey";
  163. case effEditTop:
  164. return "effEditTop";
  165. case effEditSleep:
  166. return "effEditSleep";
  167. case effIdentify:
  168. return "effIdentify";
  169. #endif
  170. case effGetChunk:
  171. return "effGetChunk";
  172. case effSetChunk:
  173. return "effSetChunk";
  174. case effProcessEvents:
  175. return "effProcessEvents";
  176. case effCanBeAutomated:
  177. return "effCanBeAutomated";
  178. case effString2Parameter:
  179. return "effString2Parameter";
  180. #if ! VST_FORCE_DEPRECATED
  181. case effGetNumProgramCategories:
  182. return "effGetNumProgramCategories";
  183. #endif
  184. case effGetProgramNameIndexed:
  185. return "effGetProgramNameIndexed";
  186. #if ! VST_FORCE_DEPRECATED
  187. case effCopyProgram:
  188. return "effCopyProgram";
  189. case effConnectInput:
  190. return "effConnectInput";
  191. case effConnectOutput:
  192. return "effConnectOutput";
  193. #endif
  194. case effGetInputProperties:
  195. return "effGetInputProperties";
  196. case effGetOutputProperties:
  197. return "effGetOutputProperties";
  198. case effGetPlugCategory:
  199. return "effGetPlugCategory";
  200. #if ! VST_FORCE_DEPRECATED
  201. case effGetCurrentPosition:
  202. return "effGetCurrentPosition";
  203. case effGetDestinationBuffer:
  204. return "effGetDestinationBuffer";
  205. #endif
  206. case effOfflineNotify:
  207. return "effOfflineNotify";
  208. case effOfflinePrepare:
  209. return "effOfflinePrepare";
  210. case effOfflineRun:
  211. return "effOfflineRun";
  212. case effProcessVarIo:
  213. return "effProcessVarIo";
  214. case effSetSpeakerArrangement:
  215. return "effSetSpeakerArrangement";
  216. #if ! VST_FORCE_DEPRECATED
  217. case effSetBlockSizeAndSampleRate:
  218. return "effSetBlockSizeAndSampleRate";
  219. #endif
  220. case effSetBypass:
  221. return "effSetBypass";
  222. case effGetEffectName:
  223. return "effGetEffectName";
  224. #if ! VST_FORCE_DEPRECATED
  225. case effGetErrorText:
  226. return "effGetErrorText";
  227. #endif
  228. case effGetVendorString:
  229. return "effGetVendorString";
  230. case effGetProductString:
  231. return "effGetProductString";
  232. case effGetVendorVersion:
  233. return "effGetVendorVersion";
  234. case effVendorSpecific:
  235. return "effVendorSpecific";
  236. case effCanDo:
  237. return "effCanDo";
  238. case effGetTailSize:
  239. return "effGetTailSize";
  240. #if ! VST_FORCE_DEPRECATED
  241. case effIdle:
  242. return "effIdle";
  243. case effGetIcon:
  244. return "effGetIcon";
  245. case effSetViewPosition:
  246. return "effSetViewPosition";
  247. #endif
  248. case effGetParameterProperties:
  249. return "effGetParameterProperties";
  250. #if ! VST_FORCE_DEPRECATED
  251. case effKeysRequired:
  252. return "effKeysRequired";
  253. #endif
  254. case effGetVstVersion:
  255. return "effGetVstVersion";
  256. case effEditKeyDown:
  257. return "effEditKeyDown";
  258. case effEditKeyUp:
  259. return "effEditKeyUp";
  260. case effSetEditKnobMode:
  261. return "effSetEditKnobMode";
  262. case effGetMidiProgramName:
  263. return "effGetMidiProgramName";
  264. case effGetCurrentMidiProgram:
  265. return "effGetCurrentMidiProgram";
  266. case effGetMidiProgramCategory:
  267. return "effGetMidiProgramCategory";
  268. case effHasMidiProgramsChanged:
  269. return "effHasMidiProgramsChanged";
  270. case effGetMidiKeyName:
  271. return "effGetMidiKeyName";
  272. case effBeginSetProgram:
  273. return "effBeginSetProgram";
  274. case effEndSetProgram:
  275. return "effEndSetProgram";
  276. case effGetSpeakerArrangement:
  277. return "effGetSpeakerArrangement";
  278. case effShellGetNextPlugin:
  279. return "effShellGetNextPlugin";
  280. case effStartProcess:
  281. return "effStartProcess";
  282. case effStopProcess:
  283. return "effStopProcess";
  284. case effSetTotalSampleToProcess:
  285. return "effSetTotalSampleToProcess";
  286. case effSetPanLaw:
  287. return "effSetPanLaw";
  288. case effBeginLoadBank:
  289. return "effBeginLoadBank";
  290. case effBeginLoadProgram:
  291. return "effBeginLoadProgram";
  292. case effSetProcessPrecision:
  293. return "effSetProcessPrecision";
  294. case effGetNumMidiInputChannels:
  295. return "effGetNumMidiInputChannels";
  296. case effGetNumMidiOutputChannels:
  297. return "effGetNumMidiOutputChannels";
  298. default:
  299. return "unknown";
  300. }
  301. }
  302. static inline
  303. const char* vstMasterOpcode2str(const int32_t opcode)
  304. {
  305. switch (opcode)
  306. {
  307. case audioMasterAutomate:
  308. return "audioMasterAutomate";
  309. case audioMasterVersion:
  310. return "audioMasterVersion";
  311. case audioMasterCurrentId:
  312. return "audioMasterCurrentId";
  313. case audioMasterIdle:
  314. return "audioMasterIdle";
  315. #if ! VST_FORCE_DEPRECATED
  316. case audioMasterPinConnected:
  317. return "audioMasterPinConnected";
  318. case audioMasterWantMidi:
  319. return "audioMasterWantMidi";
  320. #endif
  321. case audioMasterGetTime:
  322. return "audioMasterGetTime";
  323. case audioMasterProcessEvents:
  324. return "audioMasterProcessEvents";
  325. #if ! VST_FORCE_DEPRECATED
  326. case audioMasterSetTime:
  327. return "audioMasterSetTime";
  328. case audioMasterTempoAt:
  329. return "audioMasterTempoAt";
  330. case audioMasterGetNumAutomatableParameters:
  331. return "audioMasterGetNumAutomatableParameters";
  332. case audioMasterGetParameterQuantization:
  333. return "audioMasterGetParameterQuantization";
  334. #endif
  335. case audioMasterIOChanged:
  336. return "audioMasterIOChanged";
  337. #if ! VST_FORCE_DEPRECATED
  338. case audioMasterNeedIdle:
  339. return "audioMasterNeedIdle";
  340. #endif
  341. case audioMasterSizeWindow:
  342. return "audioMasterSizeWindow";
  343. case audioMasterGetSampleRate:
  344. return "audioMasterGetSampleRate";
  345. case audioMasterGetBlockSize:
  346. return "audioMasterGetBlockSize";
  347. case audioMasterGetInputLatency:
  348. return "audioMasterGetInputLatency";
  349. case audioMasterGetOutputLatency:
  350. return "audioMasterGetOutputLatency";
  351. #if ! VST_FORCE_DEPRECATED
  352. case audioMasterGetPreviousPlug:
  353. return "audioMasterGetPreviousPlug";
  354. case audioMasterGetNextPlug:
  355. return "audioMasterGetNextPlug";
  356. case audioMasterWillReplaceOrAccumulate:
  357. return "audioMasterWillReplaceOrAccumulate";
  358. #endif
  359. case audioMasterGetCurrentProcessLevel:
  360. return "audioMasterGetCurrentProcessLevel";
  361. case audioMasterGetAutomationState:
  362. return "audioMasterGetAutomationState";
  363. case audioMasterOfflineStart:
  364. return "audioMasterOfflineStart";
  365. case audioMasterOfflineRead:
  366. return "audioMasterOfflineRead";
  367. case audioMasterOfflineWrite:
  368. return "audioMasterOfflineWrite";
  369. case audioMasterOfflineGetCurrentPass:
  370. return "audioMasterOfflineGetCurrentPass";
  371. case audioMasterOfflineGetCurrentMetaPass:
  372. return "audioMasterOfflineGetCurrentMetaPass";
  373. #if ! VST_FORCE_DEPRECATED
  374. case audioMasterSetOutputSampleRate:
  375. return "audioMasterSetOutputSampleRate";
  376. case audioMasterGetOutputSpeakerArrangement:
  377. return "audioMasterGetOutputSpeakerArrangement";
  378. #endif
  379. case audioMasterGetVendorString:
  380. return "audioMasterGetVendorString";
  381. case audioMasterGetProductString:
  382. return "audioMasterGetProductString";
  383. case audioMasterGetVendorVersion:
  384. return "audioMasterGetVendorVersion";
  385. case audioMasterVendorSpecific:
  386. return "audioMasterVendorSpecific";
  387. #if ! VST_FORCE_DEPRECATED
  388. case audioMasterSetIcon:
  389. return "audioMasterSetIcon";
  390. #endif
  391. case audioMasterCanDo:
  392. return "audioMasterCanDo";
  393. case audioMasterGetLanguage:
  394. return "audioMasterGetLanguage";
  395. #if ! VST_FORCE_DEPRECATED
  396. case audioMasterOpenWindow:
  397. return "audioMasterOpenWindow";
  398. case audioMasterCloseWindow:
  399. return "audioMasterCloseWindow";
  400. #endif
  401. case audioMasterGetDirectory:
  402. return "audioMasterGetDirectory";
  403. case audioMasterUpdateDisplay:
  404. return "audioMasterUpdateDisplay";
  405. case audioMasterBeginEdit:
  406. return "audioMasterBeginEdit";
  407. case audioMasterEndEdit:
  408. return "audioMasterEndEdit";
  409. case audioMasterOpenFileSelector:
  410. return "audioMasterOpenFileSelector";
  411. case audioMasterCloseFileSelector:
  412. return "audioMasterCloseFileSelector";
  413. #if ! VST_FORCE_DEPRECATED
  414. case audioMasterEditFile:
  415. return "audioMasterEditFile";
  416. case audioMasterGetChunkFile:
  417. return "audioMasterGetChunkFile";
  418. case audioMasterGetInputSpeakerArrangement:
  419. return "audioMasterGetInputSpeakerArrangement";
  420. #endif
  421. default:
  422. return "unknown";
  423. }
  424. }
  425. #endif // CARLA_VST_INCLUDES_H