Audio plugin host https://kx.studio/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.

2202 lines
89KB

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