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.

2453 lines
98KB

  1. // generated by Fast Light User Interface Designer (fluid) version 1.0300
  2. #include "external/zynaddsubfx/UI/ADnoteUI.h"
  3. //Copyright (c) 2002-2005 Nasca Octavian Paul
  4. //License: GNU GPL version 2 or later
  5. #include <cmath>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include "Osc_IntModel.h"
  10. #include "PartUI.h"
  11. #include "MasterUI.h"
  12. extern class MasterUI *ui;
  13. PhaseSlider::PhaseSlider(int x,int y, int w, int h, const char *label)
  14. :Fl_Osc_TSlider(x,y,w,h,label) {
  15. set_rounding(1);
  16. reset_value=0;
  17. set_transform([](float x){return 180.0f*x/64.0f;});
  18. }
  19. void PhaseSlider::set_scope(Fl_Oscilloscope *newscope) {
  20. oscope = newscope;
  21. }
  22. void PhaseSlider::OSC_value(int i) {
  23. value(64-i);
  24. oscope->phase=i;
  25. oscope->parent()->redraw();
  26. }
  27. void PhaseSlider::cb(void) {
  28. oscWrite(ext, "i", (int)(64-Fl_Slider::value()));
  29. if(cb_data.first)
  30. cb_data.first(this, cb_data.second);
  31. }
  32. void ADvoicelistitem::cb_voicedetune_i(Fl_Osc_Slider*, void*) {
  33. detunevalueoutput->update();
  34. }
  35. void ADvoicelistitem::cb_voicedetune(Fl_Osc_Slider* o, void* v) {
  36. ((ADvoicelistitem*)(o->parent()->parent()->user_data()))->cb_voicedetune_i(o,v);
  37. }
  38. void ADvoicelistitem::cb_voiceenabled_i(Fl_Osc_Check* o, void*) {
  39. if (o->value()==0) voicelistitemgroup->deactivate();
  40. else voicelistitemgroup->activate();
  41. o->redraw();
  42. }
  43. void ADvoicelistitem::cb_voiceenabled(Fl_Osc_Check* o, void* v) {
  44. ((ADvoicelistitem*)(o->parent()->user_data()))->cb_voiceenabled_i(o,v);
  45. }
  46. void ADvoicelistitem::cb_edit_i(Fl_Button*, void*) {
  47. class ADnoteUI *adnoteui = ui->partui->adnoteui;
  48. adnoteui->ADnoteVoice->show();
  49. adnoteui->currentvoicecounter->value(nvoice+1);
  50. adnoteui->currentvoicecounter->do_callback();
  51. class ADvoiceUI *advoice = adnoteui->advoice;
  52. if (advoice->mod_type->value() == 0)
  53. advoice->voiceFMparametersgroup->deactivate();
  54. else
  55. advoice->voiceFMparametersgroup->activate();
  56. }
  57. void ADvoicelistitem::cb_edit(Fl_Button* o, void* v) {
  58. ((ADvoicelistitem*)(o->parent()->user_data()))->cb_edit_i(o,v);
  59. }
  60. Fl_Osc_Group* ADvoicelistitem::make_window() {
  61. { ADnoteVoiceListItem = new Fl_Osc_Group(0, 0, 670, 100);
  62. ADnoteVoiceListItem->box(FL_NO_BOX);
  63. ADnoteVoiceListItem->color(FL_BACKGROUND_COLOR);
  64. ADnoteVoiceListItem->selection_color(FL_BACKGROUND_COLOR);
  65. ADnoteVoiceListItem->labeltype(FL_NO_LABEL);
  66. ADnoteVoiceListItem->labelfont(0);
  67. ADnoteVoiceListItem->labelsize(14);
  68. ADnoteVoiceListItem->labelcolor(FL_FOREGROUND_COLOR);
  69. ADnoteVoiceListItem->user_data((void*)(this));
  70. ADnoteVoiceListItem->align(Fl_Align(FL_ALIGN_TOP));
  71. ADnoteVoiceListItem->when(FL_WHEN_RELEASE);
  72. { new Fl_Box(0, 0, 0, 0);
  73. ADnoteVoiceListItem->base = loc;
  74. } // Fl_Box* o
  75. { voicelistitemgroup = new Fl_Osc_Group(0, 0, 670, 25);
  76. voicelistitemgroup->box(FL_NO_BOX);
  77. voicelistitemgroup->color(FL_BACKGROUND_COLOR);
  78. voicelistitemgroup->selection_color(FL_BACKGROUND_COLOR);
  79. voicelistitemgroup->labeltype(FL_NORMAL_LABEL);
  80. voicelistitemgroup->labelfont(0);
  81. voicelistitemgroup->labelsize(14);
  82. voicelistitemgroup->labelcolor(FL_FOREGROUND_COLOR);
  83. voicelistitemgroup->align(Fl_Align(FL_ALIGN_TOP));
  84. voicelistitemgroup->when(FL_WHEN_RELEASE);
  85. { Fl_Osc_VSlider* o = voicevolume = new Fl_Osc_VSlider(132, 5, 115, 20);
  86. voicevolume->tooltip("Volume");
  87. voicevolume->type(5);
  88. voicevolume->box(FL_NO_BOX);
  89. voicevolume->color(FL_BACKGROUND_COLOR);
  90. voicevolume->selection_color(FL_BACKGROUND_COLOR);
  91. voicevolume->labeltype(FL_NORMAL_LABEL);
  92. voicevolume->labelfont(0);
  93. voicevolume->labelsize(8);
  94. voicevolume->labelcolor(FL_FOREGROUND_COLOR);
  95. voicevolume->maximum(127);
  96. voicevolume->step(1);
  97. voicevolume->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  98. voicevolume->when(FL_WHEN_CHANGED);
  99. o->init("PVolume"); o->reset_value=100;
  100. } // Fl_Osc_VSlider* voicevolume
  101. { Fl_Osc_Check* o = voiceresonanceenabled = new Fl_Osc_Check(287, 7, 15, 17);
  102. voiceresonanceenabled->tooltip("Resonance On/Off");
  103. voiceresonanceenabled->box(FL_NO_BOX);
  104. voiceresonanceenabled->down_box(FL_DOWN_BOX);
  105. voiceresonanceenabled->color(FL_BACKGROUND_COLOR);
  106. voiceresonanceenabled->selection_color(FL_FOREGROUND_COLOR);
  107. voiceresonanceenabled->labeltype(FL_EMBOSSED_LABEL);
  108. voiceresonanceenabled->labelfont(1);
  109. voiceresonanceenabled->labelsize(11);
  110. voiceresonanceenabled->labelcolor(FL_FOREGROUND_COLOR);
  111. voiceresonanceenabled->align(Fl_Align(FL_ALIGN_LEFT));
  112. voiceresonanceenabled->when(FL_WHEN_RELEASE);
  113. o->init("Presonance");
  114. } // Fl_Osc_Check* voiceresonanceenabled
  115. { Fl_Osc_VSlider* o = voicelfofreq = new Fl_Osc_VSlider(542, 5, 115, 20);
  116. voicelfofreq->tooltip("Frequency LFO amount");
  117. voicelfofreq->type(5);
  118. voicelfofreq->box(FL_NO_BOX);
  119. voicelfofreq->color(FL_BACKGROUND_COLOR);
  120. voicelfofreq->selection_color(FL_BACKGROUND_COLOR);
  121. voicelfofreq->labeltype(FL_NORMAL_LABEL);
  122. voicelfofreq->labelfont(0);
  123. voicelfofreq->labelsize(8);
  124. voicelfofreq->labelcolor(FL_FOREGROUND_COLOR);
  125. voicelfofreq->maximum(127);
  126. voicelfofreq->step(1);
  127. voicelfofreq->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  128. voicelfofreq->when(FL_WHEN_CHANGED);
  129. o->init("FreqLfo/Pintensity", 'i');o->reset_value=40;
  130. } // Fl_Osc_VSlider* voicelfofreq
  131. { Fl_Osc_Dial* o = voicepanning = new Fl_Osc_Dial(257, 5, 20, 20);
  132. voicepanning->tooltip("Panning (leftmost is Random)");
  133. voicepanning->box(FL_ROUND_UP_BOX);
  134. voicepanning->color(FL_BACKGROUND_COLOR);
  135. voicepanning->selection_color(FL_INACTIVE_COLOR);
  136. voicepanning->labeltype(FL_NORMAL_LABEL);
  137. voicepanning->labelfont(0);
  138. voicepanning->labelsize(10);
  139. voicepanning->labelcolor(FL_FOREGROUND_COLOR);
  140. voicepanning->maximum(127);
  141. voicepanning->step(1);
  142. voicepanning->align(Fl_Align(FL_ALIGN_LEFT));
  143. voicepanning->when(FL_WHEN_CHANGED);
  144. o->init("PPanning");o->reset_value=64;
  145. } // Fl_Osc_Dial* voicepanning
  146. { Fl_Osc_Group* o = voiceoscil = new Fl_Osc_Group(102, 5, 30, 20);
  147. voiceoscil->box(FL_THIN_DOWN_BOX);
  148. voiceoscil->color(FL_GRAY0);
  149. voiceoscil->selection_color((Fl_Color)71);
  150. voiceoscil->labeltype(FL_NORMAL_LABEL);
  151. voiceoscil->labelfont(0);
  152. voiceoscil->labelsize(14);
  153. voiceoscil->labelcolor((Fl_Color)179);
  154. voiceoscil->align(Fl_Align(FL_ALIGN_TOP));
  155. voiceoscil->when(FL_WHEN_RELEASE);
  156. voiceoscil->ext = "OscilSmp/";
  157. oscil=new Fl_Oscilloscope(o->x(),o->y()+1,o->w(),o->h(),"");
  158. oscil->init(false);
  159. voiceoscil->end();
  160. } // Fl_Osc_Group* voiceoscil
  161. { Fl_Osc_Output* o = detunevalueoutput = new Fl_Osc_Output(307, 5, 45, 20);
  162. detunevalueoutput->box(FL_NO_BOX);
  163. detunevalueoutput->color(FL_BACKGROUND_COLOR);
  164. detunevalueoutput->selection_color(FL_BACKGROUND_COLOR);
  165. detunevalueoutput->labeltype(FL_NORMAL_LABEL);
  166. detunevalueoutput->labelfont(0);
  167. detunevalueoutput->labelsize(10);
  168. detunevalueoutput->labelcolor(FL_FOREGROUND_COLOR);
  169. detunevalueoutput->minimum(-5000);
  170. detunevalueoutput->maximum(5000);
  171. detunevalueoutput->step(0.01);
  172. detunevalueoutput->textfont(1);
  173. detunevalueoutput->textsize(10);
  174. detunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  175. detunevalueoutput->when(FL_WHEN_CHANGED);
  176. o->init("detunevalue");
  177. } // Fl_Osc_Output* detunevalueoutput
  178. { Fl_Osc_Slider* o = voicedetune = new Fl_Osc_Slider(357, 5, 185, 20);
  179. voicedetune->tooltip("Fine Detune (cents)");
  180. voicedetune->type(5);
  181. voicedetune->box(FL_NO_BOX);
  182. voicedetune->color(FL_BACKGROUND_COLOR);
  183. voicedetune->selection_color(FL_BACKGROUND_COLOR);
  184. voicedetune->labeltype(FL_NORMAL_LABEL);
  185. voicedetune->labelfont(0);
  186. voicedetune->labelsize(14);
  187. voicedetune->labelcolor(FL_FOREGROUND_COLOR);
  188. voicedetune->minimum(-8192);
  189. voicedetune->maximum(8191);
  190. voicedetune->step(1);
  191. voicedetune->callback((Fl_Callback*)cb_voicedetune);
  192. voicedetune->align(Fl_Align(FL_ALIGN_BOTTOM));
  193. voicedetune->when(FL_WHEN_CHANGED);
  194. o->init("PDetune",'i');
  195. } // Fl_Osc_Slider* voicedetune
  196. { whitenoiselabel = new Fl_Box(107, 5, 20, 20, "N");
  197. whitenoiselabel->labelfont(1);
  198. whitenoiselabel->labelsize(13);
  199. whitenoiselabel->labelcolor(FL_LIGHT3);
  200. whitenoiselabel->hide();
  201. } // Fl_Box* whitenoiselabel
  202. { pinknoiselabel = new Fl_Box(107, 5, 20, 20, "N");
  203. pinknoiselabel->labelfont(1);
  204. pinknoiselabel->labelsize(13);
  205. pinknoiselabel->labelcolor((Fl_Color)212);
  206. pinknoiselabel->hide();
  207. } // Fl_Box* pinknoiselabel
  208. voicelistitemgroup->end();
  209. } // Fl_Osc_Group* voicelistitemgroup
  210. { Fl_Osc_Check* o = voiceenabled = new Fl_Osc_Check(30, 5, 20, 20, "01");
  211. voiceenabled->box(FL_NO_BOX);
  212. voiceenabled->down_box(FL_DOWN_BOX);
  213. voiceenabled->color(FL_BACKGROUND_COLOR);
  214. voiceenabled->selection_color(FL_FOREGROUND_COLOR);
  215. voiceenabled->labeltype(FL_EMBOSSED_LABEL);
  216. voiceenabled->labelfont(1);
  217. voiceenabled->labelsize(13);
  218. voiceenabled->labelcolor(FL_FOREGROUND_COLOR);
  219. voiceenabled->callback((Fl_Callback*)cb_voiceenabled);
  220. voiceenabled->align(Fl_Align(FL_ALIGN_LEFT));
  221. voiceenabled->when(FL_WHEN_RELEASE);
  222. char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));
  223. o->init("Enabled");
  224. } // Fl_Osc_Check* voiceenabled
  225. { Fl_Button* o = new Fl_Button(53, 6, 40, 15, "edit");
  226. o->box(FL_THIN_UP_BOX);
  227. o->labelsize(11);
  228. o->callback((Fl_Callback*)cb_edit);
  229. } // Fl_Button* o
  230. ADnoteVoiceListItem->end();
  231. } // Fl_Osc_Group* ADnoteVoiceListItem
  232. return ADnoteVoiceListItem;
  233. }
  234. ADvoicelistitem::ADvoicelistitem(int x,int y, int w, int h, const char *label):Fl_Osc_Group(x,y,w,h,label) {
  235. assert(osc);
  236. voice_phase = new Osc_IntModel(osc);
  237. voice_phase->callback=[this](int phase) {
  238. oscil->phase=phase;
  239. voiceoscil->redraw();
  240. return;
  241. };
  242. sound_type = new Osc_IntModel(osc);
  243. sound_type->callback=[this](int voice_type) {
  244. switch (voice_type) {
  245. case 0:
  246. whitenoiselabel->hide();
  247. pinknoiselabel->hide();
  248. oscil->Overlay = NULL;
  249. voiceresonanceenabled->activate();
  250. detunevalueoutput->activate();
  251. voicedetune->activate();
  252. voicelfofreq->activate();
  253. voiceoscil->activate();
  254. return;
  255. case 1:
  256. whitenoiselabel->show();
  257. pinknoiselabel->hide();
  258. oscil->Overlay = whitenoiselabel;
  259. break;
  260. default:
  261. pinknoiselabel->show();
  262. whitenoiselabel->hide();
  263. oscil->Overlay = pinknoiselabel;
  264. }
  265. voiceresonanceenabled->deactivate();
  266. detunevalueoutput->deactivate();
  267. voicedetune->deactivate();
  268. voicelfofreq->deactivate();
  269. voiceoscil->deactivate();
  270. };
  271. ext_oscil = new Osc_IntModel(osc);
  272. ext_oscil->callback = [this](int ext) {
  273. if(ext == -1)
  274. voiceoscil->reext("OscilSmp/");
  275. else
  276. voiceoscil->reext("../VoicePar"+to_s(ext)+"/OscilSmp/");
  277. };
  278. nvoice=0;
  279. }
  280. void ADvoicelistitem::init(int nvoice_, std::string loc_, Fl_Osc_Interface *osc_) {
  281. assert(osc_);
  282. assert(!loc_.empty());
  283. voice_phase->doUpdate(loc_ + "Poscilphase");
  284. sound_type->doUpdate(loc_ + "Type");
  285. ext_oscil->doUpdate(loc_ + "Pextoscil");
  286. nvoice=nvoice_;
  287. loc = loc_;
  288. make_window();
  289. ADnoteVoiceListItem->show();
  290. end();
  291. }
  292. void ADvoicelistitem::refreshlist() {
  293. if (voiceenabled->value()==0) voicelistitemgroup->deactivate();
  294. else voicelistitemgroup->activate();
  295. detunevalueoutput->do_callback();
  296. ADnoteVoiceListItem->redraw();
  297. }
  298. ADvoicelistitem::~ADvoicelistitem() {
  299. ADnoteVoiceListItem->hide();
  300. delete voice_phase;
  301. delete sound_type;
  302. delete ext_oscil;
  303. }
  304. void ADvoiceUI::cb_On_i(Fl_Osc_Check* o, void*) {
  305. if (o->value()==0) voiceFMfreqenvgroup->deactivate();
  306. else voiceFMfreqenvgroup->activate();
  307. o->redraw();
  308. }
  309. void ADvoiceUI::cb_On(Fl_Osc_Check* o, void* v) {
  310. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_On_i(o,v);
  311. }
  312. void ADvoiceUI::cb__i(Fl_Osc_Slider*, void*) {
  313. fmdetunevalueoutput->update();
  314. }
  315. void ADvoiceUI::cb_(Fl_Osc_Slider* o, void* v) {
  316. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb__i(o,v);
  317. }
  318. void ADvoiceUI::cb_Detune_i(Fl_Osc_Choice*, void*) {
  319. fmdetunevalueoutput->update();
  320. }
  321. void ADvoiceUI::cb_Detune(Fl_Osc_Choice* o, void* v) {
  322. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Detune_i(o,v);
  323. }
  324. void ADvoiceUI::cb_440Hz_i(Fl_Osc_Check* o, void*) {
  325. if (o->value()==0) fixedfreqetdial->deactivate();
  326. else fixedfreqetdial->activate();
  327. }
  328. void ADvoiceUI::cb_440Hz(Fl_Osc_Check* o, void* v) {
  329. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_440Hz_i(o,v);
  330. }
  331. void ADvoiceUI::cb_On1_i(Fl_Osc_Check* o, void*) {
  332. if (o->value()==0) voiceFMampenvgroup->deactivate();
  333. else voiceFMampenvgroup->activate();
  334. o->redraw();
  335. }
  336. void ADvoiceUI::cb_On1(Fl_Osc_Check* o, void* v) {
  337. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_On1_i(o,v);
  338. }
  339. void ADvoiceUI::cb_changeFMoscilbutton_i(Fl_Button*, void*) {
  340. if (oscedit!=NULL)
  341. delete(oscedit);
  342. if(extFMoscil->value() == 0)
  343. oscedit=new OscilEditor(true,loc+"FMSmp/", osc_i);
  344. else
  345. oscedit=new OscilEditor(true,loc+"../VoicePar"+to_s(extFMoscil->value()-1)+"/FMSmp/", osc_i);
  346. }
  347. void ADvoiceUI::cb_changeFMoscilbutton(Fl_Button* o, void* v) {
  348. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_changeFMoscilbutton_i(o,v);
  349. }
  350. void ADvoiceUI::cb_extFMoscil_i(Fl_Osc_Choice* o, void*) {
  351. if ((int) o->value() != 0) {
  352. oscFM->init(false);
  353. changeFMoscilbutton->labelcolor(FL_BLUE);
  354. } else {
  355. oscFM->init(false);
  356. changeFMoscilbutton->labelcolor(FL_BLACK);
  357. };
  358. if(o->value() == 0)
  359. fmoscil->rebase(loc);
  360. else
  361. fmoscil->rebase(loc+"../VoicePar"+to_s(o->value()-1)+"/");
  362. voiceFMparametersgroup->redraw();
  363. }
  364. void ADvoiceUI::cb_extFMoscil(Fl_Osc_Choice* o, void* v) {
  365. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_extFMoscil_i(o,v);
  366. }
  367. void ADvoiceUI::cb_extMod_i(Fl_Osc_Choice* o, void*) {
  368. if ((int) o->value() != 0) {
  369. modoscil->deactivate();
  370. modfrequency->deactivate();
  371. } else {
  372. modoscil->activate();
  373. modfrequency->activate();
  374. };
  375. voiceFMparametersgroup->redraw();
  376. }
  377. void ADvoiceUI::cb_extMod(Fl_Osc_Choice* o, void* v) {
  378. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_extMod_i(o,v);
  379. }
  380. void ADvoiceUI::cb_mod_type_i(Fl_Osc_Choice* o, void*) {
  381. if (o->value()==0) voiceFMparametersgroup->deactivate();
  382. else voiceFMparametersgroup->activate();
  383. o->redraw();
  384. }
  385. void ADvoiceUI::cb_mod_type(Fl_Osc_Choice* o, void* v) {
  386. ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_mod_type_i(o,v);
  387. }
  388. Fl_Menu_Item ADvoiceUI::menu_mod_type[] = {
  389. {"OFF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  390. {"MORPH", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  391. {"RING", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  392. {"PM", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  393. {"FM", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  394. {"PWM", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  395. {0,0,0,0,0,0,0,0,0}
  396. };
  397. void ADvoiceUI::cb_On2_i(Fl_Osc_Check* o, void*) {
  398. if (o->value()==0) voicefreqenvgroup->deactivate();
  399. else voicefreqenvgroup->activate();
  400. o->redraw();
  401. }
  402. void ADvoiceUI::cb_On2(Fl_Osc_Check* o, void* v) {
  403. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_On2_i(o,v);
  404. }
  405. void ADvoiceUI::cb_On3_i(Fl_Osc_Check* o, void*) {
  406. if (o->value()==0) voicefreqlfogroup->deactivate();
  407. else voicefreqlfogroup->activate();
  408. o->redraw();
  409. }
  410. void ADvoiceUI::cb_On3(Fl_Osc_Check* o, void* v) {
  411. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_On3_i(o,v);
  412. }
  413. void ADvoiceUI::cb_1_i(Fl_Osc_Slider*, void*) {
  414. detunevalueoutput->update();
  415. }
  416. void ADvoiceUI::cb_1(Fl_Osc_Slider* o, void* v) {
  417. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_1_i(o,v);
  418. }
  419. void ADvoiceUI::cb_440Hz1_i(Fl_Osc_Check* o, void*) {
  420. if (o->value()==0) fixedfreqetdial->deactivate();
  421. else fixedfreqetdial->activate();
  422. }
  423. void ADvoiceUI::cb_440Hz1(Fl_Osc_Check* o, void* v) {
  424. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_440Hz1_i(o,v);
  425. }
  426. void ADvoiceUI::cb_Detune1_i(Fl_Osc_Choice*, void*) {
  427. detunevalueoutput->update();
  428. }
  429. void ADvoiceUI::cb_Detune1(Fl_Osc_Choice* o, void* v) {
  430. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Detune1_i(o,v);
  431. }
  432. void ADvoiceUI::cb_changevoiceoscilbutton_i(Fl_Button*, void*) {
  433. delete oscedit;
  434. if(extoscil->value() == 0)
  435. oscedit=new OscilEditor(true,loc+"OscilSmp/", osc_i);
  436. else
  437. oscedit=new OscilEditor(true,loc+"../VoicePar"+to_s(extoscil->value()-1)+"/OscilSmp/", osc_i);
  438. }
  439. void ADvoiceUI::cb_changevoiceoscilbutton(Fl_Button* o, void* v) {
  440. ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_changevoiceoscilbutton_i(o,v);
  441. }
  442. void ADvoiceUI::cb_extoscil_i(Fl_Osc_Choice* o, void*) {
  443. if ((int) o->value() != 0) {
  444. osc->init(false);
  445. changevoiceoscilbutton->labelcolor(FL_BLUE);
  446. } else {
  447. osc->init(false);
  448. changevoiceoscilbutton->labelcolor(FL_BLACK);
  449. };
  450. if(o->value() == 0)
  451. voiceoscil->rebase(loc);
  452. else
  453. voiceoscil->rebase(loc+"../VoicePar"+to_s(o->value()-1)+"/");
  454. voiceparametersgroup->redraw();
  455. voiceonbutton->redraw();
  456. }
  457. void ADvoiceUI::cb_extoscil(Fl_Osc_Choice* o, void* v) {
  458. ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_extoscil_i(o,v);
  459. }
  460. void ADvoiceUI::cb_Frequency_i(Fl_Osc_Slider*, void*) {
  461. unisonspreadoutput->update();
  462. }
  463. void ADvoiceUI::cb_Frequency(Fl_Osc_Slider* o, void* v) {
  464. ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Frequency_i(o,v);
  465. }
  466. void ADvoiceUI::cb_On4_i(Fl_Osc_Check* o, void*) {
  467. if (o->value()==0) voiceampenvgroup->deactivate();
  468. else voiceampenvgroup->activate();
  469. o->redraw();
  470. }
  471. void ADvoiceUI::cb_On4(Fl_Osc_Check* o, void* v) {
  472. ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_On4_i(o,v);
  473. }
  474. void ADvoiceUI::cb_On5_i(Fl_Osc_Check* o, void*) {
  475. if (o->value()==0) voiceamplfogroup->deactivate();
  476. else voiceamplfogroup->activate();
  477. o->redraw();
  478. }
  479. void ADvoiceUI::cb_On5(Fl_Osc_Check* o, void* v) {
  480. ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_On5_i(o,v);
  481. }
  482. void ADvoiceUI::cb_On6_i(Fl_Osc_Check* o, void*) {
  483. if (o->value()==0) voicefilterenvgroup->deactivate();
  484. else voicefilterenvgroup->activate();
  485. o->redraw();
  486. }
  487. void ADvoiceUI::cb_On6(Fl_Osc_Check* o, void* v) {
  488. ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_On6_i(o,v);
  489. }
  490. void ADvoiceUI::cb_On7_i(Fl_Osc_Check* o, void*) {
  491. if (o->value()==0) voicefilterlfogroup->deactivate();
  492. else voicefilterlfogroup->activate();
  493. o->redraw();
  494. }
  495. void ADvoiceUI::cb_On7(Fl_Osc_Check* o, void* v) {
  496. ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_On7_i(o,v);
  497. }
  498. void ADvoiceUI::cb_2_i(Fl_Osc_Choice* o, void*) {
  499. switch (o->value()) {
  500. case 0: voicemodegroup->activate(); whitenoiselabel->hide(); pinknoiselabel->hide(); osc->Overlay=NULL; break;
  501. case 1: voicemodegroup->deactivate(); whitenoiselabel->show(); pinknoiselabel->hide(); osc->Overlay=whitenoiselabel; break;
  502. default: voicemodegroup->deactivate(); whitenoiselabel->hide(); pinknoiselabel->show(); osc->Overlay=pinknoiselabel; break;
  503. };
  504. }
  505. void ADvoiceUI::cb_2(Fl_Osc_Choice* o, void* v) {
  506. ((ADvoiceUI*)(o->parent()->parent()->user_data()))->cb_2_i(o,v);
  507. }
  508. Fl_Menu_Item ADvoiceUI::menu_[] = {
  509. {"Sound", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  510. {"White", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  511. {"Pink", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  512. {0,0,0,0,0,0,0,0,0}
  513. };
  514. void ADvoiceUI::cb_On8_i(Fl_Osc_Check* o, void*) {
  515. if (o->value()==0) voicefiltergroup->deactivate();
  516. else voicefiltergroup->activate();
  517. o->redraw();
  518. bypassfiltercheckbutton->redraw();
  519. }
  520. void ADvoiceUI::cb_On8(Fl_Osc_Check* o, void* v) {
  521. ((ADvoiceUI*)(o->parent()->parent()->user_data()))->cb_On8_i(o,v);
  522. }
  523. void ADvoiceUI::cb_voiceonbutton_i(Fl_Osc_Check* o, void*) {
  524. if (o->value()==0) voiceparametersgroup->deactivate();
  525. else voiceparametersgroup->activate();
  526. o->redraw();
  527. }
  528. void ADvoiceUI::cb_voiceonbutton(Fl_Osc_Check* o, void* v) {
  529. ((ADvoiceUI*)(o->parent()->user_data()))->cb_voiceonbutton_i(o,v);
  530. }
  531. Fl_Osc_Group* ADvoiceUI::make_window() {
  532. { ADnoteVoiceParameters = new Fl_Osc_Group(0, 0, 765, 595, "Voice");
  533. ADnoteVoiceParameters->box(FL_NO_BOX);
  534. ADnoteVoiceParameters->color(FL_BACKGROUND_COLOR);
  535. ADnoteVoiceParameters->selection_color(FL_BACKGROUND_COLOR);
  536. ADnoteVoiceParameters->labeltype(FL_NO_LABEL);
  537. ADnoteVoiceParameters->labelfont(0);
  538. ADnoteVoiceParameters->labelsize(14);
  539. ADnoteVoiceParameters->labelcolor(FL_FOREGROUND_COLOR);
  540. ADnoteVoiceParameters->user_data((void*)(this));
  541. ADnoteVoiceParameters->align(Fl_Align(FL_ALIGN_TOP));
  542. ADnoteVoiceParameters->when(FL_WHEN_RELEASE);
  543. { new Fl_Box(25, 25, 35, 16, "label");
  544. ADnoteVoiceParameters->base = base+"VoicePar"+to_s(nvoice)+"/";
  545. ADnoteVoiceParameters->osc = osc_i;
  546. } // Fl_Box* o
  547. { voiceparametersgroup = new Fl_Group(0, 0, 770, 590);
  548. voiceparametersgroup->color((Fl_Color)48);
  549. { voicemodegroup = new Fl_Group(0, 5, 770, 585);
  550. voicemodegroup->color((Fl_Color)64);
  551. { voiceFMparametersgroup = new Fl_Group(530, 5, 230, 585, "MODULATOR");
  552. voiceFMparametersgroup->box(FL_UP_FRAME);
  553. voiceFMparametersgroup->color((Fl_Color)48);
  554. voiceFMparametersgroup->labeltype(FL_EMBOSSED_LABEL);
  555. voiceFMparametersgroup->labelfont(1);
  556. voiceFMparametersgroup->labelsize(13);
  557. voiceFMparametersgroup->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  558. { modfrequency = new Fl_Group(535, 219, 220, 174, "Mod.FREQUENCY");
  559. modfrequency->box(FL_UP_FRAME);
  560. modfrequency->labeltype(FL_EMBOSSED_LABEL);
  561. modfrequency->labelfont(1);
  562. modfrequency->labelsize(13);
  563. modfrequency->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  564. { EnvelopeUI* o = voiceFMfreqenvgroup = new EnvelopeUI(540, 315, 210, 70, "ADSynth Modulator - Frequency Envelope");
  565. voiceFMfreqenvgroup->box(FL_FLAT_BOX);
  566. voiceFMfreqenvgroup->color((Fl_Color)51);
  567. voiceFMfreqenvgroup->selection_color(FL_BACKGROUND_COLOR);
  568. voiceFMfreqenvgroup->labeltype(FL_NORMAL_LABEL);
  569. voiceFMfreqenvgroup->labelfont(0);
  570. voiceFMfreqenvgroup->labelsize(14);
  571. voiceFMfreqenvgroup->labelcolor(FL_FOREGROUND_COLOR);
  572. voiceFMfreqenvgroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  573. voiceFMfreqenvgroup->when(FL_WHEN_RELEASE);
  574. o->init(ENV_ASR, osc_i, loc, "FMFreqEnvelope/");
  575. voiceFMfreqenvgroup->end();
  576. } // EnvelopeUI* voiceFMfreqenvgroup
  577. { Fl_Osc_Check* o = new Fl_Osc_Check(545, 322, 50, 10, "On");
  578. o->tooltip("Forced Release");
  579. o->box(FL_NO_BOX);
  580. o->down_box(FL_DOWN_BOX);
  581. o->color(FL_BACKGROUND_COLOR);
  582. o->selection_color(FL_FOREGROUND_COLOR);
  583. o->labeltype(FL_NORMAL_LABEL);
  584. o->labelfont(1);
  585. o->labelsize(11);
  586. o->labelcolor(FL_FOREGROUND_COLOR);
  587. o->callback((Fl_Callback*)cb_On);
  588. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  589. o->when(FL_WHEN_RELEASE);
  590. o->init("PFMFreqEnvelopeEnabled");
  591. } // Fl_Osc_Check* o
  592. { Fl_Osc_Counter* o = new Fl_Osc_Counter(685, 295, 60, 15, "Coarse Det.");
  593. o->tooltip("Coarse Detune");
  594. o->box(FL_UP_BOX);
  595. o->color(FL_BACKGROUND_COLOR);
  596. o->selection_color(FL_INACTIVE_COLOR);
  597. o->labeltype(FL_NORMAL_LABEL);
  598. o->labelfont(0);
  599. o->labelsize(10);
  600. o->labelcolor(FL_FOREGROUND_COLOR);
  601. o->minimum(-64);
  602. o->maximum(63);
  603. o->step(1);
  604. o->textfont(1);
  605. o->textsize(11);
  606. o->align(Fl_Align(FL_ALIGN_TOP));
  607. o->when(FL_WHEN_CHANGED);
  608. o->init("FMcoarsedetune");
  609. o->lstep(10);
  610. } // Fl_Osc_Counter* o
  611. { Fl_Osc_Counter* o = new Fl_Osc_Counter(625, 295, 45, 15, "Octave");
  612. o->tooltip("Octave");
  613. o->type(1);
  614. o->box(FL_UP_BOX);
  615. o->color(FL_BACKGROUND_COLOR);
  616. o->selection_color(FL_INACTIVE_COLOR);
  617. o->labeltype(FL_NORMAL_LABEL);
  618. o->labelfont(0);
  619. o->labelsize(10);
  620. o->labelcolor(FL_FOREGROUND_COLOR);
  621. o->minimum(-8);
  622. o->maximum(7);
  623. o->step(1);
  624. o->textfont(1);
  625. o->textsize(11);
  626. o->align(Fl_Align(FL_ALIGN_TOP));
  627. o->when(FL_WHEN_CHANGED);
  628. o->init("FMoctave");
  629. } // Fl_Osc_Counter* o
  630. { Fl_Osc_Slider* o = new Fl_Osc_Slider(590, 245, 155, 15);
  631. o->tooltip("Fine Detune (cents)");
  632. o->type(5);
  633. o->box(FL_NO_BOX);
  634. o->color(FL_BACKGROUND_COLOR);
  635. o->selection_color(FL_BACKGROUND_COLOR);
  636. o->labeltype(FL_NORMAL_LABEL);
  637. o->labelfont(0);
  638. o->labelsize(14);
  639. o->labelcolor(FL_FOREGROUND_COLOR);
  640. o->minimum(-8192);
  641. o->maximum(8191);
  642. o->step(1);
  643. o->callback((Fl_Callback*)cb_);
  644. o->align(Fl_Align(FL_ALIGN_BOTTOM));
  645. o->when(FL_WHEN_CHANGED);
  646. o->init("PFMDetune", 'i');
  647. } // Fl_Osc_Slider* o
  648. { Fl_Osc_Output* o = fmdetunevalueoutput = new Fl_Osc_Output(540, 247, 45, 18, "Detune");
  649. fmdetunevalueoutput->box(FL_NO_BOX);
  650. fmdetunevalueoutput->color(FL_BACKGROUND_COLOR);
  651. fmdetunevalueoutput->selection_color(FL_BACKGROUND_COLOR);
  652. fmdetunevalueoutput->labeltype(FL_NORMAL_LABEL);
  653. fmdetunevalueoutput->labelfont(0);
  654. fmdetunevalueoutput->labelsize(8);
  655. fmdetunevalueoutput->labelcolor(FL_FOREGROUND_COLOR);
  656. fmdetunevalueoutput->minimum(-5000);
  657. fmdetunevalueoutput->maximum(5000);
  658. fmdetunevalueoutput->step(0.01);
  659. fmdetunevalueoutput->textfont(1);
  660. fmdetunevalueoutput->textsize(8);
  661. fmdetunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  662. fmdetunevalueoutput->when(FL_WHEN_CHANGED);
  663. o->init("FMdetunevalue");
  664. } // Fl_Osc_Output* fmdetunevalueoutput
  665. { Fl_Osc_Choice* o = new Fl_Osc_Choice(540, 294, 75, 15, "Detune Type");
  666. o->box(FL_UP_BOX);
  667. o->down_box(FL_BORDER_BOX);
  668. o->color(FL_BACKGROUND_COLOR);
  669. o->selection_color(FL_SELECTION_COLOR);
  670. o->labeltype(FL_NORMAL_LABEL);
  671. o->labelfont(0);
  672. o->labelsize(10);
  673. o->labelcolor(FL_FOREGROUND_COLOR);
  674. o->textfont(1);
  675. o->textsize(10);
  676. o->callback((Fl_Callback*)cb_Detune);
  677. o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  678. o->when(FL_WHEN_RELEASE);
  679. o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");
  680. o->init("PFMDetuneType");
  681. } // Fl_Osc_Choice* o
  682. { Fl_Osc_Check* o = new Fl_Osc_Check(683, 266, 55, 15, "440Hz");
  683. o->tooltip("Set the modulator base frequency to 440Hz");
  684. o->box(FL_NO_BOX);
  685. o->down_box(FL_DOWN_BOX);
  686. o->color(FL_BACKGROUND_COLOR);
  687. o->selection_color(FL_FOREGROUND_COLOR);
  688. o->labeltype(FL_NORMAL_LABEL);
  689. o->labelfont(1);
  690. o->labelsize(11);
  691. o->labelcolor(FL_FOREGROUND_COLOR);
  692. o->callback((Fl_Callback*)cb_440Hz);
  693. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  694. o->when(FL_WHEN_RELEASE);
  695. o->init("PFMFixedFreq");
  696. } // Fl_Osc_Check* o
  697. modfrequency->end();
  698. } // Fl_Group* modfrequency
  699. { Fl_Group* o = new Fl_Group(535, 60, 220, 160, "Mod.AMPLITUDE");
  700. o->box(FL_UP_FRAME);
  701. o->labeltype(FL_EMBOSSED_LABEL);
  702. o->labelfont(1);
  703. o->labelsize(13);
  704. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  705. { Fl_Osc_VSlider* o = new Fl_Osc_VSlider(540, 80, 155, 15, "Vol");
  706. o->tooltip("Volume");
  707. o->type(5);
  708. o->box(FL_NO_BOX);
  709. o->color(FL_BACKGROUND_COLOR);
  710. o->selection_color(FL_BACKGROUND_COLOR);
  711. o->labeltype(FL_NORMAL_LABEL);
  712. o->labelfont(0);
  713. o->labelsize(11);
  714. o->labelcolor(FL_FOREGROUND_COLOR);
  715. o->maximum(127);
  716. o->step(1);
  717. o->align(Fl_Align(FL_ALIGN_RIGHT));
  718. o->when(FL_WHEN_CHANGED);
  719. o->init("PFMVolume", 'i');o->reset_value=90;
  720. } // Fl_Osc_VSlider* o
  721. { Fl_Osc_VSlider* o = new Fl_Osc_VSlider(540, 100, 160, 15, "V.Sns");
  722. o->tooltip("Velocity Sensing Function (rightmost to disable)");
  723. o->type(5);
  724. o->box(FL_NO_BOX);
  725. o->color(FL_BACKGROUND_COLOR);
  726. o->selection_color(FL_BACKGROUND_COLOR);
  727. o->labeltype(FL_NORMAL_LABEL);
  728. o->labelfont(0);
  729. o->labelsize(11);
  730. o->labelcolor(FL_FOREGROUND_COLOR);
  731. o->maximum(127);
  732. o->step(1);
  733. o->align(Fl_Align(FL_ALIGN_RIGHT));
  734. o->when(FL_WHEN_CHANGED);
  735. o->init("PFMVelocityScaleFunction");o->reset_value=64;
  736. } // Fl_Osc_VSlider* o
  737. { EnvelopeUI* o = voiceFMampenvgroup = new EnvelopeUI(540, 140, 205, 70, "ADSynth Modulator - Amplitude Envelope");
  738. voiceFMampenvgroup->box(FL_FLAT_BOX);
  739. voiceFMampenvgroup->color((Fl_Color)51);
  740. voiceFMampenvgroup->selection_color(FL_BACKGROUND_COLOR);
  741. voiceFMampenvgroup->labeltype(FL_NORMAL_LABEL);
  742. voiceFMampenvgroup->labelfont(0);
  743. voiceFMampenvgroup->labelsize(14);
  744. voiceFMampenvgroup->labelcolor(FL_FOREGROUND_COLOR);
  745. voiceFMampenvgroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  746. voiceFMampenvgroup->when(FL_WHEN_RELEASE);
  747. o->init(//pars->VoicePar[nvoice].FMAmpEnvelope,
  748. ENV_ADSR, osc_i, loc, "FMAmpEnvelope/");
  749. voiceFMampenvgroup->end();
  750. } // EnvelopeUI* voiceFMampenvgroup
  751. { Fl_Osc_Check* o = new Fl_Osc_Check(545, 150, 50, 10, "On");
  752. o->tooltip("Forced Release");
  753. o->box(FL_NO_BOX);
  754. o->down_box(FL_DOWN_BOX);
  755. o->color(FL_BACKGROUND_COLOR);
  756. o->selection_color(FL_FOREGROUND_COLOR);
  757. o->labeltype(FL_NORMAL_LABEL);
  758. o->labelfont(1);
  759. o->labelsize(11);
  760. o->labelcolor(FL_FOREGROUND_COLOR);
  761. o->callback((Fl_Callback*)cb_On1);
  762. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  763. o->when(FL_WHEN_RELEASE);
  764. o->init("PFMAmpEnvelopeEnabled");
  765. } // Fl_Osc_Check* o
  766. { Fl_Osc_VSlider* o = new Fl_Osc_VSlider(540, 120, 160, 15, "F.Damp");
  767. o->tooltip("Modulator Damp at Higher frequency");
  768. o->type(5);
  769. o->box(FL_NO_BOX);
  770. o->color(FL_BACKGROUND_COLOR);
  771. o->selection_color(FL_BACKGROUND_COLOR);
  772. o->labeltype(FL_NORMAL_LABEL);
  773. o->labelfont(0);
  774. o->labelsize(11);
  775. o->labelcolor(FL_FOREGROUND_COLOR);
  776. o->minimum(-64);
  777. o->maximum(63);
  778. o->step(1);
  779. o->align(Fl_Align(FL_ALIGN_RIGHT));
  780. o->when(FL_WHEN_CHANGED);
  781. o->init("PFMVolumeDamp",'i');
  782. } // Fl_Osc_VSlider* o
  783. o->end();
  784. } // Fl_Group* o
  785. { modoscil = new Fl_Group(535, 390, 220, 195);
  786. { Fl_Osc_Group* o = fmoscil = new Fl_Osc_Group(535, 445, 220, 140);
  787. fmoscil->box(FL_THIN_DOWN_BOX);
  788. fmoscil->color(FL_GRAY0);
  789. fmoscil->selection_color((Fl_Color)71);
  790. fmoscil->labeltype(FL_NORMAL_LABEL);
  791. fmoscil->labelfont(0);
  792. fmoscil->labelsize(14);
  793. fmoscil->labelcolor((Fl_Color)179);
  794. fmoscil->align(Fl_Align(FL_ALIGN_TOP));
  795. fmoscil->when(FL_WHEN_RELEASE);
  796. fmoscil->base = loc; fmoscil->ext="FMSmp/";fmoscil->osc = osc_i;fmoscil->begin();
  797. oscFM=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
  798. //int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;
  799. oscFM->parent(fmoscil);oscFM->init(false);oscFM->update();fmoscil->end();
  800. fmoscil->end();
  801. } // Fl_Osc_Group* fmoscil
  802. { Fl_Box* o = new Fl_Box(535, 393, 155, 20, "Mod.Oscillator");
  803. o->labelfont(1);
  804. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  805. } // Fl_Box* o
  806. { Fl_Button* o = changeFMoscilbutton = new Fl_Button(700, 398, 55, 15, "Change");
  807. changeFMoscilbutton->box(FL_THIN_UP_BOX);
  808. changeFMoscilbutton->labelfont(1);
  809. changeFMoscilbutton->labelsize(11);
  810. changeFMoscilbutton->callback((Fl_Callback*)cb_changeFMoscilbutton);
  811. (void)o;/*if (extFMoscil->value()>=0) o->labelcolor(FL_BLUE);*/
  812. } // Fl_Button* changeFMoscilbutton
  813. { PhaseSlider* o = new PhaseSlider(645, 425, 105, 15, "Phase");
  814. o->type(5);
  815. o->box(FL_NO_BOX);
  816. o->color(FL_BACKGROUND_COLOR);
  817. o->selection_color(FL_BACKGROUND_COLOR);
  818. o->labeltype(FL_NORMAL_LABEL);
  819. o->labelfont(0);
  820. o->labelsize(10);
  821. o->labelcolor(FL_FOREGROUND_COLOR);
  822. o->minimum(-63);
  823. o->maximum(64);
  824. o->step(1);
  825. o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  826. o->when(FL_WHEN_CHANGED);
  827. o->init("PFMoscilphase", 'i'); o->set_scope(oscFM);
  828. } // PhaseSlider* o
  829. { Fl_Osc_Choice* o = extFMoscil = new Fl_Osc_Choice(560, 420, 75, 20, "Use");
  830. extFMoscil->box(FL_UP_BOX);
  831. extFMoscil->down_box(FL_BORDER_BOX);
  832. extFMoscil->color(FL_BACKGROUND_COLOR);
  833. extFMoscil->selection_color(FL_SELECTION_COLOR);
  834. extFMoscil->labeltype(FL_NORMAL_LABEL);
  835. extFMoscil->labelfont(0);
  836. extFMoscil->labelsize(10);
  837. extFMoscil->labelcolor(FL_FOREGROUND_COLOR);
  838. extFMoscil->textfont(1);
  839. extFMoscil->textsize(10);
  840. extFMoscil->callback((Fl_Callback*)cb_extFMoscil);
  841. extFMoscil->align(Fl_Align(FL_ALIGN_LEFT));
  842. extFMoscil->when(FL_WHEN_RELEASE);
  843. o->add("Internal");
  844. char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtM.%2d",i+1);o->add(tmp);};
  845. o->init("PextFMoscil",-1);
  846. } // Fl_Osc_Choice* extFMoscil
  847. modoscil->end();
  848. } // Fl_Group* modoscil
  849. { Fl_Osc_Choice* o = extMod = new Fl_Osc_Choice(635, 40, 85, 20, "External Mod.");
  850. extMod->box(FL_UP_BOX);
  851. extMod->down_box(FL_BORDER_BOX);
  852. extMod->color(FL_BACKGROUND_COLOR);
  853. extMod->selection_color(FL_SELECTION_COLOR);
  854. extMod->labeltype(FL_NORMAL_LABEL);
  855. extMod->labelfont(0);
  856. extMod->labelsize(10);
  857. extMod->labelcolor(FL_FOREGROUND_COLOR);
  858. extMod->textfont(1);
  859. extMod->textsize(10);
  860. extMod->callback((Fl_Callback*)cb_extMod);
  861. extMod->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  862. extMod->when(FL_WHEN_RELEASE);
  863. o->add("OFF");
  864. char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtMod.%2d",i+1);o->add(tmp);};
  865. o->init("PFMVoice", -1);
  866. if ((int) o->value() != 0) {modoscil->deactivate();modfrequency->deactivate();}
  867. } // Fl_Osc_Choice* extMod
  868. voiceFMparametersgroup->end();
  869. } // Fl_Group* voiceFMparametersgroup
  870. { Fl_Osc_Choice* o = mod_type = new Fl_Osc_Choice(535, 40, 80, 20, "Type:");
  871. mod_type->box(FL_UP_BOX);
  872. mod_type->down_box(FL_BORDER_BOX);
  873. mod_type->color(FL_BACKGROUND_COLOR);
  874. mod_type->selection_color(FL_SELECTION_COLOR);
  875. mod_type->labeltype(FL_NORMAL_LABEL);
  876. mod_type->labelfont(0);
  877. mod_type->labelsize(14);
  878. mod_type->labelcolor(FL_FOREGROUND_COLOR);
  879. mod_type->callback((Fl_Callback*)cb_mod_type);
  880. mod_type->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  881. mod_type->when(FL_WHEN_RELEASE);
  882. mod_type->menu(menu_mod_type);
  883. o->init("PFMEnabled");
  884. } // Fl_Osc_Choice* mod_type
  885. { Fl_Group* o = new Fl_Group(5, 265, 525, 120, "FREQUENCY");
  886. o->box(FL_UP_FRAME);
  887. o->labeltype(FL_EMBOSSED_LABEL);
  888. o->labelfont(1);
  889. o->labelsize(13);
  890. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  891. { EnvelopeUI* o = voicefreqenvgroup = new EnvelopeUI(10, 305, 205, 70, "ADSynth Voice - Frequency Envelope");
  892. voicefreqenvgroup->box(FL_FLAT_BOX);
  893. voicefreqenvgroup->color((Fl_Color)51);
  894. voicefreqenvgroup->selection_color(FL_BACKGROUND_COLOR);
  895. voicefreqenvgroup->labeltype(FL_NORMAL_LABEL);
  896. voicefreqenvgroup->labelfont(0);
  897. voicefreqenvgroup->labelsize(14);
  898. voicefreqenvgroup->labelcolor(FL_FOREGROUND_COLOR);
  899. voicefreqenvgroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  900. voicefreqenvgroup->when(FL_WHEN_RELEASE);
  901. o->init(//pars->VoicePar[nvoice].FreqEnvelope,
  902. ENV_ASR, osc_i, loc, "FreqEnvelope/");
  903. voicefreqenvgroup->end();
  904. } // EnvelopeUI* voicefreqenvgroup
  905. { Fl_Osc_Check* o = new Fl_Osc_Check(15, 310, 50, 10, "On");
  906. o->tooltip("Forced Release");
  907. o->box(FL_NO_BOX);
  908. o->down_box(FL_DOWN_BOX);
  909. o->color(FL_BACKGROUND_COLOR);
  910. o->selection_color(FL_FOREGROUND_COLOR);
  911. o->labeltype(FL_NORMAL_LABEL);
  912. o->labelfont(1);
  913. o->labelsize(11);
  914. o->labelcolor(FL_FOREGROUND_COLOR);
  915. o->callback((Fl_Callback*)cb_On2);
  916. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  917. o->when(FL_WHEN_RELEASE);
  918. o->init("PFreqEnvelopeEnabled");
  919. } // Fl_Osc_Check* o
  920. { LFOUI* o = voicefreqlfogroup = new LFOUI(220, 305, 230, 70, "Frequency LFO ");
  921. voicefreqlfogroup->box(FL_FLAT_BOX);
  922. voicefreqlfogroup->color(FL_DARK1);
  923. voicefreqlfogroup->selection_color(FL_BACKGROUND_COLOR);
  924. voicefreqlfogroup->labeltype(FL_NORMAL_LABEL);
  925. voicefreqlfogroup->labelfont(0);
  926. voicefreqlfogroup->labelsize(14);
  927. voicefreqlfogroup->labelcolor(FL_FOREGROUND_COLOR);
  928. voicefreqlfogroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  929. voicefreqlfogroup->when(FL_WHEN_RELEASE);
  930. o->init(osc_i, loc,"FreqLfo/");
  931. voicefreqlfogroup->end();
  932. } // LFOUI* voicefreqlfogroup
  933. { Fl_Osc_Check* o = new Fl_Osc_Check(225, 311, 55, 10, "On");
  934. o->tooltip("Forced Release");
  935. o->box(FL_NO_BOX);
  936. o->down_box(FL_DOWN_BOX);
  937. o->color(FL_BACKGROUND_COLOR);
  938. o->selection_color(FL_FOREGROUND_COLOR);
  939. o->labeltype(FL_NORMAL_LABEL);
  940. o->labelfont(1);
  941. o->labelsize(11);
  942. o->labelcolor(FL_FOREGROUND_COLOR);
  943. o->callback((Fl_Callback*)cb_On3);
  944. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  945. o->when(FL_WHEN_RELEASE);
  946. o->init("PFreqLfoEnabled");
  947. } // Fl_Osc_Check* o
  948. { Fl_Osc_Counter* o = new Fl_Osc_Counter(470, 285, 45, 15, "Octave");
  949. o->tooltip("Octave");
  950. o->type(1);
  951. o->box(FL_UP_BOX);
  952. o->color(FL_BACKGROUND_COLOR);
  953. o->selection_color(FL_INACTIVE_COLOR);
  954. o->labeltype(FL_NORMAL_LABEL);
  955. o->labelfont(0);
  956. o->labelsize(10);
  957. o->labelcolor(FL_FOREGROUND_COLOR);
  958. o->minimum(-8);
  959. o->maximum(7);
  960. o->step(1);
  961. o->textfont(1);
  962. o->textsize(11);
  963. o->align(Fl_Align(FL_ALIGN_TOP));
  964. o->when(FL_WHEN_CHANGED);
  965. o->init("octave");
  966. } // Fl_Osc_Counter* o
  967. { Fl_Osc_Counter* o = new Fl_Osc_Counter(455, 355, 60, 20, "Coarse Det.");
  968. o->tooltip("Coarse Detune");
  969. o->box(FL_UP_BOX);
  970. o->color(FL_BACKGROUND_COLOR);
  971. o->selection_color(FL_INACTIVE_COLOR);
  972. o->labeltype(FL_NORMAL_LABEL);
  973. o->labelfont(0);
  974. o->labelsize(10);
  975. o->labelcolor(FL_FOREGROUND_COLOR);
  976. o->minimum(-64);
  977. o->maximum(63);
  978. o->step(1);
  979. o->textfont(1);
  980. o->textsize(11);
  981. o->align(Fl_Align(FL_ALIGN_TOP));
  982. o->when(FL_WHEN_CHANGED);
  983. o->init("coarsedetune");
  984. o->lstep(10);
  985. } // Fl_Osc_Counter* o
  986. { Fl_Osc_Dial* o = bendadjdial = new Fl_Osc_Dial(60, 270, 15, 15, "Bend");
  987. bendadjdial->tooltip("How the frequency varies according to the pitch wheel");
  988. bendadjdial->box(FL_ROUND_UP_BOX);
  989. bendadjdial->color(FL_BACKGROUND_COLOR);
  990. bendadjdial->selection_color(FL_INACTIVE_COLOR);
  991. bendadjdial->labeltype(FL_NORMAL_LABEL);
  992. bendadjdial->labelfont(0);
  993. bendadjdial->labelsize(10);
  994. bendadjdial->labelcolor(FL_FOREGROUND_COLOR);
  995. bendadjdial->minimum(-64);
  996. bendadjdial->maximum(63);
  997. bendadjdial->step(1);
  998. bendadjdial->align(Fl_Align(FL_ALIGN_RIGHT));
  999. bendadjdial->when(FL_WHEN_CHANGED);
  1000. o->init("PBendAdjust");o->reset_value=24;o->set_transform([](float x){return x/24.0f;});o->set_rounding(2);
  1001. } // Fl_Osc_Dial* bendadjdial
  1002. { Fl_Osc_Dial* o = offsethzdial = new Fl_Osc_Dial(110, 270, 15, 15, "Offset");
  1003. offsethzdial->tooltip("Offset of frequency in Hz");
  1004. offsethzdial->box(FL_ROUND_UP_BOX);
  1005. offsethzdial->color(FL_BACKGROUND_COLOR);
  1006. offsethzdial->selection_color(FL_INACTIVE_COLOR);
  1007. offsethzdial->labeltype(FL_NORMAL_LABEL);
  1008. offsethzdial->labelfont(0);
  1009. offsethzdial->labelsize(10);
  1010. offsethzdial->labelcolor(FL_FOREGROUND_COLOR);
  1011. offsethzdial->minimum(-64);
  1012. offsethzdial->maximum(63);
  1013. offsethzdial->step(1);
  1014. offsethzdial->align(Fl_Align(FL_ALIGN_RIGHT));
  1015. offsethzdial->when(FL_WHEN_CHANGED);
  1016. o->init("POffsetHz"); o->set_rounding(2); o->set_transform([](float x){x/=64; return 15*(x*sqrtf(fabsf(x)));});
  1017. } // Fl_Osc_Dial* offsethzdial
  1018. { Fl_Osc_Slider* o = new Fl_Osc_Slider(58, 287, 392, 13);
  1019. o->tooltip("Fine Detune (cents)");
  1020. o->type(5);
  1021. o->box(FL_NO_BOX);
  1022. o->color(FL_BACKGROUND_COLOR);
  1023. o->selection_color(FL_BACKGROUND_COLOR);
  1024. o->labeltype(FL_NORMAL_LABEL);
  1025. o->labelfont(0);
  1026. o->labelsize(14);
  1027. o->labelcolor(FL_FOREGROUND_COLOR);
  1028. o->minimum(-8192);
  1029. o->maximum(8191);
  1030. o->step(1);
  1031. o->callback((Fl_Callback*)cb_1);
  1032. o->align(Fl_Align(FL_ALIGN_BOTTOM));
  1033. o->when(FL_WHEN_CHANGED);
  1034. o->init("PDetune", 'i');
  1035. } // Fl_Osc_Slider* o
  1036. { Fl_Osc_Output* o = detunevalueoutput = new Fl_Osc_Output(10, 287, 45, 15, "Detune");
  1037. detunevalueoutput->box(FL_NO_BOX);
  1038. detunevalueoutput->color(FL_BACKGROUND_COLOR);
  1039. detunevalueoutput->selection_color(FL_BACKGROUND_COLOR);
  1040. detunevalueoutput->labeltype(FL_NORMAL_LABEL);
  1041. detunevalueoutput->labelfont(0);
  1042. detunevalueoutput->labelsize(10);
  1043. detunevalueoutput->labelcolor(FL_FOREGROUND_COLOR);
  1044. detunevalueoutput->minimum(-5000);
  1045. detunevalueoutput->maximum(5000);
  1046. detunevalueoutput->step(0.01);
  1047. detunevalueoutput->textfont(1);
  1048. detunevalueoutput->textsize(10);
  1049. detunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1050. detunevalueoutput->when(FL_WHEN_CHANGED);
  1051. o->init("detunevalue");
  1052. } // Fl_Osc_Output* detunevalueoutput
  1053. { Fl_Osc_Check* o = new Fl_Osc_Check(345, 268, 55, 15, "440Hz");
  1054. o->tooltip("Set the voice base frequency to 440Hz");
  1055. o->box(FL_NO_BOX);
  1056. o->down_box(FL_DOWN_BOX);
  1057. o->color(FL_BACKGROUND_COLOR);
  1058. o->selection_color(FL_FOREGROUND_COLOR);
  1059. o->labeltype(FL_NORMAL_LABEL);
  1060. o->labelfont(1);
  1061. o->labelsize(11);
  1062. o->labelcolor(FL_FOREGROUND_COLOR);
  1063. o->callback((Fl_Callback*)cb_440Hz1);
  1064. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  1065. o->when(FL_WHEN_RELEASE);
  1066. o->init("Pfixedfreq");
  1067. } // Fl_Osc_Check* o
  1068. { Fl_Osc_Dial* o = fixedfreqetdial = new Fl_Osc_Dial(405, 270, 15, 15, "Eq.T.");
  1069. fixedfreqetdial->tooltip("How the frequency varies according to the keyboard (leftmost for fixed freque\
  1070. ncy)");
  1071. fixedfreqetdial->box(FL_ROUND_UP_BOX);
  1072. fixedfreqetdial->color(FL_BACKGROUND_COLOR);
  1073. fixedfreqetdial->selection_color(FL_INACTIVE_COLOR);
  1074. fixedfreqetdial->labeltype(FL_NORMAL_LABEL);
  1075. fixedfreqetdial->labelfont(0);
  1076. fixedfreqetdial->labelsize(10);
  1077. fixedfreqetdial->labelcolor(FL_FOREGROUND_COLOR);
  1078. fixedfreqetdial->maximum(127);
  1079. fixedfreqetdial->step(1);
  1080. fixedfreqetdial->align(Fl_Align(FL_ALIGN_RIGHT));
  1081. fixedfreqetdial->when(FL_WHEN_CHANGED);
  1082. o->init("PfixedfreqET");
  1083. } // Fl_Osc_Dial* fixedfreqetdial
  1084. { Fl_Osc_Choice* o = new Fl_Osc_Choice(455, 320, 70, 15, "Detune Type");
  1085. o->box(FL_UP_BOX);
  1086. o->down_box(FL_BORDER_BOX);
  1087. o->color(FL_BACKGROUND_COLOR);
  1088. o->selection_color(FL_SELECTION_COLOR);
  1089. o->labeltype(FL_NORMAL_LABEL);
  1090. o->labelfont(0);
  1091. o->labelsize(10);
  1092. o->labelcolor(FL_FOREGROUND_COLOR);
  1093. o->textfont(1);
  1094. o->textsize(10);
  1095. o->callback((Fl_Callback*)cb_Detune1);
  1096. o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1097. o->when(FL_WHEN_RELEASE);
  1098. o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");
  1099. o->init("PDetuneType");
  1100. } // Fl_Osc_Choice* o
  1101. o->end();
  1102. } // Fl_Group* o
  1103. { Fl_Osc_Group* o = voiceoscil = new Fl_Osc_Group(80, 390, 445, 145);
  1104. voiceoscil->box(FL_THIN_DOWN_BOX);
  1105. voiceoscil->color(FL_GRAY0);
  1106. voiceoscil->selection_color((Fl_Color)71);
  1107. voiceoscil->labeltype(FL_NORMAL_LABEL);
  1108. voiceoscil->labelfont(0);
  1109. voiceoscil->labelsize(14);
  1110. voiceoscil->labelcolor((Fl_Color)179);
  1111. voiceoscil->align(Fl_Align(FL_ALIGN_TOP));
  1112. voiceoscil->when(FL_WHEN_RELEASE);
  1113. voiceoscil->base = loc;voiceoscil->ext="OscilSmp/";voiceoscil->begin();//int nv=nvoice; if (extoscil->value()>=0) nv=extoscil->value();
  1114. osc=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
  1115. voiceoscil->osc = osc_i;
  1116. osc->parent(voiceoscil); osc->init(false);voiceoscil->end();
  1117. voiceoscil->end();
  1118. } // Fl_Osc_Group* voiceoscil
  1119. { changevoiceoscilbutton = new Fl_Button(5, 490, 65, 20, "Change");
  1120. changevoiceoscilbutton->box(FL_THIN_UP_BOX);
  1121. changevoiceoscilbutton->labelfont(1);
  1122. changevoiceoscilbutton->labelsize(11);
  1123. changevoiceoscilbutton->callback((Fl_Callback*)cb_changevoiceoscilbutton);
  1124. } // Fl_Button* changevoiceoscilbutton
  1125. { Fl_Box* o = new Fl_Box(5, 390, 75, 35, "Voice Oscillator");
  1126. o->labelfont(1);
  1127. o->labelsize(12);
  1128. o->align(Fl_Align(FL_ALIGN_WRAP));
  1129. } // Fl_Box* o
  1130. { PhaseSlider* o = new PhaseSlider(10, 435, 65, 10, "Phase");
  1131. o->type(5);
  1132. o->box(FL_NO_BOX);
  1133. o->color(FL_BACKGROUND_COLOR);
  1134. o->selection_color(FL_BACKGROUND_COLOR);
  1135. o->labeltype(FL_NORMAL_LABEL);
  1136. o->labelfont(0);
  1137. o->labelsize(10);
  1138. o->labelcolor(FL_FOREGROUND_COLOR);
  1139. o->minimum(-63);
  1140. o->maximum(64);
  1141. o->step(1);
  1142. o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1143. o->when(FL_WHEN_CHANGED);
  1144. o->init("Poscilphase", 'i'); o->set_scope(osc);
  1145. } // PhaseSlider* o
  1146. { Fl_Osc_Check* o = new Fl_Osc_Check(210, 5, 35, 35, "R.");
  1147. o->tooltip("Resonance On/Off");
  1148. o->box(FL_THIN_UP_BOX);
  1149. o->down_box(FL_DOWN_BOX);
  1150. o->color(FL_BACKGROUND_COLOR);
  1151. o->selection_color(FL_FOREGROUND_COLOR);
  1152. o->labeltype(FL_NORMAL_LABEL);
  1153. o->labelfont(1);
  1154. o->labelsize(11);
  1155. o->labelcolor(FL_FOREGROUND_COLOR);
  1156. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  1157. o->when(FL_WHEN_RELEASE);
  1158. o->init("Presonance");
  1159. } // Fl_Osc_Check* o
  1160. { Fl_Osc_Choice* o = extoscil = new Fl_Osc_Choice(5, 470, 65, 15, "Use Oscil.");
  1161. extoscil->box(FL_UP_BOX);
  1162. extoscil->down_box(FL_BORDER_BOX);
  1163. extoscil->color(FL_BACKGROUND_COLOR);
  1164. extoscil->selection_color(FL_SELECTION_COLOR);
  1165. extoscil->labeltype(FL_NORMAL_LABEL);
  1166. extoscil->labelfont(0);
  1167. extoscil->labelsize(10);
  1168. extoscil->labelcolor(FL_FOREGROUND_COLOR);
  1169. extoscil->textfont(1);
  1170. extoscil->textsize(10);
  1171. extoscil->callback((Fl_Callback*)cb_extoscil);
  1172. extoscil->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1173. extoscil->when(FL_WHEN_RELEASE);
  1174. o->add("Internal");
  1175. char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"Ext.%2d",i+1);o->add(tmp);};
  1176. o->init("Pextoscil",-1);
  1177. } // Fl_Osc_Choice* extoscil
  1178. { Fl_Group* o = new Fl_Group(5, 540, 520, 50);
  1179. o->box(FL_UP_FRAME);
  1180. { Fl_Osc_Dial* o = new Fl_Osc_Dial(364, 555, 25, 25, "Vibrato");
  1181. o->tooltip("Vibrato");
  1182. o->box(FL_ROUND_UP_BOX);
  1183. o->color(FL_BACKGROUND_COLOR);
  1184. o->selection_color(FL_INACTIVE_COLOR);
  1185. o->labeltype(FL_NORMAL_LABEL);
  1186. o->labelfont(0);
  1187. o->labelsize(10);
  1188. o->labelcolor(FL_FOREGROUND_COLOR);
  1189. o->maximum(127);
  1190. o->step(1);
  1191. o->align(Fl_Align(FL_ALIGN_TOP));
  1192. o->when(FL_WHEN_CHANGED);
  1193. o->init("Unison_vibratto");o->reset_value=64;
  1194. } // Fl_Osc_Dial* o
  1195. { Fl_Osc_Choice* o = new Fl_Osc_Choice(445, 560, 65, 15, "Invert");
  1196. o->tooltip("Phase Invert");
  1197. o->box(FL_UP_BOX);
  1198. o->down_box(FL_BORDER_BOX);
  1199. o->color(FL_BACKGROUND_COLOR);
  1200. o->selection_color(FL_SELECTION_COLOR);
  1201. o->labeltype(FL_NORMAL_LABEL);
  1202. o->labelfont(0);
  1203. o->labelsize(11);
  1204. o->labelcolor(FL_FOREGROUND_COLOR);
  1205. o->textfont(1);
  1206. o->textsize(10);
  1207. o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1208. o->when(FL_WHEN_RELEASE);
  1209. o->add("None");o->add("Random");char tmp[100];for (int i=2;i<=5;i++){snprintf(tmp,100,"%d %%",100/i);o->add(tmp);};
  1210. o->init("Unison_invert_phase");
  1211. } // Fl_Osc_Choice* o
  1212. { Fl_Osc_Slider* o = new Fl_Osc_Slider(95, 562, 125, 13, "Frequency Spread");
  1213. o->tooltip("Frequency Spread of the Unison");
  1214. o->type(5);
  1215. o->box(FL_NO_BOX);
  1216. o->color(FL_BACKGROUND_COLOR);
  1217. o->selection_color(FL_BACKGROUND_COLOR);
  1218. o->labeltype(FL_NORMAL_LABEL);
  1219. o->labelfont(0);
  1220. o->labelsize(12);
  1221. o->labelcolor(FL_FOREGROUND_COLOR);
  1222. o->maximum(127);
  1223. o->step(1);
  1224. o->value(64);
  1225. o->callback((Fl_Callback*)cb_Frequency);
  1226. o->align(Fl_Align(FL_ALIGN_TOP));
  1227. o->when(FL_WHEN_CHANGED);
  1228. o->init("Unison_frequency_spread", 'i');o->reset_value=60;
  1229. } // Fl_Osc_Slider* o
  1230. { Fl_Osc_Output* o = unisonspreadoutput = new Fl_Osc_Output(225, 560, 40, 15, "(cents)");
  1231. unisonspreadoutput->box(FL_NO_BOX);
  1232. unisonspreadoutput->color(FL_BACKGROUND_COLOR);
  1233. unisonspreadoutput->selection_color(FL_BACKGROUND_COLOR);
  1234. unisonspreadoutput->labeltype(FL_NORMAL_LABEL);
  1235. unisonspreadoutput->labelfont(0);
  1236. unisonspreadoutput->labelsize(10);
  1237. unisonspreadoutput->labelcolor(FL_FOREGROUND_COLOR);
  1238. unisonspreadoutput->maximum(1000);
  1239. unisonspreadoutput->step(0.1);
  1240. unisonspreadoutput->textfont(1);
  1241. unisonspreadoutput->textsize(10);
  1242. unisonspreadoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1243. unisonspreadoutput->when(FL_WHEN_CHANGED);
  1244. o->init("unisonFrequencySpreadCents");//o->value(pars->getUnisonFrequencySpreadCents(nvoice));
  1245. } // Fl_Osc_Output* unisonspreadoutput
  1246. { Fl_Osc_Dial* o = new Fl_Osc_Dial(406, 555, 25, 25, "V.speed");
  1247. o->tooltip("Vibrato Average Speed");
  1248. o->box(FL_ROUND_UP_BOX);
  1249. o->color(FL_BACKGROUND_COLOR);
  1250. o->selection_color(FL_INACTIVE_COLOR);
  1251. o->labeltype(FL_NORMAL_LABEL);
  1252. o->labelfont(0);
  1253. o->labelsize(10);
  1254. o->labelcolor(FL_FOREGROUND_COLOR);
  1255. o->maximum(127);
  1256. o->step(1);
  1257. o->align(Fl_Align(FL_ALIGN_TOP));
  1258. o->when(FL_WHEN_CHANGED);
  1259. o->init("Unison_vibratto_speed");o->reset_value=64;
  1260. } // Fl_Osc_Dial* o
  1261. { Fl_Osc_Dial* o = new Fl_Osc_Dial(280, 555, 25, 25, "Ph.rand");
  1262. o->tooltip("Phase randomness");
  1263. o->box(FL_ROUND_UP_BOX);
  1264. o->color(FL_BACKGROUND_COLOR);
  1265. o->selection_color(FL_INACTIVE_COLOR);
  1266. o->labeltype(FL_NORMAL_LABEL);
  1267. o->labelfont(0);
  1268. o->labelsize(10);
  1269. o->labelcolor(FL_FOREGROUND_COLOR);
  1270. o->maximum(127);
  1271. o->step(1);
  1272. o->align(Fl_Align(FL_ALIGN_TOP));
  1273. o->when(FL_WHEN_CHANGED);
  1274. o->init("Unison_phase_randomness");o->reset_value=127;
  1275. } // Fl_Osc_Dial* o
  1276. { Fl_Osc_Dial* o = new Fl_Osc_Dial(322, 555, 25, 25, "Stereo");
  1277. o->tooltip("Stereo Spread");
  1278. o->box(FL_ROUND_UP_BOX);
  1279. o->color(FL_BACKGROUND_COLOR);
  1280. o->selection_color(FL_INACTIVE_COLOR);
  1281. o->labeltype(FL_NORMAL_LABEL);
  1282. o->labelfont(0);
  1283. o->labelsize(10);
  1284. o->labelcolor(FL_FOREGROUND_COLOR);
  1285. o->maximum(127);
  1286. o->step(1);
  1287. o->align(Fl_Align(FL_ALIGN_TOP));
  1288. o->when(FL_WHEN_CHANGED);
  1289. o->init("Unison_stereo_spread");o->reset_value=64;
  1290. } // Fl_Osc_Dial* o
  1291. o->end();
  1292. } // Fl_Group* o
  1293. voicemodegroup->end();
  1294. } // Fl_Group* voicemodegroup
  1295. { Fl_Group* o = new Fl_Group(5, 40, 240, 220, "AMPLITUDE");
  1296. o->box(FL_UP_FRAME);
  1297. o->labeltype(FL_EMBOSSED_LABEL);
  1298. o->labelfont(1);
  1299. o->labelsize(13);
  1300. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  1301. { Fl_Osc_VSlider* o = new Fl_Osc_VSlider(10, 60, 160, 15, "Vol");
  1302. o->tooltip("Volume");
  1303. o->type(5);
  1304. o->box(FL_NO_BOX);
  1305. o->color(FL_BACKGROUND_COLOR);
  1306. o->selection_color(FL_BACKGROUND_COLOR);
  1307. o->labeltype(FL_NORMAL_LABEL);
  1308. o->labelfont(0);
  1309. o->labelsize(11);
  1310. o->labelcolor(FL_FOREGROUND_COLOR);
  1311. o->maximum(127);
  1312. o->step(1);
  1313. o->align(Fl_Align(FL_ALIGN_RIGHT));
  1314. o->when(FL_WHEN_CHANGED);
  1315. o->init("PVolume");o->reset_value=100;
  1316. } // Fl_Osc_VSlider* o
  1317. { Fl_Osc_VSlider* o = new Fl_Osc_VSlider(10, 80, 160, 15, "V.Sns");
  1318. o->tooltip("Velocity Sensing Function (rightmost to disable)");
  1319. o->type(5);
  1320. o->box(FL_NO_BOX);
  1321. o->color(FL_BACKGROUND_COLOR);
  1322. o->selection_color(FL_BACKGROUND_COLOR);
  1323. o->labeltype(FL_NORMAL_LABEL);
  1324. o->labelfont(0);
  1325. o->labelsize(11);
  1326. o->labelcolor(FL_FOREGROUND_COLOR);
  1327. o->maximum(127);
  1328. o->step(1);
  1329. o->align(Fl_Align(FL_ALIGN_RIGHT));
  1330. o->when(FL_WHEN_CHANGED);
  1331. o->init("PAmpVelocityScaleFunction");o->reset_value=127;
  1332. } // Fl_Osc_VSlider* o
  1333. { EnvelopeUI* o = voiceampenvgroup = new EnvelopeUI(10, 105, 205, 70, "ADSynth Voice - Amplitude Envelope");
  1334. voiceampenvgroup->box(FL_FLAT_BOX);
  1335. voiceampenvgroup->color((Fl_Color)51);
  1336. voiceampenvgroup->selection_color(FL_BACKGROUND_COLOR);
  1337. voiceampenvgroup->labeltype(FL_NORMAL_LABEL);
  1338. voiceampenvgroup->labelfont(0);
  1339. voiceampenvgroup->labelsize(14);
  1340. voiceampenvgroup->labelcolor(FL_FOREGROUND_COLOR);
  1341. voiceampenvgroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1342. voiceampenvgroup->when(FL_WHEN_RELEASE);
  1343. o->init(//pars->VoicePar[nvoice].AmpEnvelope,
  1344. ENV_ADSR, osc_i, loc, "AmpEnvelope/");
  1345. voiceampenvgroup->end();
  1346. } // EnvelopeUI* voiceampenvgroup
  1347. { Fl_Osc_Dial* o = new Fl_Osc_Dial(212, 65, 30, 30, "Pan");
  1348. o->tooltip("Panning (leftmost is Random)");
  1349. o->box(FL_ROUND_UP_BOX);
  1350. o->color(FL_BACKGROUND_COLOR);
  1351. o->selection_color(FL_INACTIVE_COLOR);
  1352. o->labeltype(FL_NORMAL_LABEL);
  1353. o->labelfont(0);
  1354. o->labelsize(10);
  1355. o->labelcolor(FL_FOREGROUND_COLOR);
  1356. o->maximum(127);
  1357. o->step(1);
  1358. o->align(Fl_Align(FL_ALIGN_BOTTOM));
  1359. o->when(FL_WHEN_CHANGED);
  1360. o->init("PPanning");o->reset_value=64;
  1361. } // Fl_Osc_Dial* o
  1362. { Fl_Osc_Check* o = new Fl_Osc_Check(15, 110, 50, 10, "On");
  1363. o->tooltip("Forced Release");
  1364. o->box(FL_NO_BOX);
  1365. o->down_box(FL_DOWN_BOX);
  1366. o->color(FL_BACKGROUND_COLOR);
  1367. o->selection_color(FL_FOREGROUND_COLOR);
  1368. o->labeltype(FL_NORMAL_LABEL);
  1369. o->labelfont(1);
  1370. o->labelsize(11);
  1371. o->labelcolor(FL_FOREGROUND_COLOR);
  1372. o->callback((Fl_Callback*)cb_On4);
  1373. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  1374. o->when(FL_WHEN_RELEASE);
  1375. o->init("PAmpEnvelopeEnabled");
  1376. } // Fl_Osc_Check* o
  1377. { LFOUI* o = voiceamplfogroup = new LFOUI(10, 180, 230, 75, "Amplitude LFO ");
  1378. voiceamplfogroup->box(FL_FLAT_BOX);
  1379. voiceamplfogroup->color(FL_DARK1);
  1380. voiceamplfogroup->selection_color(FL_BACKGROUND_COLOR);
  1381. voiceamplfogroup->labeltype(FL_NORMAL_LABEL);
  1382. voiceamplfogroup->labelfont(0);
  1383. voiceamplfogroup->labelsize(14);
  1384. voiceamplfogroup->labelcolor(FL_FOREGROUND_COLOR);
  1385. voiceamplfogroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1386. voiceamplfogroup->when(FL_WHEN_RELEASE);
  1387. o->init(osc_i, loc, "AmpLfo/");
  1388. voiceamplfogroup->end();
  1389. } // LFOUI* voiceamplfogroup
  1390. { Fl_Osc_Check* o = new Fl_Osc_Check(15, 185, 55, 10, "On");
  1391. o->tooltip("Forced Release");
  1392. o->box(FL_NO_BOX);
  1393. o->down_box(FL_DOWN_BOX);
  1394. o->color(FL_BACKGROUND_COLOR);
  1395. o->selection_color(FL_FOREGROUND_COLOR);
  1396. o->labeltype(FL_NORMAL_LABEL);
  1397. o->labelfont(1);
  1398. o->labelsize(11);
  1399. o->labelcolor(FL_FOREGROUND_COLOR);
  1400. o->callback((Fl_Callback*)cb_On5);
  1401. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  1402. o->when(FL_WHEN_RELEASE);
  1403. o->init("PAmpLfoEnabled");
  1404. } // Fl_Osc_Check* o
  1405. { Fl_Osc_Check* o = new Fl_Osc_Check(10, 45, 50, 10, "Minus");
  1406. o->box(FL_NO_BOX);
  1407. o->down_box(FL_DOWN_BOX);
  1408. o->color(FL_BACKGROUND_COLOR);
  1409. o->selection_color(FL_FOREGROUND_COLOR);
  1410. o->labeltype(FL_NORMAL_LABEL);
  1411. o->labelfont(1);
  1412. o->labelsize(10);
  1413. o->labelcolor(FL_FOREGROUND_COLOR);
  1414. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  1415. o->when(FL_WHEN_RELEASE);
  1416. o->init("PVolumeminus");
  1417. } // Fl_Osc_Check* o
  1418. o->end();
  1419. } // Fl_Group* o
  1420. { voicefiltergroup = new Fl_Group(245, 5, 285, 260, "FILTER");
  1421. voicefiltergroup->box(FL_UP_FRAME);
  1422. voicefiltergroup->labeltype(FL_EMBOSSED_LABEL);
  1423. voicefiltergroup->labelfont(1);
  1424. voicefiltergroup->labelsize(13);
  1425. voicefiltergroup->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  1426. { FilterUI* o = new FilterUI(250, 30, 275, 75, "ADsynth Voice - Filter");
  1427. o->box(FL_FLAT_BOX);
  1428. o->color(FL_LIGHT1);
  1429. o->selection_color(FL_BACKGROUND_COLOR);
  1430. o->labeltype(FL_NORMAL_LABEL);
  1431. o->labelfont(0);
  1432. o->labelsize(14);
  1433. o->labelcolor(FL_FOREGROUND_COLOR);
  1434. o->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1435. o->when(FL_WHEN_RELEASE);
  1436. o->init(loc + "PFilter", osc_i, loc, "VoiceFilter/");
  1437. o->end();
  1438. } // FilterUI* o
  1439. { EnvelopeUI* o = voicefilterenvgroup = new EnvelopeUI(250, 115, 275, 70, "ADSynth Voice - Filter Envelope");
  1440. voicefilterenvgroup->box(FL_FLAT_BOX);
  1441. voicefilterenvgroup->color((Fl_Color)51);
  1442. voicefilterenvgroup->selection_color(FL_BACKGROUND_COLOR);
  1443. voicefilterenvgroup->labeltype(FL_NORMAL_LABEL);
  1444. voicefilterenvgroup->labelfont(0);
  1445. voicefilterenvgroup->labelsize(14);
  1446. voicefilterenvgroup->labelcolor(FL_FOREGROUND_COLOR);
  1447. voicefilterenvgroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1448. voicefilterenvgroup->when(FL_WHEN_RELEASE);
  1449. o->init(
  1450. ENV_ADSR_FILTER, osc_i, loc, "FilterEnvelope/");
  1451. voicefilterenvgroup->end();
  1452. } // EnvelopeUI* voicefilterenvgroup
  1453. { Fl_Osc_Check* o = new Fl_Osc_Check(255, 119, 55, 10, "On");
  1454. o->tooltip("Forced Release");
  1455. o->box(FL_NO_BOX);
  1456. o->down_box(FL_DOWN_BOX);
  1457. o->color(FL_BACKGROUND_COLOR);
  1458. o->selection_color(FL_FOREGROUND_COLOR);
  1459. o->labeltype(FL_NORMAL_LABEL);
  1460. o->labelfont(1);
  1461. o->labelsize(11);
  1462. o->labelcolor(FL_FOREGROUND_COLOR);
  1463. o->callback((Fl_Callback*)cb_On6);
  1464. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  1465. o->when(FL_WHEN_RELEASE);
  1466. o->init("PFilterEnvelopeEnabled");
  1467. } // Fl_Osc_Check* o
  1468. { LFOUI* o = voicefilterlfogroup = new LFOUI(250, 190, 230, 70, "Filter LFO ");
  1469. voicefilterlfogroup->box(FL_FLAT_BOX);
  1470. voicefilterlfogroup->color(FL_DARK1);
  1471. voicefilterlfogroup->selection_color(FL_BACKGROUND_COLOR);
  1472. voicefilterlfogroup->labeltype(FL_NORMAL_LABEL);
  1473. voicefilterlfogroup->labelfont(0);
  1474. voicefilterlfogroup->labelsize(14);
  1475. voicefilterlfogroup->labelcolor(FL_FOREGROUND_COLOR);
  1476. voicefilterlfogroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1477. voicefilterlfogroup->when(FL_WHEN_RELEASE);
  1478. o->init(osc_i, loc, "FilterLfo/");
  1479. voicefilterlfogroup->end();
  1480. } // LFOUI* voicefilterlfogroup
  1481. { Fl_Osc_Check* o = new Fl_Osc_Check(255, 196, 55, 10, "On");
  1482. o->tooltip("Forced Release");
  1483. o->box(FL_NO_BOX);
  1484. o->down_box(FL_DOWN_BOX);
  1485. o->color(FL_BACKGROUND_COLOR);
  1486. o->selection_color(FL_FOREGROUND_COLOR);
  1487. o->labeltype(FL_NORMAL_LABEL);
  1488. o->labelfont(1);
  1489. o->labelsize(11);
  1490. o->labelcolor(FL_FOREGROUND_COLOR);
  1491. o->callback((Fl_Callback*)cb_On7);
  1492. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  1493. o->when(FL_WHEN_RELEASE);
  1494. o->init("PFilterLfoEnabled");
  1495. } // Fl_Osc_Check* o
  1496. voicefiltergroup->end();
  1497. } // Fl_Group* voicefiltergroup
  1498. { Fl_Group* o = activeVoiceID = new Fl_Group(5, 5, 55, 35, "01");
  1499. activeVoiceID->box(FL_THIN_UP_BOX);
  1500. activeVoiceID->labeltype(FL_EMBOSSED_LABEL);
  1501. activeVoiceID->labelfont(1);
  1502. activeVoiceID->labelsize(22);
  1503. activeVoiceID->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
  1504. char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));
  1505. activeVoiceID->end();
  1506. } // Fl_Group* activeVoiceID
  1507. { Fl_Osc_Choice* o = new Fl_Osc_Choice(5, 515, 65, 20);
  1508. o->tooltip("Oscillator Type (sound/noise)");
  1509. o->box(FL_UP_BOX);
  1510. o->down_box(FL_BORDER_BOX);
  1511. o->color(FL_BACKGROUND_COLOR);
  1512. o->selection_color(FL_SELECTION_COLOR);
  1513. o->labeltype(FL_NORMAL_LABEL);
  1514. o->labelfont(0);
  1515. o->labelsize(10);
  1516. o->labelcolor(FL_FOREGROUND_COLOR);
  1517. o->textfont(1);
  1518. o->textsize(10);
  1519. o->callback((Fl_Callback*)cb_2);
  1520. o->align(Fl_Align(FL_ALIGN_LEFT));
  1521. o->when(FL_WHEN_RELEASE);
  1522. o->menu(menu_);
  1523. o->init("Type");
  1524. } // Fl_Osc_Choice* o
  1525. { Fl_Osc_Check* o = bypassfiltercheckbutton = new Fl_Osc_Check(425, 10, 100, 20, "Bypass Global F.");
  1526. bypassfiltercheckbutton->box(FL_NO_BOX);
  1527. bypassfiltercheckbutton->down_box(FL_DOWN_BOX);
  1528. bypassfiltercheckbutton->color(FL_BACKGROUND_COLOR);
  1529. bypassfiltercheckbutton->selection_color(FL_FOREGROUND_COLOR);
  1530. bypassfiltercheckbutton->labeltype(FL_NORMAL_LABEL);
  1531. bypassfiltercheckbutton->labelfont(1);
  1532. bypassfiltercheckbutton->labelsize(10);
  1533. bypassfiltercheckbutton->labelcolor(FL_FOREGROUND_COLOR);
  1534. bypassfiltercheckbutton->align(Fl_Align(132|FL_ALIGN_INSIDE));
  1535. bypassfiltercheckbutton->when(FL_WHEN_RELEASE);
  1536. o->init("Pfilterbypass");
  1537. } // Fl_Osc_Check* bypassfiltercheckbutton
  1538. { Fl_Group* o = new Fl_Group(115, 5, 95, 35);
  1539. o->box(FL_THIN_UP_BOX);
  1540. { Fl_Osc_VSlider* o = new Fl_Osc_VSlider(120, 21, 84, 12, "Delay");
  1541. o->tooltip("Volume");
  1542. o->type(5);
  1543. o->box(FL_NO_BOX);
  1544. o->color(FL_BACKGROUND_COLOR);
  1545. o->selection_color(FL_BACKGROUND_COLOR);
  1546. o->labeltype(FL_NORMAL_LABEL);
  1547. o->labelfont(0);
  1548. o->labelsize(11);
  1549. o->labelcolor(FL_FOREGROUND_COLOR);
  1550. o->maximum(127);
  1551. o->step(1);
  1552. o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1553. o->when(FL_WHEN_CHANGED);
  1554. o->init("PDelay");
  1555. } // Fl_Osc_VSlider* o
  1556. o->end();
  1557. } // Fl_Group* o
  1558. { Fl_Osc_Check* o = new Fl_Osc_Check(250, 15, 60, 15, "On");
  1559. o->tooltip("Enable Filter");
  1560. o->box(FL_NO_BOX);
  1561. o->down_box(FL_DOWN_BOX);
  1562. o->color(FL_BACKGROUND_COLOR);
  1563. o->selection_color(FL_FOREGROUND_COLOR);
  1564. o->labeltype(FL_NORMAL_LABEL);
  1565. o->labelfont(1);
  1566. o->labelsize(11);
  1567. o->labelcolor(FL_FOREGROUND_COLOR);
  1568. o->callback((Fl_Callback*)cb_On8);
  1569. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  1570. o->when(FL_WHEN_RELEASE);
  1571. o->init("PFilterEnabled");
  1572. } // Fl_Osc_Check* o
  1573. { whitenoiselabel = new Fl_Box(150, 430, 300, 65, "White Noise");
  1574. whitenoiselabel->labelfont(1);
  1575. whitenoiselabel->labelsize(50);
  1576. whitenoiselabel->labelcolor(FL_LIGHT3);
  1577. whitenoiselabel->hide();
  1578. } // Fl_Box* whitenoiselabel
  1579. { pinknoiselabel = new Fl_Box(150, 430, 300, 65, "Pink Noise");
  1580. pinknoiselabel->labelfont(1);
  1581. pinknoiselabel->labelsize(50);
  1582. pinknoiselabel->labelcolor((Fl_Color)212);
  1583. pinknoiselabel->hide();
  1584. } // Fl_Box* pinknoiselabel
  1585. { Fl_Osc_Counter* o = new Fl_Osc_Counter(20, 568, 65, 18, "Unison");
  1586. o->tooltip("Unison size");
  1587. o->box(FL_UP_BOX);
  1588. o->color(FL_BACKGROUND_COLOR);
  1589. o->selection_color(FL_INACTIVE_COLOR);
  1590. o->labeltype(FL_NORMAL_LABEL);
  1591. o->labelfont(1);
  1592. o->labelsize(14);
  1593. o->labelcolor(FL_FOREGROUND_COLOR);
  1594. o->minimum(1);
  1595. o->maximum(64);
  1596. o->step(1);
  1597. o->value(1);
  1598. o->textfont(1);
  1599. o->textsize(11);
  1600. o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1601. o->when(FL_WHEN_CHANGED);
  1602. o->init("Unison_size", 1);
  1603. o->lstep(5);
  1604. } // Fl_Osc_Counter* o
  1605. voiceparametersgroup->end();
  1606. } // Fl_Group* voiceparametersgroup
  1607. { Fl_Osc_Check* o = voiceonbutton = new Fl_Osc_Check(60, 5, 55, 35, "On");
  1608. voiceonbutton->box(FL_THIN_UP_BOX);
  1609. voiceonbutton->down_box(FL_DOWN_BOX);
  1610. voiceonbutton->color(FL_BACKGROUND_COLOR);
  1611. voiceonbutton->selection_color(FL_FOREGROUND_COLOR);
  1612. voiceonbutton->labeltype(FL_NORMAL_LABEL);
  1613. voiceonbutton->labelfont(1);
  1614. voiceonbutton->labelsize(13);
  1615. voiceonbutton->labelcolor(FL_FOREGROUND_COLOR);
  1616. voiceonbutton->callback((Fl_Callback*)cb_voiceonbutton);
  1617. voiceonbutton->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  1618. voiceonbutton->when(FL_WHEN_RELEASE);
  1619. o->init("Enabled");
  1620. } // Fl_Osc_Check* voiceonbutton
  1621. ADnoteVoiceParameters->end();
  1622. } // Fl_Osc_Group* ADnoteVoiceParameters
  1623. return ADnoteVoiceParameters;
  1624. }
  1625. ADvoiceUI::ADvoiceUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
  1626. nvoice=0;
  1627. oscedit=NULL;
  1628. }
  1629. void ADvoiceUI::init(int nvoice_, std::string loc_, Fl_Osc_Interface *osc_) {
  1630. assert(osc_);
  1631. assert(!loc_.empty());
  1632. nvoice=nvoice_;
  1633. loc=loc_+"VoicePar"+to_s(nvoice)+"/";
  1634. base = loc_;
  1635. osc_i=osc_;
  1636. make_window();
  1637. end();
  1638. ADnoteVoiceParameters->show();
  1639. }
  1640. ADvoiceUI::~ADvoiceUI() {
  1641. ADnoteVoiceParameters->hide();
  1642. hide();
  1643. delete(oscedit);
  1644. //delete (ADnoteVoiceParameters);
  1645. }
  1646. void ADvoiceUI::change_voice(int nvoice_) {
  1647. nvoice = nvoice_;
  1648. loc = base+"VoicePar"+to_s(nvoice)+"/";
  1649. char tmp[50];snprintf(tmp,10,"%d",nvoice+1);
  1650. activeVoiceID->label(strdup(tmp));
  1651. extoscil->clear();
  1652. extoscil->add("Internal");
  1653. for (int i=0;i<nvoice;i++) {
  1654. sprintf(tmp,"Ext.%2d",i+1);
  1655. extoscil->add(tmp);
  1656. };
  1657. extFMoscil->clear();
  1658. extFMoscil->add("Internal");
  1659. for (int i=0;i<nvoice;i++) {
  1660. sprintf(tmp,"ExtM.%2d",i+1);
  1661. extFMoscil->add(tmp);
  1662. }
  1663. extMod->clear();
  1664. extMod->add("OFF");
  1665. for (int i=0;i<nvoice;i++) {
  1666. sprintf(tmp,"ExtMod.%2d",i+1);
  1667. extMod->add(tmp);
  1668. }
  1669. ADnoteVoiceParameters->rebase(base+"VoicePar"+to_s(nvoice)+"/");
  1670. }
  1671. void ADnoteUI::cb_detune_i(Fl_Osc_Slider*, void*) {
  1672. detunevalueoutput->update();
  1673. }
  1674. void ADnoteUI::cb_detune(Fl_Osc_Slider* o, void* v) {
  1675. ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_detune_i(o,v);
  1676. }
  1677. void ADnoteUI::cb_detunetype_i(Fl_Osc_Choice*, void*) {
  1678. detunevalueoutput->update();
  1679. ui->partui->adnoteui->advoice->detunevalueoutput->update();
  1680. ui->partui->adnoteui->advoice->fmdetunevalueoutput->update();
  1681. }
  1682. void ADnoteUI::cb_detunetype(Fl_Osc_Choice* o, void* v) {
  1683. ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_detunetype_i(o,v);
  1684. }
  1685. void ADnoteUI::cb_relBW_i(Fl_Osc_Dial*, void*) {
  1686. for (int i=0;i<NUM_VOICES;i++){
  1687. voicelistitem[i]->refreshlist();
  1688. };
  1689. }
  1690. void ADnoteUI::cb_relBW(Fl_Osc_Dial* o, void* v) {
  1691. ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_relBW_i(o,v);
  1692. }
  1693. void ADnoteUI::cb_Show_i(Fl_Button*, void*) {
  1694. for (int i=0;i<NUM_VOICES;i++){
  1695. voicelistitem[i]->refreshlist();
  1696. }
  1697. ADnoteVoiceList->show();
  1698. }
  1699. void ADnoteUI::cb_Show(Fl_Button* o, void* v) {
  1700. ((ADnoteUI*)(o->parent()->user_data()))->cb_Show_i(o,v);
  1701. }
  1702. void ADnoteUI::cb_Show1_i(Fl_Button*, void*) {
  1703. if (advoice->mod_type->value() == 0)
  1704. advoice->voiceFMparametersgroup->deactivate();
  1705. else
  1706. advoice->voiceFMparametersgroup->activate();
  1707. ADnoteVoice->show();
  1708. }
  1709. void ADnoteUI::cb_Show1(Fl_Button* o, void* v) {
  1710. ((ADnoteUI*)(o->parent()->user_data()))->cb_Show1_i(o,v);
  1711. }
  1712. void ADnoteUI::cb_Close_i(Fl_Button*, void*) {
  1713. ADnoteGlobalParameters->hide();
  1714. }
  1715. void ADnoteUI::cb_Close(Fl_Button* o, void* v) {
  1716. ((ADnoteUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
  1717. }
  1718. void ADnoteUI::cb_Resonance_i(Fl_Button*, void*) {
  1719. resui->resonancewindow->redraw();
  1720. resui->resonancewindow->show();
  1721. }
  1722. void ADnoteUI::cb_Resonance(Fl_Button* o, void* v) {
  1723. ((ADnoteUI*)(o->parent()->user_data()))->cb_Resonance_i(o,v);
  1724. }
  1725. void ADnoteUI::cb_C_i(Fl_Button*, void*) {
  1726. presetsui->copy(loc);
  1727. }
  1728. void ADnoteUI::cb_C(Fl_Button* o, void* v) {
  1729. ((ADnoteUI*)(o->parent()->user_data()))->cb_C_i(o,v);
  1730. }
  1731. void ADnoteUI::cb_P_i(Fl_Button*, void*) {
  1732. presetsui->paste(loc,this);
  1733. }
  1734. void ADnoteUI::cb_P(Fl_Button* o, void* v) {
  1735. ((ADnoteUI*)(o->parent()->user_data()))->cb_P_i(o,v);
  1736. }
  1737. void ADnoteUI::cb_Close1_i(Fl_Button*, void*) {
  1738. ADnoteVoice->hide();
  1739. }
  1740. void ADnoteUI::cb_Close1(Fl_Button* o, void* v) {
  1741. ((ADnoteUI*)(o->parent()->user_data()))->cb_Close1_i(o,v);
  1742. }
  1743. void ADnoteUI::cb_currentvoicecounter_i(Fl_Counter* o, void*) {
  1744. nvoice=(int)o->value()-1;
  1745. advoice->change_voice(nvoice);
  1746. }
  1747. void ADnoteUI::cb_currentvoicecounter(Fl_Counter* o, void* v) {
  1748. ((ADnoteUI*)(o->parent()->user_data()))->cb_currentvoicecounter_i(o,v);
  1749. }
  1750. void ADnoteUI::cb_C1_i(Fl_Button*, void*) {
  1751. presetsui->copy(ADnoteVoice->loc(),nvoice);
  1752. }
  1753. void ADnoteUI::cb_C1(Fl_Button* o, void* v) {
  1754. ((ADnoteUI*)(o->parent()->user_data()))->cb_C1_i(o,v);
  1755. }
  1756. void ADnoteUI::cb_P1_i(Fl_Button*, void*) {
  1757. presetsui->paste(ADnoteVoice->loc(),this,nvoice);
  1758. }
  1759. void ADnoteUI::cb_P1(Fl_Button* o, void* v) {
  1760. ((ADnoteUI*)(o->parent()->user_data()))->cb_P1_i(o,v);
  1761. }
  1762. void ADnoteUI::cb_Show2_i(Fl_Button*, void*) {
  1763. ADnoteGlobalParameters->show();
  1764. }
  1765. void ADnoteUI::cb_Show2(Fl_Button* o, void* v) {
  1766. ((ADnoteUI*)(o->parent()->user_data()))->cb_Show2_i(o,v);
  1767. }
  1768. void ADnoteUI::cb_Show3_i(Fl_Button*, void*) {
  1769. for (int i=0;i<NUM_VOICES;i++){
  1770. voicelistitem[i]->refreshlist();
  1771. }
  1772. ADnoteVoiceList->show();
  1773. }
  1774. void ADnoteUI::cb_Show3(Fl_Button* o, void* v) {
  1775. ((ADnoteUI*)(o->parent()->user_data()))->cb_Show3_i(o,v);
  1776. }
  1777. void ADnoteUI::cb_Close2_i(Fl_Button*, void*) {
  1778. ADnoteVoiceList->hide();
  1779. }
  1780. void ADnoteUI::cb_Close2(Fl_Button* o, void* v) {
  1781. ((ADnoteUI*)(o->parent()->user_data()))->cb_Close2_i(o,v);
  1782. }
  1783. void ADnoteUI::cb_Edit_i(Fl_Button*, void*) {
  1784. ui->partui->adnoteui->ADnoteGlobalParameters->show();
  1785. }
  1786. void ADnoteUI::cb_Edit(Fl_Button* o, void* v) {
  1787. ((ADnoteUI*)(o->parent()->user_data()))->cb_Edit_i(o,v);
  1788. }
  1789. Fl_Osc_Window* ADnoteUI::make_window() {
  1790. { ADnoteGlobalParameters = new Fl_Osc_Window(540, 430, "ADsynth Global Parameters of the Instrument");
  1791. ADnoteGlobalParameters->box(FL_FLAT_BOX);
  1792. ADnoteGlobalParameters->color(FL_BACKGROUND_COLOR);
  1793. ADnoteGlobalParameters->selection_color(FL_BACKGROUND_COLOR);
  1794. ADnoteGlobalParameters->labeltype(FL_NO_LABEL);
  1795. ADnoteGlobalParameters->labelfont(0);
  1796. ADnoteGlobalParameters->labelsize(14);
  1797. ADnoteGlobalParameters->labelcolor(FL_FOREGROUND_COLOR);
  1798. ADnoteGlobalParameters->user_data((void*)(this));
  1799. ADnoteGlobalParameters->align(Fl_Align(FL_ALIGN_TOP));
  1800. ADnoteGlobalParameters->when(FL_WHEN_RELEASE);
  1801. { new Fl_Box(0, 0, 0, 0);
  1802. ADnoteGlobalParameters->init(osc, loc + "GlobalPar/");
  1803. } // Fl_Box* o
  1804. { Fl_Group* o = new Fl_Group(5, 280, 530, 115, "FREQUENCY");
  1805. o->box(FL_UP_FRAME);
  1806. o->labeltype(FL_EMBOSSED_LABEL);
  1807. o->labelfont(1);
  1808. o->labelsize(13);
  1809. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  1810. { EnvelopeUI* o = freqenv = new EnvelopeUI(10, 320, 205, 70, "ADSynth Global - Frequency Envelope");
  1811. freqenv->box(FL_FLAT_BOX);
  1812. freqenv->color((Fl_Color)51);
  1813. freqenv->selection_color(FL_BACKGROUND_COLOR);
  1814. freqenv->labeltype(FL_NORMAL_LABEL);
  1815. freqenv->labelfont(0);
  1816. freqenv->labelsize(14);
  1817. freqenv->labelcolor(FL_FOREGROUND_COLOR);
  1818. freqenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1819. freqenv->when(FL_WHEN_RELEASE);
  1820. o->init(ENV_ASR, osc, loc, "GlobalPar/FreqEnvelope/");
  1821. freqenv->end();
  1822. } // EnvelopeUI* freqenv
  1823. { Fl_Osc_Counter* o = octave = new Fl_Osc_Counter(455, 300, 45, 15, "Octave");
  1824. octave->tooltip("Octave");
  1825. octave->type(1);
  1826. octave->box(FL_UP_BOX);
  1827. octave->color(FL_BACKGROUND_COLOR);
  1828. octave->selection_color(FL_INACTIVE_COLOR);
  1829. octave->labeltype(FL_NORMAL_LABEL);
  1830. octave->labelfont(0);
  1831. octave->labelsize(10);
  1832. octave->labelcolor(FL_FOREGROUND_COLOR);
  1833. octave->minimum(-8);
  1834. octave->maximum(7);
  1835. octave->step(1);
  1836. octave->textfont(1);
  1837. octave->textsize(11);
  1838. octave->align(Fl_Align(FL_ALIGN_TOP));
  1839. octave->when(FL_WHEN_CHANGED);
  1840. o->init("octave");
  1841. } // Fl_Osc_Counter* octave
  1842. { Fl_Osc_Counter* o = coarsedet = new Fl_Osc_Counter(460, 370, 60, 20, "Coarse det.");
  1843. coarsedet->tooltip("Coarse Detune");
  1844. coarsedet->type(1);
  1845. coarsedet->box(FL_UP_BOX);
  1846. coarsedet->color(FL_BACKGROUND_COLOR);
  1847. coarsedet->selection_color(FL_INACTIVE_COLOR);
  1848. coarsedet->labeltype(FL_NORMAL_LABEL);
  1849. coarsedet->labelfont(0);
  1850. coarsedet->labelsize(10);
  1851. coarsedet->labelcolor(FL_FOREGROUND_COLOR);
  1852. coarsedet->minimum(-64);
  1853. coarsedet->maximum(63);
  1854. coarsedet->step(1);
  1855. coarsedet->textfont(1);
  1856. coarsedet->textsize(11);
  1857. coarsedet->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1858. coarsedet->when(FL_WHEN_CHANGED);
  1859. o->init("coarsedetune");
  1860. o->lstep(10);
  1861. } // Fl_Osc_Counter* coarsedet
  1862. { LFOUI* o = freqlfo = new LFOUI(220, 320, 230, 70, "Frequency LFO ");
  1863. freqlfo->box(FL_FLAT_BOX);
  1864. freqlfo->color(FL_DARK1);
  1865. freqlfo->selection_color(FL_BACKGROUND_COLOR);
  1866. freqlfo->labeltype(FL_NORMAL_LABEL);
  1867. freqlfo->labelfont(0);
  1868. freqlfo->labelsize(14);
  1869. freqlfo->labelcolor(FL_FOREGROUND_COLOR);
  1870. freqlfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1871. freqlfo->when(FL_WHEN_RELEASE);
  1872. o->init(osc, loc, "GlobalPar/FreqLfo/");
  1873. freqlfo->end();
  1874. } // LFOUI* freqlfo
  1875. { Fl_Osc_Slider* o = detune = new Fl_Osc_Slider(60, 300, 385, 15);
  1876. detune->tooltip("Fine Detune (cents)");
  1877. detune->type(5);
  1878. detune->box(FL_NO_BOX);
  1879. detune->color(FL_BACKGROUND_COLOR);
  1880. detune->selection_color(FL_BACKGROUND_COLOR);
  1881. detune->labeltype(FL_NORMAL_LABEL);
  1882. detune->labelfont(0);
  1883. detune->labelsize(14);
  1884. detune->labelcolor(FL_FOREGROUND_COLOR);
  1885. detune->minimum(-8192);
  1886. detune->maximum(8191);
  1887. detune->step(1);
  1888. detune->callback((Fl_Callback*)cb_detune);
  1889. detune->align(Fl_Align(FL_ALIGN_BOTTOM));
  1890. detune->when(FL_WHEN_CHANGED);
  1891. o->init("PDetune", 'i');
  1892. } // Fl_Osc_Slider* detune
  1893. { Fl_Osc_Output* o = detunevalueoutput = new Fl_Osc_Output(12, 300, 45, 15, "Detune");
  1894. detunevalueoutput->box(FL_NO_BOX);
  1895. detunevalueoutput->color(FL_BACKGROUND_COLOR);
  1896. detunevalueoutput->selection_color(FL_BACKGROUND_COLOR);
  1897. detunevalueoutput->labeltype(FL_NORMAL_LABEL);
  1898. detunevalueoutput->labelfont(0);
  1899. detunevalueoutput->labelsize(10);
  1900. detunevalueoutput->labelcolor(FL_FOREGROUND_COLOR);
  1901. detunevalueoutput->minimum(-5000);
  1902. detunevalueoutput->maximum(5000);
  1903. detunevalueoutput->step(0.01);
  1904. detunevalueoutput->textfont(1);
  1905. detunevalueoutput->textsize(10);
  1906. detunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1907. detunevalueoutput->when(FL_WHEN_CHANGED);
  1908. o->init("detunevalue");
  1909. } // Fl_Osc_Output* detunevalueoutput
  1910. { Fl_Osc_Choice* o = detunetype = new Fl_Osc_Choice(455, 340, 75, 15, "Detune Type");
  1911. detunetype->box(FL_UP_BOX);
  1912. detunetype->down_box(FL_BORDER_BOX);
  1913. detunetype->color(FL_BACKGROUND_COLOR);
  1914. detunetype->selection_color(FL_SELECTION_COLOR);
  1915. detunetype->labeltype(FL_NORMAL_LABEL);
  1916. detunetype->labelfont(0);
  1917. detunetype->labelsize(10);
  1918. detunetype->labelcolor(FL_FOREGROUND_COLOR);
  1919. detunetype->textfont(1);
  1920. detunetype->textsize(10);
  1921. detunetype->callback((Fl_Callback*)cb_detunetype);
  1922. detunetype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1923. detunetype->when(FL_WHEN_RELEASE);
  1924. o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");
  1925. o->init("PDetuneType",1);
  1926. } // Fl_Osc_Choice* detunetype
  1927. { Fl_Osc_Dial* o = new Fl_Osc_Dial(505, 295, 25, 25, "relBW");
  1928. o->tooltip("Bandwidth - how the relative fine detune of the voice are changed");
  1929. o->box(FL_ROUND_UP_BOX);
  1930. o->color(FL_BACKGROUND_COLOR);
  1931. o->selection_color(FL_INACTIVE_COLOR);
  1932. o->labeltype(FL_NORMAL_LABEL);
  1933. o->labelfont(0);
  1934. o->labelsize(10);
  1935. o->labelcolor(FL_FOREGROUND_COLOR);
  1936. o->maximum(127);
  1937. o->step(1);
  1938. o->callback((Fl_Callback*)cb_relBW);
  1939. o->align(Fl_Align(FL_ALIGN_TOP));
  1940. o->when(FL_WHEN_CHANGED);
  1941. o->init("PBandwidth");o->reset_value=64;
  1942. } // Fl_Osc_Dial* o
  1943. o->end();
  1944. } // Fl_Group* o
  1945. { Fl_Group* o = new Fl_Group(5, 5, 240, 260, "AMPLITUDE");
  1946. o->box(FL_UP_FRAME);
  1947. o->labeltype(FL_EMBOSSED_LABEL);
  1948. o->labelfont(1);
  1949. o->labelsize(13);
  1950. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  1951. { Fl_Osc_VSlider* o = volume = new Fl_Osc_VSlider(10, 30, 160, 15, "Vol");
  1952. volume->tooltip("Volume");
  1953. volume->type(5);
  1954. volume->box(FL_NO_BOX);
  1955. volume->color(FL_BACKGROUND_COLOR);
  1956. volume->selection_color(FL_BACKGROUND_COLOR);
  1957. volume->labeltype(FL_NORMAL_LABEL);
  1958. volume->labelfont(0);
  1959. volume->labelsize(11);
  1960. volume->labelcolor(FL_FOREGROUND_COLOR);
  1961. volume->maximum(127);
  1962. volume->step(1);
  1963. volume->align(Fl_Align(FL_ALIGN_RIGHT));
  1964. volume->when(FL_WHEN_CHANGED);
  1965. o->init("PVolume");o->reset_value=90;
  1966. } // Fl_Osc_VSlider* volume
  1967. { Fl_Osc_VSlider* o = vsns = new Fl_Osc_VSlider(10, 50, 160, 15, "V.Sns");
  1968. vsns->tooltip("Velocity Sensing Function (rightmost to disable)");
  1969. vsns->type(5);
  1970. vsns->box(FL_NO_BOX);
  1971. vsns->color(FL_BACKGROUND_COLOR);
  1972. vsns->selection_color(FL_BACKGROUND_COLOR);
  1973. vsns->labeltype(FL_NORMAL_LABEL);
  1974. vsns->labelfont(0);
  1975. vsns->labelsize(11);
  1976. vsns->labelcolor(FL_FOREGROUND_COLOR);
  1977. vsns->maximum(127);
  1978. vsns->step(1);
  1979. vsns->align(Fl_Align(FL_ALIGN_RIGHT));
  1980. vsns->when(FL_WHEN_CHANGED);
  1981. o->init("PAmpVelocityScaleFunction");o->reset_value=64;
  1982. } // Fl_Osc_VSlider* vsns
  1983. { Fl_Osc_Dial* o = pan = new Fl_Osc_Dial(210, 25, 30, 30, "Pan");
  1984. pan->tooltip("Panning (leftmost is Random)");
  1985. pan->box(FL_ROUND_UP_BOX);
  1986. pan->color(FL_BACKGROUND_COLOR);
  1987. pan->selection_color(FL_INACTIVE_COLOR);
  1988. pan->labeltype(FL_NORMAL_LABEL);
  1989. pan->labelfont(0);
  1990. pan->labelsize(10);
  1991. pan->labelcolor(FL_FOREGROUND_COLOR);
  1992. pan->maximum(127);
  1993. pan->step(1);
  1994. pan->align(Fl_Align(FL_ALIGN_BOTTOM));
  1995. pan->when(FL_WHEN_CHANGED);
  1996. o->init("PPanning");o->reset_value=64;
  1997. } // Fl_Osc_Dial* pan
  1998. { Fl_Osc_Dial* o = new Fl_Osc_Dial(208, 228, 20, 20, "De-pop");
  1999. o->tooltip("Pop suppression");
  2000. o->box(FL_NO_BOX);
  2001. o->color(FL_BACKGROUND_COLOR);
  2002. o->selection_color(FL_INACTIVE_COLOR);
  2003. o->labeltype(FL_NORMAL_LABEL);
  2004. o->labelfont(0);
  2005. o->labelsize(10);
  2006. o->labelcolor(FL_FOREGROUND_COLOR);
  2007. o->maximum(127);
  2008. o->step(1);
  2009. o->align(Fl_Align(FL_ALIGN_BOTTOM));
  2010. o->when(FL_WHEN_CHANGED);
  2011. o->init("Fadein_adjustment");o->reset_value=20;
  2012. } // Fl_Osc_Dial* o
  2013. { Fl_Osc_Dial* o = pstr = new Fl_Osc_Dial(78, 237, 25, 25, "P.Str.");
  2014. pstr->tooltip("Punch Strength");
  2015. pstr->box(FL_ROUND_UP_BOX);
  2016. pstr->color(FL_BACKGROUND_COLOR);
  2017. pstr->selection_color(FL_INACTIVE_COLOR);
  2018. pstr->labeltype(FL_NORMAL_LABEL);
  2019. pstr->labelfont(0);
  2020. pstr->labelsize(10);
  2021. pstr->labelcolor(FL_FOREGROUND_COLOR);
  2022. pstr->maximum(127);
  2023. pstr->step(1);
  2024. pstr->align(Fl_Align(FL_ALIGN_TOP));
  2025. pstr->when(FL_WHEN_CHANGED);
  2026. o->init("PPunchStrength");
  2027. } // Fl_Osc_Dial* pstr
  2028. { Fl_Osc_Dial* o = pt = new Fl_Osc_Dial(108, 237, 25, 25, "P.t.");
  2029. pt->tooltip("Punch Time (duration)");
  2030. pt->box(FL_ROUND_UP_BOX);
  2031. pt->color(FL_BACKGROUND_COLOR);
  2032. pt->selection_color(FL_INACTIVE_COLOR);
  2033. pt->labeltype(FL_NORMAL_LABEL);
  2034. pt->labelfont(0);
  2035. pt->labelsize(10);
  2036. pt->labelcolor(FL_FOREGROUND_COLOR);
  2037. pt->maximum(127);
  2038. pt->step(1);
  2039. pt->align(Fl_Align(FL_ALIGN_TOP));
  2040. pt->when(FL_WHEN_CHANGED);
  2041. o->init("PPunchTime");o->reset_value=60;
  2042. } // Fl_Osc_Dial* pt
  2043. { Fl_Osc_Dial* o = pstc = new Fl_Osc_Dial(138, 237, 25, 25, "P.Stc.");
  2044. pstc->tooltip("Punch Stretch");
  2045. pstc->box(FL_ROUND_UP_BOX);
  2046. pstc->color(FL_BACKGROUND_COLOR);
  2047. pstc->selection_color(FL_INACTIVE_COLOR);
  2048. pstc->labeltype(FL_NORMAL_LABEL);
  2049. pstc->labelfont(0);
  2050. pstc->labelsize(10);
  2051. pstc->labelcolor(FL_FOREGROUND_COLOR);
  2052. pstc->maximum(127);
  2053. pstc->step(1);
  2054. pstc->align(Fl_Align(FL_ALIGN_TOP));
  2055. pstc->when(FL_WHEN_CHANGED);
  2056. o->init("PPunchStretch");o->reset_value=64;
  2057. } // Fl_Osc_Dial* pstc
  2058. { Fl_Osc_Dial* o = pvel = new Fl_Osc_Dial(168, 237, 25, 25, "P.Vel.");
  2059. pvel->tooltip("Punch Velocity Sensing");
  2060. pvel->box(FL_ROUND_UP_BOX);
  2061. pvel->color(FL_BACKGROUND_COLOR);
  2062. pvel->selection_color(FL_INACTIVE_COLOR);
  2063. pvel->labeltype(FL_NORMAL_LABEL);
  2064. pvel->labelfont(0);
  2065. pvel->labelsize(10);
  2066. pvel->labelcolor(FL_FOREGROUND_COLOR);
  2067. pvel->maximum(127);
  2068. pvel->step(1);
  2069. pvel->align(Fl_Align(FL_ALIGN_TOP));
  2070. pvel->when(FL_WHEN_CHANGED);
  2071. o->init("PPunchVelocitySensing");o->reset_value=72;
  2072. } // Fl_Osc_Dial* pvel
  2073. { EnvelopeUI* o = ampenv = new EnvelopeUI(10, 75, 205, 70, "ADSynth Global - Amplitude Envelope");
  2074. ampenv->box(FL_FLAT_BOX);
  2075. ampenv->color((Fl_Color)51);
  2076. ampenv->selection_color(FL_BACKGROUND_COLOR);
  2077. ampenv->labeltype(FL_NORMAL_LABEL);
  2078. ampenv->labelfont(0);
  2079. ampenv->labelsize(14);
  2080. ampenv->labelcolor(FL_FOREGROUND_COLOR);
  2081. ampenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  2082. ampenv->when(FL_WHEN_RELEASE);
  2083. o->init(ENV_ADSR, osc, loc, "GlobalPar/AmpEnvelope/");
  2084. ampenv->end();
  2085. } // EnvelopeUI* ampenv
  2086. { LFOUI* o = amplfo = new LFOUI(10, 150, 230, 70, "Amplitude LFO ");
  2087. amplfo->box(FL_FLAT_BOX);
  2088. amplfo->color(FL_DARK1);
  2089. amplfo->selection_color(FL_BACKGROUND_COLOR);
  2090. amplfo->labeltype(FL_NORMAL_LABEL);
  2091. amplfo->labelfont(0);
  2092. amplfo->labelsize(14);
  2093. amplfo->labelcolor(FL_FOREGROUND_COLOR);
  2094. amplfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  2095. amplfo->when(FL_WHEN_RELEASE);
  2096. o->init(osc, loc, "GlobalPar/AmpLfo/");
  2097. amplfo->end();
  2098. } // LFOUI* amplfo
  2099. { Fl_Osc_Check* o = rndgrp = new Fl_Osc_Check(7, 241, 65, 18, "Rnd Grp");
  2100. rndgrp->tooltip("How the Harmonic Amplitude is applied to voices that use the same oscillator");
  2101. rndgrp->box(FL_NO_BOX);
  2102. rndgrp->down_box(FL_DOWN_BOX);
  2103. rndgrp->color(FL_BACKGROUND_COLOR);
  2104. rndgrp->selection_color(FL_FOREGROUND_COLOR);
  2105. rndgrp->labeltype(FL_NORMAL_LABEL);
  2106. rndgrp->labelfont(0);
  2107. rndgrp->labelsize(11);
  2108. rndgrp->labelcolor(FL_FOREGROUND_COLOR);
  2109. rndgrp->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  2110. rndgrp->when(FL_WHEN_RELEASE);
  2111. o->init("Hrandgrouping");
  2112. } // Fl_Osc_Check* rndgrp
  2113. o->end();
  2114. } // Fl_Group* o
  2115. { Fl_Group* o = new Fl_Group(250, 5, 285, 265, "FILTER");
  2116. o->box(FL_UP_FRAME);
  2117. o->labeltype(FL_EMBOSSED_LABEL);
  2118. o->labelfont(1);
  2119. o->labelsize(13);
  2120. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  2121. { EnvelopeUI* o = filterenv = new EnvelopeUI(255, 118, 275, 70, "ADSynth Global - Filter Envelope");
  2122. filterenv->box(FL_FLAT_BOX);
  2123. filterenv->color((Fl_Color)51);
  2124. filterenv->selection_color(FL_BACKGROUND_COLOR);
  2125. filterenv->labeltype(FL_NORMAL_LABEL);
  2126. filterenv->labelfont(0);
  2127. filterenv->labelsize(14);
  2128. filterenv->labelcolor(FL_FOREGROUND_COLOR);
  2129. filterenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  2130. filterenv->when(FL_WHEN_RELEASE);
  2131. o->init(ENV_ADSR_FILTER, osc, loc, "GlobalPar/FilterEnvelope/");
  2132. filterenv->end();
  2133. } // EnvelopeUI* filterenv
  2134. { LFOUI* o = filterlfo = new LFOUI(255, 195, 230, 70, "Filter LFO");
  2135. filterlfo->box(FL_FLAT_BOX);
  2136. filterlfo->color(FL_DARK1);
  2137. filterlfo->selection_color(FL_BACKGROUND_COLOR);
  2138. filterlfo->labeltype(FL_NORMAL_LABEL);
  2139. filterlfo->labelfont(0);
  2140. filterlfo->labelsize(14);
  2141. filterlfo->labelcolor(FL_FOREGROUND_COLOR);
  2142. filterlfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  2143. filterlfo->when(FL_WHEN_RELEASE);
  2144. o->init(osc, loc, "GlobalPar/FilterLfo/");
  2145. filterlfo->end();
  2146. } // LFOUI* filterlfo
  2147. { FilterUI* o = filterui = new FilterUI(255, 35, 275, 75, "ADsynth Global - Filter");
  2148. filterui->box(FL_FLAT_BOX);
  2149. filterui->color(FL_LIGHT1);
  2150. filterui->selection_color(FL_BACKGROUND_COLOR);
  2151. filterui->labeltype(FL_NORMAL_LABEL);
  2152. filterui->labelfont(0);
  2153. filterui->labelsize(14);
  2154. filterui->labelcolor(FL_FOREGROUND_COLOR);
  2155. filterui->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  2156. filterui->when(FL_WHEN_RELEASE);
  2157. o->init(loc + "GlobalPar/PFilter",
  2158. osc, loc, "GlobalPar/GlobalFilter/");
  2159. filterui->end();
  2160. } // FilterUI* filterui
  2161. o->end();
  2162. } // Fl_Group* o
  2163. { Fl_Osc_Check* o = stereo = new Fl_Osc_Check(7, 223, 65, 18, "Stereo");
  2164. stereo->box(FL_NO_BOX);
  2165. stereo->down_box(FL_DOWN_BOX);
  2166. stereo->color(FL_BACKGROUND_COLOR);
  2167. stereo->selection_color(FL_FOREGROUND_COLOR);
  2168. stereo->labeltype(FL_NORMAL_LABEL);
  2169. stereo->labelfont(0);
  2170. stereo->labelsize(11);
  2171. stereo->labelcolor(FL_FOREGROUND_COLOR);
  2172. stereo->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  2173. stereo->when(FL_WHEN_RELEASE);
  2174. o->init("PStereo");
  2175. } // Fl_Osc_Check* stereo
  2176. { Fl_Button* o = new Fl_Button(180, 400, 125, 25, "Show Voice List");
  2177. o->labelsize(12);
  2178. o->callback((Fl_Callback*)cb_Show);
  2179. } // Fl_Button* o
  2180. { Fl_Button* o = new Fl_Button(5, 400, 170, 25, "Show Voice Parameters");
  2181. o->labelsize(12);
  2182. o->callback((Fl_Callback*)cb_Show1);
  2183. } // Fl_Button* o
  2184. { Fl_Button* o = new Fl_Button(475, 400, 60, 25, "Close");
  2185. o->box(FL_THIN_UP_BOX);
  2186. o->callback((Fl_Callback*)cb_Close);
  2187. } // Fl_Button* o
  2188. { Fl_Button* o = new Fl_Button(309, 400, 86, 25, "Resonance");
  2189. o->tooltip("Resonance");
  2190. o->box(FL_THIN_UP_BOX);
  2191. o->labelsize(12);
  2192. o->callback((Fl_Callback*)cb_Resonance);
  2193. } // Fl_Button* o
  2194. { Fl_Button* o = new Fl_Button(405, 405, 25, 15, "C");
  2195. o->box(FL_THIN_UP_BOX);
  2196. o->color((Fl_Color)179);
  2197. o->labelfont(1);
  2198. o->labelsize(11);
  2199. o->labelcolor((Fl_Color)55);
  2200. o->callback((Fl_Callback*)cb_C);
  2201. } // Fl_Button* o
  2202. { Fl_Button* o = new Fl_Button(435, 405, 25, 15, "P");
  2203. o->box(FL_THIN_UP_BOX);
  2204. o->color((Fl_Color)179);
  2205. o->labelfont(1);
  2206. o->labelsize(11);
  2207. o->labelcolor((Fl_Color)55);
  2208. o->callback((Fl_Callback*)cb_P);
  2209. } // Fl_Button* o
  2210. ADnoteGlobalParameters->end();
  2211. } // Fl_Osc_Window* ADnoteGlobalParameters
  2212. { ADnoteVoice = new Fl_Osc_Window(765, 630, "ADsynth Voice Parameters");
  2213. ADnoteVoice->box(FL_FLAT_BOX);
  2214. ADnoteVoice->color(FL_BACKGROUND_COLOR);
  2215. ADnoteVoice->selection_color(FL_BACKGROUND_COLOR);
  2216. ADnoteVoice->labeltype(FL_NO_LABEL);
  2217. ADnoteVoice->labelfont(0);
  2218. ADnoteVoice->labelsize(14);
  2219. ADnoteVoice->labelcolor(FL_FOREGROUND_COLOR);
  2220. ADnoteVoice->user_data((void*)(this));
  2221. ADnoteVoice->align(Fl_Align(FL_ALIGN_TOP));
  2222. ADnoteVoice->when(FL_WHEN_RELEASE);
  2223. { new Fl_Box(0, 0, 0, 0);
  2224. ADnoteVoice->init(osc,loc);
  2225. } // Fl_Box* o
  2226. { ADvoiceUI* o = advoice = new ADvoiceUI(0, 0, 765, 595);
  2227. advoice->box(FL_NO_BOX);
  2228. advoice->color(FL_BACKGROUND_COLOR);
  2229. advoice->selection_color(FL_BACKGROUND_COLOR);
  2230. advoice->labeltype(FL_NORMAL_LABEL);
  2231. advoice->labelfont(0);
  2232. advoice->labelsize(14);
  2233. advoice->labelcolor(FL_FOREGROUND_COLOR);
  2234. advoice->align(Fl_Align(FL_ALIGN_TOP));
  2235. advoice->when(FL_WHEN_RELEASE);
  2236. o->init(nvoice,loc, osc);
  2237. o->show();
  2238. advoice->end();
  2239. } // ADvoiceUI* advoice
  2240. { Fl_Button* o = new Fl_Button(700, 601, 60, 25, "Close");
  2241. o->box(FL_THIN_UP_BOX);
  2242. o->callback((Fl_Callback*)cb_Close1);
  2243. } // Fl_Button* o
  2244. { Fl_Counter* o = currentvoicecounter = new Fl_Counter(10, 601, 130, 25, "Current Voice");
  2245. currentvoicecounter->type(1);
  2246. currentvoicecounter->labelfont(1);
  2247. currentvoicecounter->minimum(0);
  2248. currentvoicecounter->maximum(2);
  2249. currentvoicecounter->step(1);
  2250. currentvoicecounter->value(1);
  2251. currentvoicecounter->textfont(1);
  2252. currentvoicecounter->textsize(13);
  2253. currentvoicecounter->callback((Fl_Callback*)cb_currentvoicecounter);
  2254. currentvoicecounter->align(Fl_Align(FL_ALIGN_RIGHT));
  2255. o->bounds(1,NUM_VOICES);
  2256. } // Fl_Counter* currentvoicecounter
  2257. { Fl_Button* o = new Fl_Button(630, 609, 25, 15, "C");
  2258. o->box(FL_THIN_UP_BOX);
  2259. o->color((Fl_Color)179);
  2260. o->labelfont(1);
  2261. o->labelsize(11);
  2262. o->labelcolor((Fl_Color)55);
  2263. o->callback((Fl_Callback*)cb_C1);
  2264. } // Fl_Button* o
  2265. { Fl_Button* o = new Fl_Button(660, 609, 25, 15, "P");
  2266. o->box(FL_THIN_UP_BOX);
  2267. o->color((Fl_Color)179);
  2268. o->labelfont(1);
  2269. o->labelsize(11);
  2270. o->labelcolor((Fl_Color)55);
  2271. o->callback((Fl_Callback*)cb_P1);
  2272. } // Fl_Button* o
  2273. { Fl_Button* o = new Fl_Button(280, 601, 110, 25, "Show ADsynth");
  2274. o->labelsize(12);
  2275. o->callback((Fl_Callback*)cb_Show2);
  2276. } // Fl_Button* o
  2277. { Fl_Button* o = new Fl_Button(400, 601, 130, 25, "Show Voice List");
  2278. o->labelsize(12);
  2279. o->callback((Fl_Callback*)cb_Show3);
  2280. } // Fl_Button* o
  2281. ADnoteVoice->end();
  2282. } // Fl_Osc_Window* ADnoteVoice
  2283. { ADnoteVoiceList = new Fl_Osc_Window(670, 260, "ADsynth Voices list");
  2284. ADnoteVoiceList->box(FL_FLAT_BOX);
  2285. ADnoteVoiceList->color(FL_BACKGROUND_COLOR);
  2286. ADnoteVoiceList->selection_color(FL_BACKGROUND_COLOR);
  2287. ADnoteVoiceList->labeltype(FL_NO_LABEL);
  2288. ADnoteVoiceList->labelfont(0);
  2289. ADnoteVoiceList->labelsize(14);
  2290. ADnoteVoiceList->labelcolor(FL_FOREGROUND_COLOR);
  2291. ADnoteVoiceList->user_data((void*)(this));
  2292. ADnoteVoiceList->align(Fl_Align(FL_ALIGN_TOP));
  2293. ADnoteVoiceList->when(FL_WHEN_RELEASE);
  2294. { new Fl_Box(0, 0, 0, 0);
  2295. ADnoteVoiceList->init(osc, loc);
  2296. } // Fl_Box* o
  2297. { Fl_Text_Display* o = new Fl_Text_Display(17, 15, 30, 10, "No.");
  2298. o->box(FL_NO_BOX);
  2299. o->labelfont(1);
  2300. o->labelsize(11);
  2301. } // Fl_Text_Display* o
  2302. { Fl_Text_Display* o = new Fl_Text_Display(190, 15, 30, 10, "Vol");
  2303. o->box(FL_NO_BOX);
  2304. o->labelfont(1);
  2305. o->labelsize(11);
  2306. } // Fl_Text_Display* o
  2307. { Fl_Text_Display* o = new Fl_Text_Display(431, 15, 25, 10, "Detune");
  2308. o->box(FL_NO_BOX);
  2309. o->labelfont(1);
  2310. o->labelsize(11);
  2311. } // Fl_Text_Display* o
  2312. { Fl_Text_Display* o = new Fl_Text_Display(253, 15, 30, 10, "Pan");
  2313. o->box(FL_NO_BOX);
  2314. o->labelfont(1);
  2315. o->labelsize(11);
  2316. } // Fl_Text_Display* o
  2317. { Fl_Text_Display* o = new Fl_Text_Display(600, 15, 30, 10, "Vib. Depth");
  2318. o->box(FL_NO_BOX);
  2319. o->labelfont(1);
  2320. o->labelsize(11);
  2321. } // Fl_Text_Display* o
  2322. { Fl_Text_Display* o = new Fl_Text_Display(285, 15, 25, 10, "R.");
  2323. o->box(FL_NO_BOX);
  2324. o->labelfont(1);
  2325. o->labelsize(11);
  2326. } // Fl_Text_Display* o
  2327. { Fl_Button* o = new Fl_Button(271, 237, 80, 20, "Close");
  2328. o->callback((Fl_Callback*)cb_Close2);
  2329. } // Fl_Button* o
  2330. { Fl_Scroll* o = new Fl_Scroll(0, 15, 670, 220);
  2331. o->type(2);
  2332. o->box(FL_THIN_UP_BOX);
  2333. { Fl_Pack* o = new Fl_Pack(0, 20, 670, 210);
  2334. o->begin();for (int i=0;i<NUM_VOICES;i++){voicelistitem[i]=new ADvoicelistitem(0,0,670,25,"");voicelistitem[i]->init(i,loc+"VoicePar"+to_s(i)+"/",osc);}o->end();
  2335. o->end();
  2336. } // Fl_Pack* o
  2337. o->end();
  2338. } // Fl_Scroll* o
  2339. { Fl_Button* o = new Fl_Button(5, 237, 106, 20, "Edit ADsynth");
  2340. o->labelsize(12);
  2341. o->callback((Fl_Callback*)cb_Edit);
  2342. } // Fl_Button* o
  2343. ADnoteVoiceList->end();
  2344. } // Fl_Osc_Window* ADnoteVoiceList
  2345. return ADnoteVoiceList;
  2346. }
  2347. ADnoteUI::ADnoteUI(std::string loc_, Fl_Osc_Interface *osc_) {
  2348. assert(osc_);
  2349. assert(!loc_.empty());
  2350. nvoice=0;
  2351. resui=new ResonanceUI(osc_, loc_+"GlobalPar/Reson/");
  2352. loc=loc_;
  2353. osc=osc_;
  2354. make_window();
  2355. }
  2356. ADnoteUI::~ADnoteUI() {
  2357. ADnoteVoiceList->hide();
  2358. ADnoteGlobalParameters->hide();
  2359. ADnoteVoice->hide();
  2360. delete ADnoteVoiceList;
  2361. delete ADnoteGlobalParameters;
  2362. delete ADnoteVoice;
  2363. delete resui;
  2364. }
  2365. void ADnoteUI::refresh() {
  2366. amplfo->refresh();
  2367. freqlfo->refresh();
  2368. filterlfo->refresh();
  2369. ampenv->refresh();
  2370. freqenv->refresh();
  2371. filterenv->refresh();
  2372. filterui->refresh();
  2373. for (int i=0;i<NUM_VOICES;i++) voicelistitem[i]->refreshlist();
  2374. resui->refresh();
  2375. currentvoicecounter->do_callback();
  2376. }