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.

695 lines
20KB

  1. /*
  2. * Carla Backend
  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. #include "carla_shared.h"
  18. #ifndef BUILD_BRIDGE
  19. # include "plugins/carla_native.h"
  20. #endif
  21. #include <QtCore/QString>
  22. CARLA_BACKEND_START_NAMESPACE
  23. static const char* carlaLastError = nullptr;
  24. #ifndef BUILD_BRIDGE
  25. // Global options
  26. carla_options_t carlaOptions;
  27. #endif
  28. // -------------------------------------------------------------------------------------------------------------------
  29. const char* BinaryType2str(const BinaryType type)
  30. {
  31. switch (type)
  32. {
  33. case BINARY_NONE:
  34. return "BINARY_NONE";
  35. case BINARY_POSIX32:
  36. return "BINARY_POSIX32";
  37. case BINARY_POSIX64:
  38. return "BINARY_POSIX64";
  39. case BINARY_WIN32:
  40. return "BINARY_WIN32";
  41. case BINARY_WIN64:
  42. return "BINARY_WIN64";
  43. case BINARY_OTHER:
  44. return "BINARY_OTHER";
  45. }
  46. qWarning("CarlaBackend::BinaryType2str(%i) - invalid type", type);
  47. return nullptr;
  48. }
  49. const char* PluginType2str(const PluginType type)
  50. {
  51. switch (type)
  52. {
  53. case PLUGIN_NONE:
  54. return "PLUGIN_NONE";
  55. case PLUGIN_INTERNAL:
  56. return "PLUGIN_INTERNAL";
  57. case PLUGIN_LADSPA:
  58. return "PLUGIN_LADSPA";
  59. case PLUGIN_DSSI:
  60. return "PLUGIN_DSSI";
  61. case PLUGIN_LV2:
  62. return "PLUGIN_LV2";
  63. case PLUGIN_VST:
  64. return "PLUGIN_VST";
  65. case PLUGIN_GIG:
  66. return "PLUGIN_GIG";
  67. case PLUGIN_SF2:
  68. return "PLUGIN_SF2";
  69. case PLUGIN_SFZ:
  70. return "PLUGIN_SFZ";
  71. }
  72. qWarning("CarlaBackend::PluginType2str(%i) - invalid type", type);
  73. return nullptr;
  74. }
  75. const char* PluginCategory2str(const PluginCategory category)
  76. {
  77. switch (category)
  78. {
  79. case PLUGIN_CATEGORY_NONE:
  80. return "PLUGIN_CATEGORY_NONE";
  81. case PLUGIN_CATEGORY_SYNTH:
  82. return "PLUGIN_CATEGORY_SYNTH";
  83. case PLUGIN_CATEGORY_DELAY:
  84. return "PLUGIN_CATEGORY_DELAY";
  85. case PLUGIN_CATEGORY_EQ:
  86. return "PLUGIN_CATEGORY_EQ";
  87. case PLUGIN_CATEGORY_FILTER:
  88. return "PLUGIN_CATEGORY_FILTER";
  89. case PLUGIN_CATEGORY_DYNAMICS:
  90. return "PLUGIN_CATEGORY_DYNAMICS";
  91. case PLUGIN_CATEGORY_MODULATOR:
  92. return "PLUGIN_CATEGORY_MODULATOR";
  93. case PLUGIN_CATEGORY_UTILITY:
  94. return "PLUGIN_CATEGORY_UTILITY";
  95. case PLUGIN_CATEGORY_OTHER:
  96. return "PLUGIN_CATEGORY_OTHER";
  97. }
  98. qWarning("CarlaBackend::PluginCategory2str(%i) - invalid category", category);
  99. return nullptr;
  100. }
  101. const char* ParameterType2str(const ParameterType type)
  102. {
  103. switch (type)
  104. {
  105. case PARAMETER_UNKNOWN:
  106. return "PARAMETER_UNKNOWN";
  107. case PARAMETER_INPUT:
  108. return "PARAMETER_INPUT";
  109. case PARAMETER_OUTPUT:
  110. return "PARAMETER_OUTPUT";
  111. case PARAMETER_LATENCY:
  112. return "PARAMETER_LATENCY";
  113. case PARAMETER_SAMPLE_RATE:
  114. return "PARAMETER_SAMPLE_RATE";
  115. case PARAMETER_LV2_FREEWHEEL:
  116. return "PARAMETER_LV2_FREEWHEEL";
  117. case PARAMETER_LV2_TIME:
  118. return "PARAMETER_LV2_TIME";
  119. }
  120. qWarning("CarlaBackend::ParameterType2str(%i) - invalid type", type);
  121. return nullptr;
  122. }
  123. const char* InternalParametersIndex2str(const InternalParametersIndex index)
  124. {
  125. switch (index)
  126. {
  127. case PARAMETER_NULL:
  128. return "PARAMETER_NULL";
  129. case PARAMETER_ACTIVE:
  130. return "PARAMETER_ACTIVE";
  131. case PARAMETER_DRYWET:
  132. return "PARAMETER_DRYWET";
  133. case PARAMETER_VOLUME:
  134. return "PARAMETER_VOLUME";
  135. case PARAMETER_BALANCE_LEFT:
  136. return "PARAMETER_BALANCE_LEFT";
  137. case PARAMETER_BALANCE_RIGHT:
  138. return "PARAMETER_BALANCE_RIGHT";
  139. }
  140. qWarning("CarlaBackend::InternalParametersIndex2str(%i) - invalid index", index);
  141. return nullptr;
  142. }
  143. const char* CustomDataType2str(const CustomDataType type)
  144. {
  145. switch (type)
  146. {
  147. case CUSTOM_DATA_INVALID:
  148. return "CUSTOM_DATA_INVALID";
  149. case CUSTOM_DATA_STRING:
  150. return "CUSTOM_DATA_STRING";
  151. case CUSTOM_DATA_PATH:
  152. return "CUSTOM_DATA_PATH";
  153. case CUSTOM_DATA_CHUNK:
  154. return "CUSTOM_DATA_CHUNK";
  155. case CUSTOM_DATA_BINARY:
  156. return "CUSTOM_DATA_BINARY";
  157. }
  158. qWarning("CarlaBackend::CustomDataType2str(%i) - invalid type", type);
  159. return nullptr;
  160. }
  161. const char* GuiType2str(const GuiType type)
  162. {
  163. switch (type)
  164. {
  165. case GUI_NONE:
  166. return "GUI_NONE";
  167. case GUI_INTERNAL_QT4:
  168. return "GUI_INTERNAL_QT4";
  169. case GUI_INTERNAL_COCOA:
  170. return "GUI_INTERNAL_COCOA";
  171. case GUI_INTERNAL_HWND:
  172. return "GUI_INTERNAL_HWND";
  173. case GUI_INTERNAL_X11:
  174. return "GUI_INTERNAL_X11";
  175. case GUI_EXTERNAL_LV2:
  176. return "GUI_EXTERNAL_LV2";
  177. case GUI_EXTERNAL_SUIL:
  178. return "GUI_EXTERNAL_SUIL";
  179. case GUI_EXTERNAL_OSC:
  180. return "GUI_EXTERNAL_OSC";
  181. }
  182. qWarning("CarlaBackend::GuiType2str(%i) - invalid type", type);
  183. return nullptr;
  184. }
  185. const char* OptionsType2str(const OptionsType type)
  186. {
  187. switch (type)
  188. {
  189. case OPTION_PROCESS_NAME:
  190. return "OPTION_PROCESS_NAME";
  191. case OPTION_PROCESS_MODE:
  192. return "OPTION_PROCESS_MODE";
  193. case OPTION_PROCESS_HIGH_PRECISION:
  194. return "OPTION_PROCESS_HIGH_PRECISION";
  195. case OPTION_MAX_PARAMETERS:
  196. return "OPTION_MAX_PARAMETERS";
  197. case OPTION_PREFERRED_BUFFER_SIZE:
  198. return "OPTION_PREFERRED_BUFFER_SIZE";
  199. case OPTION_PREFERRED_SAMPLE_RATE:
  200. return "OPTION_PREFERRED_SAMPLE_RATE";
  201. case OPTION_FORCE_STEREO:
  202. return "OPTION_FORCE_STEREO";
  203. case OPTION_USE_DSSI_VST_CHUNKS:
  204. return "OPTION_USE_DSSI_VST_CHUNKS";
  205. case OPTION_PREFER_UI_BRIDGES:
  206. return "OPTION_PREFER_UI_BRIDGES";
  207. case OPTION_OSC_UI_TIMEOUT:
  208. return "OPTION_OSC_UI_TIMEOUT";
  209. case OPTION_PATH_LADSPA:
  210. return "OPTION_PATH_LADSPA";
  211. case OPTION_PATH_DSSI:
  212. return "OPTION_PATH_DSSI";
  213. case OPTION_PATH_LV2:
  214. return "OPTION_PATH_LV2";
  215. case OPTION_PATH_VST:
  216. return "OPTION_PATH_VST";
  217. case OPTION_PATH_GIG:
  218. return "OPTION_PATH_GIG";
  219. case OPTION_PATH_SF2:
  220. return "OPTION_PATH_SF2";
  221. case OPTION_PATH_SFZ:
  222. return "OPTION_PATH_SFZ";
  223. case OPTION_PATH_BRIDGE_POSIX32:
  224. return "OPTION_PATH_BRIDGE_POSIX32";
  225. case OPTION_PATH_BRIDGE_POSIX64:
  226. return "OPTION_PATH_BRIDGE_POSIX64";
  227. case OPTION_PATH_BRIDGE_WIN32:
  228. return "OPTION_PATH_BRIDGE_WIN32";
  229. case OPTION_PATH_BRIDGE_WIN64:
  230. return "OPTION_PATH_BRIDGE_WIN64";
  231. case OPTION_PATH_BRIDGE_LV2_GTK2:
  232. return "OPTION_PATH_BRIDGE_LV2_GTK2";
  233. case OPTION_PATH_BRIDGE_LV2_GTK3:
  234. return "OPTION_PATH_BRIDGE_LV2_GTK3";
  235. case OPTION_PATH_BRIDGE_LV2_QT4:
  236. return "OPTION_PATH_BRIDGE_LV2_QT4";
  237. case OPTION_PATH_BRIDGE_LV2_X11:
  238. return "OPTION_PATH_BRIDGE_LV2_X11";
  239. case OPTION_PATH_BRIDGE_VST_HWND:
  240. return "OPTION_PATH_BRIDGE_VST_HWND";
  241. case OPTION_PATH_BRIDGE_VST_X11:
  242. return "OPTION_PATH_BRIDGE_VST_X11";
  243. }
  244. qWarning("CarlaBackend::OptionsType2str(%i) - invalid type", type);
  245. return nullptr;
  246. }
  247. const char* CallbackType2str(const CallbackType type)
  248. {
  249. switch (type)
  250. {
  251. case CALLBACK_DEBUG:
  252. return "CALLBACK_DEBUG";
  253. case CALLBACK_PARAMETER_VALUE_CHANGED:
  254. return "CALLBACK_PARAMETER_VALUE_CHANGED";
  255. case CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED:
  256. return "CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED";
  257. case CALLBACK_PARAMETER_MIDI_CC_CHANGED:
  258. return "CALLBACK_PARAMETER_MIDI_CC_CHANGED";
  259. case CALLBACK_PROGRAM_CHANGED:
  260. return "CALLBACK_PROGRAM_CHANGED";
  261. case CALLBACK_MIDI_PROGRAM_CHANGED:
  262. return "CALLBACK_MIDI_PROGRAM_CHANGED";
  263. case CALLBACK_NOTE_ON:
  264. return "CALLBACK_NOTE_ON";
  265. case CALLBACK_NOTE_OFF:
  266. return "CALLBACK_NOTE_OFF";
  267. case CALLBACK_SHOW_GUI:
  268. return "CALLBACK_SHOW_GUI";
  269. case CALLBACK_RESIZE_GUI:
  270. return "CALLBACK_RESIZE_GUI";
  271. case CALLBACK_UPDATE:
  272. return "CALLBACK_UPDATE";
  273. case CALLBACK_RELOAD_INFO:
  274. return "CALLBACK_RELOAD_INFO";
  275. case CALLBACK_RELOAD_PARAMETERS:
  276. return "CALLBACK_RELOAD_PARAMETERS";
  277. case CALLBACK_RELOAD_PROGRAMS:
  278. return "CALLBACK_RELOAD_PROGRAMS";
  279. case CALLBACK_RELOAD_ALL:
  280. return "CALLBACK_RELOAD_ALL";
  281. case CALLBACK_NSM_ANNOUNCE:
  282. return "CALLBACK_NSM_ANNOUNCE";
  283. case CALLBACK_NSM_OPEN1:
  284. return "CALLBACK_NSM_OPEN1";
  285. case CALLBACK_NSM_OPEN2:
  286. return "CALLBACK_NSM_OPEN2";
  287. case CALLBACK_NSM_SAVE:
  288. return "CALLBACK_NSM_SAVE";
  289. case CALLBACK_QUIT:
  290. return "CALLBACK_QUIT";
  291. }
  292. qWarning("CarlaBackend::CallbackType2str(%i) - invalid type", type);
  293. return nullptr;
  294. }
  295. const char* ProcessModeType2str(const ProcessModeType type)
  296. {
  297. switch (type)
  298. {
  299. case PROCESS_MODE_SINGLE_CLIENT:
  300. return "PROCESS_MODE_SINGLE_CLIENT";
  301. case PROCESS_MODE_MULTIPLE_CLIENTS:
  302. return "PROCESS_MODE_MULTIPLE_CLIENTS";
  303. case PROCESS_MODE_CONTINUOUS_RACK:
  304. return "PROCESS_MODE_CONTINUOUS_RACK";
  305. }
  306. qWarning("CarlaBackend::ProcessModeType2str(%i) - invalid type", type);
  307. return nullptr;
  308. }
  309. // -------------------------------------------------------------------------------------------------------------------
  310. CustomDataType getCustomDataStringType(const char* const stype)
  311. {
  312. qDebug("CarlaBackend::getCustomDataStringType(\"%s\")", stype);
  313. if (strcmp(stype, "string") == 0)
  314. return CUSTOM_DATA_STRING;
  315. if (strcmp(stype, "path") == 0)
  316. return CUSTOM_DATA_PATH;
  317. if (strcmp(stype, "chunk") == 0)
  318. return CUSTOM_DATA_CHUNK;
  319. if (strcmp(stype, "binary") == 0)
  320. return CUSTOM_DATA_BINARY;
  321. return CUSTOM_DATA_INVALID;
  322. }
  323. const char* getCustomDataTypeString(const CustomDataType type)
  324. {
  325. qDebug("CarlaBackend::getCustomDataTypeString(%s)", CustomDataType2str(type));
  326. switch (type)
  327. {
  328. case CUSTOM_DATA_STRING:
  329. return "string";
  330. case CUSTOM_DATA_PATH:
  331. return "path";
  332. case CUSTOM_DATA_CHUNK:
  333. return "chunk";
  334. case CUSTOM_DATA_BINARY:
  335. return "binary";
  336. default:
  337. return "invalid";
  338. }
  339. }
  340. const char* getBinaryBidgePath(const BinaryType type)
  341. {
  342. qDebug("CarlaBackend::getBinaryBidgePath(%s)", BinaryType2str(type));
  343. switch (type)
  344. {
  345. #ifndef BUILD_BRIDGE
  346. case BINARY_POSIX32:
  347. return carlaOptions.bridge_posix32;
  348. case BINARY_POSIX64:
  349. return carlaOptions.bridge_posix64;
  350. case BINARY_WIN32:
  351. return carlaOptions.bridge_win32;
  352. case BINARY_WIN64:
  353. return carlaOptions.bridge_win64;
  354. #endif
  355. default:
  356. return nullptr;
  357. }
  358. }
  359. const char* getPluginTypeString(const PluginType type)
  360. {
  361. qDebug("CarlaBackend::getPluginTypeString(%s)", PluginType2str(type));
  362. switch (type)
  363. {
  364. case PLUGIN_NONE:
  365. return "NONE";
  366. case PLUGIN_INTERNAL:
  367. return "INTERNAL";
  368. case PLUGIN_LADSPA:
  369. return "LADSPA";
  370. case PLUGIN_DSSI:
  371. return "DSSI";
  372. case PLUGIN_LV2:
  373. return "LV2";
  374. case PLUGIN_VST:
  375. return "VST";
  376. case PLUGIN_GIG:
  377. return "GIG";
  378. case PLUGIN_SF2:
  379. return "SF2";
  380. case PLUGIN_SFZ:
  381. return "SFZ";
  382. }
  383. return "NONE";
  384. }
  385. // -------------------------------------------------------------------------------------------------------------------
  386. void* getPointer(const uintptr_t addr)
  387. {
  388. CARLA_ASSERT(addr != 0);
  389. qDebug("CarlaBackend::getPointer(" P_UINTPTR ")", addr);
  390. uintptr_t* const ptr = (uintptr_t*)addr;
  391. return (void*)ptr;
  392. }
  393. PluginCategory getPluginCategoryFromName(const char* const name)
  394. {
  395. CARLA_ASSERT(name);
  396. qDebug("CarlaBackend::getPluginCategoryFromName(\"%s\")", name);
  397. QString qname(name);
  398. if (qname.isEmpty())
  399. return PLUGIN_CATEGORY_NONE;
  400. qname = qname.toLower();
  401. // generic tags first
  402. if (qname.contains("delay", Qt::CaseSensitive))
  403. return PLUGIN_CATEGORY_DELAY;
  404. if (qname.contains("reverb", Qt::CaseSensitive))
  405. return PLUGIN_CATEGORY_DELAY;
  406. // filter
  407. if (qname.contains("filter", Qt::CaseSensitive))
  408. return PLUGIN_CATEGORY_FILTER;
  409. // dynamics
  410. if (qname.contains("dynamics", Qt::CaseSensitive))
  411. return PLUGIN_CATEGORY_DYNAMICS;
  412. if (qname.contains("amplifier", Qt::CaseSensitive))
  413. return PLUGIN_CATEGORY_DYNAMICS;
  414. if (qname.contains("compressor", Qt::CaseSensitive))
  415. return PLUGIN_CATEGORY_DYNAMICS;
  416. if (qname.contains("enhancer", Qt::CaseSensitive))
  417. return PLUGIN_CATEGORY_DYNAMICS;
  418. if (qname.contains("exciter", Qt::CaseSensitive))
  419. return PLUGIN_CATEGORY_DYNAMICS;
  420. if (qname.contains("gate", Qt::CaseSensitive))
  421. return PLUGIN_CATEGORY_DYNAMICS;
  422. if (qname.contains("limiter", Qt::CaseSensitive))
  423. return PLUGIN_CATEGORY_DYNAMICS;
  424. // modulator
  425. if (qname.contains("modulator", Qt::CaseSensitive))
  426. return PLUGIN_CATEGORY_MODULATOR;
  427. if (qname.contains("chorus", Qt::CaseSensitive))
  428. return PLUGIN_CATEGORY_MODULATOR;
  429. if (qname.contains("flanger", Qt::CaseSensitive))
  430. return PLUGIN_CATEGORY_MODULATOR;
  431. if (qname.contains("phaser", Qt::CaseSensitive))
  432. return PLUGIN_CATEGORY_MODULATOR;
  433. if (qname.contains("saturator", Qt::CaseSensitive))
  434. return PLUGIN_CATEGORY_MODULATOR;
  435. // unitily
  436. if (qname.contains("utility", Qt::CaseSensitive))
  437. return PLUGIN_CATEGORY_UTILITY;
  438. if (qname.contains("analyzer", Qt::CaseSensitive))
  439. return PLUGIN_CATEGORY_UTILITY;
  440. if (qname.contains("converter", Qt::CaseSensitive))
  441. return PLUGIN_CATEGORY_UTILITY;
  442. if (qname.contains("deesser", Qt::CaseSensitive))
  443. return PLUGIN_CATEGORY_UTILITY;
  444. if (qname.contains("mixer", Qt::CaseSensitive))
  445. return PLUGIN_CATEGORY_UTILITY;
  446. // common tags
  447. if (qname.contains("verb", Qt::CaseSensitive))
  448. return PLUGIN_CATEGORY_DELAY;
  449. if (qname.contains("eq", Qt::CaseSensitive))
  450. return PLUGIN_CATEGORY_EQ;
  451. if (qname.contains("tool", Qt::CaseSensitive))
  452. return PLUGIN_CATEGORY_UTILITY;
  453. return PLUGIN_CATEGORY_NONE;
  454. }
  455. // -------------------------------------------------------------------------------------------------------------------
  456. const char* getLastError()
  457. {
  458. qDebug("CarlaBackend::getLastError()");
  459. return carlaLastError;
  460. }
  461. void setLastError(const char* const error)
  462. {
  463. qDebug("CarlaBackend::setLastError(\"%s\")", error);
  464. if (carlaLastError)
  465. free((void*)carlaLastError);
  466. carlaLastError = error ? strdup(error) : nullptr;
  467. }
  468. // -------------------------------------------------------------------------------------------------------------------
  469. #ifndef BUILD_BRIDGE
  470. uint32_t getPluginHintsFromNative(const uint32_t nativeHints)
  471. {
  472. uint32_t realHints = 0;
  473. if (nativeHints & ::PLUGIN_IS_SYNTH)
  474. realHints |= PLUGIN_IS_SYNTH;
  475. if (nativeHints & ::PLUGIN_HAS_GUI)
  476. realHints |= PLUGIN_HAS_GUI;
  477. if (nativeHints & ::PLUGIN_USES_SINGLE_THREAD)
  478. realHints |= PLUGIN_USES_SINGLE_THREAD;
  479. return realHints;
  480. }
  481. void setOption(const OptionsType option, const int value, const char* const valueStr)
  482. {
  483. qDebug("CarlaBackend::setOption(%s, %i, \"%s\")", OptionsType2str(option), value, valueStr);
  484. switch (option)
  485. {
  486. case OPTION_PROCESS_NAME:
  487. carla_setprocname(valueStr);
  488. break;
  489. case OPTION_PROCESS_MODE:
  490. if (value < PROCESS_MODE_SINGLE_CLIENT || value > PROCESS_MODE_CONTINUOUS_RACK)
  491. return qCritical("CarlaBackend::setOption(%s, %i, \"%s\") - invalid value", OptionsType2str(option), value, valueStr);
  492. carlaOptions.processMode = (ProcessModeType)value;
  493. break;
  494. case OPTION_PROCESS_HIGH_PRECISION:
  495. carlaOptions.processHighPrecision = value;
  496. break;
  497. case OPTION_MAX_PARAMETERS:
  498. carlaOptions.maxParameters = (value > 0) ? value : MAX_PARAMETERS;
  499. break;
  500. case OPTION_PREFERRED_BUFFER_SIZE:
  501. carlaOptions.preferredBufferSize = value;
  502. break;
  503. case OPTION_PREFERRED_SAMPLE_RATE:
  504. carlaOptions.preferredSampleRate = value;
  505. break;
  506. case OPTION_FORCE_STEREO:
  507. carlaOptions.forceStereo = value;
  508. break;
  509. case OPTION_USE_DSSI_VST_CHUNKS:
  510. carlaOptions.useDssiVstChunks = value;
  511. break;
  512. case OPTION_PREFER_UI_BRIDGES:
  513. carlaOptions.preferUiBridges = value;
  514. break;
  515. case OPTION_OSC_UI_TIMEOUT:
  516. carlaOptions.oscUiTimeout = value/100;
  517. break;
  518. case OPTION_PATH_LADSPA:
  519. carla_setenv("LADSPA_PATH", valueStr);
  520. break;
  521. case OPTION_PATH_DSSI:
  522. carla_setenv("DSSI_PATH", valueStr);
  523. break;
  524. case OPTION_PATH_LV2:
  525. carla_setenv("LV2_PATH", valueStr);
  526. break;
  527. case OPTION_PATH_VST:
  528. carla_setenv("VST_PATH", valueStr);
  529. break;
  530. case OPTION_PATH_GIG:
  531. carla_setenv("GIG_PATH", valueStr);
  532. break;
  533. case OPTION_PATH_SF2:
  534. carla_setenv("SF2_PATH", valueStr);
  535. break;
  536. case OPTION_PATH_SFZ:
  537. carla_setenv("SFZ_PATH", valueStr);
  538. break;
  539. case OPTION_PATH_BRIDGE_POSIX32:
  540. carlaOptions.bridge_posix32 = strdup(valueStr);
  541. break;
  542. case OPTION_PATH_BRIDGE_POSIX64:
  543. carlaOptions.bridge_posix64 = strdup(valueStr);
  544. break;
  545. case OPTION_PATH_BRIDGE_WIN32:
  546. carlaOptions.bridge_win32 = strdup(valueStr);
  547. break;
  548. case OPTION_PATH_BRIDGE_WIN64:
  549. carlaOptions.bridge_win64 = strdup(valueStr);
  550. break;
  551. case OPTION_PATH_BRIDGE_LV2_GTK2:
  552. carlaOptions.bridge_lv2gtk2 = strdup(valueStr);
  553. break;
  554. case OPTION_PATH_BRIDGE_LV2_GTK3:
  555. carlaOptions.bridge_lv2gtk3 = strdup(valueStr);
  556. break;
  557. case OPTION_PATH_BRIDGE_LV2_QT4:
  558. carlaOptions.bridge_lv2qt4 = strdup(valueStr);
  559. break;
  560. case OPTION_PATH_BRIDGE_LV2_X11:
  561. carlaOptions.bridge_lv2x11 = strdup(valueStr);
  562. break;
  563. case OPTION_PATH_BRIDGE_VST_HWND:
  564. carlaOptions.bridge_vsthwnd = strdup(valueStr);
  565. break;
  566. case OPTION_PATH_BRIDGE_VST_X11:
  567. carlaOptions.bridge_vstx11 = strdup(valueStr);
  568. break;
  569. }
  570. }
  571. void resetOptions()
  572. {
  573. qDebug("CarlaBackend::resetOptions()");
  574. if (carlaOptions.bridge_posix32)
  575. free((void*)carlaOptions.bridge_posix32);
  576. if (carlaOptions.bridge_posix64)
  577. free((void*)carlaOptions.bridge_posix64);
  578. if (carlaOptions.bridge_win32)
  579. free((void*)carlaOptions.bridge_win32);
  580. if (carlaOptions.bridge_win64)
  581. free((void*)carlaOptions.bridge_win64);
  582. if (carlaOptions.bridge_lv2gtk2)
  583. free((void*)carlaOptions.bridge_lv2gtk2);
  584. if (carlaOptions.bridge_lv2gtk3)
  585. free((void*)carlaOptions.bridge_lv2gtk3);
  586. if (carlaOptions.bridge_lv2qt4)
  587. free((void*)carlaOptions.bridge_lv2qt4);
  588. if (carlaOptions.bridge_lv2x11)
  589. free((void*)carlaOptions.bridge_lv2x11);
  590. if (carlaOptions.bridge_vsthwnd)
  591. free((void*)carlaOptions.bridge_vsthwnd);
  592. if (carlaOptions.bridge_vstx11)
  593. free((void*)carlaOptions.bridge_vstx11);
  594. carlaOptions.processMode = PROCESS_MODE_MULTIPLE_CLIENTS;
  595. carlaOptions.processHighPrecision = false;
  596. carlaOptions.maxParameters = MAX_PARAMETERS;
  597. carlaOptions.preferredBufferSize = 512;
  598. carlaOptions.preferredSampleRate = 44100;
  599. carlaOptions.forceStereo = false;
  600. carlaOptions.useDssiVstChunks = false;
  601. carlaOptions.preferUiBridges = true;
  602. carlaOptions.oscUiTimeout = 4000/100;
  603. carlaOptions.bridge_posix32 = nullptr;
  604. carlaOptions.bridge_posix64 = nullptr;
  605. carlaOptions.bridge_win32 = nullptr;
  606. carlaOptions.bridge_win64 = nullptr;
  607. carlaOptions.bridge_lv2gtk2 = nullptr;
  608. carlaOptions.bridge_lv2gtk3 = nullptr;
  609. carlaOptions.bridge_lv2qt4 = nullptr;
  610. carlaOptions.bridge_lv2x11 = nullptr;
  611. carlaOptions.bridge_vsthwnd = nullptr;
  612. carlaOptions.bridge_vstx11 = nullptr;
  613. }
  614. #endif // BUILD_BRIDGE
  615. CARLA_BACKEND_END_NAMESPACE