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.

701 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_PLUGIN_BRIDGES:
  206. return "OPTION_PREFER_PLUGIN_BRIDGES";
  207. case OPTION_PREFER_UI_BRIDGES:
  208. return "OPTION_PREFER_UI_BRIDGES";
  209. case OPTION_OSC_UI_TIMEOUT:
  210. return "OPTION_OSC_UI_TIMEOUT";
  211. case OPTION_PATH_LADSPA:
  212. return "OPTION_PATH_LADSPA";
  213. case OPTION_PATH_DSSI:
  214. return "OPTION_PATH_DSSI";
  215. case OPTION_PATH_LV2:
  216. return "OPTION_PATH_LV2";
  217. case OPTION_PATH_VST:
  218. return "OPTION_PATH_VST";
  219. case OPTION_PATH_GIG:
  220. return "OPTION_PATH_GIG";
  221. case OPTION_PATH_SF2:
  222. return "OPTION_PATH_SF2";
  223. case OPTION_PATH_SFZ:
  224. return "OPTION_PATH_SFZ";
  225. case OPTION_PATH_BRIDGE_POSIX32:
  226. return "OPTION_PATH_BRIDGE_POSIX32";
  227. case OPTION_PATH_BRIDGE_POSIX64:
  228. return "OPTION_PATH_BRIDGE_POSIX64";
  229. case OPTION_PATH_BRIDGE_WIN32:
  230. return "OPTION_PATH_BRIDGE_WIN32";
  231. case OPTION_PATH_BRIDGE_WIN64:
  232. return "OPTION_PATH_BRIDGE_WIN64";
  233. case OPTION_PATH_BRIDGE_LV2_GTK2:
  234. return "OPTION_PATH_BRIDGE_LV2_GTK2";
  235. case OPTION_PATH_BRIDGE_LV2_GTK3:
  236. return "OPTION_PATH_BRIDGE_LV2_GTK3";
  237. case OPTION_PATH_BRIDGE_LV2_QT4:
  238. return "OPTION_PATH_BRIDGE_LV2_QT4";
  239. case OPTION_PATH_BRIDGE_LV2_X11:
  240. return "OPTION_PATH_BRIDGE_LV2_X11";
  241. case OPTION_PATH_BRIDGE_VST_HWND:
  242. return "OPTION_PATH_BRIDGE_VST_HWND";
  243. case OPTION_PATH_BRIDGE_VST_X11:
  244. return "OPTION_PATH_BRIDGE_VST_X11";
  245. }
  246. qWarning("CarlaBackend::OptionsType2str(%i) - invalid type", type);
  247. return nullptr;
  248. }
  249. const char* CallbackType2str(const CallbackType type)
  250. {
  251. switch (type)
  252. {
  253. case CALLBACK_DEBUG:
  254. return "CALLBACK_DEBUG";
  255. case CALLBACK_PARAMETER_VALUE_CHANGED:
  256. return "CALLBACK_PARAMETER_VALUE_CHANGED";
  257. case CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED:
  258. return "CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED";
  259. case CALLBACK_PARAMETER_MIDI_CC_CHANGED:
  260. return "CALLBACK_PARAMETER_MIDI_CC_CHANGED";
  261. case CALLBACK_PROGRAM_CHANGED:
  262. return "CALLBACK_PROGRAM_CHANGED";
  263. case CALLBACK_MIDI_PROGRAM_CHANGED:
  264. return "CALLBACK_MIDI_PROGRAM_CHANGED";
  265. case CALLBACK_NOTE_ON:
  266. return "CALLBACK_NOTE_ON";
  267. case CALLBACK_NOTE_OFF:
  268. return "CALLBACK_NOTE_OFF";
  269. case CALLBACK_SHOW_GUI:
  270. return "CALLBACK_SHOW_GUI";
  271. case CALLBACK_RESIZE_GUI:
  272. return "CALLBACK_RESIZE_GUI";
  273. case CALLBACK_UPDATE:
  274. return "CALLBACK_UPDATE";
  275. case CALLBACK_RELOAD_INFO:
  276. return "CALLBACK_RELOAD_INFO";
  277. case CALLBACK_RELOAD_PARAMETERS:
  278. return "CALLBACK_RELOAD_PARAMETERS";
  279. case CALLBACK_RELOAD_PROGRAMS:
  280. return "CALLBACK_RELOAD_PROGRAMS";
  281. case CALLBACK_RELOAD_ALL:
  282. return "CALLBACK_RELOAD_ALL";
  283. case CALLBACK_NSM_ANNOUNCE:
  284. return "CALLBACK_NSM_ANNOUNCE";
  285. case CALLBACK_NSM_OPEN1:
  286. return "CALLBACK_NSM_OPEN1";
  287. case CALLBACK_NSM_OPEN2:
  288. return "CALLBACK_NSM_OPEN2";
  289. case CALLBACK_NSM_SAVE:
  290. return "CALLBACK_NSM_SAVE";
  291. case CALLBACK_QUIT:
  292. return "CALLBACK_QUIT";
  293. }
  294. qWarning("CarlaBackend::CallbackType2str(%i) - invalid type", type);
  295. return nullptr;
  296. }
  297. const char* ProcessModeType2str(const ProcessModeType type)
  298. {
  299. switch (type)
  300. {
  301. case PROCESS_MODE_SINGLE_CLIENT:
  302. return "PROCESS_MODE_SINGLE_CLIENT";
  303. case PROCESS_MODE_MULTIPLE_CLIENTS:
  304. return "PROCESS_MODE_MULTIPLE_CLIENTS";
  305. case PROCESS_MODE_CONTINUOUS_RACK:
  306. return "PROCESS_MODE_CONTINUOUS_RACK";
  307. }
  308. qWarning("CarlaBackend::ProcessModeType2str(%i) - invalid type", type);
  309. return nullptr;
  310. }
  311. // -------------------------------------------------------------------------------------------------------------------
  312. CustomDataType getCustomDataStringType(const char* const stype)
  313. {
  314. qDebug("CarlaBackend::getCustomDataStringType(\"%s\")", stype);
  315. if (strcmp(stype, "string") == 0)
  316. return CUSTOM_DATA_STRING;
  317. if (strcmp(stype, "path") == 0)
  318. return CUSTOM_DATA_PATH;
  319. if (strcmp(stype, "chunk") == 0)
  320. return CUSTOM_DATA_CHUNK;
  321. if (strcmp(stype, "binary") == 0)
  322. return CUSTOM_DATA_BINARY;
  323. return CUSTOM_DATA_INVALID;
  324. }
  325. const char* getCustomDataTypeString(const CustomDataType type)
  326. {
  327. qDebug("CarlaBackend::getCustomDataTypeString(%s)", CustomDataType2str(type));
  328. switch (type)
  329. {
  330. case CUSTOM_DATA_STRING:
  331. return "string";
  332. case CUSTOM_DATA_PATH:
  333. return "path";
  334. case CUSTOM_DATA_CHUNK:
  335. return "chunk";
  336. case CUSTOM_DATA_BINARY:
  337. return "binary";
  338. default:
  339. return "invalid";
  340. }
  341. }
  342. const char* getBinaryBidgePath(const BinaryType type)
  343. {
  344. qDebug("CarlaBackend::getBinaryBidgePath(%s)", BinaryType2str(type));
  345. switch (type)
  346. {
  347. #ifndef BUILD_BRIDGE
  348. case BINARY_POSIX32:
  349. return carlaOptions.bridge_posix32;
  350. case BINARY_POSIX64:
  351. return carlaOptions.bridge_posix64;
  352. case BINARY_WIN32:
  353. return carlaOptions.bridge_win32;
  354. case BINARY_WIN64:
  355. return carlaOptions.bridge_win64;
  356. #endif
  357. default:
  358. return nullptr;
  359. }
  360. }
  361. const char* getPluginTypeString(const PluginType type)
  362. {
  363. qDebug("CarlaBackend::getPluginTypeString(%s)", PluginType2str(type));
  364. switch (type)
  365. {
  366. case PLUGIN_NONE:
  367. return "NONE";
  368. case PLUGIN_INTERNAL:
  369. return "INTERNAL";
  370. case PLUGIN_LADSPA:
  371. return "LADSPA";
  372. case PLUGIN_DSSI:
  373. return "DSSI";
  374. case PLUGIN_LV2:
  375. return "LV2";
  376. case PLUGIN_VST:
  377. return "VST";
  378. case PLUGIN_GIG:
  379. return "GIG";
  380. case PLUGIN_SF2:
  381. return "SF2";
  382. case PLUGIN_SFZ:
  383. return "SFZ";
  384. }
  385. return "NONE";
  386. }
  387. // -------------------------------------------------------------------------------------------------------------------
  388. void* getPointer(const uintptr_t addr)
  389. {
  390. CARLA_ASSERT(addr != 0);
  391. qDebug("CarlaBackend::getPointer(" P_UINTPTR ")", addr);
  392. uintptr_t* const ptr = (uintptr_t*)addr;
  393. return (void*)ptr;
  394. }
  395. PluginCategory getPluginCategoryFromName(const char* const name)
  396. {
  397. CARLA_ASSERT(name);
  398. qDebug("CarlaBackend::getPluginCategoryFromName(\"%s\")", name);
  399. QString qname(name);
  400. if (qname.isEmpty())
  401. return PLUGIN_CATEGORY_NONE;
  402. qname = qname.toLower();
  403. // generic tags first
  404. if (qname.contains("delay", Qt::CaseSensitive))
  405. return PLUGIN_CATEGORY_DELAY;
  406. if (qname.contains("reverb", Qt::CaseSensitive))
  407. return PLUGIN_CATEGORY_DELAY;
  408. // filter
  409. if (qname.contains("filter", Qt::CaseSensitive))
  410. return PLUGIN_CATEGORY_FILTER;
  411. // dynamics
  412. if (qname.contains("dynamics", Qt::CaseSensitive))
  413. return PLUGIN_CATEGORY_DYNAMICS;
  414. if (qname.contains("amplifier", Qt::CaseSensitive))
  415. return PLUGIN_CATEGORY_DYNAMICS;
  416. if (qname.contains("compressor", Qt::CaseSensitive))
  417. return PLUGIN_CATEGORY_DYNAMICS;
  418. if (qname.contains("enhancer", Qt::CaseSensitive))
  419. return PLUGIN_CATEGORY_DYNAMICS;
  420. if (qname.contains("exciter", Qt::CaseSensitive))
  421. return PLUGIN_CATEGORY_DYNAMICS;
  422. if (qname.contains("gate", Qt::CaseSensitive))
  423. return PLUGIN_CATEGORY_DYNAMICS;
  424. if (qname.contains("limiter", Qt::CaseSensitive))
  425. return PLUGIN_CATEGORY_DYNAMICS;
  426. // modulator
  427. if (qname.contains("modulator", Qt::CaseSensitive))
  428. return PLUGIN_CATEGORY_MODULATOR;
  429. if (qname.contains("chorus", Qt::CaseSensitive))
  430. return PLUGIN_CATEGORY_MODULATOR;
  431. if (qname.contains("flanger", Qt::CaseSensitive))
  432. return PLUGIN_CATEGORY_MODULATOR;
  433. if (qname.contains("phaser", Qt::CaseSensitive))
  434. return PLUGIN_CATEGORY_MODULATOR;
  435. if (qname.contains("saturator", Qt::CaseSensitive))
  436. return PLUGIN_CATEGORY_MODULATOR;
  437. // unitily
  438. if (qname.contains("utility", Qt::CaseSensitive))
  439. return PLUGIN_CATEGORY_UTILITY;
  440. if (qname.contains("analyzer", Qt::CaseSensitive))
  441. return PLUGIN_CATEGORY_UTILITY;
  442. if (qname.contains("converter", Qt::CaseSensitive))
  443. return PLUGIN_CATEGORY_UTILITY;
  444. if (qname.contains("deesser", Qt::CaseSensitive))
  445. return PLUGIN_CATEGORY_UTILITY;
  446. if (qname.contains("mixer", Qt::CaseSensitive))
  447. return PLUGIN_CATEGORY_UTILITY;
  448. // common tags
  449. if (qname.contains("verb", Qt::CaseSensitive))
  450. return PLUGIN_CATEGORY_DELAY;
  451. if (qname.contains("eq", Qt::CaseSensitive))
  452. return PLUGIN_CATEGORY_EQ;
  453. if (qname.contains("tool", Qt::CaseSensitive))
  454. return PLUGIN_CATEGORY_UTILITY;
  455. return PLUGIN_CATEGORY_NONE;
  456. }
  457. // -------------------------------------------------------------------------------------------------------------------
  458. const char* getLastError()
  459. {
  460. qDebug("CarlaBackend::getLastError()");
  461. return carlaLastError;
  462. }
  463. void setLastError(const char* const error)
  464. {
  465. qDebug("CarlaBackend::setLastError(\"%s\")", error);
  466. if (carlaLastError)
  467. free((void*)carlaLastError);
  468. carlaLastError = error ? strdup(error) : nullptr;
  469. }
  470. // -------------------------------------------------------------------------------------------------------------------
  471. #ifndef BUILD_BRIDGE
  472. uint32_t getPluginHintsFromNative(const uint32_t nativeHints)
  473. {
  474. uint32_t realHints = 0;
  475. if (nativeHints & ::PLUGIN_IS_SYNTH)
  476. realHints |= PLUGIN_IS_SYNTH;
  477. if (nativeHints & ::PLUGIN_HAS_GUI)
  478. realHints |= PLUGIN_HAS_GUI;
  479. if (nativeHints & ::PLUGIN_USES_SINGLE_THREAD)
  480. realHints |= PLUGIN_USES_SINGLE_THREAD;
  481. return realHints;
  482. }
  483. void setOption(const OptionsType option, const int value, const char* const valueStr)
  484. {
  485. qDebug("CarlaBackend::setOption(%s, %i, \"%s\")", OptionsType2str(option), value, valueStr);
  486. switch (option)
  487. {
  488. case OPTION_PROCESS_NAME:
  489. carla_setprocname(valueStr);
  490. break;
  491. case OPTION_PROCESS_MODE:
  492. if (value < PROCESS_MODE_SINGLE_CLIENT || value > PROCESS_MODE_CONTINUOUS_RACK)
  493. return qCritical("CarlaBackend::setOption(%s, %i, \"%s\") - invalid value", OptionsType2str(option), value, valueStr);
  494. carlaOptions.processMode = (ProcessModeType)value;
  495. break;
  496. case OPTION_PROCESS_HIGH_PRECISION:
  497. carlaOptions.processHighPrecision = value;
  498. break;
  499. case OPTION_MAX_PARAMETERS:
  500. carlaOptions.maxParameters = (value > 0) ? value : MAX_PARAMETERS;
  501. break;
  502. case OPTION_PREFERRED_BUFFER_SIZE:
  503. carlaOptions.preferredBufferSize = value;
  504. break;
  505. case OPTION_PREFERRED_SAMPLE_RATE:
  506. carlaOptions.preferredSampleRate = value;
  507. break;
  508. case OPTION_FORCE_STEREO:
  509. carlaOptions.forceStereo = value;
  510. break;
  511. case OPTION_USE_DSSI_VST_CHUNKS:
  512. carlaOptions.useDssiVstChunks = value;
  513. break;
  514. case OPTION_PREFER_PLUGIN_BRIDGES:
  515. carlaOptions.preferPluginBridges = value;
  516. break;
  517. case OPTION_PREFER_UI_BRIDGES:
  518. carlaOptions.preferUiBridges = value;
  519. break;
  520. case OPTION_OSC_UI_TIMEOUT:
  521. carlaOptions.oscUiTimeout = value/100;
  522. break;
  523. case OPTION_PATH_LADSPA:
  524. carla_setenv("LADSPA_PATH", valueStr);
  525. break;
  526. case OPTION_PATH_DSSI:
  527. carla_setenv("DSSI_PATH", valueStr);
  528. break;
  529. case OPTION_PATH_LV2:
  530. carla_setenv("LV2_PATH", valueStr);
  531. break;
  532. case OPTION_PATH_VST:
  533. carla_setenv("VST_PATH", valueStr);
  534. break;
  535. case OPTION_PATH_GIG:
  536. carla_setenv("GIG_PATH", valueStr);
  537. break;
  538. case OPTION_PATH_SF2:
  539. carla_setenv("SF2_PATH", valueStr);
  540. break;
  541. case OPTION_PATH_SFZ:
  542. carla_setenv("SFZ_PATH", valueStr);
  543. break;
  544. case OPTION_PATH_BRIDGE_POSIX32:
  545. carlaOptions.bridge_posix32 = strdup(valueStr);
  546. break;
  547. case OPTION_PATH_BRIDGE_POSIX64:
  548. carlaOptions.bridge_posix64 = strdup(valueStr);
  549. break;
  550. case OPTION_PATH_BRIDGE_WIN32:
  551. carlaOptions.bridge_win32 = strdup(valueStr);
  552. break;
  553. case OPTION_PATH_BRIDGE_WIN64:
  554. carlaOptions.bridge_win64 = strdup(valueStr);
  555. break;
  556. case OPTION_PATH_BRIDGE_LV2_GTK2:
  557. carlaOptions.bridge_lv2gtk2 = strdup(valueStr);
  558. break;
  559. case OPTION_PATH_BRIDGE_LV2_GTK3:
  560. carlaOptions.bridge_lv2gtk3 = strdup(valueStr);
  561. break;
  562. case OPTION_PATH_BRIDGE_LV2_QT4:
  563. carlaOptions.bridge_lv2qt4 = strdup(valueStr);
  564. break;
  565. case OPTION_PATH_BRIDGE_LV2_X11:
  566. carlaOptions.bridge_lv2x11 = strdup(valueStr);
  567. break;
  568. case OPTION_PATH_BRIDGE_VST_HWND:
  569. carlaOptions.bridge_vsthwnd = strdup(valueStr);
  570. break;
  571. case OPTION_PATH_BRIDGE_VST_X11:
  572. carlaOptions.bridge_vstx11 = strdup(valueStr);
  573. break;
  574. }
  575. }
  576. void resetOptions()
  577. {
  578. qDebug("CarlaBackend::resetOptions()");
  579. if (carlaOptions.bridge_posix32)
  580. free((void*)carlaOptions.bridge_posix32);
  581. if (carlaOptions.bridge_posix64)
  582. free((void*)carlaOptions.bridge_posix64);
  583. if (carlaOptions.bridge_win32)
  584. free((void*)carlaOptions.bridge_win32);
  585. if (carlaOptions.bridge_win64)
  586. free((void*)carlaOptions.bridge_win64);
  587. if (carlaOptions.bridge_lv2gtk2)
  588. free((void*)carlaOptions.bridge_lv2gtk2);
  589. if (carlaOptions.bridge_lv2gtk3)
  590. free((void*)carlaOptions.bridge_lv2gtk3);
  591. if (carlaOptions.bridge_lv2qt4)
  592. free((void*)carlaOptions.bridge_lv2qt4);
  593. if (carlaOptions.bridge_lv2x11)
  594. free((void*)carlaOptions.bridge_lv2x11);
  595. if (carlaOptions.bridge_vsthwnd)
  596. free((void*)carlaOptions.bridge_vsthwnd);
  597. if (carlaOptions.bridge_vstx11)
  598. free((void*)carlaOptions.bridge_vstx11);
  599. carlaOptions.processMode = PROCESS_MODE_MULTIPLE_CLIENTS;
  600. carlaOptions.processHighPrecision = false;
  601. carlaOptions.maxParameters = MAX_PARAMETERS;
  602. carlaOptions.preferredBufferSize = 512;
  603. carlaOptions.preferredSampleRate = 44100;
  604. carlaOptions.forceStereo = false;
  605. carlaOptions.useDssiVstChunks = false;
  606. carlaOptions.preferPluginBridges = false;
  607. carlaOptions.preferUiBridges = true;
  608. carlaOptions.oscUiTimeout = 4000/100;
  609. carlaOptions.bridge_posix32 = nullptr;
  610. carlaOptions.bridge_posix64 = nullptr;
  611. carlaOptions.bridge_win32 = nullptr;
  612. carlaOptions.bridge_win64 = nullptr;
  613. carlaOptions.bridge_lv2gtk2 = nullptr;
  614. carlaOptions.bridge_lv2gtk3 = nullptr;
  615. carlaOptions.bridge_lv2qt4 = nullptr;
  616. carlaOptions.bridge_lv2x11 = nullptr;
  617. carlaOptions.bridge_vsthwnd = nullptr;
  618. carlaOptions.bridge_vstx11 = nullptr;
  619. }
  620. #endif // BUILD_BRIDGE
  621. CARLA_BACKEND_END_NAMESPACE