Collection of tools useful for audio production
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1184 lines
49KB

  1. # data file for the Fltk User Interface Designer (fluid)
  2. version 1.0300
  3. header_name {.h}
  4. code_name {.cc}
  5. decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {private local
  6. }
  7. decl {//License: GNU GPL version 2 or later} {private local
  8. }
  9. decl {\#include "../Params/ADnoteParameters.h"} {public local
  10. }
  11. decl {\#include "../Misc/Util.h"} {public local
  12. }
  13. decl {\#include "../Misc/Master.h"} {public local
  14. }
  15. decl {\#include "ResonanceUI.h"} {public local
  16. }
  17. decl {\#include <FL/Fl_Box.H>} {public local
  18. }
  19. decl {\#include <FL/Fl_Group.H>} {public local
  20. }
  21. decl {\#include <math.h>} {private local
  22. }
  23. decl {\#include <stdio.h>} {private local
  24. }
  25. decl {\#include <stdlib.h>} {private local
  26. }
  27. decl {\#include <string.h>} {private local
  28. }
  29. decl {\#include "WidgetPDial.h"} {public local
  30. }
  31. decl {\#include "EnvelopeUI.h"} {public local
  32. }
  33. decl {\#include "LFOUI.h"} {public local
  34. }
  35. decl {\#include "FilterUI.h"} {public local
  36. }
  37. decl {\#include "OscilGenUI.h"} {public local
  38. }
  39. decl {\#include "PresetsUI.h"} {public local
  40. }
  41. class ADvoicelistitem {open : {public Fl_Group}
  42. } {
  43. Function {make_window()} {open private
  44. } {
  45. Fl_Window ADnoteVoiceListItem {open
  46. private xywh {259 713 615 100} type Double box UP_FRAME
  47. class Fl_Group visible
  48. } {
  49. Fl_Group voicelistitemgroup {
  50. private xywh {50 0 570 25}
  51. code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();}
  52. } {
  53. Fl_Value_Slider voicevolume {
  54. callback {pars->VoicePar[nvoice].PVolume=(int)o->value();}
  55. tooltip Volume xywh {90 5 115 20} type {Horz Knob} box NO_BOX labelsize 8 align 5 maximum 127 step 1
  56. code0 {o->value(pars->VoicePar[nvoice].PVolume);}
  57. }
  58. Fl_Check_Button voiceresonanceenabled {
  59. callback {pars->VoicePar[nvoice].Presonance=(int)o->value();}
  60. tooltip {Resonance On/Off} xywh {245 7 15 17} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 11 align 4
  61. code0 {o->value(pars->VoicePar[nvoice].Presonance);}
  62. }
  63. Fl_Value_Slider voicelfofreq {
  64. callback {pars->VoicePar[nvoice].FreqLfo->Pintensity=(int)o->value();}
  65. tooltip {Frequency LFO amount} xywh {500 5 115 20} type {Horz Knob} box NO_BOX labelsize 8 align 5 maximum 127 step 1
  66. code0 {o->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);}
  67. }
  68. Fl_Dial voicepanning {
  69. callback {pars->VoicePar[nvoice].PPanning=(int) o->value();}
  70. tooltip {Panning (leftmost is Random)} xywh {215 5 20 20} box ROUND_UP_BOX labelsize 10 align 4 maximum 127 step 1
  71. code0 {o->value(pars->VoicePar[nvoice].PPanning);}
  72. class WidgetPDial
  73. }
  74. Fl_Group voiceoscil {open
  75. xywh {60 5 30 20} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
  76. code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  77. code1 {osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);}
  78. code2 {if (pars->VoicePar[nvoice].Pextoscil != -1) {osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,master);}}
  79. } {}
  80. Fl_Value_Output detunevalueoutput {
  81. callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
  82. xywh {265 5 45 20} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  83. code0 {o->value(getdetune(pars->VoicePar[nvoice].PDetuneType,0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
  84. }
  85. Fl_Slider voicedetune {
  86. callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
  87. detunevalueoutput->do_callback();}
  88. tooltip {Fine Detune (cents)} xywh {315 5 185 20} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1
  89. code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);}
  90. }
  91. Fl_Box noiselabel {
  92. label N
  93. callback {if (pars->VoicePar[nvoice].Type==0) {
  94. o->hide();
  95. voiceresonanceenabled->activate();
  96. detunevalueoutput->activate();
  97. voicedetune->activate();
  98. voicelfofreq->activate();
  99. voiceoscil->activate();
  100. } else {
  101. o->show();
  102. voiceresonanceenabled->deactivate();
  103. detunevalueoutput->deactivate();
  104. voicedetune->deactivate();
  105. voicelfofreq->deactivate();
  106. voiceoscil->deactivate();
  107. };}
  108. xywh {65 5 20 20} labelfont 1 labelsize 13 labelcolor 7
  109. code0 {if (pars->VoicePar[nvoice].Type==0) o->hide();}
  110. }
  111. }
  112. Fl_Check_Button voiceenabled {
  113. label 01
  114. callback {pars->VoicePar[nvoice].Enabled=(int)o->value();
  115. if (o->value()==0) voicelistitemgroup->deactivate();
  116. else voicelistitemgroup->activate();
  117. o->redraw();}
  118. private xywh {30 5 20 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 4
  119. code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));}
  120. code1 {o->value(pars->VoicePar[nvoice].Enabled);}
  121. }
  122. }
  123. }
  124. Function {ADvoicelistitem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
  125. code {nvoice=0;
  126. pars=NULL;} {}
  127. }
  128. Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {} {
  129. code {pars=parameters;
  130. nvoice=nvoice_;
  131. master=master_;
  132. make_window();
  133. ADnoteVoiceListItem->show();
  134. end();} {}
  135. }
  136. Function {refreshlist()} {} {
  137. code {voiceenabled->value(pars->VoicePar[nvoice].Enabled);
  138. voiceresonanceenabled->value(pars->VoicePar[nvoice].Presonance);
  139. voicevolume->value(pars->VoicePar[nvoice].PVolume);
  140. voicedetune->value(pars->VoicePar[nvoice].PDetune-8192);
  141. voicepanning->value(pars->VoicePar[nvoice].PPanning);
  142. voicelfofreq->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);
  143. if (pars->VoicePar[nvoice].Pextoscil != -1) {
  144. osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
  145. } else
  146. osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
  147. if (pars->VoicePar[nvoice].Enabled==0) voicelistitemgroup->deactivate();
  148. else voicelistitemgroup->activate();
  149. detunevalueoutput->do_callback();
  150. noiselabel->do_callback();
  151. ADnoteVoiceListItem->redraw();} {}
  152. }
  153. Function {~ADvoicelistitem()} {} {
  154. code {ADnoteVoiceListItem->hide();
  155. //delete(ADnoteVoiceListItem);} {}
  156. }
  157. decl {ADnoteParameters *pars;} {private local
  158. }
  159. decl {int nvoice;} {private local
  160. }
  161. decl {Oscilloscope *osc;} {private local
  162. }
  163. decl {Master *master;} {private local
  164. }
  165. }
  166. class ADvoiceUI {open : {public Fl_Group}
  167. } {
  168. Function {make_window()} {open
  169. } {
  170. Fl_Window ADnoteVoiceParameters {
  171. label Voice open
  172. xywh {81 282 765 590} type Double box NO_BOX
  173. class Fl_Group visible
  174. } {
  175. Fl_Group voiceparametersgroup {open
  176. xywh {0 0 765 595} color 48
  177. code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();}
  178. } {
  179. Fl_Group voicemodegroup {open
  180. xywh {0 5 765 590} color 64
  181. } {
  182. Fl_Group voiceFMparametersgroup {
  183. label MODULATOR open
  184. xywh {530 5 230 580} box UP_FRAME color 48 labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  185. code0 {if (pars->VoicePar[nvoice].PFMEnabled==0) o->deactivate();}
  186. } {
  187. Fl_Group modfrequency {
  188. label {Mod.FREQUENCY}
  189. xywh {535 220 220 155} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  190. } {
  191. Fl_Group voiceFMfreqenvgroup {
  192. label {ADSynth Modulator - Frequency Envelope}
  193. xywh {540 300 210 70} box FLAT_BOX color 51 align 144
  194. code0 {o->init(pars->VoicePar[nvoice].FMFreqEnvelope);}
  195. code1 {if (pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled==0) o->deactivate();}
  196. class EnvelopeUI
  197. } {}
  198. Fl_Check_Button {} {
  199. label On
  200. callback {pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled=(int)o->value();
  201. if (o->value()==0) voiceFMfreqenvgroup->deactivate();
  202. else voiceFMfreqenvgroup->activate();
  203. o->redraw();}
  204. tooltip {Forced Relase} xywh {545 305 50 10} down_box DOWN_BOX labelfont 1 labelsize 11
  205. code0 {o->value(pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled);}
  206. }
  207. Fl_Counter {} {
  208. label {Coarse Det.}
  209. callback {int k=(int) o->value();
  210. if (k<0) k+=1024;
  211. pars->VoicePar[nvoice].PFMCoarseDetune = k+
  212. (pars->VoicePar[nvoice].PFMCoarseDetune/1024)*1024;}
  213. tooltip {Coarse Detune} xywh {685 280 60 15} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
  214. code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune%1024;}
  215. code1 {if (k>=512) k-=1024;}
  216. code2 {o->value(k);}
  217. code3 {o->lstep(10);}
  218. }
  219. Fl_Counter {} {
  220. label Octave
  221. callback {int k=(int) o->value();
  222. if (k<0) k+=16;
  223. pars->VoicePar[nvoice].PFMCoarseDetune = k*1024+
  224. pars->VoicePar[nvoice].PFMCoarseDetune%1024;}
  225. tooltip Octave xywh {625 280 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
  226. code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune/1024;}
  227. code1 {if (k>=8) k-=16;}
  228. code2 {o->value(k);}
  229. }
  230. Fl_Slider {} {
  231. callback {pars->VoicePar[nvoice].PFMDetune=(int)o->value()+8192;
  232. fmdetunevalueoutput->do_callback();}
  233. tooltip {Fine Detune (cents)} xywh {590 245 155 15} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1
  234. code0 {o->value(pars->VoicePar[nvoice].PFMDetune-8192);}
  235. }
  236. Fl_Value_Output fmdetunevalueoutput {
  237. label Detune
  238. callback {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));}
  239. xywh {540 245 45 18} labelsize 8 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 8
  240. code0 {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));}
  241. code1 {//o->value(getdetune(pars->VoicePar[nvoice].PFMDetuneType,0,pars->VoicePar[nvoice].PFMDetune));}
  242. }
  243. Fl_Choice {} {
  244. label {Detune Type}
  245. callback {pars->VoicePar[nvoice].PFMDetuneType=(int) o->value();
  246. fmdetunevalueoutput->do_callback();} open
  247. xywh {540 280 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  248. code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  249. code1 {o->value(pars->VoicePar[nvoice].PFMDetuneType);}
  250. } {}
  251. }
  252. Fl_Group {} {
  253. label {Mod.AMPLITUDE}
  254. xywh {535 60 220 160} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  255. } {
  256. Fl_Value_Slider {} {
  257. label Vol
  258. callback {pars->VoicePar[nvoice].PFMVolume=(int)o->value();}
  259. tooltip Volume xywh {540 80 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
  260. code0 {o->value(pars->VoicePar[nvoice].PFMVolume);}
  261. }
  262. Fl_Value_Slider {} {
  263. label {V.Sns}
  264. callback {pars->VoicePar[nvoice].PFMVelocityScaleFunction=(int) o->value();}
  265. tooltip {Velocity Sensing Function (rightmost to disable)} xywh {540 100 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
  266. code0 {o->value(pars->VoicePar[nvoice].PFMVelocityScaleFunction);}
  267. }
  268. Fl_Group voiceFMampenvgroup {
  269. label {ADSynth Modulator - Amplitude Envelope} open
  270. xywh {540 145 205 70} box FLAT_BOX color 51 align 144
  271. code0 {o->init(pars->VoicePar[nvoice].FMAmpEnvelope);}
  272. code1 {if (pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled==0) o->deactivate();}
  273. class EnvelopeUI
  274. } {}
  275. Fl_Check_Button {} {
  276. label On
  277. callback {pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled=(int)o->value();
  278. if (o->value()==0) voiceFMampenvgroup->deactivate();
  279. else voiceFMampenvgroup->activate();
  280. o->redraw();}
  281. tooltip {Forced Relase} xywh {545 150 50 10} down_box DOWN_BOX labelfont 1 labelsize 11
  282. code0 {o->value(pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled);}
  283. }
  284. Fl_Value_Slider {} {
  285. label {F.Damp}
  286. callback {pars->VoicePar[nvoice].PFMVolumeDamp=(int) o->value()+64;}
  287. tooltip {Modulator Damp at Higher frequency} xywh {540 120 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 minimum -64 maximum 63 step 1
  288. code0 {o->value(pars->VoicePar[nvoice].PFMVolumeDamp-64);}
  289. }
  290. }
  291. Fl_Group modoscil {open
  292. xywh {535 365 220 220}
  293. } {
  294. Fl_Group fmoscil {open
  295. xywh {535 440 220 140} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
  296. code0 {oscFM=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  297. code1 {int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;}
  298. code2 {oscFM->init(pars->VoicePar[nv].FMSmp,0,pars->VoicePar[nvoice].PFMoscilphase,master);}
  299. } {}
  300. Fl_Box {} {
  301. label {Mod.Oscillator}
  302. xywh {535 375 155 20} labelfont 1 align 20
  303. }
  304. Fl_Button changeFMoscilbutton {
  305. label Change
  306. callback {if (oscedit!=NULL) delete(oscedit);
  307. int nv=nvoice;
  308. if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;
  309. oscedit=new OscilEditor(pars->VoicePar[nv].FMSmp,fmoscil,NULL,NULL,master);}
  310. xywh {700 380 55 15} box THIN_UP_BOX labelfont 1 labelsize 11
  311. code0 {if (pars->VoicePar[nvoice].PextFMoscil>=0) o->labelcolor(FL_BLUE);}
  312. }
  313. Fl_Slider {} {
  314. label Phase
  315. callback {pars->VoicePar[nvoice].PFMoscilphase=64-(int)o->value();
  316. oscFM->phase=64-(int) o->value();
  317. fmoscil->redraw();}
  318. xywh {645 415 105 15} type {Horz Knob} box NO_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
  319. code0 {o->value(64-pars->VoicePar[nvoice].PFMoscilphase);}
  320. }
  321. Fl_Choice {} {
  322. label Use
  323. callback {pars->VoicePar[nvoice].PextFMoscil=(int)o->value()-1;
  324. if ((int) o->value() != 0) {
  325. oscFM->init(pars->VoicePar[(int) o->value()-1].FMSmp,master);
  326. changeFMoscilbutton->labelcolor(FL_BLUE);
  327. } else {
  328. oscFM->init(pars->VoicePar[nvoice].FMSmp,master);
  329. changeFMoscilbutton->labelcolor(FL_BLACK);
  330. };
  331. voiceFMparametersgroup->redraw();} open
  332. xywh {560 410 75 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
  333. code0 {o->add("Internal");}
  334. code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtM.%2d",i+1);o->add(tmp);};}
  335. code3 {o->value(pars->VoicePar[nvoice].PextFMoscil+1);}
  336. } {}
  337. }
  338. Fl_Choice {} {
  339. label {External Mod.}
  340. callback {pars->VoicePar[nvoice].PFMVoice=(int)o->value()-1;
  341. if ((int) o->value() != 0) {
  342. modoscil->deactivate();
  343. modfrequency->deactivate();
  344. } else {
  345. modoscil->activate();
  346. modfrequency->activate();
  347. };
  348. voiceFMparametersgroup->redraw();} open
  349. xywh {635 40 85 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  350. code0 {o->add("OFF");}
  351. code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtMod.%2d",i+1);o->add(tmp);};}
  352. code2 {o->value(pars->VoicePar[nvoice].PFMVoice+1);}
  353. code3 {if ((int) o->value() != 0) {modoscil->deactivate();modfrequency->deactivate();}}
  354. } {}
  355. }
  356. Fl_Choice {} {
  357. label {Type:}
  358. callback {pars->VoicePar[nvoice].PFMEnabled=(int)o->value();
  359. if (o->value()==0) voiceFMparametersgroup->deactivate();
  360. else voiceFMparametersgroup->activate();
  361. o->redraw();}
  362. xywh {535 40 80 20} down_box BORDER_BOX align 5
  363. code0 {o->value(pars->VoicePar[nvoice].PFMEnabled);}
  364. } {
  365. MenuItem {} {
  366. label OFF
  367. xywh {40 40 100 20} labelfont 1
  368. }
  369. MenuItem {} {
  370. label MORPH
  371. xywh {50 50 100 20} labelfont 1
  372. }
  373. MenuItem {} {
  374. label RING
  375. xywh {60 60 100 20} labelfont 1
  376. }
  377. MenuItem {} {
  378. label PM
  379. xywh {70 70 100 20} labelfont 1
  380. }
  381. MenuItem {} {
  382. label FM
  383. xywh {80 80 100 20} labelfont 1
  384. }
  385. MenuItem {} {
  386. label PITCH
  387. xywh {90 90 100 20} labelfont 1 deactivate
  388. }
  389. }
  390. Fl_Group {} {
  391. label FREQUENCY
  392. xywh {5 265 525 120} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  393. } {
  394. Fl_Group voicefreqenvgroup {
  395. label {ADSynth Voice - Frequency Envelope} open
  396. xywh {10 305 205 70} box FLAT_BOX color 51 align 144
  397. code0 {o->init(pars->VoicePar[nvoice].FreqEnvelope);}
  398. code1 {if (pars->VoicePar[nvoice].PFreqEnvelopeEnabled==0) o->deactivate();}
  399. class EnvelopeUI
  400. } {}
  401. Fl_Check_Button {} {
  402. label On
  403. callback {pars->VoicePar[nvoice].PFreqEnvelopeEnabled=(int)o->value();
  404. if (o->value()==0) voicefreqenvgroup->deactivate();
  405. else voicefreqenvgroup->activate();
  406. o->redraw();}
  407. tooltip {Forced Relase} xywh {15 310 50 10} down_box DOWN_BOX labelfont 1 labelsize 11
  408. code0 {o->value(pars->VoicePar[nvoice].PFreqEnvelopeEnabled);}
  409. }
  410. Fl_Group voicefreqlfogroup {
  411. label {Frequency LFO } open
  412. xywh {220 305 230 70} box FLAT_BOX color 47 align 144
  413. code0 {o->init(pars->VoicePar[nvoice].FreqLfo);}
  414. code1 {if (pars->VoicePar[nvoice].PFreqLfoEnabled==0) o->deactivate();}
  415. class LFOUI
  416. } {}
  417. Fl_Check_Button {} {
  418. label On
  419. callback {pars->VoicePar[nvoice].PFreqLfoEnabled=(int)o->value();
  420. if (o->value()==0) voicefreqlfogroup->deactivate();
  421. else voicefreqlfogroup->activate();
  422. o->redraw();}
  423. tooltip {Forced Relase} xywh {225 311 55 10} down_box DOWN_BOX labelfont 1 labelsize 11
  424. code0 {o->value(pars->VoicePar[nvoice].PFreqLfoEnabled);}
  425. }
  426. Fl_Counter {} {
  427. label Octave
  428. callback {int k=(int) o->value();
  429. if (k<0) k+=16;
  430. pars->VoicePar[nvoice].PCoarseDetune = k*1024+
  431. pars->VoicePar[nvoice].PCoarseDetune%1024;}
  432. tooltip Octave xywh {470 285 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
  433. code0 {int k=pars->VoicePar[nvoice].PCoarseDetune/1024;}
  434. code1 {if (k>=8) k-=16;}
  435. code2 {o->value(k);}
  436. }
  437. Fl_Counter {} {
  438. label {Coarse Det.}
  439. callback {int k=(int) o->value();
  440. if (k<0) k+=1024;
  441. pars->VoicePar[nvoice].PCoarseDetune = k+
  442. (pars->VoicePar[nvoice].PCoarseDetune/1024)*1024;}
  443. tooltip {Coarse Detune} xywh {455 355 60 20} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
  444. code0 {int k=pars->VoicePar[nvoice].PCoarseDetune%1024;}
  445. code1 {if (k>=512) k-=1024;}
  446. code2 {o->value(k);}
  447. code3 {o->lstep(10);}
  448. }
  449. Fl_Slider {} {
  450. callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
  451. detunevalueoutput->do_callback();}
  452. tooltip {Fine Detune (cents)} xywh {58 287 392 13} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1
  453. code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);}
  454. }
  455. Fl_Value_Output detunevalueoutput {
  456. label Detune
  457. callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
  458. xywh {10 287 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  459. code0 {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
  460. }
  461. Fl_Check_Button {} {
  462. label 440Hz
  463. callback {int x=(int) o->value();
  464. pars->VoicePar[nvoice].Pfixedfreq=x;
  465. if (x==0) fixedfreqetdial->deactivate();
  466. else fixedfreqetdial->activate();}
  467. tooltip {Set the voice base frequency to 440Hz} xywh {345 268 55 15} down_box DOWN_BOX labelfont 1 labelsize 11
  468. code0 {o->value(pars->VoicePar[nvoice].Pfixedfreq);}
  469. }
  470. Fl_Dial fixedfreqetdial {
  471. label {Eq.T.}
  472. callback {pars->VoicePar[nvoice].PfixedfreqET=(int) o->value();}
  473. tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {405 270 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
  474. code0 {o->value(pars->VoicePar[nvoice].PfixedfreqET);}
  475. code1 {if (pars->VoicePar[nvoice].Pfixedfreq==0) o->deactivate();}
  476. class WidgetPDial
  477. }
  478. Fl_Choice {} {
  479. label {Detune Type}
  480. callback {pars->VoicePar[nvoice].PDetuneType=(int) o->value();
  481. detunevalueoutput->do_callback();} open
  482. xywh {455 320 70 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  483. code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  484. code1 {o->value(pars->VoicePar[nvoice].PDetuneType);}
  485. } {}
  486. }
  487. Fl_Group voiceoscil {
  488. xywh {80 390 445 145} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
  489. code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  490. code1 {int nv=nvoice; if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;}
  491. code2 {osc->init(pars->VoicePar[nv].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);}
  492. } {}
  493. Fl_Button changevoiceoscilbutton {
  494. label Change
  495. callback {if (oscedit!=NULL) delete(oscedit);
  496. int nv=nvoice;
  497. if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;
  498. oscedit=new OscilEditor(pars->VoicePar[nv].OscilSmp,voiceoscil,NULL,NULL,master);}
  499. xywh {5 490 65 20} box THIN_UP_BOX labelfont 1 labelsize 11
  500. code0 {if (pars->VoicePar[nvoice].Pextoscil>=0) o->labelcolor(FL_BLUE);}
  501. }
  502. Fl_Box {} {
  503. label {Voice Oscillator}
  504. xywh {5 390 75 35} labelfont 1 labelsize 12 align 128
  505. }
  506. Fl_Slider {} {
  507. label Phase
  508. callback {pars->VoicePar[nvoice].Poscilphase=64-(int)o->value();
  509. osc->phase=64-(int) o->value();
  510. voiceoscil->redraw();}
  511. xywh {10 435 65 10} type {Horz Knob} box NO_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
  512. code0 {o->value(64-pars->VoicePar[nvoice].Poscilphase);}
  513. }
  514. Fl_Check_Button {} {
  515. label {R.}
  516. callback {pars->VoicePar[nvoice].Presonance=(int) o->value();}
  517. tooltip {Resonance On/Off} xywh {210 5 35 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 11
  518. code0 {o->value(pars->VoicePar[nvoice].Presonance);}
  519. }
  520. Fl_Choice {} {
  521. label {Use Oscil.}
  522. callback {pars->VoicePar[nvoice].Pextoscil=(int)o->value()-1;
  523. if ((int) o->value() != 0) {
  524. osc->init(pars->VoicePar[(int) o->value()-1].OscilSmp,master);
  525. changevoiceoscilbutton->labelcolor(FL_BLUE);
  526. } else {
  527. osc->init(pars->VoicePar[nvoice].OscilSmp,master);
  528. changevoiceoscilbutton->labelcolor(FL_BLACK);
  529. };
  530. voiceparametersgroup->redraw();
  531. voiceonbutton->redraw();} open
  532. xywh {5 470 65 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  533. code0 {o->add("Internal");}
  534. code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"Ext.%2d",i+1);o->add(tmp);};}
  535. code3 {o->value(pars->VoicePar[nvoice].Pextoscil+1);}
  536. } {}
  537. Fl_Group {} {open
  538. xywh {5 540 515 45} box UP_FRAME
  539. } {
  540. Fl_Dial {} {
  541. label Stereo
  542. callback {pars->VoicePar[nvoice].Unison_stereo_spread=(int)o->value();}
  543. tooltip {Stereo Spread} xywh {285 555 25 30} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  544. code0 {o->value(pars->VoicePar[nvoice].Unison_stereo_spread);}
  545. class WidgetPDial
  546. }
  547. Fl_Choice {} {
  548. label Unison
  549. callback {pars->set_unison_size_index(nvoice,(int) o->value());} open
  550. tooltip {Unison size} xywh {10 560 75 20} down_box BORDER_BOX labelfont 1 align 5 textfont 1 textsize 10
  551. code0 {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);};}
  552. code1 {o->value(pars->get_unison_size_index(nvoice));}
  553. } {}
  554. Fl_Dial {} {
  555. label Vibratto
  556. callback {pars->VoicePar[nvoice].Unison_vibratto=(int)o->value();}
  557. tooltip Vibratto xywh {340 555 25 30} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  558. code0 {o->value(pars->VoicePar[nvoice].Unison_vibratto);}
  559. class WidgetPDial
  560. }
  561. Fl_Choice {} {
  562. label Invert
  563. callback {pars->VoicePar[nvoice].Unison_invert_phase=(int) o->value();} open
  564. tooltip {Phase Invert} xywh {445 560 65 15} down_box BORDER_BOX labelsize 11 align 5 textfont 1 textsize 10
  565. code0 {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);};}
  566. code1 {o->value(pars->VoicePar[nvoice].Unison_invert_phase);}
  567. } {}
  568. Fl_Slider {} {
  569. label {Frequency Spread}
  570. callback {pars->VoicePar[nvoice].Unison_frequency_spread=(int)o->value();
  571. unisonspreadoutput->do_callback();}
  572. tooltip {Frequency Spread of the Unison} xywh {95 562 125 13} type {Horz Knob} box NO_BOX labelsize 12 align 1 maximum 127 step 1 value 64
  573. code0 {o->value(pars->VoicePar[nvoice].Unison_frequency_spread);}
  574. }
  575. Fl_Value_Output unisonspreadoutput {
  576. label {(cents)}
  577. callback {o->value(pars->getUnisonFrequencySpreadCents(nvoice));}
  578. xywh {225 560 40 15} labelsize 10 align 5 maximum 1000 step 0.1 textfont 1 textsize 10
  579. code0 {o->value(pars->getUnisonFrequencySpreadCents(nvoice));}
  580. }
  581. Fl_Dial {} {
  582. label {Vib.speed}
  583. callback {pars->VoicePar[nvoice].Unison_vibratto_speed=(int)o->value();}
  584. tooltip {Vibratto Average Speed} xywh {390 555 25 30} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  585. code0 {o->value(pars->VoicePar[nvoice].Unison_vibratto_speed);}
  586. class WidgetPDial
  587. }
  588. }
  589. }
  590. Fl_Group {} {
  591. label AMPLITUDE open
  592. xywh {5 40 240 220} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  593. } {
  594. Fl_Value_Slider {} {
  595. label Vol
  596. callback {pars->VoicePar[nvoice].PVolume=(int)o->value();}
  597. tooltip Volume xywh {10 60 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
  598. code0 {o->value(pars->VoicePar[nvoice].PVolume);}
  599. }
  600. Fl_Value_Slider {} {
  601. label {V.Sns}
  602. callback {pars->VoicePar[nvoice].PAmpVelocityScaleFunction=(int) o->value();}
  603. tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 80 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
  604. code0 {o->value(pars->VoicePar[nvoice].PAmpVelocityScaleFunction);}
  605. }
  606. Fl_Group voiceampenvgroup {
  607. label {ADSynth Voice - Amplitude Envelope} open
  608. xywh {10 105 205 70} box FLAT_BOX color 51 align 144
  609. code0 {o->init(pars->VoicePar[nvoice].AmpEnvelope);}
  610. code1 {if (pars->VoicePar[nvoice].PAmpEnvelopeEnabled==0) o->deactivate();}
  611. class EnvelopeUI
  612. } {}
  613. Fl_Dial {} {
  614. label Pan
  615. callback {pars->VoicePar[nvoice].PPanning=(int) o->value();}
  616. tooltip {Panning (leftmost is Random)} xywh {210 60 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  617. code0 {o->value(pars->VoicePar[nvoice].PPanning);}
  618. class WidgetPDial
  619. }
  620. Fl_Check_Button {} {
  621. label On
  622. callback {pars->VoicePar[nvoice].PAmpEnvelopeEnabled=(int)o->value();
  623. if (o->value()==0) voiceampenvgroup->deactivate();
  624. else voiceampenvgroup->activate();
  625. o->redraw();}
  626. tooltip {Forced Relase} xywh {15 110 50 10} down_box DOWN_BOX labelfont 1 labelsize 11
  627. code0 {o->value(pars->VoicePar[nvoice].PAmpEnvelopeEnabled);}
  628. }
  629. Fl_Group voiceamplfogroup {
  630. label {Amplitude LFO } open
  631. xywh {10 180 230 75} box FLAT_BOX color 47 align 144
  632. code0 {o->init(pars->VoicePar[nvoice].AmpLfo);}
  633. code1 {if (pars->VoicePar[nvoice].PAmpLfoEnabled==0) o->deactivate();}
  634. class LFOUI
  635. } {}
  636. Fl_Check_Button {} {
  637. label On
  638. callback {pars->VoicePar[nvoice].PAmpLfoEnabled=(int)o->value();
  639. if (o->value()==0) voiceamplfogroup->deactivate();
  640. else voiceamplfogroup->activate();
  641. o->redraw();}
  642. tooltip {Forced Relase} xywh {15 185 55 10} down_box DOWN_BOX labelfont 1 labelsize 11
  643. code0 {o->value(pars->VoicePar[nvoice].PAmpLfoEnabled);}
  644. }
  645. Fl_Check_Button {} {
  646. label Minus
  647. callback {pars->VoicePar[nvoice].PVolumeminus=(int)o->value();}
  648. xywh {10 45 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  649. code0 {o->value(pars->VoicePar[nvoice].PVolumeminus);}
  650. }
  651. }
  652. Fl_Group voicefiltergroup {
  653. label FILTER open
  654. xywh {245 5 285 260} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  655. code0 {if (pars->VoicePar[nvoice].PFilterEnabled==0) o->deactivate();}
  656. } {
  657. Fl_Group {} {
  658. label {ADsynth Voice - Filter} open
  659. xywh {250 30 275 75} box FLAT_BOX color 50 align 144
  660. code0 {o->init(pars->VoicePar[nvoice].VoiceFilter,NULL,NULL);}
  661. class FilterUI
  662. } {}
  663. Fl_Group voicefilterenvgroup {
  664. label {ADSynth Voice - Filter Envelope} open
  665. xywh {250 115 275 70} box FLAT_BOX color 51 align 144
  666. code0 {o->init(pars->VoicePar[nvoice].FilterEnvelope);}
  667. code1 {if (pars->VoicePar[nvoice].PFilterEnvelopeEnabled==0) o->deactivate();}
  668. class EnvelopeUI
  669. } {}
  670. Fl_Check_Button {} {
  671. label On
  672. callback {pars->VoicePar[nvoice].PFilterEnvelopeEnabled=(int)o->value();
  673. if (o->value()==0) voicefilterenvgroup->deactivate();
  674. else voicefilterenvgroup->activate();
  675. o->redraw();}
  676. tooltip {Forced Relase} xywh {255 119 55 10} down_box DOWN_BOX labelfont 1 labelsize 11
  677. code0 {o->value(pars->VoicePar[nvoice].PFilterEnvelopeEnabled);}
  678. }
  679. Fl_Group voicefilterlfogroup {
  680. label {Filter LFO } open
  681. xywh {250 190 230 70} box FLAT_BOX color 47 align 144
  682. code0 {o->init(pars->VoicePar[nvoice].FilterLfo);}
  683. code1 {if (pars->VoicePar[nvoice].PFilterLfoEnabled==0) o->deactivate();}
  684. class LFOUI
  685. } {}
  686. Fl_Check_Button {} {
  687. label On
  688. callback {pars->VoicePar[nvoice].PFilterLfoEnabled=(int)o->value();
  689. if (o->value()==0) voicefilterlfogroup->deactivate();
  690. else voicefilterlfogroup->activate();
  691. o->redraw();}
  692. tooltip {Forced Relase} xywh {255 196 55 10} down_box DOWN_BOX labelfont 1 labelsize 11
  693. code0 {o->value(pars->VoicePar[nvoice].PFilterLfoEnabled);}
  694. }
  695. }
  696. Fl_Group {} {
  697. label 01
  698. xywh {5 5 55 35} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 16
  699. code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));}
  700. } {}
  701. Fl_Choice {} {
  702. callback {int x=(int) o->value();
  703. pars->VoicePar[nvoice].Type=x;
  704. if (x==0) voicemodegroup->activate();
  705. else voicemodegroup->deactivate();
  706. noiselabel->do_callback();}
  707. tooltip {Oscillator Type (sound/noise)} xywh {5 515 65 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
  708. code0 {o->value(pars->VoicePar[nvoice].Type);}
  709. code1 {if (pars->VoicePar[nvoice].Type!=0) voicemodegroup->deactivate();}
  710. } {
  711. MenuItem {} {
  712. label Sound
  713. xywh {5 5 100 20} labelfont 1 labelsize 11
  714. }
  715. MenuItem {} {
  716. label NOISE
  717. xywh {15 15 100 20} labelfont 1 labelsize 11 labelcolor 1
  718. }
  719. }
  720. Fl_Check_Button bypassfiltercheckbutton {
  721. label {Bypass Global F.}
  722. callback {pars->VoicePar[nvoice].Pfilterbypass=(int)o->value();}
  723. xywh {425 10 100 20} down_box DOWN_BOX labelfont 1 labelsize 10 align 148
  724. code0 {o->value(pars->VoicePar[nvoice].Pfilterbypass);}
  725. }
  726. Fl_Group {} {open
  727. xywh {115 5 95 35} box THIN_UP_BOX
  728. } {
  729. Fl_Value_Slider {} {
  730. label Delay
  731. callback {pars->VoicePar[nvoice].PDelay=(int)o->value();}
  732. tooltip Volume xywh {120 21 84 12} type {Horz Knob} box NO_BOX labelsize 11 align 5 maximum 127 step 1
  733. code0 {o->value(pars->VoicePar[nvoice].PDelay);}
  734. }
  735. }
  736. Fl_Check_Button {} {
  737. label On
  738. callback {pars->VoicePar[nvoice].PFilterEnabled=(int)o->value();
  739. if (o->value()==0) voicefiltergroup->deactivate();
  740. else voicefiltergroup->activate();
  741. o->redraw();
  742. bypassfiltercheckbutton->redraw();}
  743. tooltip {Enable Filter} xywh {250 15 60 15} down_box DOWN_BOX labelfont 1 labelsize 11
  744. code0 {o->value(pars->VoicePar[nvoice].PFilterEnabled);}
  745. }
  746. Fl_Box noiselabel {
  747. label {White Noise}
  748. callback {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();}
  749. xywh {150 430 300 65} labelfont 1 labelsize 50 labelcolor 7
  750. code0 {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();}
  751. }
  752. }
  753. Fl_Check_Button voiceonbutton {
  754. label On
  755. callback {pars->VoicePar[nvoice].Enabled=(int)o->value();
  756. if (o->value()==0) voiceparametersgroup->deactivate();
  757. else voiceparametersgroup->activate();
  758. o->redraw();}
  759. xywh {60 5 55 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13
  760. code0 {o->value(pars->VoicePar[nvoice].Enabled);}
  761. }
  762. }
  763. }
  764. Function {ADvoiceUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
  765. code {nvoice=0;
  766. pars=NULL;
  767. oscedit=NULL;} {}
  768. }
  769. Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {open
  770. } {
  771. code {pars=parameters;
  772. nvoice=nvoice_;
  773. master=master_;
  774. make_window();
  775. end();
  776. ADnoteVoiceParameters->show();} {}
  777. }
  778. Function {~ADvoiceUI()} {open
  779. } {
  780. code {ADnoteVoiceParameters->hide();
  781. hide();
  782. if (oscedit!=NULL) {
  783. delete(oscedit);
  784. };
  785. //delete (ADnoteVoiceParameters);} {}
  786. }
  787. decl {int nvoice;} {private local
  788. }
  789. decl {ADnoteParameters *pars;} {private local
  790. }
  791. decl {OscilEditor *oscedit;} {private local
  792. }
  793. decl {Oscilloscope *osc;} {private local
  794. }
  795. decl {Oscilloscope *oscFM;} {private local
  796. }
  797. decl {Master *master;} {private local
  798. }
  799. }
  800. class ADnoteUI {open : {public PresetsUI_}
  801. } {
  802. Function {make_window()} {open private
  803. } {
  804. Fl_Window ADnoteGlobalParameters {
  805. label {ADsynth Global Parameters of the Instrument} open
  806. xywh {454 296 540 430} type Double visible
  807. } {
  808. Fl_Group {} {
  809. label FREQUENCY open
  810. xywh {5 280 530 115} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  811. } {
  812. Fl_Group freqenv {
  813. label {ADSynth Global - Frequency Envelope} open
  814. xywh {10 320 205 70} box FLAT_BOX color 51 align 144
  815. code0 {o->init(pars->GlobalPar.FreqEnvelope);}
  816. class EnvelopeUI
  817. } {}
  818. Fl_Counter octave {
  819. label Octave
  820. callback {int k=(int) o->value();
  821. if (k<0) k+=16;
  822. pars->GlobalPar.PCoarseDetune = k*1024+
  823. pars->GlobalPar.PCoarseDetune%1024;}
  824. tooltip Octave xywh {455 300 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
  825. code0 {int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;}
  826. code2 {o->value(k);}
  827. }
  828. Fl_Counter coarsedet {
  829. label {Coarse det.}
  830. callback {int k=(int) o->value();
  831. if (k<0) k+=1024;
  832. pars->GlobalPar.PCoarseDetune = k+
  833. (pars->GlobalPar.PCoarseDetune/1024)*1024;}
  834. tooltip {Coarse Detune} xywh {460 370 60 20} type Simple labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 11
  835. code0 {int k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;}
  836. code2 {o->value(k);}
  837. code3 {o->lstep(10);}
  838. }
  839. Fl_Group freqlfo {
  840. label {Frequency LFO } open
  841. xywh {220 320 230 70} box FLAT_BOX color 47 align 144
  842. code0 {o->init(pars->GlobalPar.FreqLfo);}
  843. class LFOUI
  844. } {}
  845. Fl_Slider freq {
  846. callback {pars->GlobalPar.PDetune=(int)o->value()+8192;
  847. detunevalueoutput->do_callback();}
  848. tooltip {Fine Detune (cents)} xywh {60 300 385 15} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1
  849. code0 {o->value(pars->GlobalPar.PDetune-8192);}
  850. }
  851. Fl_Value_Output detunevalueoutput {
  852. label Detune
  853. callback {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));}
  854. xywh {12 300 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  855. code0 {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));}
  856. }
  857. Fl_Choice detunetype {
  858. label {Detune Type}
  859. callback {pars->GlobalPar.PDetuneType=(int) o->value()+1;
  860. detunevalueoutput->do_callback();} open
  861. xywh {455 340 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  862. code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  863. code1 {o->value(pars->GlobalPar.PDetuneType-1);}
  864. } {}
  865. Fl_Dial {} {
  866. label relBW
  867. callback {pars->GlobalPar.PBandwidth=(int) o->value();
  868. pars->getBandwidthDetuneMultiplier();
  869. for (int i=0;i<NUM_VOICES;i++){
  870. voicelistitem[i]->refreshlist();
  871. };}
  872. tooltip {Bandwidth - how the relative fine detune of the voice are changed} xywh {505 295 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  873. code0 {o->value(pars->GlobalPar.PBandwidth);}
  874. class WidgetPDial
  875. }
  876. }
  877. Fl_Group {} {
  878. label AMPLITUDE
  879. xywh {5 5 240 260} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  880. } {
  881. Fl_Value_Slider volume {
  882. label Vol
  883. callback {pars->GlobalPar.PVolume=(int)o->value();}
  884. tooltip Volume xywh {10 30 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
  885. code0 {o->value(pars->GlobalPar.PVolume);}
  886. }
  887. Fl_Value_Slider vsns {
  888. label {V.Sns}
  889. callback {pars->GlobalPar.PAmpVelocityScaleFunction=(int) o->value();}
  890. tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 50 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
  891. code0 {o->value(pars->GlobalPar.PAmpVelocityScaleFunction);}
  892. }
  893. Fl_Dial pan {
  894. label Pan
  895. callback {pars->GlobalPar.PPanning=(int) o->value();}
  896. tooltip {Panning (leftmost is Random)} xywh {210 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  897. code0 {o->value(pars->GlobalPar.PPanning);}
  898. class WidgetPDial
  899. }
  900. Fl_Dial pstr {
  901. label {P.Str.}
  902. callback {pars->GlobalPar.PPunchStrength=(int) o->value();}
  903. tooltip {Punch Strength} xywh {125 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  904. code0 {o->value(pars->GlobalPar.PPunchStrength);}
  905. class WidgetPDial
  906. }
  907. Fl_Dial pt {
  908. label {P.t.}
  909. callback {pars->GlobalPar.PPunchTime=(int) o->value();}
  910. tooltip {Punch Time (duration)} xywh {155 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  911. code0 {o->value(pars->GlobalPar.PPunchTime);}
  912. class WidgetPDial
  913. }
  914. Fl_Dial pstc {
  915. label {P.Stc.}
  916. callback {pars->GlobalPar.PPunchStretch=(int) o->value();}
  917. tooltip {Punch Stretch} xywh {185 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  918. code0 {o->value(pars->GlobalPar.PPunchStretch);}
  919. class WidgetPDial
  920. }
  921. Fl_Dial pvel {
  922. label {P.Vel.}
  923. callback {pars->GlobalPar.PPunchVelocitySensing=(int) o->value();}
  924. tooltip {Punch Velocity Sensing} xywh {215 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  925. code0 {o->value(pars->GlobalPar.PPunchVelocitySensing);}
  926. class WidgetPDial
  927. }
  928. Fl_Group ampenv {
  929. label {ADSynth Global - Amplitude Envelope} open
  930. xywh {10 75 205 70} box FLAT_BOX color 51 align 144
  931. code0 {o->init(pars->GlobalPar.AmpEnvelope);}
  932. class EnvelopeUI
  933. } {}
  934. Fl_Group amplfo {
  935. label {Amplitude LFO } open
  936. xywh {10 150 230 70} box FLAT_BOX color 47 align 144
  937. code0 {o->init(pars->GlobalPar.AmpLfo);}
  938. class LFOUI
  939. } {}
  940. Fl_Check_Button rndgrp {
  941. label {Rnd Grp}
  942. callback {pars->GlobalPar.Hrandgrouping=(int) o->value();}
  943. tooltip {How the Harmonic Amplitude is applied to voices that use the same oscillator} xywh {70 235 40 25} down_box DOWN_BOX labelsize 10 align 148
  944. code0 {o->value(pars->GlobalPar.Hrandgrouping);}
  945. }
  946. }
  947. Fl_Group {} {
  948. label FILTER open selected
  949. xywh {250 5 285 265} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  950. } {
  951. Fl_Group filterenv {
  952. label {ADSynth Global - Filter Envelope} open
  953. xywh {255 118 275 70} box FLAT_BOX color 51 align 144
  954. code0 {o->init(pars->GlobalPar.FilterEnvelope);}
  955. class EnvelopeUI
  956. } {}
  957. Fl_Group filterlfo {
  958. label {Filter LFO} open
  959. xywh {255 195 230 70} box FLAT_BOX color 47 align 144
  960. code0 {o->init(pars->GlobalPar.FilterLfo);}
  961. class LFOUI
  962. } {}
  963. Fl_Group filterui {
  964. label {ADsynth Global - Filter} open
  965. xywh {255 35 275 75} box FLAT_BOX color 50 align 144
  966. code0 {o->init(pars->GlobalPar.GlobalFilter,&pars->GlobalPar.PFilterVelocityScale,&pars->GlobalPar.PFilterVelocityScaleFunction);}
  967. class FilterUI
  968. } {}
  969. }
  970. Fl_Check_Button stereo {
  971. label Stereo
  972. callback {pars->GlobalPar.PStereo=(int) o->value();}
  973. xywh {5 230 65 35} down_box DOWN_BOX labelsize 11
  974. code0 {o->value(pars->GlobalPar.PStereo);}
  975. }
  976. Fl_Button {} {
  977. label {Show Voice List}
  978. callback {for (int i=0;i<NUM_VOICES;i++){
  979. voicelistitem[i]->refreshlist();
  980. }
  981. ADnoteVoiceList->show();}
  982. xywh {180 400 125 25} labelsize 12
  983. }
  984. Fl_Button {} {
  985. label {Show Voice Parameters}
  986. callback {ADnoteVoice->show();}
  987. xywh {5 400 170 25} labelsize 12
  988. }
  989. Fl_Button {} {
  990. label Close
  991. callback {ADnoteGlobalParameters->hide();}
  992. xywh {475 400 60 25} box THIN_UP_BOX
  993. }
  994. Fl_Button {} {
  995. label Resonance
  996. callback {resui->resonancewindow->redraw();
  997. resui->resonancewindow->show();}
  998. tooltip Resonance xywh {309 400 86 25} box THIN_UP_BOX labelsize 12
  999. }
  1000. Fl_Button {} {
  1001. label C
  1002. callback {presetsui->copy(pars);}
  1003. xywh {405 405 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
  1004. }
  1005. Fl_Button {} {
  1006. label P
  1007. callback {presetsui->paste(pars,this);}
  1008. xywh {435 405 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
  1009. }
  1010. }
  1011. Fl_Window ADnoteVoice {
  1012. label {ADsynth Voice Parameters} open
  1013. xywh {907 477 765 620} type Double visible
  1014. } {
  1015. Fl_Group advoice {
  1016. xywh {0 0 765 585}
  1017. code0 {o->init(pars,nvoice,master);}
  1018. code1 {o->show();}
  1019. class ADvoiceUI
  1020. } {}
  1021. Fl_Button {} {
  1022. label {Close Window}
  1023. callback {ADnoteVoice->hide();}
  1024. xywh {305 590 195 25} box THIN_UP_BOX labelfont 1
  1025. }
  1026. Fl_Counter currentvoicecounter {
  1027. label {Current Voice}
  1028. callback {nvoice=(int)o->value()-1;
  1029. advoice->hide();
  1030. ADnoteVoice->remove(advoice);
  1031. delete advoice;
  1032. advoice=new ADvoiceUI(0,0,765,585);
  1033. ADnoteVoice->add(advoice);
  1034. advoice->init(pars,nvoice,master);
  1035. advoice->show();
  1036. ADnoteVoice->redraw();}
  1037. xywh {10 590 130 25} type Simple labelfont 1 align 8 minimum 0 maximum 2 step 1 value 1 textfont 1 textsize 13
  1038. code0 {o->bounds(1,NUM_VOICES);}
  1039. }
  1040. Fl_Button {} {
  1041. label C
  1042. callback {presetsui->copy(pars,nvoice);}
  1043. xywh {705 595 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
  1044. }
  1045. Fl_Button {} {
  1046. label P
  1047. callback {presetsui->paste(pars,this,nvoice);}
  1048. xywh {735 595 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
  1049. }
  1050. }
  1051. Fl_Window ADnoteVoiceList {
  1052. label {ADsynth Voices list}
  1053. xywh {32 266 650 260} type Double hide
  1054. } {
  1055. Fl_Text_Display {} {
  1056. label {No.}
  1057. xywh {10 15 30 10} box NO_BOX labelfont 1 labelsize 11
  1058. }
  1059. Fl_Text_Display {} {
  1060. label Vol
  1061. xywh {145 15 30 10} box NO_BOX labelfont 1 labelsize 11
  1062. }
  1063. Fl_Text_Display {} {
  1064. label Detune
  1065. xywh {384 15 25 10} box NO_BOX labelfont 1 labelsize 11
  1066. }
  1067. Fl_Text_Display {} {
  1068. label Pan
  1069. xywh {210 15 30 10} box NO_BOX labelfont 1 labelsize 11
  1070. }
  1071. Fl_Text_Display {} {
  1072. label {Vib. Depth}
  1073. xywh {560 15 30 10} box NO_BOX labelfont 1 labelsize 11
  1074. }
  1075. Fl_Text_Display {} {
  1076. label {R.}
  1077. xywh {245 15 25 10} box NO_BOX labelfont 1 labelsize 11
  1078. }
  1079. Fl_Button {} {
  1080. label {Hide Voice List}
  1081. callback {ADnoteVoiceList->hide();}
  1082. xywh {255 237 125 20}
  1083. }
  1084. Fl_Scroll {} {open
  1085. xywh {0 15 640 220} type VERTICAL box THIN_UP_BOX
  1086. } {
  1087. Fl_Pack {} {open
  1088. xywh {0 20 620 210}
  1089. code0 {for (int i=0;i<NUM_VOICES;i++){voicelistitem[i]=new ADvoicelistitem(0,0,620,25,"");voicelistitem[i]->init(pars,i,master);}}
  1090. } {}
  1091. }
  1092. }
  1093. }
  1094. Function {ADnoteUI(ADnoteParameters *parameters,Master *master_)} {} {
  1095. code {pars=parameters;
  1096. master=master_;
  1097. nvoice=0;
  1098. resui=new ResonanceUI(pars->GlobalPar.Reson);
  1099. make_window();} {}
  1100. }
  1101. Function {~ADnoteUI()} {} {
  1102. code {ADnoteVoiceList->hide();
  1103. ADnoteGlobalParameters->hide();
  1104. ADnoteVoice->hide();
  1105. delete(ADnoteVoiceList);
  1106. delete(ADnoteGlobalParameters);
  1107. delete(ADnoteVoice);
  1108. delete(resui);} {}
  1109. }
  1110. Function {refresh()} {} {
  1111. code {volume->value(pars->GlobalPar.PVolume);
  1112. vsns->value(pars->GlobalPar.PAmpVelocityScaleFunction);
  1113. pan->value(pars->GlobalPar.PPanning);
  1114. stereo->value(pars->GlobalPar.PStereo);
  1115. rndgrp->value(pars->GlobalPar.Hrandgrouping);
  1116. pstr->value(pars->GlobalPar.PPunchStrength);
  1117. pt->value(pars->GlobalPar.PPunchTime);
  1118. pstc->value(pars->GlobalPar.PPunchStretch);
  1119. pvel->value(pars->GlobalPar.PPunchVelocitySensing);
  1120. detunevalueoutput->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));
  1121. freq->value(pars->GlobalPar.PDetune-8192);
  1122. int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;
  1123. octave->value(k);
  1124. detunetype->value(pars->GlobalPar.PDetuneType-1);
  1125. k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;
  1126. coarsedet->value(k);
  1127. amplfo->refresh();
  1128. freqlfo->refresh();
  1129. filterlfo->refresh();
  1130. ampenv->refresh();
  1131. freqenv->refresh();
  1132. filterenv->refresh();
  1133. filterui->refresh();
  1134. for (int i=0;i<NUM_VOICES;i++) voicelistitem[i]->refreshlist();
  1135. resui->refresh();
  1136. currentvoicecounter->do_callback();} {}
  1137. }
  1138. decl {ADnoteParameters *pars;} {private local
  1139. }
  1140. decl {ResonanceUI *resui;} {private local
  1141. }
  1142. decl {Master *master;} {private local
  1143. }
  1144. decl {int nvoice;} {private local
  1145. }
  1146. decl {ADvoicelistitem *voicelistitem[NUM_VOICES];} {private local
  1147. }
  1148. }