External plugins for Carla
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.

822 lines
32KB

  1. // generated by Fast Light User Interface Designer (fluid) version 1.0300
  2. #include "external/zynaddsubfx/UI/SUBnoteUI.h"
  3. //Copyright (c) 2002-2005 Nasca Octavian Paul
  4. //License: GNU GPL version 2 or later
  5. SUBSlider::SUBSlider(int x,int y, int w, int h, const char *label)
  6. :Fl_Osc_TSlider(x,y,w,h,label) {
  7. }
  8. void SUBSlider::OSC_value(char c) {
  9. value(127-c);
  10. selection_color(value() == reset_value ? 0 : 222);
  11. }
  12. void SUBSlider::cb(void) {
  13. selection_color(value() == reset_value ? 0 : 222);
  14. oscWrite(ext, "c", (int)(127-Fl_Slider::value()));
  15. if(cb_data.first)
  16. cb_data.first(this, cb_data.second);
  17. }
  18. Fl_Osc_Group* SUBnoteharmonic::make_window() {
  19. { harmonic = new Fl_Osc_Group(0, 0, 90, 305);
  20. harmonic->box(FL_FLAT_BOX);
  21. harmonic->color(FL_BACKGROUND_COLOR);
  22. harmonic->selection_color(FL_BACKGROUND_COLOR);
  23. harmonic->labeltype(FL_NO_LABEL);
  24. harmonic->labelfont(0);
  25. harmonic->labelsize(14);
  26. harmonic->labelcolor(FL_FOREGROUND_COLOR);
  27. harmonic->user_data((void*)(this));
  28. harmonic->align(Fl_Align(FL_ALIGN_TOP));
  29. harmonic->when(FL_WHEN_RELEASE);
  30. { mag = new SUBSlider(0, 15, 10, 135);
  31. mag->tooltip("harmonic\'s magnitude");
  32. mag->type(4);
  33. mag->box(FL_FLAT_BOX);
  34. mag->color(FL_BACKGROUND_COLOR);
  35. mag->selection_color(FL_FOREGROUND_COLOR);
  36. mag->labeltype(FL_NORMAL_LABEL);
  37. mag->labelfont(0);
  38. mag->labelsize(14);
  39. mag->labelcolor(FL_FOREGROUND_COLOR);
  40. mag->maximum(127);
  41. mag->step(1);
  42. mag->value(127);
  43. mag->align(Fl_Align(FL_ALIGN_BOTTOM));
  44. mag->when(FL_WHEN_CHANGED);
  45. } // SUBSlider* mag
  46. { bw = new SUBSlider(0, 157, 10, 130);
  47. bw->tooltip("harmonic\'s bandwidth");
  48. bw->type(4);
  49. bw->box(FL_FLAT_BOX);
  50. bw->color(FL_BACKGROUND_COLOR);
  51. bw->selection_color((Fl_Color)222);
  52. bw->labeltype(FL_NORMAL_LABEL);
  53. bw->labelfont(0);
  54. bw->labelsize(14);
  55. bw->labelcolor(FL_FOREGROUND_COLOR);
  56. bw->maximum(127);
  57. bw->step(1);
  58. bw->value(64);
  59. bw->align(Fl_Align(FL_ALIGN_BOTTOM));
  60. bw->when(FL_WHEN_CHANGED);
  61. } // SUBSlider* bw
  62. { Fl_Box* o = new Fl_Box(10, 219, 5, 5);
  63. o->box(FL_FLAT_BOX);
  64. o->color(FL_DARK2);
  65. if (n+1==MAX_SUB_HARMONICS) o->hide();
  66. } // Fl_Box* o
  67. { Fl_Box* o = new Fl_Box(0, 288, 10, 15, "01");
  68. o->labelfont(1);
  69. o->labelsize(9);
  70. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  71. char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));
  72. } // Fl_Box* o
  73. { Fl_Box* o = new Fl_Box(0, 0, 10, 15, "01");
  74. o->labelfont(1);
  75. o->labelsize(9);
  76. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  77. char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));
  78. } // Fl_Box* o
  79. harmonic->end();
  80. } // Fl_Osc_Group* harmonic
  81. return harmonic;
  82. }
  83. SUBnoteharmonic::SUBnoteharmonic(int x,int y, int w, int h, const char *label):Fl_Osc_Group(x,y,w,h,label) {
  84. n=0;
  85. }
  86. void SUBnoteharmonic::init(int n_) {
  87. n=n_;
  88. make_window();
  89. harmonic->show();
  90. mag->reset_value=127;
  91. mag->ext = "Phmag" + to_s(n);
  92. mag->oscRegister(mag->ext.c_str());
  93. mag->set_transform([](float x){return 127.0f - x;});
  94. bw->reset_value=63;
  95. bw->ext = "Phrelbw" + to_s(n);
  96. bw->oscRegister(bw->ext.c_str());
  97. bw->set_transform([](float x){return 63.0f - x;});
  98. osc->requestValue(base+"Phrelbw"+to_s(n));
  99. end();
  100. }
  101. void SUBnoteharmonic::refresh() {
  102. // request values for the widgets
  103. mag->oscWrite(mag->ext);
  104. bw->oscWrite(bw->ext);
  105. }
  106. SUBnoteharmonic::~SUBnoteharmonic() {
  107. harmonic->hide();
  108. hide();
  109. //delete(harmonic);
  110. }
  111. void SUBnoteUI::cb_Close_i(Fl_Button*, void*) {
  112. SUBparameters->hide();
  113. }
  114. void SUBnoteUI::cb_Close(Fl_Button* o, void* v) {
  115. ((SUBnoteUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
  116. }
  117. Fl_Menu_Item SUBnoteUI::menu_magtype[] = {
  118. {"Linear", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  119. {"-40dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  120. {"-60dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  121. {"-80dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  122. {"-100dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  123. {0,0,0,0,0,0,0,0,0}
  124. };
  125. Fl_Menu_Item SUBnoteUI::menu_start[] = {
  126. {"Zero", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  127. {"RND", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  128. {"Max.", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  129. {0,0,0,0,0,0,0,0,0}
  130. };
  131. void SUBnoteUI::cb_freqee_i(Fl_Osc_Check* o, void*) {
  132. if (o->value()==0) freqenvelopegroup->deactivate();
  133. else freqenvelopegroup->activate();
  134. o->show();
  135. freqsettingsui->redraw();
  136. }
  137. void SUBnoteUI::cb_freqee(Fl_Osc_Check* o, void* v) {
  138. ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_freqee_i(o,v);
  139. }
  140. void SUBnoteUI::cb_detune_i(Fl_Osc_Slider* o, void*) {
  141. o->oscWrite("detunevalue");
  142. }
  143. void SUBnoteUI::cb_detune(Fl_Osc_Slider* o, void* v) {
  144. ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_detune_i(o,v);
  145. }
  146. void SUBnoteUI::cb_hz440_i(Fl_Osc_Check* o, void*) {
  147. if (o->value()==0) fixedfreqetdial->deactivate();
  148. else fixedfreqetdial->activate();
  149. }
  150. void SUBnoteUI::cb_hz440(Fl_Osc_Check* o, void* v) {
  151. ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_hz440_i(o,v);
  152. }
  153. void SUBnoteUI::cb_detunetype_i(Fl_Osc_Choice* o, void*) {
  154. o->oscWrite("detunevalue");
  155. }
  156. void SUBnoteUI::cb_detunetype(Fl_Osc_Choice* o, void* v) {
  157. ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_detunetype_i(o,v);
  158. }
  159. void SUBnoteUI::cb_Clear_i(Fl_Osc_Button* o, void*) {
  160. o->oscWrite("clear");
  161. for (int i=1;i<MAX_SUB_HARMONICS;i++){
  162. h[i]->mag->oscWrite(h[i]->mag->ext, "c", 0);
  163. h[i]->bw->oscWrite(h[i]->bw->ext, "c", 64);
  164. };
  165. h[0]->mag->oscWrite(h[0]->mag->ext, "c", 127);
  166. h[0]->bw->oscWrite(h[0]->bw->ext, "c", 64);
  167. SUBparameters->redraw();
  168. }
  169. void SUBnoteUI::cb_Clear(Fl_Osc_Button* o, void* v) {
  170. ((SUBnoteUI*)(o->parent()->user_data()))->cb_Clear_i(o,v);
  171. }
  172. void SUBnoteUI::cb_bwee_i(Fl_Osc_Check* o, void*) {
  173. if (o->value()==0) bandwidthenvelopegroup->deactivate();
  174. else bandwidthenvelopegroup->activate();
  175. o->show();
  176. bandwidthsettingsui->redraw();
  177. }
  178. void SUBnoteUI::cb_bwee(Fl_Osc_Check* o, void* v) {
  179. ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_bwee_i(o,v);
  180. }
  181. void SUBnoteUI::cb_filtere_i(Fl_Osc_Check* o, void*) {
  182. if (o->value()==0) globalfiltergroup->deactivate();
  183. else globalfiltergroup->activate();
  184. o->show();
  185. globalfiltergroup->redraw();
  186. }
  187. void SUBnoteUI::cb_filtere(Fl_Osc_Check* o, void* v) {
  188. ((SUBnoteUI*)(o->parent()->user_data()))->cb_filtere_i(o,v);
  189. }
  190. void SUBnoteUI::cb_C_i(Fl_Button*, void*) {
  191. presetsui->copy(loc);
  192. }
  193. void SUBnoteUI::cb_C(Fl_Button* o, void* v) {
  194. ((SUBnoteUI*)(o->parent()->user_data()))->cb_C_i(o,v);
  195. }
  196. void SUBnoteUI::cb_P_i(Fl_Button*, void*) {
  197. presetsui->paste(loc,this);
  198. }
  199. void SUBnoteUI::cb_P(Fl_Button* o, void* v) {
  200. ((SUBnoteUI*)(o->parent()->user_data()))->cb_P_i(o,v);
  201. }
  202. Fl_Menu_Item SUBnoteUI::menu_spreadtype[] = {
  203. {"Harmonic", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  204. {"ShiftU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  205. {"ShiftL", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  206. {"PowerU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  207. {"PowerL", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  208. {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  209. {"Power", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  210. {"Shift", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  211. {0,0,0,0,0,0,0,0,0}
  212. };
  213. Fl_Osc_Window* SUBnoteUI::make_window() {
  214. { SUBparameters = new Fl_Osc_Window(735, 475, "SUBsynth Parameters");
  215. SUBparameters->box(FL_FLAT_BOX);
  216. SUBparameters->color(FL_BACKGROUND_COLOR);
  217. SUBparameters->selection_color(FL_BACKGROUND_COLOR);
  218. SUBparameters->labeltype(FL_NO_LABEL);
  219. SUBparameters->labelfont(0);
  220. SUBparameters->labelsize(14);
  221. SUBparameters->labelcolor(FL_FOREGROUND_COLOR);
  222. SUBparameters->user_data((void*)(this));
  223. SUBparameters->align(Fl_Align(FL_ALIGN_TOP));
  224. SUBparameters->when(FL_WHEN_RELEASE);
  225. { Fl_Box* o = new Fl_Box(0, 0, 0, 0);
  226. o->box(FL_FLAT_BOX);
  227. o->color(FL_DARK2);
  228. SUBparameters->init(osc, loc);
  229. } // Fl_Box* o
  230. { Fl_Scroll* o = new Fl_Scroll(5, 140, 434, 330, "scroll");
  231. o->type(1);
  232. o->box(FL_FLAT_BOX);
  233. o->labeltype(FL_NO_LABEL);
  234. { Fl_Pack* o = harmonics = new Fl_Pack(5, 145, 425, 325);
  235. harmonics->type(1);
  236. for (int i=0;i<MAX_SUB_HARMONICS;i++){h[i]=new SUBnoteharmonic(0,0,15,o->h(),"");h[i]->init(i);}
  237. harmonics->end();
  238. } // Fl_Pack* harmonics
  239. o->end();
  240. } // Fl_Scroll* o
  241. { Fl_Button* o = new Fl_Button(670, 446, 60, 25, "Close");
  242. o->box(FL_THIN_UP_BOX);
  243. o->callback((Fl_Callback*)cb_Close);
  244. } // Fl_Button* o
  245. { Fl_Group* o = new Fl_Group(5, 5, 215, 135, "AMPLITUDE");
  246. o->box(FL_UP_FRAME);
  247. o->labeltype(FL_EMBOSSED_LABEL);
  248. o->labelfont(1);
  249. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  250. { Fl_Osc_VSlider* o = vol = new Fl_Osc_VSlider(10, 25, 140, 15, "Vol");
  251. vol->tooltip("Volume");
  252. vol->type(5);
  253. vol->box(FL_NO_BOX);
  254. vol->color(FL_BACKGROUND_COLOR);
  255. vol->selection_color(FL_BACKGROUND_COLOR);
  256. vol->labeltype(FL_NORMAL_LABEL);
  257. vol->labelfont(0);
  258. vol->labelsize(11);
  259. vol->labelcolor(FL_FOREGROUND_COLOR);
  260. vol->maximum(127);
  261. vol->step(1);
  262. vol->align(Fl_Align(FL_ALIGN_RIGHT));
  263. vol->when(FL_WHEN_CHANGED);
  264. o->init("PVolume");o->reset_value=96;
  265. } // Fl_Osc_VSlider* vol
  266. { Fl_Osc_VSlider* o = vsns = new Fl_Osc_VSlider(10, 45, 140, 15, "V.Sns");
  267. vsns->tooltip("Velocity Sensing Function (rightmost to disable)");
  268. vsns->type(5);
  269. vsns->box(FL_NO_BOX);
  270. vsns->color(FL_BACKGROUND_COLOR);
  271. vsns->selection_color(FL_BACKGROUND_COLOR);
  272. vsns->labeltype(FL_NORMAL_LABEL);
  273. vsns->labelfont(0);
  274. vsns->labelsize(11);
  275. vsns->labelcolor(FL_FOREGROUND_COLOR);
  276. vsns->maximum(127);
  277. vsns->step(1);
  278. vsns->align(Fl_Align(FL_ALIGN_RIGHT));
  279. vsns->when(FL_WHEN_CHANGED);
  280. o->init("PAmpVelocityScaleFunction");o->reset_value=90;
  281. } // Fl_Osc_VSlider* vsns
  282. { Fl_Osc_Dial* o = pan = new Fl_Osc_Dial(185, 20, 30, 30, "Pan");
  283. pan->tooltip("Panning (leftmost is Random)");
  284. pan->box(FL_ROUND_UP_BOX);
  285. pan->color(FL_BACKGROUND_COLOR);
  286. pan->selection_color(FL_INACTIVE_COLOR);
  287. pan->labeltype(FL_NORMAL_LABEL);
  288. pan->labelfont(0);
  289. pan->labelsize(10);
  290. pan->labelcolor(FL_FOREGROUND_COLOR);
  291. pan->maximum(127);
  292. pan->step(1);
  293. pan->align(Fl_Align(FL_ALIGN_BOTTOM));
  294. pan->when(FL_WHEN_CHANGED);
  295. o->init("PPanning");o->reset_value=64;
  296. } // Fl_Osc_Dial* pan
  297. { EnvelopeUI* o = ampenv = new EnvelopeUI(10, 65, 205, 70, "SUBsynth - Amplitude Envelope");
  298. ampenv->box(FL_FLAT_BOX);
  299. ampenv->color((Fl_Color)51);
  300. ampenv->selection_color(FL_BACKGROUND_COLOR);
  301. ampenv->labeltype(FL_NORMAL_LABEL);
  302. ampenv->labelfont(0);
  303. ampenv->labelsize(14);
  304. ampenv->labelcolor(FL_FOREGROUND_COLOR);
  305. ampenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  306. ampenv->when(FL_WHEN_RELEASE);
  307. o->init(ENV_ADSR, osc, loc, "AmpEnvelope/");
  308. ampenv->end();
  309. } // EnvelopeUI* ampenv
  310. o->end();
  311. } // Fl_Group* o
  312. { Fl_Group* o = new Fl_Group(495, 406, 235, 35);
  313. o->box(FL_UP_FRAME);
  314. { Fl_Osc_Counter* o = filterstages = new Fl_Osc_Counter(515, 421, 45, 15, "Filter Stages");
  315. filterstages->tooltip("How many times the noise is filtered");
  316. filterstages->type(1);
  317. filterstages->box(FL_UP_BOX);
  318. filterstages->color(FL_BACKGROUND_COLOR);
  319. filterstages->selection_color(FL_INACTIVE_COLOR);
  320. filterstages->labeltype(FL_NORMAL_LABEL);
  321. filterstages->labelfont(1);
  322. filterstages->labelsize(10);
  323. filterstages->labelcolor(FL_FOREGROUND_COLOR);
  324. filterstages->minimum(1);
  325. filterstages->maximum(5);
  326. filterstages->step(1);
  327. filterstages->textsize(10);
  328. filterstages->align(Fl_Align(FL_ALIGN_TOP));
  329. filterstages->when(FL_WHEN_CHANGED);
  330. o->init("Pnumstages");
  331. } // Fl_Osc_Counter* filterstages
  332. { Fl_Osc_Choice* o = magtype = new Fl_Osc_Choice(585, 421, 65, 15, "Mag.Type");
  333. magtype->box(FL_UP_BOX);
  334. magtype->down_box(FL_BORDER_BOX);
  335. magtype->color(FL_BACKGROUND_COLOR);
  336. magtype->selection_color(FL_SELECTION_COLOR);
  337. magtype->labeltype(FL_NORMAL_LABEL);
  338. magtype->labelfont(1);
  339. magtype->labelsize(10);
  340. magtype->labelcolor(FL_FOREGROUND_COLOR);
  341. magtype->textsize(11);
  342. magtype->align(Fl_Align(FL_ALIGN_TOP));
  343. magtype->when(FL_WHEN_RELEASE);
  344. magtype->menu(menu_magtype);
  345. o->init("Phmagtype");
  346. } // Fl_Osc_Choice* magtype
  347. { Fl_Osc_Choice* o = start = new Fl_Osc_Choice(670, 420, 50, 15, "Start");
  348. start->box(FL_UP_BOX);
  349. start->down_box(FL_BORDER_BOX);
  350. start->color(FL_BACKGROUND_COLOR);
  351. start->selection_color(FL_SELECTION_COLOR);
  352. start->labeltype(FL_NORMAL_LABEL);
  353. start->labelfont(1);
  354. start->labelsize(10);
  355. start->labelcolor(FL_FOREGROUND_COLOR);
  356. start->textsize(11);
  357. start->align(Fl_Align(FL_ALIGN_TOP));
  358. start->when(FL_WHEN_RELEASE);
  359. start->menu(menu_start);
  360. o->init("Pstart");
  361. } // Fl_Osc_Choice* start
  362. o->end();
  363. } // Fl_Group* o
  364. { freqsettingsui = new Fl_Group(440, 5, 295, 146, "FREQUENCY");
  365. freqsettingsui->box(FL_UP_FRAME);
  366. freqsettingsui->labeltype(FL_EMBOSSED_LABEL);
  367. freqsettingsui->labelfont(1);
  368. freqsettingsui->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  369. { EnvelopeUI* o = freqenvelopegroup = new EnvelopeUI(445, 75, 205, 70, "SUBsynth - Frequency Envelope");
  370. freqenvelopegroup->box(FL_FLAT_BOX);
  371. freqenvelopegroup->color((Fl_Color)51);
  372. freqenvelopegroup->selection_color(FL_BACKGROUND_COLOR);
  373. freqenvelopegroup->labeltype(FL_NORMAL_LABEL);
  374. freqenvelopegroup->labelfont(0);
  375. freqenvelopegroup->labelsize(14);
  376. freqenvelopegroup->labelcolor(FL_FOREGROUND_COLOR);
  377. freqenvelopegroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  378. freqenvelopegroup->when(FL_WHEN_RELEASE);
  379. o->init(ENV_ASR, osc, loc, "FreqEnvelope/");
  380. freqenvelopegroup->end();
  381. } // EnvelopeUI* freqenvelopegroup
  382. { Fl_Osc_Check* o = freqee = new Fl_Osc_Check(445, 77, 55, 15, "Enabled");
  383. freqee->box(FL_NO_BOX);
  384. freqee->down_box(FL_DOWN_BOX);
  385. freqee->color(FL_BACKGROUND_COLOR);
  386. freqee->selection_color(FL_FOREGROUND_COLOR);
  387. freqee->labeltype(FL_NORMAL_LABEL);
  388. freqee->labelfont(1);
  389. freqee->labelsize(10);
  390. freqee->labelcolor(FL_FOREGROUND_COLOR);
  391. freqee->callback((Fl_Callback*)cb_freqee);
  392. freqee->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  393. freqee->when(FL_WHEN_RELEASE);
  394. o->init("PFreqEnvelopeEnabled");
  395. } // Fl_Osc_Check* freqee
  396. { Fl_Osc_Counter* o = octave = new Fl_Osc_Counter(670, 58, 45, 15, "Octave");
  397. octave->tooltip("Octave");
  398. octave->type(1);
  399. octave->box(FL_UP_BOX);
  400. octave->color(FL_BACKGROUND_COLOR);
  401. octave->selection_color(FL_INACTIVE_COLOR);
  402. octave->labeltype(FL_NORMAL_LABEL);
  403. octave->labelfont(0);
  404. octave->labelsize(10);
  405. octave->labelcolor(FL_FOREGROUND_COLOR);
  406. octave->minimum(-8);
  407. octave->maximum(7);
  408. octave->step(1);
  409. octave->textfont(1);
  410. octave->textsize(11);
  411. octave->align(Fl_Align(FL_ALIGN_TOP));
  412. octave->when(FL_WHEN_CHANGED);
  413. o->init("octave");
  414. } // Fl_Osc_Counter* octave
  415. { Fl_Osc_Counter* o = coarsedet = new Fl_Osc_Counter(655, 125, 60, 20, "Coarse Det.");
  416. coarsedet->tooltip("Coarse Detune");
  417. coarsedet->box(FL_UP_BOX);
  418. coarsedet->color(FL_BACKGROUND_COLOR);
  419. coarsedet->selection_color(FL_INACTIVE_COLOR);
  420. coarsedet->labeltype(FL_NORMAL_LABEL);
  421. coarsedet->labelfont(0);
  422. coarsedet->labelsize(10);
  423. coarsedet->labelcolor(FL_FOREGROUND_COLOR);
  424. coarsedet->minimum(-64);
  425. coarsedet->maximum(63);
  426. coarsedet->step(1);
  427. coarsedet->textfont(1);
  428. coarsedet->textsize(11);
  429. coarsedet->align(Fl_Align(FL_ALIGN_TOP));
  430. coarsedet->when(FL_WHEN_CHANGED);
  431. o->init("coarsedetune");
  432. o->lstep(10);
  433. } // Fl_Osc_Counter* coarsedet
  434. { Fl_Osc_Slider* o = detune = new Fl_Osc_Slider(495, 27, 230, 15);
  435. detune->tooltip("Fine Detune (cents)");
  436. detune->type(5);
  437. detune->box(FL_NO_BOX);
  438. detune->color(FL_BACKGROUND_COLOR);
  439. detune->selection_color(FL_BACKGROUND_COLOR);
  440. detune->labeltype(FL_NORMAL_LABEL);
  441. detune->labelfont(0);
  442. detune->labelsize(14);
  443. detune->labelcolor(FL_FOREGROUND_COLOR);
  444. detune->minimum(-8192);
  445. detune->maximum(8191);
  446. detune->step(1);
  447. detune->callback((Fl_Callback*)cb_detune);
  448. detune->align(Fl_Align(FL_ALIGN_BOTTOM));
  449. detune->when(FL_WHEN_CHANGED);
  450. o->init("PDetune",'i');
  451. } // Fl_Osc_Slider* detune
  452. { Fl_Osc_Output* o = detunevalueoutput = new Fl_Osc_Output(448, 27, 45, 15, "Detune");
  453. detunevalueoutput->box(FL_NO_BOX);
  454. detunevalueoutput->color(FL_BACKGROUND_COLOR);
  455. detunevalueoutput->selection_color(FL_BACKGROUND_COLOR);
  456. detunevalueoutput->labeltype(FL_NORMAL_LABEL);
  457. detunevalueoutput->labelfont(0);
  458. detunevalueoutput->labelsize(10);
  459. detunevalueoutput->labelcolor(FL_FOREGROUND_COLOR);
  460. detunevalueoutput->minimum(-5000);
  461. detunevalueoutput->maximum(5000);
  462. detunevalueoutput->step(0.01);
  463. detunevalueoutput->textfont(1);
  464. detunevalueoutput->textsize(10);
  465. detunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  466. detunevalueoutput->when(FL_WHEN_CHANGED);
  467. o->init("detunevalue");
  468. } // Fl_Osc_Output* detunevalueoutput
  469. { Fl_Osc_Dial* o = bendadjdial = new Fl_Osc_Dial(448, 53, 15, 15, "Bend");
  470. bendadjdial->tooltip("How the frequency varies according to the pitch wheel");
  471. bendadjdial->box(FL_ROUND_UP_BOX);
  472. bendadjdial->color(FL_BACKGROUND_COLOR);
  473. bendadjdial->selection_color(FL_INACTIVE_COLOR);
  474. bendadjdial->labeltype(FL_NORMAL_LABEL);
  475. bendadjdial->labelfont(0);
  476. bendadjdial->labelsize(10);
  477. bendadjdial->labelcolor(FL_FOREGROUND_COLOR);
  478. bendadjdial->minimum(-64);
  479. bendadjdial->maximum(63);
  480. bendadjdial->step(1);
  481. bendadjdial->align(Fl_Align(FL_ALIGN_RIGHT));
  482. bendadjdial->when(FL_WHEN_CHANGED);
  483. o->init("PBendAdjust"); o->reset_value=24;o->set_transform([](float x){return x/24.0f;});o->set_rounding(2);
  484. } // Fl_Osc_Dial* bendadjdial
  485. { Fl_Osc_Dial* o = offsethzdial = new Fl_Osc_Dial(500, 53, 15, 15, "Offset");
  486. offsethzdial->tooltip("Offset of frequency in Hz");
  487. offsethzdial->box(FL_ROUND_UP_BOX);
  488. offsethzdial->color(FL_BACKGROUND_COLOR);
  489. offsethzdial->selection_color(FL_INACTIVE_COLOR);
  490. offsethzdial->labeltype(FL_NORMAL_LABEL);
  491. offsethzdial->labelfont(0);
  492. offsethzdial->labelsize(10);
  493. offsethzdial->labelcolor(FL_FOREGROUND_COLOR);
  494. offsethzdial->minimum(-64);
  495. offsethzdial->maximum(63);
  496. offsethzdial->step(1);
  497. offsethzdial->align(Fl_Align(FL_ALIGN_RIGHT));
  498. offsethzdial->when(FL_WHEN_CHANGED);
  499. o->init("POffsetHz"); o->set_rounding(2); o->set_transform([](float x){x/=64; return 15*(x*sqrtf(fabsf(x)));});
  500. } // Fl_Osc_Dial* offsethzdial
  501. { Fl_Osc_Check* o = hz440 = new Fl_Osc_Check(555, 53, 50, 15, "440Hz");
  502. hz440->tooltip("set the base frequency to 440Hz");
  503. hz440->box(FL_NO_BOX);
  504. hz440->down_box(FL_DOWN_BOX);
  505. hz440->color(FL_BACKGROUND_COLOR);
  506. hz440->selection_color(FL_FOREGROUND_COLOR);
  507. hz440->labeltype(FL_NORMAL_LABEL);
  508. hz440->labelfont(1);
  509. hz440->labelsize(10);
  510. hz440->labelcolor(FL_FOREGROUND_COLOR);
  511. hz440->callback((Fl_Callback*)cb_hz440);
  512. hz440->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  513. hz440->when(FL_WHEN_RELEASE);
  514. o->init("Pfixedfreq");
  515. } // Fl_Osc_Check* hz440
  516. { Fl_Osc_Dial* o = fixedfreqetdial = new Fl_Osc_Dial(610, 53, 15, 15, "Eq.T.");
  517. fixedfreqetdial->tooltip("How the frequency varies according to the keyboard (leftmost for fixed freque\
  518. ncy)");
  519. fixedfreqetdial->box(FL_ROUND_UP_BOX);
  520. fixedfreqetdial->color(FL_BACKGROUND_COLOR);
  521. fixedfreqetdial->selection_color(FL_INACTIVE_COLOR);
  522. fixedfreqetdial->labeltype(FL_NORMAL_LABEL);
  523. fixedfreqetdial->labelfont(0);
  524. fixedfreqetdial->labelsize(10);
  525. fixedfreqetdial->labelcolor(FL_FOREGROUND_COLOR);
  526. fixedfreqetdial->maximum(127);
  527. fixedfreqetdial->step(1);
  528. fixedfreqetdial->align(Fl_Align(FL_ALIGN_RIGHT));
  529. fixedfreqetdial->when(FL_WHEN_CHANGED);
  530. o->init("PfixedfreqET");
  531. } // Fl_Osc_Dial* fixedfreqetdial
  532. { Fl_Osc_Choice* o = detunetype = new Fl_Osc_Choice(655, 94, 70, 15, "Detune Type");
  533. detunetype->box(FL_UP_BOX);
  534. detunetype->down_box(FL_BORDER_BOX);
  535. detunetype->color(FL_BACKGROUND_COLOR);
  536. detunetype->selection_color(FL_SELECTION_COLOR);
  537. detunetype->labeltype(FL_NORMAL_LABEL);
  538. detunetype->labelfont(0);
  539. detunetype->labelsize(10);
  540. detunetype->labelcolor(FL_FOREGROUND_COLOR);
  541. detunetype->textfont(1);
  542. detunetype->textsize(10);
  543. detunetype->callback((Fl_Callback*)cb_detunetype);
  544. detunetype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  545. detunetype->when(FL_WHEN_RELEASE);
  546. o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");
  547. o->init("PDetuneType",1);
  548. } // Fl_Osc_Choice* detunetype
  549. freqsettingsui->end();
  550. } // Fl_Group* freqsettingsui
  551. { Fl_Osc_Check* o = stereo = new Fl_Osc_Check(440, 406, 55, 35, "Stereo");
  552. stereo->box(FL_THIN_UP_BOX);
  553. stereo->down_box(FL_DOWN_BOX);
  554. stereo->color(FL_BACKGROUND_COLOR);
  555. stereo->selection_color(FL_FOREGROUND_COLOR);
  556. stereo->labeltype(FL_NORMAL_LABEL);
  557. stereo->labelfont(0);
  558. stereo->labelsize(10);
  559. stereo->labelcolor(FL_FOREGROUND_COLOR);
  560. stereo->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  561. stereo->when(FL_WHEN_RELEASE);
  562. o->init("Pstereo");
  563. } // Fl_Osc_Check* stereo
  564. { Fl_Osc_Button* o = new Fl_Osc_Button(445, 446, 70, 25, "Clear");
  565. o->tooltip("Clear the harmonics");
  566. o->box(FL_THIN_UP_BOX);
  567. o->color(FL_BACKGROUND_COLOR);
  568. o->selection_color(FL_BACKGROUND_COLOR);
  569. o->labeltype(FL_NORMAL_LABEL);
  570. o->labelfont(0);
  571. o->labelsize(14);
  572. o->labelcolor(FL_FOREGROUND_COLOR);
  573. o->callback((Fl_Callback*)cb_Clear);
  574. o->align(Fl_Align(FL_ALIGN_CENTER));
  575. o->when(FL_WHEN_RELEASE);
  576. } // Fl_Osc_Button* o
  577. { bandwidthsettingsui = new Fl_Group(220, 5, 220, 135, "BANDWIDTH");
  578. bandwidthsettingsui->box(FL_UP_FRAME);
  579. bandwidthsettingsui->labeltype(FL_EMBOSSED_LABEL);
  580. bandwidthsettingsui->labelfont(1);
  581. bandwidthsettingsui->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  582. { EnvelopeUI* o = bandwidthenvelopegroup = new EnvelopeUI(225, 65, 205, 70, "SUBsynth - BandWidth Envelope");
  583. bandwidthenvelopegroup->box(FL_FLAT_BOX);
  584. bandwidthenvelopegroup->color((Fl_Color)51);
  585. bandwidthenvelopegroup->selection_color(FL_BACKGROUND_COLOR);
  586. bandwidthenvelopegroup->labeltype(FL_NORMAL_LABEL);
  587. bandwidthenvelopegroup->labelfont(0);
  588. bandwidthenvelopegroup->labelsize(14);
  589. bandwidthenvelopegroup->labelcolor(FL_FOREGROUND_COLOR);
  590. bandwidthenvelopegroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  591. bandwidthenvelopegroup->when(FL_WHEN_RELEASE);
  592. o->init(ENV_ADSR_BW, osc, loc, "BandWidthEnvelope/");
  593. bandwidthenvelopegroup->end();
  594. } // EnvelopeUI* bandwidthenvelopegroup
  595. { Fl_Osc_Check* o = bwee = new Fl_Osc_Check(225, 67, 55, 15, "Enabled");
  596. bwee->box(FL_NO_BOX);
  597. bwee->down_box(FL_DOWN_BOX);
  598. bwee->color(FL_BACKGROUND_COLOR);
  599. bwee->selection_color(FL_FOREGROUND_COLOR);
  600. bwee->labeltype(FL_NORMAL_LABEL);
  601. bwee->labelfont(1);
  602. bwee->labelsize(10);
  603. bwee->labelcolor(FL_FOREGROUND_COLOR);
  604. bwee->callback((Fl_Callback*)cb_bwee);
  605. bwee->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  606. bwee->when(FL_WHEN_RELEASE);
  607. o->init("PBandWidthEnvelopeEnabled");
  608. } // Fl_Osc_Check* bwee
  609. { Fl_Osc_VSlider* o = bandwidth = new Fl_Osc_VSlider(225, 40, 115, 15, "Band Width");
  610. bandwidth->type(5);
  611. bandwidth->box(FL_NO_BOX);
  612. bandwidth->color(FL_BACKGROUND_COLOR);
  613. bandwidth->selection_color(FL_BACKGROUND_COLOR);
  614. bandwidth->labeltype(FL_NORMAL_LABEL);
  615. bandwidth->labelfont(0);
  616. bandwidth->labelsize(10);
  617. bandwidth->labelcolor(FL_FOREGROUND_COLOR);
  618. bandwidth->maximum(127);
  619. bandwidth->step(1);
  620. bandwidth->align(Fl_Align(FL_ALIGN_TOP));
  621. bandwidth->when(FL_WHEN_CHANGED);
  622. o->init("Pbandwidth");o->reset_value=40;
  623. } // Fl_Osc_VSlider* bandwidth
  624. { Fl_Osc_TSlider* o = bwidthscale = new Fl_Osc_TSlider(345, 40, 90, 15, "B.Width Scale");
  625. bwidthscale->tooltip("How much I increase the BandWidth according to lower/higher harmonics");
  626. bwidthscale->type(5);
  627. bwidthscale->box(FL_NO_BOX);
  628. bwidthscale->color(FL_BACKGROUND_COLOR);
  629. bwidthscale->selection_color(FL_BACKGROUND_COLOR);
  630. bwidthscale->labeltype(FL_NORMAL_LABEL);
  631. bwidthscale->labelfont(0);
  632. bwidthscale->labelsize(10);
  633. bwidthscale->labelcolor(FL_FOREGROUND_COLOR);
  634. bwidthscale->minimum(-64);
  635. bwidthscale->maximum(63);
  636. bwidthscale->step(1);
  637. bwidthscale->align(Fl_Align(FL_ALIGN_TOP));
  638. bwidthscale->when(FL_WHEN_CHANGED);
  639. o->init("Pbwscale",'i');
  640. } // Fl_Osc_TSlider* bwidthscale
  641. bandwidthsettingsui->end();
  642. } // Fl_Group* bandwidthsettingsui
  643. { globalfiltergroup = new Fl_Group(440, 221, 290, 185, "FILTER");
  644. globalfiltergroup->box(FL_UP_FRAME);
  645. globalfiltergroup->labeltype(FL_EMBOSSED_LABEL);
  646. globalfiltergroup->labelfont(1);
  647. globalfiltergroup->labelsize(13);
  648. globalfiltergroup->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  649. { EnvelopeUI* o = filterenv = new EnvelopeUI(445, 331, 275, 70, "SUBsynth - Filter Envelope");
  650. filterenv->box(FL_FLAT_BOX);
  651. filterenv->color((Fl_Color)51);
  652. filterenv->selection_color(FL_BACKGROUND_COLOR);
  653. filterenv->labeltype(FL_NORMAL_LABEL);
  654. filterenv->labelfont(0);
  655. filterenv->labelsize(14);
  656. filterenv->labelcolor(FL_FOREGROUND_COLOR);
  657. filterenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  658. filterenv->when(FL_WHEN_RELEASE);
  659. o->init(ENV_ADSR_FILTER, osc, loc, "GlobalFilterEnvelope/");
  660. filterenv->end();
  661. } // EnvelopeUI* filterenv
  662. { FilterUI* o = filterui = new FilterUI(445, 246, 275, 75, "SUBsynthl - Filter");
  663. filterui->box(FL_FLAT_BOX);
  664. filterui->color(FL_LIGHT1);
  665. filterui->selection_color(FL_BACKGROUND_COLOR);
  666. filterui->labeltype(FL_NORMAL_LABEL);
  667. filterui->labelfont(0);
  668. filterui->labelsize(14);
  669. filterui->labelcolor(FL_FOREGROUND_COLOR);
  670. filterui->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  671. filterui->when(FL_WHEN_RELEASE);
  672. o->init(loc + "PGlobalFilter" , osc, loc, "GlobalFilter/");
  673. filterui->end();
  674. } // FilterUI* filterui
  675. globalfiltergroup->end();
  676. } // Fl_Group* globalfiltergroup
  677. { Fl_Osc_Check* o = filtere = new Fl_Osc_Check(445, 226, 85, 20, "Enabled");
  678. filtere->box(FL_NO_BOX);
  679. filtere->down_box(FL_DOWN_BOX);
  680. filtere->color(FL_BACKGROUND_COLOR);
  681. filtere->selection_color(FL_FOREGROUND_COLOR);
  682. filtere->labeltype(FL_NORMAL_LABEL);
  683. filtere->labelfont(1);
  684. filtere->labelsize(11);
  685. filtere->labelcolor(FL_FOREGROUND_COLOR);
  686. filtere->callback((Fl_Callback*)cb_filtere);
  687. filtere->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  688. filtere->when(FL_WHEN_RELEASE);
  689. o->init("PGlobalFilterEnabled");
  690. } // Fl_Osc_Check* filtere
  691. { Fl_Button* o = new Fl_Button(600, 451, 25, 15, "C");
  692. o->box(FL_THIN_UP_BOX);
  693. o->color((Fl_Color)179);
  694. o->labelfont(1);
  695. o->labelsize(11);
  696. o->labelcolor((Fl_Color)55);
  697. o->callback((Fl_Callback*)cb_C);
  698. } // Fl_Button* o
  699. { Fl_Button* o = new Fl_Button(630, 451, 25, 15, "P");
  700. o->box(FL_THIN_UP_BOX);
  701. o->color((Fl_Color)179);
  702. o->labelfont(1);
  703. o->labelsize(11);
  704. o->labelcolor((Fl_Color)55);
  705. o->callback((Fl_Callback*)cb_P);
  706. } // Fl_Button* o
  707. { Fl_Group* o = new Fl_Group(440, 151, 220, 70, "OVERTONES");
  708. o->box(FL_UP_FRAME);
  709. o->labeltype(FL_EMBOSSED_LABEL);
  710. o->labelfont(1);
  711. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  712. { Fl_Osc_Choice* o = spreadtype = new Fl_Osc_Choice(450, 190, 80, 20, "OvertonesPosition");
  713. spreadtype->box(FL_UP_BOX);
  714. spreadtype->down_box(FL_BORDER_BOX);
  715. spreadtype->color(FL_BACKGROUND_COLOR);
  716. spreadtype->selection_color(FL_SELECTION_COLOR);
  717. spreadtype->labeltype(FL_NORMAL_LABEL);
  718. spreadtype->labelfont(0);
  719. spreadtype->labelsize(10);
  720. spreadtype->labelcolor(FL_FOREGROUND_COLOR);
  721. spreadtype->textsize(10);
  722. spreadtype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  723. spreadtype->when(FL_WHEN_RELEASE);
  724. spreadtype->menu(menu_spreadtype);
  725. o->init("POvertoneSpread.type");
  726. } // Fl_Osc_Choice* spreadtype
  727. { Fl_Osc_Dial* o = spreadpar1 = new Fl_Osc_Dial(548, 173, 30, 30, "Par1");
  728. spreadpar1->box(FL_ROUND_UP_BOX);
  729. spreadpar1->color(FL_BACKGROUND_COLOR);
  730. spreadpar1->selection_color(FL_INACTIVE_COLOR);
  731. spreadpar1->labeltype(FL_NORMAL_LABEL);
  732. spreadpar1->labelfont(0);
  733. spreadpar1->labelsize(10);
  734. spreadpar1->labelcolor(FL_FOREGROUND_COLOR);
  735. spreadpar1->maximum(255);
  736. spreadpar1->step(1);
  737. spreadpar1->align(Fl_Align(FL_ALIGN_BOTTOM));
  738. spreadpar1->when(FL_WHEN_CHANGED);
  739. o->init("POvertoneSpread.par1");
  740. } // Fl_Osc_Dial* spreadpar1
  741. { Fl_Osc_Dial* o = spreadpar2 = new Fl_Osc_Dial(583, 173, 30, 30, "Par2");
  742. spreadpar2->box(FL_ROUND_UP_BOX);
  743. spreadpar2->color(FL_BACKGROUND_COLOR);
  744. spreadpar2->selection_color(FL_INACTIVE_COLOR);
  745. spreadpar2->labeltype(FL_NORMAL_LABEL);
  746. spreadpar2->labelfont(0);
  747. spreadpar2->labelsize(10);
  748. spreadpar2->labelcolor(FL_FOREGROUND_COLOR);
  749. spreadpar2->maximum(255);
  750. spreadpar2->step(1);
  751. spreadpar2->align(Fl_Align(FL_ALIGN_BOTTOM));
  752. spreadpar2->when(FL_WHEN_CHANGED);
  753. o->init("POvertoneSpread.par2");
  754. } // Fl_Osc_Dial* spreadpar2
  755. { Fl_Osc_Dial* o = spreadpar3 = new Fl_Osc_Dial(618, 173, 30, 30, "ForceH");
  756. spreadpar3->box(FL_ROUND_UP_BOX);
  757. spreadpar3->color(FL_BACKGROUND_COLOR);
  758. spreadpar3->selection_color(FL_INACTIVE_COLOR);
  759. spreadpar3->labeltype(FL_NORMAL_LABEL);
  760. spreadpar3->labelfont(0);
  761. spreadpar3->labelsize(10);
  762. spreadpar3->labelcolor(FL_FOREGROUND_COLOR);
  763. spreadpar3->maximum(255);
  764. spreadpar3->step(1);
  765. spreadpar3->align(Fl_Align(FL_ALIGN_BOTTOM));
  766. spreadpar3->when(FL_WHEN_CHANGED);
  767. o->init("POvertoneSpread.par3");
  768. } // Fl_Osc_Dial* spreadpar3
  769. o->end();
  770. } // Fl_Group* o
  771. SUBparameters->end();
  772. } // Fl_Osc_Window* SUBparameters
  773. return SUBparameters;
  774. }
  775. void SUBnoteUI::refresh() {
  776. SUBparameters->update();
  777. for (int i=0;i<MAX_SUB_HARMONICS;i++) h[i]->refresh();
  778. //globalfiltergroup->redraw();
  779. //ampenv->refresh();
  780. //bandwidthenvelopegroup->refresh();
  781. //freqenvelopegroup->refresh();
  782. //filterui->refresh();
  783. //filterenv->refresh();
  784. }
  785. SUBnoteUI::SUBnoteUI(Fl_Osc_Interface *osc_, std::string loc_) {
  786. osc = osc_;
  787. loc = loc_;
  788. make_window();
  789. }
  790. SUBnoteUI::~SUBnoteUI() {
  791. //for (int i=0;i<MAX_SUB_HARMONICS;i++) delete (h[i]);
  792. SUBparameters->hide();
  793. delete(SUBparameters);
  794. }