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.

860 lines
28KB

  1. /*
  2. * Segment Juice Plugin
  3. * Copyright (C) 2014 Andre Sklenar <andre.sklenar@gmail.com>, www.juicelab.cz
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License as
  7. * published by the Free Software Foundation; either version 2 of
  8. * the License, or 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 doc/GPL.txt file.
  16. */
  17. #include "SegmentJuiceUI.hpp"
  18. using DGL::Point;
  19. START_NAMESPACE_DISTRHO
  20. // -----------------------------------------------------------------------
  21. SegmentJuiceUI::SegmentJuiceUI()
  22. : UI(),
  23. fAboutWindow(this)
  24. {
  25. // background
  26. fImgBackground = Image(SegmentJuiceArtwork::backgroundData, SegmentJuiceArtwork::backgroundWidth, SegmentJuiceArtwork::backgroundHeight, GL_BGR);
  27. // about
  28. Image imageAbout(SegmentJuiceArtwork::aboutData, SegmentJuiceArtwork::aboutWidth, SegmentJuiceArtwork::aboutHeight, GL_BGR);
  29. fAboutWindow.setImage(imageAbout);
  30. // knobs
  31. Image knobImage(SegmentJuiceArtwork::knobData, SegmentJuiceArtwork::knobWidth, SegmentJuiceArtwork::knobHeight);
  32. // knobs2
  33. Image knobImage2(SegmentJuiceArtwork::knob2Data, SegmentJuiceArtwork::knob2Width, SegmentJuiceArtwork::knob2Height);
  34. // knob Wave1
  35. fKnobWave1 = new ImageKnob(this, knobImage);
  36. fKnobWave1->setPos(446, 79);
  37. fKnobWave1->setRange(1.0f, 4.0f);
  38. fKnobWave1->setValue(0.3f);
  39. fKnobWave1->setRotationAngle(270);
  40. fKnobWave1->setCallback(this);
  41. // knob Wave2
  42. fKnobWave2 = new ImageKnob(this, knobImage);
  43. fKnobWave2->setPos(446, 139);
  44. fKnobWave2->setRange(1.0f, 4.0f);
  45. fKnobWave2->setValue(3.0f);
  46. fKnobWave2->setRotationAngle(270);
  47. fKnobWave2->setCallback(this);
  48. // knob Wave3
  49. fKnobWave3 = new ImageKnob(this, knobImage);
  50. fKnobWave3->setPos(446, 199);
  51. fKnobWave3->setRange(1.0f, 4.0f);
  52. fKnobWave3->setValue(3.0f);
  53. fKnobWave3->setRotationAngle(270);
  54. fKnobWave3->setCallback(this);
  55. // knob Wave4
  56. fKnobWave4 = new ImageKnob(this, knobImage);
  57. fKnobWave4->setPos(446, 259);
  58. fKnobWave4->setRange(1.0f, 4.0f);
  59. fKnobWave4->setValue(3.0f);
  60. fKnobWave4->setRotationAngle(270);
  61. fKnobWave4->setCallback(this);
  62. // knob Wave5
  63. fKnobWave5 = new ImageKnob(this, knobImage);
  64. fKnobWave5->setPos(446, 319);
  65. fKnobWave5->setRange(1.0f, 4.0f);
  66. fKnobWave5->setValue(3.0f);
  67. fKnobWave5->setRotationAngle(270);
  68. fKnobWave5->setCallback(this);
  69. // knob Wave6
  70. fKnobWave6 = new ImageKnob(this, knobImage);
  71. fKnobWave6->setPos(446, 379);
  72. fKnobWave6->setRange(1.0f, 4.0f);
  73. fKnobWave6->setValue(3.0f);
  74. fKnobWave6->setRotationAngle(270);
  75. fKnobWave6->setCallback(this);
  76. // knob FM1
  77. fKnobFM1 = new ImageKnob(this, knobImage);
  78. fKnobFM1->setPos(510, 79);
  79. fKnobFM1->setRange(0.0f, 1.0f);
  80. fKnobFM1->setValue(0.5f);
  81. fKnobFM1->setRotationAngle(270);
  82. fKnobFM1->setCallback(this);
  83. // knob FM2
  84. fKnobFM2 = new ImageKnob(this, knobImage);
  85. fKnobFM2->setPos(510, 139);
  86. fKnobFM2->setRange(0.0f, 1.0f);
  87. fKnobFM2->setValue(0.5f);
  88. fKnobFM2->setRotationAngle(270);
  89. fKnobFM2->setCallback(this);
  90. // knob FM3
  91. fKnobFM3 = new ImageKnob(this, knobImage);
  92. fKnobFM3->setPos(510, 199);
  93. fKnobFM3->setRange(0.0f, 1.0f);
  94. fKnobFM3->setValue(0.5f);
  95. fKnobFM3->setRotationAngle(270);
  96. fKnobFM3->setCallback(this);
  97. // knob FM4
  98. fKnobFM4 = new ImageKnob(this, knobImage);
  99. fKnobFM4->setPos(510, 259);
  100. fKnobFM4->setRange(0.0f, 1.0f);
  101. fKnobFM4->setValue(0.5f);
  102. fKnobFM4->setRotationAngle(270);
  103. fKnobFM4->setCallback(this);
  104. // knob FM5
  105. fKnobFM5 = new ImageKnob(this, knobImage);
  106. fKnobFM5->setPos(510, 319);
  107. fKnobFM5->setRange(0.0f, 1.0f);
  108. fKnobFM5->setValue(0.5f);
  109. fKnobFM5->setRotationAngle(270);
  110. fKnobFM5->setCallback(this);
  111. // knob FM6
  112. fKnobFM6 = new ImageKnob(this, knobImage);
  113. fKnobFM6->setPos(510, 379);
  114. fKnobFM6->setRange(0.0f, 1.0f);
  115. fKnobFM6->setValue(0.5f);
  116. fKnobFM6->setRotationAngle(270);
  117. fKnobFM6->setCallback(this);
  118. // knob Pan1
  119. fKnobPan1 = new ImageKnob(this, knobImage);
  120. fKnobPan1->setPos(574, 79);
  121. fKnobPan1->setRange(-1.0f, 1.0f);
  122. fKnobPan1->setValue(0.0f);
  123. fKnobPan1->setRotationAngle(270);
  124. fKnobPan1->setCallback(this);
  125. // knob Pan2
  126. fKnobPan2 = new ImageKnob(this, knobImage);
  127. fKnobPan2->setPos(574, 139);
  128. fKnobPan2->setRange(-1.0f, 1.0f);
  129. fKnobPan2->setValue(0.0f);
  130. fKnobPan2->setRotationAngle(270);
  131. fKnobPan2->setCallback(this);
  132. // knob Pan3
  133. fKnobPan3 = new ImageKnob(this, knobImage);
  134. fKnobPan3->setPos(574, 199);
  135. fKnobPan3->setRange(-1.0f, 1.0f);
  136. fKnobPan3->setValue(0.0f);
  137. fKnobPan3->setRotationAngle(270);
  138. fKnobPan3->setCallback(this);
  139. // knob Pan4
  140. fKnobPan4 = new ImageKnob(this, knobImage);
  141. fKnobPan4->setPos(574, 259);
  142. fKnobPan4->setRange(-1.0f, 1.0f);
  143. fKnobPan4->setValue(0.0f);
  144. fKnobPan4->setRotationAngle(270);
  145. fKnobPan4->setCallback(this);
  146. // knob Pan5
  147. fKnobPan5 = new ImageKnob(this, knobImage);
  148. fKnobPan5->setPos(574, 319);
  149. fKnobPan5->setRange(-1.0f, 1.0f);
  150. fKnobPan5->setValue(0.0f);
  151. fKnobPan5->setRotationAngle(270);
  152. fKnobPan5->setCallback(this);
  153. // knob Pan6
  154. fKnobPan6 = new ImageKnob(this, knobImage);
  155. fKnobPan6->setPos(574, 379);
  156. fKnobPan6->setRange(-1.0f, 1.0f);
  157. fKnobPan6->setValue(0.0f);
  158. fKnobPan6->setRotationAngle(270);
  159. fKnobPan6->setCallback(this);
  160. // knob Amp1
  161. fKnobAmp1 = new ImageKnob(this, knobImage);
  162. fKnobAmp1->setPos(638, 79);
  163. fKnobAmp1->setRange(0.0f, 1.0f);
  164. fKnobAmp1->setValue(0.5f);
  165. fKnobAmp1->setRotationAngle(270);
  166. fKnobAmp1->setCallback(this);
  167. // knob Amp2
  168. fKnobAmp2 = new ImageKnob(this, knobImage);
  169. fKnobAmp2->setPos(638, 139);
  170. fKnobAmp2->setRange(0.0f, 1.0f);
  171. fKnobAmp2->setValue(0.5f);
  172. fKnobAmp2->setRotationAngle(270);
  173. fKnobAmp2->setCallback(this);
  174. // knob Amp3
  175. fKnobAmp3 = new ImageKnob(this, knobImage);
  176. fKnobAmp3->setPos(638, 199);
  177. fKnobAmp3->setRange(0.0f, 1.0f);
  178. fKnobAmp3->setValue(0.5f);
  179. fKnobAmp3->setRotationAngle(270);
  180. fKnobAmp3->setCallback(this);
  181. // knob Amp4
  182. fKnobAmp4 = new ImageKnob(this, knobImage);
  183. fKnobAmp4->setPos(638, 259);
  184. fKnobAmp4->setRange(0.0f, 1.0f);
  185. fKnobAmp4->setValue(0.5f);
  186. fKnobAmp4->setRotationAngle(270);
  187. fKnobAmp4->setCallback(this);
  188. // knob Amp5
  189. fKnobAmp5 = new ImageKnob(this, knobImage);
  190. fKnobAmp5->setPos(638, 319);
  191. fKnobAmp5->setRange(0.0f, 1.0f);
  192. fKnobAmp5->setValue(0.5f);
  193. fKnobAmp5->setRotationAngle(270);
  194. fKnobAmp5->setCallback(this);
  195. // knob Amp6
  196. fKnobAmp6 = new ImageKnob(this, knobImage);
  197. fKnobAmp6->setPos(638, 379);
  198. fKnobAmp6->setRange(0.0f, 1.0f);
  199. fKnobAmp6->setValue(0.5f);
  200. fKnobAmp6->setRotationAngle(270);
  201. fKnobAmp6->setCallback(this);
  202. // knob Attack
  203. fKnobAttack = new ImageKnob(this, knobImage2);
  204. fKnobAttack->setPos(34, 248);
  205. fKnobAttack->setRange(0.0f, 1.0f);
  206. fKnobAttack->setValue(0.0f);
  207. fKnobAttack->setRotationAngle(270);
  208. fKnobAttack->setCallback(this);
  209. // knob Decay
  210. fKnobDecay = new ImageKnob(this, knobImage2);
  211. fKnobDecay->setPos(132, 248);
  212. fKnobDecay->setRange(0.0f, 1.0f);
  213. fKnobDecay->setValue(0.0f);
  214. fKnobDecay->setRotationAngle(270);
  215. fKnobDecay->setCallback(this);
  216. // knob Sustain
  217. fKnobSustain = new ImageKnob(this, knobImage2);
  218. fKnobSustain->setPos(232, 248);
  219. fKnobSustain->setRange(0.0f, 1.0f);
  220. fKnobSustain->setValue(1.0f);
  221. fKnobSustain->setRotationAngle(270);
  222. fKnobSustain->setCallback(this);
  223. // knob Release
  224. fKnobRelease = new ImageKnob(this, knobImage2);
  225. fKnobRelease->setPos(330, 248);
  226. fKnobRelease->setRange(0.0f, 1.0f);
  227. fKnobRelease->setValue(0.0f);
  228. fKnobRelease->setRotationAngle(270);
  229. fKnobRelease->setCallback(this);
  230. // knob Stereo
  231. fKnobStereo = new ImageKnob(this, knobImage2);
  232. fKnobStereo->setPos(34, 339);
  233. fKnobStereo->setRange(-1.0f, 1.0f);
  234. fKnobStereo->setValue(0.0f);
  235. fKnobStereo->setRotationAngle(270);
  236. fKnobStereo->setCallback(this);
  237. // knob Tune
  238. fKnobTune = new ImageKnob(this, knobImage2);
  239. fKnobTune->setPos(132, 339);
  240. fKnobTune->setRange(-1.0f, 1.0f);
  241. fKnobTune->setValue(0.0f);
  242. fKnobTune->setRotationAngle(270);
  243. fKnobTune->setCallback(this);
  244. // knob Volume
  245. fKnobVolume = new ImageKnob(this, knobImage2);
  246. fKnobVolume->setPos(232, 339);
  247. fKnobVolume->setRange(0.0f, 1.0f);
  248. fKnobVolume->setValue(0.5f);
  249. fKnobVolume->setRotationAngle(270);
  250. fKnobVolume->setCallback(this);
  251. // knob Glide
  252. fKnobGlide = new ImageKnob(this, knobImage2);
  253. fKnobGlide->setPos(330, 339);
  254. fKnobGlide->setRange(0.0f, 1.0f);
  255. fKnobGlide->setValue(0.0f);
  256. fKnobGlide->setRotationAngle(270);
  257. fKnobGlide->setCallback(this);
  258. // about button
  259. Image aboutImageNormal(SegmentJuiceArtwork::aboutButtonNormalData, SegmentJuiceArtwork::aboutButtonNormalWidth, SegmentJuiceArtwork::aboutButtonNormalHeight);
  260. Image aboutImageHover(SegmentJuiceArtwork::aboutButtonHoverData, SegmentJuiceArtwork::aboutButtonHoverWidth, SegmentJuiceArtwork::aboutButtonHoverHeight);
  261. fButtonAbout = new ImageButton(this, aboutImageNormal, aboutImageHover, aboutImageHover);
  262. fButtonAbout->setPos(599, 17);
  263. fButtonAbout->setCallback(this);
  264. }
  265. SegmentJuiceUI::~SegmentJuiceUI()
  266. {
  267. delete fKnobWave1;
  268. delete fKnobWave2;
  269. delete fKnobWave3;
  270. delete fKnobWave4;
  271. delete fKnobWave5;
  272. delete fKnobWave6;
  273. delete fKnobFM1;
  274. delete fKnobFM2;
  275. delete fKnobFM3;
  276. delete fKnobFM4;
  277. delete fKnobFM5;
  278. delete fKnobFM6;
  279. delete fKnobPan1;
  280. delete fKnobPan2;
  281. delete fKnobPan3;
  282. delete fKnobPan4;
  283. delete fKnobPan5;
  284. delete fKnobPan6;
  285. delete fKnobAmp1;
  286. delete fKnobAmp2;
  287. delete fKnobAmp3;
  288. delete fKnobAmp4;
  289. delete fKnobAmp5;
  290. delete fKnobAmp6;
  291. delete fKnobAttack;
  292. delete fKnobDecay;
  293. delete fKnobSustain;
  294. delete fKnobRelease;
  295. delete fKnobStereo;
  296. delete fKnobTune;
  297. delete fKnobVolume;
  298. delete fKnobGlide;
  299. delete fButtonAbout;
  300. }
  301. void SegmentJuiceUI::updateSynth() {
  302. synthL.setWave(0, fKnobWave1->getValue());
  303. synthL.setWave(1, fKnobWave2->getValue());
  304. synthL.setWave(2, fKnobWave3->getValue());
  305. synthL.setWave(3, fKnobWave4->getValue());
  306. synthL.setWave(4, fKnobWave5->getValue());
  307. synthL.setWave(5, fKnobWave6->getValue());
  308. synthL.setFM(0, fKnobFM1->getValue());
  309. synthL.setFM(1, fKnobFM2->getValue());
  310. synthL.setFM(2, fKnobFM3->getValue());
  311. synthL.setFM(3, fKnobFM4->getValue());
  312. synthL.setFM(4, fKnobFM5->getValue());
  313. synthL.setFM(5, fKnobFM6->getValue());
  314. synthL.setPan(0, -fKnobPan1->getValue());
  315. synthL.setPan(1, -fKnobPan2->getValue());
  316. synthL.setPan(2, -fKnobPan3->getValue());
  317. synthL.setPan(3, -fKnobPan4->getValue());
  318. synthL.setPan(4, -fKnobPan5->getValue());
  319. synthL.setPan(5, -fKnobPan6->getValue());
  320. synthL.setAmp(0, fKnobAmp1->getValue());
  321. synthL.setAmp(1, fKnobAmp2->getValue());
  322. synthL.setAmp(2, fKnobAmp3->getValue());
  323. synthL.setAmp(3, fKnobAmp4->getValue());
  324. synthL.setAmp(4, fKnobAmp5->getValue());
  325. synthL.setAmp(5, fKnobAmp6->getValue());
  326. synthL.setMAmp(fKnobVolume->getValue());
  327. synthR.setWave(0, fKnobWave1->getValue());
  328. synthR.setWave(1, fKnobWave2->getValue());
  329. synthR.setWave(2, fKnobWave3->getValue());
  330. synthR.setWave(3, fKnobWave4->getValue());
  331. synthR.setWave(4, fKnobWave5->getValue());
  332. synthR.setWave(5, fKnobWave6->getValue());
  333. synthR.setFM(0, fKnobFM1->getValue());
  334. synthR.setFM(1, fKnobFM2->getValue());
  335. synthR.setFM(2, fKnobFM3->getValue());
  336. synthR.setFM(3, fKnobFM4->getValue());
  337. synthR.setFM(4, fKnobFM5->getValue());
  338. synthR.setFM(5, fKnobFM6->getValue());
  339. synthR.setPan(0, fKnobPan1->getValue());
  340. synthR.setPan(1, fKnobPan2->getValue());
  341. synthR.setPan(2, fKnobPan3->getValue());
  342. synthR.setPan(3, fKnobPan4->getValue());
  343. synthR.setPan(4, fKnobPan5->getValue());
  344. synthR.setPan(5, fKnobPan6->getValue());
  345. synthR.setAmp(0, fKnobAmp1->getValue());
  346. synthR.setAmp(1, fKnobAmp2->getValue());
  347. synthR.setAmp(2, fKnobAmp3->getValue());
  348. synthR.setAmp(3, fKnobAmp4->getValue());
  349. synthR.setAmp(4, fKnobAmp5->getValue());
  350. synthR.setAmp(5, fKnobAmp6->getValue());
  351. synthR.setMAmp(fKnobVolume->getValue());
  352. }
  353. // -----------------------------------------------------------------------
  354. // DSP Callbacks
  355. void SegmentJuiceUI::d_parameterChanged(uint32_t index, float value)
  356. {
  357. switch (index)
  358. {
  359. case SegmentJuicePlugin::paramWave1:
  360. fKnobWave1->setValue(value);
  361. break;
  362. case SegmentJuicePlugin::paramWave2:
  363. fKnobWave2->setValue(value);
  364. break;
  365. case SegmentJuicePlugin::paramWave3:
  366. fKnobWave3->setValue(value);
  367. break;
  368. case SegmentJuicePlugin::paramWave4:
  369. fKnobWave4->setValue(value);
  370. break;
  371. case SegmentJuicePlugin::paramWave5:
  372. fKnobWave5->setValue(value);
  373. break;
  374. case SegmentJuicePlugin::paramWave6:
  375. fKnobWave6->setValue(value);
  376. break;
  377. case SegmentJuicePlugin::paramFM1:
  378. fKnobFM1->setValue(value);
  379. break;
  380. case SegmentJuicePlugin::paramFM2:
  381. fKnobFM2->setValue(value);
  382. break;
  383. case SegmentJuicePlugin::paramFM3:
  384. fKnobFM3->setValue(value);
  385. break;
  386. case SegmentJuicePlugin::paramFM4:
  387. fKnobFM4->setValue(value);
  388. break;
  389. case SegmentJuicePlugin::paramFM5:
  390. fKnobFM5->setValue(value);
  391. break;
  392. case SegmentJuicePlugin::paramFM6:
  393. fKnobFM6->setValue(value);
  394. break;
  395. case SegmentJuicePlugin::paramPan1:
  396. fKnobPan1->setValue(value);
  397. break;
  398. case SegmentJuicePlugin::paramPan2:
  399. fKnobPan2->setValue(value);
  400. break;
  401. case SegmentJuicePlugin::paramPan3:
  402. fKnobPan3->setValue(value);
  403. break;
  404. case SegmentJuicePlugin::paramPan4:
  405. fKnobPan4->setValue(value);
  406. break;
  407. case SegmentJuicePlugin::paramPan5:
  408. fKnobPan5->setValue(value);
  409. break;
  410. case SegmentJuicePlugin::paramPan6:
  411. fKnobPan6->setValue(value);
  412. break;
  413. case SegmentJuicePlugin::paramAmp1:
  414. fKnobAmp1->setValue(value);
  415. break;
  416. case SegmentJuicePlugin::paramAmp2:
  417. fKnobAmp2->setValue(value);
  418. break;
  419. case SegmentJuicePlugin::paramAmp3:
  420. fKnobAmp3->setValue(value);
  421. break;
  422. case SegmentJuicePlugin::paramAmp4:
  423. fKnobAmp4->setValue(value);
  424. break;
  425. case SegmentJuicePlugin::paramAmp5:
  426. fKnobAmp5->setValue(value);
  427. break;
  428. case SegmentJuicePlugin::paramAmp6:
  429. fKnobAmp6->setValue(value);
  430. break;
  431. case SegmentJuicePlugin::paramAttack:
  432. fKnobAttack->setValue(value);
  433. break;
  434. case SegmentJuicePlugin::paramDecay:
  435. fKnobDecay->setValue(value);
  436. break;
  437. case SegmentJuicePlugin::paramSustain:
  438. fKnobSustain->setValue(value);
  439. break;
  440. case SegmentJuicePlugin::paramRelease:
  441. fKnobRelease->setValue(value);
  442. break;
  443. case SegmentJuicePlugin::paramStereo:
  444. fKnobStereo->setValue(value);
  445. break;
  446. case SegmentJuicePlugin::paramTune:
  447. fKnobTune->setValue(value);
  448. break;
  449. case SegmentJuicePlugin::paramVolume:
  450. fKnobVolume->setValue(value);
  451. break;
  452. case SegmentJuicePlugin::paramGlide:
  453. fKnobGlide->setValue(value);
  454. break;
  455. }
  456. updateSynth();
  457. }
  458. void SegmentJuiceUI::d_programChanged(uint32_t index)
  459. {
  460. if (index != 0)
  461. return;
  462. // Default values
  463. fKnobWave1->setValue(3.0f);
  464. fKnobWave2->setValue(3.0f);
  465. fKnobWave3->setValue(3.0f);
  466. fKnobWave6->setValue(3.0f);
  467. fKnobWave5->setValue(3.0f);
  468. fKnobWave6->setValue(3.0f);
  469. fKnobFM1->setValue(0.5f);
  470. fKnobFM2->setValue(0.5f);
  471. fKnobFM3->setValue(0.5f);
  472. fKnobFM6->setValue(0.5f);
  473. fKnobFM5->setValue(0.5f);
  474. fKnobFM6->setValue(0.5f);
  475. fKnobPan1->setValue(0.0f);
  476. fKnobPan2->setValue(0.0f);
  477. fKnobPan3->setValue(0.0f);
  478. fKnobPan6->setValue(0.0f);
  479. fKnobPan5->setValue(0.0f);
  480. fKnobPan6->setValue(0.0f);
  481. fKnobAmp1->setValue(0.5f);
  482. fKnobAmp2->setValue(0.5f);
  483. fKnobAmp3->setValue(0.5f);
  484. fKnobAmp6->setValue(0.5f);
  485. fKnobAmp5->setValue(0.5f);
  486. fKnobAmp6->setValue(0.5f);
  487. fKnobAttack->setValue(0.0f);
  488. fKnobDecay->setValue(0.0f);
  489. fKnobSustain->setValue(1.0f);
  490. fKnobRelease->setValue(0.0f);
  491. fKnobStereo->setValue(0.0f);
  492. fKnobTune->setValue(0.0f);
  493. fKnobVolume->setValue(0.5f);
  494. fKnobGlide->setValue(0.0f);
  495. for (int i=0; i<6; i++) {
  496. synthL.setFM(i, 0.5f);
  497. synthR.setFM(i, 0.5f);
  498. synthL.setPan(i, 0.0f);
  499. synthR.setPan(i, 0.0f);
  500. synthL.setAmp(i, 0.5f);
  501. synthR.setAmp(i, 0.5f);
  502. }
  503. synthL.setSampleRate(d_getSampleRate());
  504. synthR.setSampleRate(d_getSampleRate());
  505. synthL.setMAmp(0.5f);
  506. synthR.setMAmp(0.5f);
  507. synthL.play(69);
  508. synthR.play(69);
  509. synthL.setAttack(0);
  510. synthR.setAttack(0);
  511. synthL.setDecay(0);
  512. synthR.setDecay(0);
  513. synthL.setSustain(1);
  514. synthR.setSustain(1);
  515. synthL.setRelease(0);
  516. synthR.setRelease(0);
  517. synthL.setGlide(0);
  518. synthR.setGlide(0);
  519. synthL.setTune(0);
  520. synthR.setTune(0);
  521. }
  522. // -----------------------------------------------------------------------
  523. // Widget Callbacks
  524. void SegmentJuiceUI::imageButtonClicked(ImageButton* button, int)
  525. {
  526. if (button != fButtonAbout)
  527. return;
  528. fAboutWindow.exec();
  529. }
  530. void SegmentJuiceUI::imageKnobDragStarted(ImageKnob* knob)
  531. {
  532. if (knob == fKnobWave1)
  533. d_editParameter(SegmentJuicePlugin::paramWave1, true);
  534. else if (knob == fKnobWave2)
  535. d_editParameter(SegmentJuicePlugin::paramWave2, true);
  536. else if (knob == fKnobWave3)
  537. d_editParameter(SegmentJuicePlugin::paramWave3, true);
  538. else if (knob == fKnobWave4)
  539. d_editParameter(SegmentJuicePlugin::paramWave4, true);
  540. else if (knob == fKnobWave5)
  541. d_editParameter(SegmentJuicePlugin::paramWave5, true);
  542. else if (knob == fKnobWave6)
  543. d_editParameter(SegmentJuicePlugin::paramWave6, true);
  544. else if (knob == fKnobFM1)
  545. d_editParameter(SegmentJuicePlugin::paramFM1, true);
  546. else if (knob == fKnobFM2)
  547. d_editParameter(SegmentJuicePlugin::paramFM2, true);
  548. else if (knob == fKnobFM3)
  549. d_editParameter(SegmentJuicePlugin::paramFM3, true);
  550. else if (knob == fKnobFM4)
  551. d_editParameter(SegmentJuicePlugin::paramFM4, true);
  552. else if (knob == fKnobFM5)
  553. d_editParameter(SegmentJuicePlugin::paramFM5, true);
  554. else if (knob == fKnobFM6)
  555. d_editParameter(SegmentJuicePlugin::paramFM6, true);
  556. else if (knob == fKnobPan1)
  557. d_editParameter(SegmentJuicePlugin::paramPan1, true);
  558. else if (knob == fKnobPan2)
  559. d_editParameter(SegmentJuicePlugin::paramPan2, true);
  560. else if (knob == fKnobPan3)
  561. d_editParameter(SegmentJuicePlugin::paramPan3, true);
  562. else if (knob == fKnobPan4)
  563. d_editParameter(SegmentJuicePlugin::paramPan4, true);
  564. else if (knob == fKnobPan5)
  565. d_editParameter(SegmentJuicePlugin::paramPan5, true);
  566. else if (knob == fKnobPan6)
  567. d_editParameter(SegmentJuicePlugin::paramPan6, true);
  568. else if (knob == fKnobAmp1)
  569. d_editParameter(SegmentJuicePlugin::paramAmp1, true);
  570. else if (knob == fKnobAmp2)
  571. d_editParameter(SegmentJuicePlugin::paramAmp2, true);
  572. else if (knob == fKnobAmp3)
  573. d_editParameter(SegmentJuicePlugin::paramAmp3, true);
  574. else if (knob == fKnobAmp4)
  575. d_editParameter(SegmentJuicePlugin::paramAmp4, true);
  576. else if (knob == fKnobAmp5)
  577. d_editParameter(SegmentJuicePlugin::paramAmp5, true);
  578. else if (knob == fKnobAmp6)
  579. d_editParameter(SegmentJuicePlugin::paramAmp6, true);
  580. else if (knob == fKnobAttack)
  581. d_editParameter(SegmentJuicePlugin::paramAttack, true);
  582. else if (knob == fKnobDecay)
  583. d_editParameter(SegmentJuicePlugin::paramDecay, true);
  584. else if (knob == fKnobSustain)
  585. d_editParameter(SegmentJuicePlugin::paramSustain, true);
  586. else if (knob == fKnobRelease)
  587. d_editParameter(SegmentJuicePlugin::paramRelease, true);
  588. else if (knob == fKnobStereo)
  589. d_editParameter(SegmentJuicePlugin::paramStereo, true);
  590. else if (knob == fKnobTune)
  591. d_editParameter(SegmentJuicePlugin::paramTune, true);
  592. else if (knob == fKnobVolume)
  593. d_editParameter(SegmentJuicePlugin::paramVolume, true);
  594. else if (knob == fKnobGlide)
  595. d_editParameter(SegmentJuicePlugin::paramGlide, true);
  596. }
  597. void SegmentJuiceUI::imageKnobDragFinished(ImageKnob* knob)
  598. {
  599. if (knob == fKnobWave1)
  600. d_editParameter(SegmentJuicePlugin::paramWave1, false);
  601. else if (knob == fKnobWave2)
  602. d_editParameter(SegmentJuicePlugin::paramWave2, false);
  603. else if (knob == fKnobWave3)
  604. d_editParameter(SegmentJuicePlugin::paramWave3, false);
  605. else if (knob == fKnobWave4)
  606. d_editParameter(SegmentJuicePlugin::paramWave4, false);
  607. else if (knob == fKnobWave5)
  608. d_editParameter(SegmentJuicePlugin::paramWave5, false);
  609. else if (knob == fKnobWave6)
  610. d_editParameter(SegmentJuicePlugin::paramWave6, false);
  611. else if (knob == fKnobFM1)
  612. d_editParameter(SegmentJuicePlugin::paramFM1, false);
  613. else if (knob == fKnobFM2)
  614. d_editParameter(SegmentJuicePlugin::paramFM2, false);
  615. else if (knob == fKnobFM3)
  616. d_editParameter(SegmentJuicePlugin::paramFM3, false);
  617. else if (knob == fKnobFM4)
  618. d_editParameter(SegmentJuicePlugin::paramFM4, false);
  619. else if (knob == fKnobFM5)
  620. d_editParameter(SegmentJuicePlugin::paramFM5, false);
  621. else if (knob == fKnobFM6)
  622. d_editParameter(SegmentJuicePlugin::paramFM6, false);
  623. else if (knob == fKnobPan1)
  624. d_editParameter(SegmentJuicePlugin::paramPan1, false);
  625. else if (knob == fKnobPan2)
  626. d_editParameter(SegmentJuicePlugin::paramPan2, false);
  627. else if (knob == fKnobPan3)
  628. d_editParameter(SegmentJuicePlugin::paramPan3, false);
  629. else if (knob == fKnobPan4)
  630. d_editParameter(SegmentJuicePlugin::paramPan4, false);
  631. else if (knob == fKnobPan5)
  632. d_editParameter(SegmentJuicePlugin::paramPan5, false);
  633. else if (knob == fKnobPan6)
  634. d_editParameter(SegmentJuicePlugin::paramPan6, false);
  635. else if (knob == fKnobAmp1)
  636. d_editParameter(SegmentJuicePlugin::paramAmp1, false);
  637. else if (knob == fKnobAmp2)
  638. d_editParameter(SegmentJuicePlugin::paramAmp2, false);
  639. else if (knob == fKnobAmp3)
  640. d_editParameter(SegmentJuicePlugin::paramAmp3, false);
  641. else if (knob == fKnobAmp4)
  642. d_editParameter(SegmentJuicePlugin::paramAmp4, false);
  643. else if (knob == fKnobAmp5)
  644. d_editParameter(SegmentJuicePlugin::paramAmp5, false);
  645. else if (knob == fKnobAmp6)
  646. d_editParameter(SegmentJuicePlugin::paramAmp6, false);
  647. else if (knob == fKnobAttack)
  648. d_editParameter(SegmentJuicePlugin::paramAttack, false);
  649. else if (knob == fKnobDecay)
  650. d_editParameter(SegmentJuicePlugin::paramDecay, false);
  651. else if (knob == fKnobSustain)
  652. d_editParameter(SegmentJuicePlugin::paramSustain, false);
  653. else if (knob == fKnobRelease)
  654. d_editParameter(SegmentJuicePlugin::paramRelease, false);
  655. else if (knob == fKnobStereo)
  656. d_editParameter(SegmentJuicePlugin::paramStereo, false);
  657. else if (knob == fKnobTune)
  658. d_editParameter(SegmentJuicePlugin::paramTune, false);
  659. else if (knob == fKnobVolume)
  660. d_editParameter(SegmentJuicePlugin::paramVolume, false);
  661. else if (knob == fKnobGlide)
  662. d_editParameter(SegmentJuicePlugin::paramGlide, false);
  663. }
  664. void SegmentJuiceUI::imageKnobValueChanged(ImageKnob* knob, float value)
  665. {
  666. if (knob == fKnobWave1)
  667. d_setParameterValue(SegmentJuicePlugin::paramWave1, value);
  668. else if (knob == fKnobWave2)
  669. d_setParameterValue(SegmentJuicePlugin::paramWave2, value);
  670. else if (knob == fKnobWave3)
  671. d_setParameterValue(SegmentJuicePlugin::paramWave3, value);
  672. else if (knob == fKnobWave4)
  673. d_setParameterValue(SegmentJuicePlugin::paramWave4, value);
  674. else if (knob == fKnobWave5)
  675. d_setParameterValue(SegmentJuicePlugin::paramWave5, value);
  676. else if (knob == fKnobWave6)
  677. d_setParameterValue(SegmentJuicePlugin::paramWave6, value);
  678. else if (knob == fKnobFM1)
  679. d_setParameterValue(SegmentJuicePlugin::paramFM1, value);
  680. else if (knob == fKnobFM2)
  681. d_setParameterValue(SegmentJuicePlugin::paramFM2, value);
  682. else if (knob == fKnobFM3)
  683. d_setParameterValue(SegmentJuicePlugin::paramFM3, value);
  684. else if (knob == fKnobFM4)
  685. d_setParameterValue(SegmentJuicePlugin::paramFM4, value);
  686. else if (knob == fKnobFM5)
  687. d_setParameterValue(SegmentJuicePlugin::paramFM5, value);
  688. else if (knob == fKnobFM6)
  689. d_setParameterValue(SegmentJuicePlugin::paramFM6, value);
  690. else if (knob == fKnobPan1)
  691. d_setParameterValue(SegmentJuicePlugin::paramPan1, value);
  692. else if (knob == fKnobPan2)
  693. d_setParameterValue(SegmentJuicePlugin::paramPan2, value);
  694. else if (knob == fKnobPan3)
  695. d_setParameterValue(SegmentJuicePlugin::paramPan3, value);
  696. else if (knob == fKnobPan4)
  697. d_setParameterValue(SegmentJuicePlugin::paramPan4, value);
  698. else if (knob == fKnobPan5)
  699. d_setParameterValue(SegmentJuicePlugin::paramPan5, value);
  700. else if (knob == fKnobPan6)
  701. d_setParameterValue(SegmentJuicePlugin::paramPan6, value);
  702. else if (knob == fKnobAmp1)
  703. d_setParameterValue(SegmentJuicePlugin::paramAmp1, value);
  704. else if (knob == fKnobAmp2)
  705. d_setParameterValue(SegmentJuicePlugin::paramAmp2, value);
  706. else if (knob == fKnobAmp3)
  707. d_setParameterValue(SegmentJuicePlugin::paramAmp3, value);
  708. else if (knob == fKnobAmp4)
  709. d_setParameterValue(SegmentJuicePlugin::paramAmp4, value);
  710. else if (knob == fKnobAmp5)
  711. d_setParameterValue(SegmentJuicePlugin::paramAmp5, value);
  712. else if (knob == fKnobAmp6)
  713. d_setParameterValue(SegmentJuicePlugin::paramAmp6, value);
  714. else if (knob == fKnobAttack)
  715. d_setParameterValue(SegmentJuicePlugin::paramAttack, value);
  716. else if (knob == fKnobDecay)
  717. d_setParameterValue(SegmentJuicePlugin::paramDecay, value);
  718. else if (knob == fKnobSustain)
  719. d_setParameterValue(SegmentJuicePlugin::paramSustain, value);
  720. else if (knob == fKnobRelease)
  721. d_setParameterValue(SegmentJuicePlugin::paramRelease, value);
  722. else if (knob == fKnobStereo)
  723. d_setParameterValue(SegmentJuicePlugin::paramStereo, value);
  724. else if (knob == fKnobTune)
  725. d_setParameterValue(SegmentJuicePlugin::paramTune, value);
  726. else if (knob == fKnobVolume)
  727. d_setParameterValue(SegmentJuicePlugin::paramVolume, value);
  728. else if (knob == fKnobGlide)
  729. d_setParameterValue(SegmentJuicePlugin::paramGlide, value);
  730. updateSynth();
  731. }
  732. void SegmentJuiceUI::onDisplay()
  733. {
  734. fImgBackground.draw();
  735. int cX = 23+4;
  736. int cY = 50;
  737. int cW = 388-cX-3;
  738. int cH = 216-cY;
  739. //draw waveform
  740. synthL.play(71);
  741. synthR.play(71);
  742. //glEnable(GL_BLEND);
  743. //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  744. //glEnable( GL_LINE_SMOOTH );
  745. //glHint( GL_LINE_SMOOTH_HINT, GL_NICEST );
  746. glLineWidth(1.0f);
  747. //draw #left waveform
  748. glColor4f(0.0f, 1.0f, 0.0f, 0.5f);
  749. glBegin(GL_LINE_STRIP);
  750. for (int i = 0; i<cW; i++) {
  751. float out = synthL.run()*cH/2+cH/2+cY;
  752. glVertex2i(i+cX, out);
  753. std::cout << out << std::endl;
  754. }
  755. //draw #right waveform
  756. glEnd();
  757. glColor4f(0.0f, 0.0f, 1.0f, 0.5f);
  758. glBegin(GL_LINE_STRIP);
  759. for (int i = 0; i<cW; i++) {
  760. glVertex2i(i+cX, synthR.run()*cH/2+cH/2+cY);
  761. }
  762. glEnd();
  763. //draw 0dc line
  764. glColor4f(1.0f, 1.0f, 1.0f, 0.5f);
  765. glBegin(GL_LINES);
  766. glVertex2i(cX, cY+cH/2);
  767. glVertex2i(cX+cW, cY+cH/2);
  768. glEnd();
  769. glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
  770. }
  771. // -----------------------------------------------------------------------
  772. UI* createUI()
  773. {
  774. return new SegmentJuiceUI();
  775. }
  776. // -----------------------------------------------------------------------
  777. END_NAMESPACE_DISTRHO