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.

1036 lines
35KB

  1. /*
  2. * JACK Backend code for Carla
  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. #include "carla_plugin.h"
  18. #include "ladspa/ladspa.h"
  19. #include "ladspa_rdf.h"
  20. bool is_rdf_port_good(int Type1, int Type2)
  21. {
  22. if (LADSPA_IS_PORT_INPUT(Type1) && ! LADSPA_IS_PORT_INPUT(Type2))
  23. return false;
  24. else if (LADSPA_IS_PORT_OUTPUT(Type1) && ! LADSPA_IS_PORT_OUTPUT(Type2))
  25. return false;
  26. else if (LADSPA_IS_PORT_CONTROL(Type1) && ! LADSPA_IS_PORT_CONTROL(Type2))
  27. return false;
  28. else if (LADSPA_IS_PORT_AUDIO(Type1) && ! LADSPA_IS_PORT_AUDIO(Type2))
  29. return false;
  30. else
  31. return true;
  32. }
  33. bool is_ladspa_rdf_descriptor_valid(const LADSPA_RDF_Descriptor* rdf_descriptor, const LADSPA_Descriptor* descriptor)
  34. {
  35. if (rdf_descriptor)
  36. {
  37. if (rdf_descriptor->PortCount <= descriptor->PortCount)
  38. {
  39. for (unsigned long i=0; i < rdf_descriptor->PortCount; i++)
  40. {
  41. if (is_rdf_port_good(rdf_descriptor->Ports[i].Type, descriptor->PortDescriptors[i]) == false)
  42. {
  43. qWarning("WARNING - Plugin has RDF data, but invalid PortTypes: %i != %i", rdf_descriptor->Ports[i].Type, descriptor->PortDescriptors[i]);
  44. return false;
  45. }
  46. }
  47. return true;
  48. }
  49. else
  50. {
  51. qWarning("WARNING - Plugin has RDF data, but invalid PortCount: %li > %li", rdf_descriptor->PortCount, descriptor->PortCount);
  52. return false;
  53. }
  54. }
  55. else
  56. // No RDF Descriptor
  57. return false;
  58. }
  59. class LadspaPlugin : public CarlaPlugin
  60. {
  61. public:
  62. LadspaPlugin() : CarlaPlugin()
  63. {
  64. qDebug("LadspaPlugin::LadspaPlugin()");
  65. m_type = PLUGIN_LADSPA;
  66. handle = nullptr;
  67. descriptor = nullptr;
  68. rdf_descriptor = nullptr;
  69. param_buffers = nullptr;
  70. }
  71. ~LadspaPlugin()
  72. {
  73. qDebug("LadspaPlugin::~LadspaPlugin()");
  74. if (handle && descriptor->deactivate && m_active_before)
  75. descriptor->deactivate(handle);
  76. if (handle && descriptor->cleanup)
  77. descriptor->cleanup(handle);
  78. if (rdf_descriptor)
  79. ladspa_rdf_free(rdf_descriptor);
  80. handle = nullptr;
  81. descriptor = nullptr;
  82. rdf_descriptor = nullptr;
  83. }
  84. PluginCategory category()
  85. {
  86. if (rdf_descriptor)
  87. {
  88. LADSPA_Properties Category = rdf_descriptor->Type;
  89. // Specific Types
  90. if (Category & (LADSPA_CLASS_DELAY|LADSPA_CLASS_REVERB))
  91. return PLUGIN_CATEGORY_DELAY;
  92. else if (Category & (LADSPA_CLASS_PHASER|LADSPA_CLASS_FLANGER|LADSPA_CLASS_CHORUS))
  93. return PLUGIN_CATEGORY_MODULATOR;
  94. else if (Category & (LADSPA_CLASS_AMPLIFIER))
  95. return PLUGIN_CATEGORY_DYNAMICS;
  96. else if (Category & (LADSPA_CLASS_UTILITY|LADSPA_CLASS_SPECTRAL|LADSPA_CLASS_FREQUENCY_METER))
  97. return PLUGIN_CATEGORY_UTILITY;
  98. // Pre-set LADSPA Types
  99. else if (LADSPA_IS_PLUGIN_DYNAMICS(Category))
  100. return PLUGIN_CATEGORY_DYNAMICS;
  101. else if (LADSPA_IS_PLUGIN_AMPLITUDE(Category))
  102. return PLUGIN_CATEGORY_MODULATOR;
  103. else if (LADSPA_IS_PLUGIN_EQ(Category))
  104. return PLUGIN_CATEGORY_EQ;
  105. else if (LADSPA_IS_PLUGIN_FILTER(Category))
  106. return PLUGIN_CATEGORY_FILTER;
  107. else if (LADSPA_IS_PLUGIN_FREQUENCY(Category))
  108. return PLUGIN_CATEGORY_UTILITY;
  109. else if (LADSPA_IS_PLUGIN_SIMULATOR(Category))
  110. return PLUGIN_CATEGORY_OTHER;
  111. else if (LADSPA_IS_PLUGIN_TIME(Category))
  112. return PLUGIN_CATEGORY_DELAY;
  113. else if (LADSPA_IS_PLUGIN_GENERATOR(Category))
  114. return PLUGIN_CATEGORY_SYNTH;
  115. }
  116. return get_category_from_name(m_name);
  117. }
  118. long unique_id()
  119. {
  120. return descriptor->UniqueID;
  121. }
  122. uint32_t param_scalepoint_count(uint32_t param_id)
  123. {
  124. int32_t rindex = param.data[param_id].rindex;
  125. bool HasPortRDF = (rdf_descriptor && rindex < (int32_t)rdf_descriptor->PortCount);
  126. if (HasPortRDF)
  127. return rdf_descriptor->Ports[rindex].ScalePointCount;
  128. else
  129. return 0;
  130. }
  131. double get_parameter_value(uint32_t param_id)
  132. {
  133. return fix_parameter_value(param_buffers[param_id], param.ranges[param_id]);
  134. }
  135. double get_parameter_scalepoint_value(uint32_t param_id, uint32_t scalepoint_id)
  136. {
  137. int32_t param_rindex = param.data[param_id].rindex;
  138. bool HasPortRDF = (rdf_descriptor && param_rindex < (int32_t)rdf_descriptor->PortCount);
  139. if (HasPortRDF)
  140. return rdf_descriptor->Ports[param_rindex].ScalePoints[scalepoint_id].Value;
  141. else
  142. return 0.0;
  143. }
  144. void get_label(char* buf_str)
  145. {
  146. strncpy(buf_str, descriptor->Label, STR_MAX);
  147. }
  148. void get_maker(char* buf_str)
  149. {
  150. strncpy(buf_str, descriptor->Maker, STR_MAX);
  151. }
  152. void get_copyright(char* buf_str)
  153. {
  154. strncpy(buf_str, descriptor->Copyright, STR_MAX);
  155. }
  156. void get_real_name(char* buf_str)
  157. {
  158. if (rdf_descriptor && rdf_descriptor->Title)
  159. strncpy(buf_str, rdf_descriptor->Title, STR_MAX);
  160. else
  161. strncpy(buf_str, descriptor->Name, STR_MAX);
  162. }
  163. void get_parameter_name(uint32_t param_id, char* buf_str)
  164. {
  165. int32_t rindex = param.data[param_id].rindex;
  166. strncpy(buf_str, descriptor->PortNames[rindex], STR_MAX);
  167. }
  168. void get_parameter_symbol(uint32_t param_id, char* buf_str)
  169. {
  170. int32_t rindex = param.data[param_id].rindex;
  171. bool HasPortRDF = (rdf_descriptor && rindex < (int32_t)rdf_descriptor->PortCount);
  172. if (HasPortRDF)
  173. {
  174. LADSPA_RDF_Port Port = rdf_descriptor->Ports[rindex];
  175. if (LADSPA_PORT_HAS_LABEL(Port.Hints))
  176. {
  177. strncpy(buf_str, Port.Label, STR_MAX);
  178. return;
  179. }
  180. }
  181. *buf_str = 0;
  182. }
  183. void get_parameter_unit(uint32_t param_id, char* buf_str)
  184. {
  185. int32_t rindex = param.data[param_id].rindex;
  186. bool HasPortRDF = (rdf_descriptor && rindex < (int32_t)rdf_descriptor->PortCount);
  187. if (HasPortRDF)
  188. {
  189. LADSPA_RDF_Port Port = rdf_descriptor->Ports[rindex];
  190. if (LADSPA_PORT_HAS_UNIT(Port.Hints))
  191. {
  192. switch (Port.Unit)
  193. {
  194. case LADSPA_UNIT_DB:
  195. strncpy(buf_str, "dB", STR_MAX);
  196. return;
  197. case LADSPA_UNIT_COEF:
  198. strncpy(buf_str, "(coef)", STR_MAX);
  199. return;
  200. case LADSPA_UNIT_HZ:
  201. strncpy(buf_str, "Hz", STR_MAX);
  202. return;
  203. case LADSPA_UNIT_S:
  204. strncpy(buf_str, "s", STR_MAX);
  205. return;
  206. case LADSPA_UNIT_MS:
  207. strncpy(buf_str, "ms", STR_MAX);
  208. return;
  209. case LADSPA_UNIT_MIN:
  210. strncpy(buf_str, "min", STR_MAX);
  211. return;
  212. }
  213. }
  214. }
  215. *buf_str = 0;
  216. }
  217. void get_parameter_scalepoint_label(uint32_t param_id, uint32_t scalepoint_id, char* buf_str)
  218. {
  219. int32_t param_rindex = param.data[param_id].rindex;
  220. bool HasPortRDF = (rdf_descriptor && param_rindex < (int32_t)rdf_descriptor->PortCount);
  221. if (HasPortRDF)
  222. strncpy(buf_str, rdf_descriptor->Ports[param_rindex].ScalePoints[scalepoint_id].Label, STR_MAX);
  223. else
  224. *buf_str = 0;
  225. }
  226. void set_parameter_value(uint32_t param_id, double value, bool gui_send, bool osc_send, bool callback_send)
  227. {
  228. param_buffers[param_id] = fix_parameter_value(value, param.ranges[param_id]);
  229. CarlaPlugin::set_parameter_value(param_id, value, gui_send, osc_send, callback_send);
  230. }
  231. void reload()
  232. {
  233. qDebug("LadspaPlugin::reload() - start");
  234. short _id = m_id;
  235. // Safely disable plugin for reload
  236. carla_proc_lock();
  237. m_id = -1;
  238. carla_proc_unlock();
  239. // Unregister previous jack ports if needed
  240. remove_from_jack(bool(_id >= 0));
  241. // Delete old data
  242. delete_buffers();
  243. uint32_t ains, aouts, params, j;
  244. ains = aouts = params = 0;
  245. const unsigned long PortCount = descriptor->PortCount;
  246. for (unsigned long i=0; i<PortCount; i++)
  247. {
  248. const LADSPA_PortDescriptor PortType = descriptor->PortDescriptors[i];
  249. if (LADSPA_IS_PORT_AUDIO(PortType))
  250. {
  251. if (LADSPA_IS_PORT_INPUT(PortType))
  252. ains += 1;
  253. else if (LADSPA_IS_PORT_OUTPUT(PortType))
  254. aouts += 1;
  255. }
  256. else if (LADSPA_IS_PORT_CONTROL(PortType))
  257. params += 1;
  258. }
  259. if (ains > 0)
  260. {
  261. ain.ports = new jack_port_t*[ains];
  262. ain.rindexes = new uint32_t[ains];
  263. }
  264. if (aouts > 0)
  265. {
  266. aout.ports = new jack_port_t*[aouts];
  267. aout.rindexes = new uint32_t[aouts];
  268. }
  269. if (params > 0)
  270. {
  271. param.data = new ParameterData[params];
  272. param.ranges = new ParameterRanges[params];
  273. param_buffers = new float[params];
  274. }
  275. const int port_name_size = jack_port_name_size() - 1;
  276. char port_name[port_name_size];
  277. bool needs_cin = false;
  278. bool needs_cout = false;
  279. for (unsigned long i=0; i<PortCount; i++)
  280. {
  281. const LADSPA_PortDescriptor PortType = descriptor->PortDescriptors[i];
  282. const LADSPA_PortRangeHint PortHint = descriptor->PortRangeHints[i];
  283. bool HasPortRDF = (rdf_descriptor && i < rdf_descriptor->PortCount);
  284. if (LADSPA_IS_PORT_AUDIO(PortType))
  285. {
  286. #ifndef BUILD_BRIDGE
  287. if (carla_options.global_jack_client)
  288. {
  289. strcpy(port_name, m_name);
  290. strcat(port_name, ":");
  291. strncat(port_name, descriptor->PortNames[i], port_name_size/2);
  292. }
  293. else
  294. #endif
  295. strncpy(port_name, descriptor->PortNames[i], port_name_size);
  296. if (LADSPA_IS_PORT_INPUT(PortType))
  297. {
  298. j = ain.count++;
  299. ain.ports[j] = jack_port_register(jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
  300. ain.rindexes[j] = i;
  301. }
  302. else if (LADSPA_IS_PORT_OUTPUT(PortType))
  303. {
  304. j = aout.count++;
  305. aout.ports[j] = jack_port_register(jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
  306. aout.rindexes[j] = i;
  307. needs_cin = true;
  308. }
  309. else
  310. qWarning("WARNING - Got a broken Port (Audio, but not input or output)");
  311. }
  312. else if (LADSPA_IS_PORT_CONTROL(PortType))
  313. {
  314. j = param.count++;
  315. param.data[j].index = j;
  316. param.data[j].rindex = i;
  317. param.data[j].hints = 0;
  318. param.data[j].midi_channel = 0;
  319. param.data[j].midi_cc = -1;
  320. double min, max, def, step, step_small, step_large;
  321. // min value
  322. if (LADSPA_IS_HINT_BOUNDED_BELOW(PortHint.HintDescriptor))
  323. min = PortHint.LowerBound;
  324. else
  325. min = 0.0;
  326. // max value
  327. if (LADSPA_IS_HINT_BOUNDED_ABOVE(PortHint.HintDescriptor))
  328. max = PortHint.UpperBound;
  329. else
  330. max = 1.0;
  331. if (min > max)
  332. max = min;
  333. else if (max < min)
  334. min = max;
  335. if (max - min == 0.0)
  336. {
  337. qWarning("Broken plugin parameter: max - min == 0");
  338. max = min + 0.1;
  339. }
  340. // default value
  341. if (HasPortRDF && LADSPA_PORT_HAS_DEFAULT(rdf_descriptor->Ports[i].Hints))
  342. def = rdf_descriptor->Ports[i].Default;
  343. else if (LADSPA_IS_HINT_HAS_DEFAULT(PortHint.HintDescriptor))
  344. {
  345. switch (PortHint.HintDescriptor & LADSPA_HINT_DEFAULT_MASK)
  346. {
  347. case LADSPA_HINT_DEFAULT_MINIMUM:
  348. def = min;
  349. break;
  350. case LADSPA_HINT_DEFAULT_MAXIMUM:
  351. def = max;
  352. break;
  353. case LADSPA_HINT_DEFAULT_0:
  354. def = 0.0;
  355. break;
  356. case LADSPA_HINT_DEFAULT_1:
  357. def = 1.0;
  358. break;
  359. case LADSPA_HINT_DEFAULT_100:
  360. def = 100.0;
  361. break;
  362. case LADSPA_HINT_DEFAULT_440:
  363. def = 440.0;
  364. break;
  365. case LADSPA_HINT_DEFAULT_LOW:
  366. if (LADSPA_IS_HINT_LOGARITHMIC(PortHint.HintDescriptor))
  367. def = exp((log(min)*0.75) + (log(max)*0.25));
  368. else
  369. def = (min*0.75) + (max*0.25);
  370. break;
  371. case LADSPA_HINT_DEFAULT_MIDDLE:
  372. if (LADSPA_IS_HINT_LOGARITHMIC(PortHint.HintDescriptor))
  373. def = sqrt(min*max);
  374. else
  375. def = (min+max)/2;
  376. break;
  377. case LADSPA_HINT_DEFAULT_HIGH:
  378. if (LADSPA_IS_HINT_LOGARITHMIC(PortHint.HintDescriptor))
  379. def = exp((log(min)*0.25) + (log(max)*0.75));
  380. else
  381. def = (min*0.25) + (max*0.75);
  382. break;
  383. default:
  384. if (min < 0.0 && max > 0.0)
  385. def = 0.0;
  386. else
  387. def = min;
  388. break;
  389. }
  390. }
  391. else
  392. {
  393. // no default value
  394. if (min < 0.0 && max > 0.0)
  395. def = 0.0;
  396. else
  397. def = min;
  398. }
  399. if (def < min)
  400. def = min;
  401. else if (def > max)
  402. def = max;
  403. if (LADSPA_IS_HINT_SAMPLE_RATE(PortHint.HintDescriptor))
  404. {
  405. double sample_rate = get_sample_rate();
  406. min *= sample_rate;
  407. max *= sample_rate;
  408. def *= sample_rate;
  409. param.data[j].hints |= PARAMETER_USES_SAMPLERATE;
  410. }
  411. if (LADSPA_IS_HINT_TOGGLED(PortHint.HintDescriptor))
  412. {
  413. step = max - min;
  414. step_small = step;
  415. step_large = step;
  416. param.data[j].hints |= PARAMETER_IS_BOOLEAN;
  417. }
  418. else if (LADSPA_IS_HINT_INTEGER(PortHint.HintDescriptor))
  419. {
  420. step = 1.0;
  421. step_small = 1.0;
  422. step_large = 10.0;
  423. param.data[j].hints |= PARAMETER_IS_INTEGER;
  424. }
  425. else
  426. {
  427. double range = max - min;
  428. step = range/100.0;
  429. step_small = range/1000.0;
  430. step_large = range/10.0;
  431. }
  432. if (LADSPA_IS_HINT_LOGARITHMIC(PortHint.HintDescriptor))
  433. param.data[j].hints |= PARAMETER_IS_LOGARITHMIC;
  434. if (LADSPA_IS_PORT_INPUT(PortType))
  435. {
  436. param.data[j].type = PARAMETER_INPUT;
  437. param.data[j].hints |= PARAMETER_IS_ENABLED;
  438. param.data[j].hints |= PARAMETER_IS_AUTOMABLE;
  439. needs_cin = true;
  440. }
  441. else if (LADSPA_IS_PORT_OUTPUT(PortType))
  442. {
  443. if (strcmp(descriptor->PortNames[i], "latency") == 0 || strcmp(descriptor->PortNames[i], "_latency") == 0)
  444. {
  445. min = 0;
  446. max = get_sample_rate();
  447. def = 0;
  448. step = 1;
  449. step_small = 1;
  450. step_large = 1;
  451. param.data[j].type = PARAMETER_LATENCY;
  452. param.data[j].hints = 0;
  453. }
  454. else
  455. {
  456. param.data[j].type = PARAMETER_OUTPUT;
  457. param.data[j].hints |= PARAMETER_IS_ENABLED;
  458. param.data[j].hints |= PARAMETER_IS_AUTOMABLE;
  459. needs_cout = true;
  460. }
  461. }
  462. else
  463. {
  464. param.data[j].type = PARAMETER_UNKNOWN;
  465. qWarning("WARNING - Got a broken Port (Control, but not input or output)");
  466. }
  467. // check for scalepoints, require at least 2 to make it useful
  468. if (HasPortRDF && rdf_descriptor->Ports[i].ScalePointCount > 1)
  469. param.data[j].hints |= PARAMETER_USES_SCALEPOINTS;
  470. param.ranges[j].min = min;
  471. param.ranges[j].max = max;
  472. param.ranges[j].def = def;
  473. param.ranges[j].step = step;
  474. param.ranges[j].step_small = step_small;
  475. param.ranges[j].step_large = step_large;
  476. // Start parameters in their default values
  477. param_buffers[j] = def;
  478. descriptor->connect_port(handle, i, &param_buffers[j]);
  479. }
  480. else
  481. {
  482. // Not Audio or Control
  483. qCritical("ERROR - Got a broken Port (neither Audio or Control)");
  484. descriptor->connect_port(handle, i, nullptr);
  485. }
  486. }
  487. if (needs_cin)
  488. {
  489. #ifndef BUILD_BRIDGE
  490. if (carla_options.global_jack_client)
  491. {
  492. strcpy(port_name, m_name);
  493. strcat(port_name, ":control-in");
  494. }
  495. else
  496. #endif
  497. strcpy(port_name, "control-in");
  498. param.port_cin = jack_port_register(jack_client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
  499. }
  500. if (needs_cout)
  501. {
  502. #ifndef BUILD_BRIDGE
  503. if (carla_options.global_jack_client)
  504. {
  505. strcpy(port_name, m_name);
  506. strcat(port_name, ":control-out");
  507. }
  508. else
  509. #endif
  510. strcpy(port_name, "control-out");
  511. param.port_cout = jack_port_register(jack_client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
  512. }
  513. ain.count = ains;
  514. aout.count = aouts;
  515. param.count = params;
  516. // plugin checks
  517. m_hints &= ~(PLUGIN_IS_SYNTH | PLUGIN_USES_CHUNKS | PLUGIN_CAN_DRYWET | PLUGIN_CAN_VOLUME | PLUGIN_CAN_BALANCE);
  518. if (aouts > 0 && (ains == aouts || ains == 1))
  519. m_hints |= PLUGIN_CAN_DRYWET;
  520. if (aouts > 0)
  521. m_hints |= PLUGIN_CAN_VOLUME;
  522. if (aouts >= 2 && aouts%2 == 0)
  523. m_hints |= PLUGIN_CAN_BALANCE;
  524. carla_proc_lock();
  525. m_id = _id;
  526. carla_proc_unlock();
  527. #ifndef BUILD_BRIDGE
  528. if (carla_options.global_jack_client == false)
  529. #endif
  530. jack_activate(jack_client);
  531. qDebug("LadspaPlugin::reload() - end");
  532. }
  533. void process(jack_nframes_t nframes)
  534. {
  535. uint32_t i, k;
  536. unsigned short plugin_id = m_id;
  537. double ains_peak_tmp[2] = { 0.0 };
  538. double aouts_peak_tmp[2] = { 0.0 };
  539. jack_audio_sample_t* ains_buffer[ain.count];
  540. jack_audio_sample_t* aouts_buffer[aout.count];
  541. for (i=0; i < ain.count; i++)
  542. ains_buffer[i] = (jack_audio_sample_t*)jack_port_get_buffer(ain.ports[i], nframes);
  543. for (i=0; i < aout.count; i++)
  544. aouts_buffer[i] = (jack_audio_sample_t*)jack_port_get_buffer(aout.ports[i], nframes);
  545. // --------------------------------------------------------------------------------------------------------
  546. // Input VU
  547. if (ain.count > 0)
  548. {
  549. if (ain.count == 1)
  550. {
  551. for (k=0; k < nframes; k++)
  552. {
  553. if (abs_d(ains_buffer[0][k]) > ains_peak_tmp[0])
  554. ains_peak_tmp[0] = abs_d(ains_buffer[0][k]);
  555. }
  556. }
  557. else if (ain.count >= 1)
  558. {
  559. for (k=0; k < nframes; k++)
  560. {
  561. if (abs_d(ains_buffer[0][k]) > ains_peak_tmp[0])
  562. ains_peak_tmp[0] = abs_d(ains_buffer[0][k]);
  563. if (abs_d(ains_buffer[1][k]) > ains_peak_tmp[1])
  564. ains_peak_tmp[1] = abs_d(ains_buffer[1][k]);
  565. }
  566. }
  567. }
  568. CARLA_PROCESS_CONTINUE_CHECK;
  569. // --------------------------------------------------------------------------------------------------------
  570. // Parameters Input [Automation]
  571. if (param.port_cin)
  572. {
  573. void* pin_buffer = jack_port_get_buffer(param.port_cin, nframes);
  574. jack_midi_event_t pin_event;
  575. uint32_t n_pin_events = jack_midi_get_event_count(pin_buffer);
  576. for (i=0; i < n_pin_events; i++)
  577. {
  578. if (jack_midi_event_get(&pin_event, pin_buffer, i) != 0)
  579. break;
  580. jack_midi_data_t status = pin_event.buffer[0];
  581. jack_midi_data_t channel = status & 0x0F;
  582. // Control change
  583. if (MIDI_IS_STATUS_CONTROL_CHANGE(status))
  584. {
  585. jack_midi_data_t control = pin_event.buffer[1];
  586. jack_midi_data_t c_value = pin_event.buffer[2];
  587. double value;
  588. // Control backend stuff
  589. if (channel == cin_channel)
  590. {
  591. if (MIDI_IS_CONTROL_BREATH_CONTROLLER(control) && (m_hints & PLUGIN_CAN_DRYWET) > 0)
  592. {
  593. value = double(c_value)/127;
  594. set_drywet(value, false, false);
  595. postpone_event(PostEventParameterChange, PARAMETER_DRYWET, value);
  596. continue;
  597. }
  598. else if (MIDI_IS_CONTROL_CHANNEL_VOLUME(control) && (m_hints & PLUGIN_CAN_VOLUME) > 0)
  599. {
  600. value = double(c_value)/100;
  601. set_volume(value, false, false);
  602. postpone_event(PostEventParameterChange, PARAMETER_VOLUME, value);
  603. continue;
  604. }
  605. else if (MIDI_IS_CONTROL_BALANCE(control) && (m_hints & PLUGIN_CAN_BALANCE) > 0)
  606. {
  607. double left, right;
  608. value = (double(c_value)-63.5)/63.5;
  609. if (value < 0)
  610. {
  611. left = -1.0;
  612. right = (value*2)+1.0;
  613. }
  614. else if (value > 0)
  615. {
  616. left = (value*2)-1.0;
  617. right = 1.0;
  618. }
  619. else
  620. {
  621. left = -1.0;
  622. right = 1.0;
  623. }
  624. set_balance_left(left, false, false);
  625. set_balance_right(right, false, false);
  626. postpone_event(PostEventParameterChange, PARAMETER_BALANCE_LEFT, left);
  627. postpone_event(PostEventParameterChange, PARAMETER_BALANCE_RIGHT, right);
  628. continue;
  629. }
  630. else if (control == MIDI_CONTROL_ALL_SOUND_OFF)
  631. {
  632. if (m_active && m_active_before)
  633. {
  634. if (descriptor->deactivate)
  635. descriptor->deactivate(handle);
  636. if (descriptor->activate)
  637. descriptor->activate(handle);
  638. }
  639. continue;
  640. }
  641. }
  642. // Control plugin parameters
  643. for (k=0; k < param.count; k++)
  644. {
  645. if (param.data[k].midi_channel == channel && param.data[k].midi_cc == control && param.data[k].type == PARAMETER_INPUT && (param.data[k].hints & PARAMETER_IS_AUTOMABLE) > 0)
  646. {
  647. if (param.data[k].hints & PARAMETER_IS_BOOLEAN)
  648. {
  649. value = c_value <= 63 ? param.ranges[k].min : param.ranges[k].max;
  650. }
  651. else
  652. {
  653. value = (double(c_value) / 127 * (param.ranges[k].max - param.ranges[k].min)) + param.ranges[k].min;
  654. if (param.data[k].hints & PARAMETER_IS_INTEGER)
  655. value = rint(value);
  656. }
  657. set_parameter_value(k, value, false, false, false);
  658. postpone_event(PostEventParameterChange, k, value);
  659. }
  660. }
  661. }
  662. }
  663. } // End of Parameters Input
  664. CARLA_PROCESS_CONTINUE_CHECK;
  665. // --------------------------------------------------------------------------------------------------------
  666. // Special Parameters
  667. #if 0
  668. for (k=0; k < param.count; k++)
  669. {
  670. if (param.data[k].type == PARAMETER_LATENCY)
  671. {
  672. // TODO
  673. }
  674. }
  675. CARLA_PROCESS_CONTINUE_CHECK;
  676. #endif
  677. // --------------------------------------------------------------------------------------------------------
  678. // Plugin processing
  679. if (m_active)
  680. {
  681. if (m_active_before == false)
  682. {
  683. if (descriptor->activate)
  684. descriptor->activate(handle);
  685. }
  686. for (i=0; i < ain.count; i++)
  687. descriptor->connect_port(handle, ain.rindexes[i], ains_buffer[i]);
  688. for (i=0; i < aout.count; i++)
  689. descriptor->connect_port(handle, aout.rindexes[i], aouts_buffer[i]);
  690. if (descriptor->run)
  691. descriptor->run(handle, nframes);
  692. }
  693. else
  694. {
  695. if (m_active_before)
  696. {
  697. if (descriptor->deactivate)
  698. descriptor->deactivate(handle);
  699. }
  700. }
  701. CARLA_PROCESS_CONTINUE_CHECK;
  702. // --------------------------------------------------------------------------------------------------------
  703. // Post-processing (dry/wet, volume and balance)
  704. if (m_active)
  705. {
  706. bool do_drywet = (m_hints & PLUGIN_CAN_DRYWET) > 0 && x_drywet != 1.0;
  707. bool do_volume = (m_hints & PLUGIN_CAN_VOLUME) > 0 && x_vol != 1.0;
  708. bool do_balance = (m_hints & PLUGIN_CAN_BALANCE) > 0 && (x_bal_left != -1.0 || x_bal_right != 1.0);
  709. double bal_rangeL, bal_rangeR;
  710. jack_audio_sample_t old_bal_left[do_balance ? nframes : 0];
  711. for (i=0; i < aout.count; i++)
  712. {
  713. // Dry/Wet and Volume
  714. if (do_drywet || do_volume)
  715. {
  716. for (k=0; k<nframes; k++)
  717. {
  718. if (do_drywet)
  719. {
  720. if (aout.count == 1)
  721. aouts_buffer[i][k] = (aouts_buffer[i][k]*x_drywet)+(ains_buffer[0][k]*(1.0-x_drywet));
  722. else
  723. aouts_buffer[i][k] = (aouts_buffer[i][k]*x_drywet)+(ains_buffer[i][k]*(1.0-x_drywet));
  724. }
  725. if (do_volume)
  726. aouts_buffer[i][k] *= x_vol;
  727. }
  728. }
  729. // Balance
  730. if (do_balance)
  731. {
  732. if (i%2 == 0)
  733. memcpy(&old_bal_left, aouts_buffer[i], sizeof(jack_audio_sample_t)*nframes);
  734. bal_rangeL = (x_bal_left+1.0)/2;
  735. bal_rangeR = (x_bal_right+1.0)/2;
  736. for (k=0; k<nframes; k++)
  737. {
  738. if (i%2 == 0)
  739. {
  740. // left output
  741. aouts_buffer[i][k] = old_bal_left[k]*(1.0-bal_rangeL);
  742. aouts_buffer[i][k] += aouts_buffer[i+1][k]*(1.0-bal_rangeR);
  743. }
  744. else
  745. {
  746. // right
  747. aouts_buffer[i][k] = aouts_buffer[i][k]*bal_rangeR;
  748. aouts_buffer[i][k] += old_bal_left[k]*bal_rangeL;
  749. }
  750. }
  751. }
  752. // Output VU
  753. for (k=0; k < nframes && i < 2; k++)
  754. {
  755. if (abs_d(aouts_buffer[i][k]) > aouts_peak_tmp[i])
  756. aouts_peak_tmp[i] = abs_d(aouts_buffer[i][k]);
  757. }
  758. }
  759. }
  760. else
  761. {
  762. // disable any output sound if not active
  763. for (i=0; i < aout.count; i++)
  764. memset(aouts_buffer[i], 0.0f, sizeof(jack_audio_sample_t)*nframes);
  765. aouts_peak_tmp[0] = 0.0;
  766. aouts_peak_tmp[1] = 0.0;
  767. } // End of Post-processing
  768. CARLA_PROCESS_CONTINUE_CHECK;
  769. // --------------------------------------------------------------------------------------------------------
  770. // Control Output
  771. if (param.port_cout)
  772. {
  773. void* cout_buffer = jack_port_get_buffer(param.port_cout, nframes);
  774. jack_midi_clear_buffer(cout_buffer);
  775. double value;
  776. for (k=0; k < param.count; k++)
  777. {
  778. if (param.data[k].type == PARAMETER_OUTPUT && param.data[k].midi_cc > 0)
  779. {
  780. value = (param_buffers[k] - param.ranges[k].min) / (param.ranges[k].max - param.ranges[k].min) * 127;
  781. jack_midi_data_t* event_buffer = jack_midi_event_reserve(cout_buffer, 0, 3);
  782. event_buffer[0] = MIDI_STATUS_CONTROL_CHANGE + param.data[k].midi_channel;
  783. event_buffer[1] = param.data[k].midi_cc;
  784. event_buffer[2] = value;
  785. }
  786. }
  787. } // End of Control Output
  788. CARLA_PROCESS_CONTINUE_CHECK;
  789. // --------------------------------------------------------------------------------------------------------
  790. // Peak Values
  791. ains_peak[(plugin_id*2)+0] = ains_peak_tmp[0];
  792. ains_peak[(plugin_id*2)+1] = ains_peak_tmp[1];
  793. aouts_peak[(plugin_id*2)+0] = aouts_peak_tmp[0];
  794. aouts_peak[(plugin_id*2)+1] = aouts_peak_tmp[1];
  795. m_active_before = m_active;
  796. }
  797. virtual void delete_buffers()
  798. {
  799. qDebug("LadspaPlugin::delete_buffers() - start");
  800. if (param.count > 0)
  801. delete[] param_buffers;
  802. param_buffers = nullptr;
  803. qDebug("LadspaPlugin::delete_buffers() - end");
  804. }
  805. bool init(const char* filename, const char* label, const LADSPA_RDF_Descriptor* rdf_descriptor_)
  806. {
  807. if (lib_open(filename))
  808. {
  809. LADSPA_Descriptor_Function descfn = (LADSPA_Descriptor_Function)lib_symbol("ladspa_descriptor");
  810. if (descfn)
  811. {
  812. unsigned long i = 0;
  813. while ((descriptor = descfn(i++)))
  814. {
  815. if (strcmp(descriptor->Label, label) == 0)
  816. break;
  817. }
  818. if (descriptor)
  819. {
  820. handle = descriptor->instantiate(descriptor, get_sample_rate());
  821. if (handle)
  822. {
  823. m_filename = strdup(filename);
  824. if (is_ladspa_rdf_descriptor_valid(rdf_descriptor_, descriptor))
  825. rdf_descriptor = ladspa_rdf_dup(rdf_descriptor_);
  826. if (rdf_descriptor && rdf_descriptor->Title)
  827. m_name = get_unique_name(rdf_descriptor->Title);
  828. else
  829. m_name = get_unique_name(descriptor->Name);
  830. if (carla_jack_register_plugin(this, &jack_client))
  831. {
  832. return true;
  833. }
  834. else
  835. set_last_error("Failed to register plugin in JACK");
  836. }
  837. else
  838. set_last_error("Plugin failed to initialize");
  839. }
  840. else
  841. set_last_error("Could not find the requested plugin Label in the plugin library");
  842. }
  843. else
  844. set_last_error("Could not find the LASDPA Descriptor in the plugin library");
  845. }
  846. else
  847. set_last_error(lib_error());
  848. return false;
  849. }
  850. private:
  851. LADSPA_Handle handle;
  852. const LADSPA_Descriptor* descriptor;
  853. const LADSPA_RDF_Descriptor* rdf_descriptor;
  854. float* param_buffers;
  855. };
  856. short add_plugin_ladspa(const char* filename, const char* label, const void* extra_stuff)
  857. {
  858. qDebug("add_plugin_ladspa(%s, %s, %p)", filename, label, extra_stuff);
  859. short id = get_new_plugin_id();
  860. if (id >= 0)
  861. {
  862. LadspaPlugin* plugin = new LadspaPlugin;
  863. if (plugin->init(filename, label, (LADSPA_RDF_Descriptor*)extra_stuff))
  864. {
  865. plugin->reload();
  866. plugin->set_id(id);
  867. unique_names[id] = plugin->name();
  868. CarlaPlugins[id] = plugin;
  869. #ifndef BUILD_BRIDGE
  870. plugin->osc_global_register_new();
  871. #endif
  872. }
  873. else
  874. {
  875. delete plugin;
  876. id = -1;
  877. }
  878. }
  879. else
  880. set_last_error("Maximum number of plugins reached");
  881. return id;
  882. }