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.

1519 lines
55KB

  1. // generated by Fast Light User Interface Designer (fluid) version 1.0300
  2. #include "zynaddsubfx/UI/PADnoteUI.h"
  3. #include <math.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. PADnoteHarmonicProfile::PADnoteHarmonicProfile(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
  8. pars=NULL;
  9. }
  10. void PADnoteHarmonicProfile::init(PADnoteParameters *pars,Master *master_) {
  11. master=master_;
  12. this->pars=pars;
  13. }
  14. void PADnoteHarmonicProfile::draw() {
  15. int ox=x(),oy=y(),lx=w(),ly=h();
  16. if (!visible()) return;
  17. float smps[lx];
  18. float realbw=pars->getprofile(smps,lx);
  19. bool active=active_r();
  20. //draw the equivalent bandwidth
  21. if (active) fl_color(220,220,220);
  22. else fl_color(160,165,165);
  23. fl_line_style(FL_DASH);
  24. int rbw=(int)(realbw*(lx-1.0)/2.0);
  25. fl_begin_line();
  26. for (int i=lx/2-rbw;i<(lx/2+rbw);i++) { fl_vertex(ox+i,oy); }
  27. fl_end_line();
  28. fl_line_style(FL_DASH);
  29. if (active) fl_color(200,200,200);
  30. else fl_color(160,160,160);
  31. for (int i=1;i<10;i++){
  32. int kx=(int)(lx/10.0*i);
  33. fl_line( ox + kx, oy, ox + kx, oy + ly - 1 );
  34. };
  35. for (int i=1;i<5;i++){
  36. int ky=(int)(ly/5.0*i);
  37. fl_line(ox,oy+ly-ky,ox+lx,oy+ly-ky-1);
  38. };
  39. fl_color(120,120,120);
  40. fl_line_style(FL_DASH);
  41. fl_line(ox+lx/2,oy,ox+lx/2,oy+ly);
  42. //draw the graph
  43. fl_line_style(FL_SOLID);
  44. if (active) fl_color(180,210,240);
  45. else fl_color(150,150,155);
  46. fl_color( fl_color_add_alpha( fl_color(), 127 ) );
  47. fl_begin_polygon();
  48. fl_vertex( ox, oy + h() );
  49. for (int i=0;i<lx;i++){
  50. int val=(int) ((ly-2)*smps[i]);
  51. // fl_vertex(ox+i,oy+ly-1);
  52. fl_vertex(ox+i,oy+ly-1-val);
  53. // if (active) fl_color(0,0,100);
  54. // else fl_color(150,150,150);
  55. // if (i>0)
  56. // {
  57. // fl_vertex(ox+i-1,oy+ly-2-old);
  58. // fl_vertex(ox+i,oy+ly-2-val);
  59. // }
  60. };
  61. fl_vertex( ox + w(), oy + h() );
  62. fl_end_polygon();
  63. fl_line_style(FL_DASH);
  64. if (active) fl_color(0,100,220);
  65. else fl_color(150,160,170);
  66. fl_line(ox+lx/2-rbw,oy,ox+lx/2-rbw,oy+ly-1);
  67. fl_line(ox+lx/2+rbw,oy,ox+lx/2+rbw,oy+ly-1);
  68. fl_line_style(0);
  69. }
  70. PADnoteOvertonePosition::PADnoteOvertonePosition(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
  71. pars=NULL;
  72. }
  73. void PADnoteOvertonePosition::init(PADnoteParameters *pars,Master *master_) {
  74. master=master_;
  75. this->pars=pars;
  76. }
  77. void PADnoteOvertonePosition::draw() {
  78. if (!visible()) return;
  79. const int maxdb=60;
  80. int ox=x(),oy=y(),lx=w(),ly=h();
  81. const int maxharmonic=64;
  82. for (int i=1;i<maxharmonic;i++){
  83. fl_color(100,100,100);
  84. fl_line_style(FL_DOT);
  85. if (i%5==0) fl_line_style(0);
  86. if (i%10==0) fl_color(120,120,120);
  87. int kx=(int)(lx/(float)maxharmonic*i);
  88. fl_line(ox+kx,oy,ox+kx,oy+ly);
  89. };
  90. int n=synth->oscilsize/2;
  91. float spc[n];
  92. for (int i=0;i<n;i++) spc[i]=0.0;
  93. pthread_mutex_lock(&master->mutex);
  94. pars->oscilgen->getspectrum(n,spc,0);
  95. pthread_mutex_unlock(&master->mutex);
  96. //normalize
  97. float max=0;
  98. for (int i=0;i<n;i++){
  99. float x=fabs(spc[i]);
  100. if (max<x) max=x;
  101. }
  102. if (max<0.000001) max=1.0;
  103. max=max*1.05;
  104. float spectrum[lx];
  105. for (int i=0;i<lx;i++) spectrum[i]=0;
  106. for (int i=1;i<n;i++){
  107. float nhr=pars->getNhr(i);
  108. int kx=(int)(lx/(float)maxharmonic*nhr);
  109. if ((kx<0)||(kx>lx)) continue;
  110. spectrum[kx]=spc[i-1]/max+1e-9;
  111. };
  112. fl_color(180,0,0);
  113. fl_line_style(0);
  114. if (pars->Pmode==2){
  115. int old=0;
  116. for (int i=1;i<lx;i++){
  117. if ((spectrum[i]>1e-10)||(i==(lx-1))){
  118. int delta=i-old;
  119. float val1=spectrum[old];
  120. float val2=spectrum[i];
  121. float idelta=1.0/delta;
  122. for (int j=0;j<delta;j++){
  123. float x=idelta*j;
  124. spectrum[old+j]=val1*(1.0-x)+val2*x;
  125. };
  126. old=i;
  127. };
  128. };
  129. };
  130. for (int i=0;i<lx;i++){
  131. float x=spectrum[i];
  132. if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
  133. else continue;
  134. int yy=(int)(x*ly);
  135. fl_line(ox+i,oy+ly-1-yy,ox+i,oy+ly-1);
  136. };
  137. }
  138. void PADnoteUI::cb__i(Fl_Tabs* o, void*) {
  139. if (o->value()!=harmonicstructuregroup) applybutton->hide();
  140. else applybutton->show();
  141. }
  142. void PADnoteUI::cb_(Fl_Tabs* o, void* v) {
  143. ((PADnoteUI*)(o->parent()->user_data()))->cb__i(o,v);
  144. }
  145. void PADnoteUI::cb_hpbasepar1_i(WidgetPDial* o, void*) {
  146. pars->Php.base.par1=(int) o->value();
  147. hprofile->redraw();
  148. cbwidget->do_callback();
  149. }
  150. void PADnoteUI::cb_hpbasepar1(WidgetPDial* o, void* v) {
  151. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpbasepar1_i(o,v);
  152. }
  153. void PADnoteUI::cb_hpbasetype_i(Fl_Choice* o, void*) {
  154. pars->Php.base.type=o->value();
  155. hprofile->redraw();
  156. cbwidget->do_callback();
  157. }
  158. void PADnoteUI::cb_hpbasetype(Fl_Choice* o, void* v) {
  159. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpbasetype_i(o,v);
  160. }
  161. Fl_Menu_Item PADnoteUI::menu_hpbasetype[] = {
  162. {"Gauss", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  163. {"Square", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  164. {"DoubleExp", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  165. {0,0,0,0,0,0,0,0,0}
  166. };
  167. void PADnoteUI::cb_hpfreqmult_i(WidgetPDial* o, void*) {
  168. pars->Php.freqmult=(int) o->value();
  169. hprofile->redraw();
  170. cbwidget->do_callback();
  171. }
  172. void PADnoteUI::cb_hpfreqmult(WidgetPDial* o, void* v) {
  173. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpfreqmult_i(o,v);
  174. }
  175. void PADnoteUI::cb_hpmpar1_i(WidgetPDial* o, void*) {
  176. pars->Php.modulator.par1=(int) o->value();
  177. hprofile->redraw();
  178. cbwidget->do_callback();
  179. }
  180. void PADnoteUI::cb_hpmpar1(WidgetPDial* o, void* v) {
  181. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpmpar1_i(o,v);
  182. }
  183. void PADnoteUI::cb_hpmfreq_i(WidgetPDial* o, void*) {
  184. pars->Php.modulator.freq=(int) o->value();
  185. hprofile->redraw();
  186. cbwidget->do_callback();
  187. }
  188. void PADnoteUI::cb_hpmfreq(WidgetPDial* o, void* v) {
  189. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpmfreq_i(o,v);
  190. }
  191. void PADnoteUI::cb_hpamptype_i(Fl_Choice* o, void*) {
  192. pars->Php.amp.type=o->value();
  193. hprofile->redraw();
  194. cbwidget->do_callback();
  195. }
  196. void PADnoteUI::cb_hpamptype(Fl_Choice* o, void* v) {
  197. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_hpamptype_i(o,v);
  198. }
  199. Fl_Menu_Item PADnoteUI::menu_hpamptype[] = {
  200. {"OFF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  201. {"Gauss", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  202. {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  203. {"Flat", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  204. {0,0,0,0,0,0,0,0,0}
  205. };
  206. void PADnoteUI::cb_hpampmode_i(Fl_Choice* o, void*) {
  207. pars->Php.amp.mode=o->value();
  208. hprofile->redraw();
  209. cbwidget->do_callback();
  210. }
  211. void PADnoteUI::cb_hpampmode(Fl_Choice* o, void* v) {
  212. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_hpampmode_i(o,v);
  213. }
  214. Fl_Menu_Item PADnoteUI::menu_hpampmode[] = {
  215. {"Sum", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  216. {"Mult", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  217. {"Div1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  218. {"Div2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  219. {0,0,0,0,0,0,0,0,0}
  220. };
  221. void PADnoteUI::cb_hpamppar1_i(WidgetPDial* o, void*) {
  222. pars->Php.amp.par1=(int) o->value();
  223. hprofile->redraw();
  224. cbwidget->do_callback();
  225. }
  226. void PADnoteUI::cb_hpamppar1(WidgetPDial* o, void* v) {
  227. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_hpamppar1_i(o,v);
  228. }
  229. void PADnoteUI::cb_hpamppar2_i(WidgetPDial* o, void*) {
  230. pars->Php.amp.par2=(int) o->value();
  231. hprofile->redraw();
  232. cbwidget->do_callback();
  233. }
  234. void PADnoteUI::cb_hpamppar2(WidgetPDial* o, void* v) {
  235. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_hpamppar2_i(o,v);
  236. }
  237. void PADnoteUI::cb_hpautoscale_i(Fl_Check_Button* o, void*) {
  238. pars->Php.autoscale=(int) o->value();
  239. hprofile->redraw();
  240. cbwidget->do_callback();
  241. }
  242. void PADnoteUI::cb_hpautoscale(Fl_Check_Button* o, void* v) {
  243. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpautoscale_i(o,v);
  244. }
  245. void PADnoteUI::cb_hponehalf_i(Fl_Choice* o, void*) {
  246. pars->Php.onehalf=o->value();
  247. hprofile->redraw();
  248. cbwidget->do_callback();
  249. }
  250. void PADnoteUI::cb_hponehalf(Fl_Choice* o, void* v) {
  251. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hponehalf_i(o,v);
  252. }
  253. Fl_Menu_Item PADnoteUI::menu_hponehalf[] = {
  254. {"Full", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  255. {"Upper Half", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  256. {"Lower Half", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  257. {0,0,0,0,0,0,0,0,0}
  258. };
  259. void PADnoteUI::cb_hpwidth_i(WidgetPDial* o, void*) {
  260. pars->Php.width=(int) o->value();
  261. hprofile->redraw();
  262. cbwidget->do_callback();
  263. }
  264. void PADnoteUI::cb_hpwidth(WidgetPDial* o, void* v) {
  265. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpwidth_i(o,v);
  266. }
  267. void PADnoteUI::cb_Change_i(Fl_Button*, void*) {
  268. if (oscui!=NULL) delete (oscui);
  269. oscui=new OscilEditor(pars->oscilgen,osc,cbwidget,applybutton,master);
  270. }
  271. void PADnoteUI::cb_Change(Fl_Button* o, void* v) {
  272. ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_Change_i(o,v);
  273. }
  274. void PADnoteUI::cb_cbwidget_i(Fl_Box*, void*) {
  275. overtonepos->redraw();
  276. applybutton->color(FL_RED);
  277. applybutton->redraw();
  278. }
  279. void PADnoteUI::cb_cbwidget(Fl_Box* o, void* v) {
  280. ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_cbwidget_i(o,v);
  281. }
  282. void PADnoteUI::cb_Resonance_i(Fl_Button*, void*) {
  283. resui->resonancewindow->redraw();
  284. resui->resonancewindow->show();
  285. resui->setcbwidget(cbwidget,applybutton);
  286. }
  287. void PADnoteUI::cb_Resonance(Fl_Button* o, void* v) {
  288. ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_Resonance_i(o,v);
  289. }
  290. void PADnoteUI::cb_bwdial_i(WidgetPDial* o, void*) {
  291. bwcents->value(pars->setPbandwidth((int) o->value()));
  292. cbwidget->do_callback();
  293. }
  294. void PADnoteUI::cb_bwdial(WidgetPDial* o, void* v) {
  295. ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_bwdial_i(o,v);
  296. }
  297. void PADnoteUI::cb_hrpostype_i(Fl_Choice* o, void*) {
  298. pars->Phrpos.type=o->value();
  299. overtonepos->redraw();
  300. cbwidget->do_callback();
  301. }
  302. void PADnoteUI::cb_hrpostype(Fl_Choice* o, void* v) {
  303. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hrpostype_i(o,v);
  304. }
  305. Fl_Menu_Item PADnoteUI::menu_hrpostype[] = {
  306. {"Harmonic", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  307. {"ShiftU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  308. {"ShiftL", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  309. {"PowerU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  310. {"PowerL", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  311. {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  312. {"Power", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  313. {0,0,0,0,0,0,0,0,0}
  314. };
  315. void PADnoteUI::cb_hrpospar1_i(WidgetPDial* o, void*) {
  316. pars->Phrpos.par1=(int) o->value();
  317. overtonepos->redraw();
  318. cbwidget->do_callback();
  319. }
  320. void PADnoteUI::cb_hrpospar1(WidgetPDial* o, void* v) {
  321. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hrpospar1_i(o,v);
  322. }
  323. void PADnoteUI::cb_hrpospar2_i(WidgetPDial* o, void*) {
  324. pars->Phrpos.par2=(int) o->value();
  325. overtonepos->redraw();
  326. cbwidget->do_callback();
  327. }
  328. void PADnoteUI::cb_hrpospar2(WidgetPDial* o, void* v) {
  329. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hrpospar2_i(o,v);
  330. }
  331. void PADnoteUI::cb_hrpospar3_i(WidgetPDial* o, void*) {
  332. pars->Phrpos.par3=(int) o->value();
  333. overtonepos->redraw();
  334. cbwidget->do_callback();
  335. }
  336. void PADnoteUI::cb_hrpospar3(WidgetPDial* o, void* v) {
  337. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hrpospar3_i(o,v);
  338. }
  339. void PADnoteUI::cb_bwscale_i(Fl_Choice* o, void*) {
  340. pars->Pbwscale=(int) o->value();
  341. cbwidget->do_callback();
  342. }
  343. void PADnoteUI::cb_bwscale(Fl_Choice* o, void* v) {
  344. ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_bwscale_i(o,v);
  345. }
  346. Fl_Menu_Item PADnoteUI::menu_bwscale[] = {
  347. {"Normal", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  348. {"EqualHz", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  349. {"Quater", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  350. {"Half", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  351. {"75%", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  352. {"150%", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  353. {"Double", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  354. {"Inv.Half", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  355. {0,0,0,0,0,0,0,0,0}
  356. };
  357. void PADnoteUI::cb_qsamplesize_i(Fl_Choice* o, void*) {
  358. pars->Pquality.samplesize=(int) o->value();
  359. cbwidget->do_callback();
  360. }
  361. void PADnoteUI::cb_qsamplesize(Fl_Choice* o, void* v) {
  362. ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_qsamplesize_i(o,v);
  363. }
  364. Fl_Menu_Item PADnoteUI::menu_qsamplesize[] = {
  365. {"16k (Tiny)", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  366. {"32k", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  367. {"64k (Small)", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  368. {"128k", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  369. {"256k (Normal)", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  370. {"512k", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  371. {"1M (Big)", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  372. {0,0,0,0,0,0,0,0,0}
  373. };
  374. void PADnoteUI::cb_qsmpoct_i(Fl_Choice* o, void*) {
  375. pars->Pquality.smpoct=(int) o->value();
  376. cbwidget->do_callback();
  377. }
  378. void PADnoteUI::cb_qsmpoct(Fl_Choice* o, void* v) {
  379. ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_qsmpoct_i(o,v);
  380. }
  381. Fl_Menu_Item PADnoteUI::menu_qsmpoct[] = {
  382. {"0.5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  383. {"1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  384. {"2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  385. {"3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  386. {"4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  387. {"6", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  388. {"12", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  389. {0,0,0,0,0,0,0,0,0}
  390. };
  391. void PADnoteUI::cb_qoct_i(Fl_Choice* o, void*) {
  392. pars->Pquality.oct=(int) o->value();
  393. cbwidget->do_callback();
  394. }
  395. void PADnoteUI::cb_qoct(Fl_Choice* o, void* v) {
  396. ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_qoct_i(o,v);
  397. }
  398. Fl_Menu_Item PADnoteUI::menu_qoct[] = {
  399. {"1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  400. {"2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  401. {"3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  402. {"4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  403. {"5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  404. {"6", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  405. {"7", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  406. {"8", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  407. {0,0,0,0,0,0,0,0,0}
  408. };
  409. void PADnoteUI::cb_qbasenote_i(Fl_Choice* o, void*) {
  410. pars->Pquality.basenote=(int) o->value();
  411. cbwidget->do_callback();
  412. }
  413. void PADnoteUI::cb_qbasenote(Fl_Choice* o, void* v) {
  414. ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_qbasenote_i(o,v);
  415. }
  416. Fl_Menu_Item PADnoteUI::menu_qbasenote[] = {
  417. {"C-2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  418. {"G-2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  419. {"C-3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  420. {"G-3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  421. {"C-4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  422. {"G-4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  423. {"C-5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  424. {"G-5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  425. {"G-6", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
  426. {0,0,0,0,0,0,0,0,0}
  427. };
  428. void PADnoteUI::cb_spectrummode_i(Fl_Choice* o, void*) {
  429. pars->Pmode=(int) o->value();
  430. if (pars->Pmode==0){
  431. bwprofilegroup->activate();
  432. bwdial->activate();
  433. bwcents->activate();
  434. hprofile->activate();
  435. hprofile->color(54);
  436. bwscale->activate();
  437. } else {
  438. bwprofilegroup->deactivate();
  439. bwdial->deactivate();
  440. bwcents->deactivate();
  441. hprofile->deactivate();
  442. hprofile->color(48);
  443. bwscale->deactivate();
  444. };
  445. cbwidget->do_callback();
  446. }
  447. void PADnoteUI::cb_spectrummode(Fl_Choice* o, void* v) {
  448. ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_spectrummode_i(o,v);
  449. }
  450. Fl_Menu_Item PADnoteUI::menu_spectrummode[] = {
  451. {"Bandwidth", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  452. {"Discrete", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  453. {"Continous", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  454. {0,0,0,0,0,0,0,0,0}
  455. };
  456. void PADnoteUI::cb_octave_i(Fl_Counter* o, void*) {
  457. int k=(int) o->value();
  458. if (k<0) k+=16;
  459. pars->PCoarseDetune = k*1024+
  460. pars->PCoarseDetune%1024;
  461. }
  462. void PADnoteUI::cb_octave(Fl_Counter* o, void* v) {
  463. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_octave_i(o,v);
  464. }
  465. void PADnoteUI::cb_coarsedet_i(Fl_Counter* o, void*) {
  466. int k=(int) o->value();
  467. if (k<0) k+=1024;
  468. pars->PCoarseDetune = k+
  469. (pars->PCoarseDetune/1024)*1024;
  470. }
  471. void PADnoteUI::cb_coarsedet(Fl_Counter* o, void* v) {
  472. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_coarsedet_i(o,v);
  473. }
  474. void PADnoteUI::cb_detune_i(Fl_Slider* o, void*) {
  475. pars->PDetune=(int)o->value()+8192;
  476. detunevalueoutput->do_callback();
  477. }
  478. void PADnoteUI::cb_detune(Fl_Slider* o, void* v) {
  479. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_detune_i(o,v);
  480. }
  481. void PADnoteUI::cb_detunevalueoutput_i(Fl_Value_Output* o, void*) {
  482. o->value(getdetune(pars->PDetuneType,0,pars->PDetune));
  483. }
  484. void PADnoteUI::cb_detunevalueoutput(Fl_Value_Output* o, void* v) {
  485. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_detunevalueoutput_i(o,v);
  486. }
  487. void PADnoteUI::cb_detunetype_i(Fl_Choice* o, void*) {
  488. pars->PDetuneType=(int) o->value()+1;
  489. detunevalueoutput->do_callback();
  490. }
  491. void PADnoteUI::cb_detunetype(Fl_Choice* o, void* v) {
  492. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_detunetype_i(o,v);
  493. }
  494. void PADnoteUI::cb_hz440_i(Fl_Check_Button* o, void*) {
  495. int x=(int) o->value();
  496. pars->Pfixedfreq=x;
  497. if (x==0) fixedfreqetdial->deactivate();
  498. else fixedfreqetdial->activate();
  499. }
  500. void PADnoteUI::cb_hz440(Fl_Check_Button* o, void* v) {
  501. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hz440_i(o,v);
  502. }
  503. void PADnoteUI::cb_fixedfreqetdial_i(WidgetPDial* o, void*) {
  504. pars->PfixedfreqET=(int) o->value();
  505. }
  506. void PADnoteUI::cb_fixedfreqetdial(WidgetPDial* o, void* v) {
  507. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_fixedfreqetdial_i(o,v);
  508. }
  509. void PADnoteUI::cb_volume_i(Fl_Value_Slider* o, void*) {
  510. pars->PVolume=(int)o->value();
  511. }
  512. void PADnoteUI::cb_volume(Fl_Value_Slider* o, void* v) {
  513. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_volume_i(o,v);
  514. }
  515. void PADnoteUI::cb_vsns_i(Fl_Value_Slider* o, void*) {
  516. pars->PAmpVelocityScaleFunction=(int) o->value();
  517. }
  518. void PADnoteUI::cb_vsns(Fl_Value_Slider* o, void* v) {
  519. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_vsns_i(o,v);
  520. }
  521. void PADnoteUI::cb_pan_i(WidgetPDial* o, void*) {
  522. pars->PPanning=(int) o->value();
  523. }
  524. void PADnoteUI::cb_pan(WidgetPDial* o, void* v) {
  525. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_pan_i(o,v);
  526. }
  527. void PADnoteUI::cb_pstr_i(WidgetPDial* o, void*) {
  528. pars->PPunchStrength=(int) o->value();
  529. }
  530. void PADnoteUI::cb_pstr(WidgetPDial* o, void* v) {
  531. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_pstr_i(o,v);
  532. }
  533. void PADnoteUI::cb_pt_i(WidgetPDial* o, void*) {
  534. pars->PPunchTime=(int) o->value();
  535. }
  536. void PADnoteUI::cb_pt(WidgetPDial* o, void* v) {
  537. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_pt_i(o,v);
  538. }
  539. void PADnoteUI::cb_pstc_i(WidgetPDial* o, void*) {
  540. pars->PPunchStretch=(int) o->value();
  541. }
  542. void PADnoteUI::cb_pstc(WidgetPDial* o, void* v) {
  543. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_pstc_i(o,v);
  544. }
  545. void PADnoteUI::cb_pvel_i(WidgetPDial* o, void*) {
  546. pars->PPunchVelocitySensing=(int) o->value();
  547. }
  548. void PADnoteUI::cb_pvel(WidgetPDial* o, void* v) {
  549. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_pvel_i(o,v);
  550. }
  551. void PADnoteUI::cb_stereo_i(Fl_Check_Button* o, void*) {
  552. pars->PStereo=(int) o->value();
  553. hprofile->redraw();
  554. }
  555. void PADnoteUI::cb_stereo(Fl_Check_Button* o, void* v) {
  556. ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_stereo_i(o,v);
  557. }
  558. void PADnoteUI::cb_applybutton_i(Fl_Button* o, void*) {
  559. pars->applyparameters(true);
  560. o->color(FL_GRAY);
  561. if (oscui!=NULL) {
  562. oscui->applybutton->color(FL_GRAY);
  563. oscui->applybutton->redraw();
  564. };
  565. if (resui!=NULL) {
  566. resui->applybutton->color(FL_GRAY);
  567. resui->applybutton->redraw();
  568. };
  569. }
  570. void PADnoteUI::cb_applybutton(Fl_Button* o, void* v) {
  571. ((PADnoteUI*)(o->parent()->user_data()))->cb_applybutton_i(o,v);
  572. }
  573. void PADnoteUI::cb_Close_i(Fl_Button*, void*) {
  574. padnotewindow->hide();
  575. }
  576. void PADnoteUI::cb_Close(Fl_Button* o, void* v) {
  577. ((PADnoteUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
  578. }
  579. void PADnoteUI::cb_C_i(Fl_Button*, void*) {
  580. presetsui->copy(pars);
  581. }
  582. void PADnoteUI::cb_C(Fl_Button* o, void* v) {
  583. ((PADnoteUI*)(o->parent()->user_data()))->cb_C_i(o,v);
  584. }
  585. void PADnoteUI::cb_P_i(Fl_Button*, void*) {
  586. presetsui->paste(pars,this);
  587. }
  588. void PADnoteUI::cb_P(Fl_Button* o, void* v) {
  589. ((PADnoteUI*)(o->parent()->user_data()))->cb_P_i(o,v);
  590. }
  591. void PADnoteUI::cb_export_i(Fl_Button*, void*) {
  592. char *filename;
  593. filename=fl_file_chooser("Export samples:","(*.wav)",NULL,0);
  594. if (filename==NULL) return;
  595. fl_filename_setext(filename,"");
  596. pars->export2wav(filename);
  597. }
  598. void PADnoteUI::cb_export(Fl_Button* o, void* v) {
  599. ((PADnoteUI*)(o->parent()->user_data()))->cb_export_i(o,v);
  600. }
  601. PADnoteUI::PADnoteUI(PADnoteParameters *parameters,Master *master_) {
  602. pars=parameters;
  603. master=master_;
  604. oscui=NULL;
  605. resui=new ResonanceUI(pars->resonance);
  606. make_window();
  607. }
  608. Fl_Double_Window* PADnoteUI::make_window() {
  609. { padnotewindow = new Fl_Double_Window(535, 435, "PAD synth Parameters");
  610. padnotewindow->user_data((void*)(this));
  611. { Fl_Tabs* o = new Fl_Tabs(0, 0, 535, 395);
  612. o->box(FL_UP_FRAME);
  613. o->callback((Fl_Callback*)cb_);
  614. { harmonicstructuregroup = new Fl_Group(0, 20, 535, 375, "Harmonic Structure");
  615. harmonicstructuregroup->box(FL_UP_FRAME);
  616. { Fl_Group* o = bwprofilegroup = new Fl_Group(5, 30, 90, 260);
  617. bwprofilegroup->box(FL_UP_FRAME);
  618. { WidgetPDial* o = hpbasepar1 = new WidgetPDial(20, 75, 25, 25, "Width");
  619. hpbasepar1->box(FL_ROUND_UP_BOX);
  620. hpbasepar1->color(FL_BACKGROUND_COLOR);
  621. hpbasepar1->selection_color(FL_INACTIVE_COLOR);
  622. hpbasepar1->labeltype(FL_NORMAL_LABEL);
  623. hpbasepar1->labelfont(0);
  624. hpbasepar1->labelsize(10);
  625. hpbasepar1->labelcolor(FL_FOREGROUND_COLOR);
  626. hpbasepar1->maximum(127);
  627. hpbasepar1->step(1);
  628. hpbasepar1->callback((Fl_Callback*)cb_hpbasepar1);
  629. hpbasepar1->align(Fl_Align(FL_ALIGN_TOP));
  630. hpbasepar1->when(FL_WHEN_CHANGED);
  631. o->value(pars->Php.base.par1);
  632. } // WidgetPDial* hpbasepar1
  633. { Fl_Choice* o = hpbasetype = new Fl_Choice(15, 45, 75, 15, "Base Type");
  634. hpbasetype->down_box(FL_BORDER_BOX);
  635. hpbasetype->labelsize(10);
  636. hpbasetype->textsize(10);
  637. hpbasetype->callback((Fl_Callback*)cb_hpbasetype);
  638. hpbasetype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  639. hpbasetype->menu(menu_hpbasetype);
  640. o->value(pars->Php.base.type);
  641. } // Fl_Choice* hpbasetype
  642. { WidgetPDial* o = hpfreqmult = new WidgetPDial(55, 75, 25, 25, "FreqMlt");
  643. hpfreqmult->box(FL_ROUND_UP_BOX);
  644. hpfreqmult->color(FL_BACKGROUND_COLOR);
  645. hpfreqmult->selection_color(FL_INACTIVE_COLOR);
  646. hpfreqmult->labeltype(FL_NORMAL_LABEL);
  647. hpfreqmult->labelfont(0);
  648. hpfreqmult->labelsize(10);
  649. hpfreqmult->labelcolor(FL_FOREGROUND_COLOR);
  650. hpfreqmult->maximum(127);
  651. hpfreqmult->step(1);
  652. hpfreqmult->callback((Fl_Callback*)cb_hpfreqmult);
  653. hpfreqmult->align(Fl_Align(FL_ALIGN_TOP));
  654. hpfreqmult->when(FL_WHEN_CHANGED);
  655. o->value(pars->Php.freqmult);
  656. } // WidgetPDial* hpfreqmult
  657. { WidgetPDial* o = hpmpar1 = new WidgetPDial(15, 115, 20, 20, "Str");
  658. hpmpar1->box(FL_ROUND_UP_BOX);
  659. hpmpar1->color(FL_BACKGROUND_COLOR);
  660. hpmpar1->selection_color(FL_INACTIVE_COLOR);
  661. hpmpar1->labeltype(FL_NORMAL_LABEL);
  662. hpmpar1->labelfont(0);
  663. hpmpar1->labelsize(10);
  664. hpmpar1->labelcolor(FL_FOREGROUND_COLOR);
  665. hpmpar1->maximum(127);
  666. hpmpar1->step(1);
  667. hpmpar1->callback((Fl_Callback*)cb_hpmpar1);
  668. hpmpar1->align(Fl_Align(FL_ALIGN_TOP));
  669. hpmpar1->when(FL_WHEN_CHANGED);
  670. o->value(pars->Php.modulator.par1);
  671. } // WidgetPDial* hpmpar1
  672. { WidgetPDial* o = hpmfreq = new WidgetPDial(40, 115, 20, 20, "SFreq");
  673. hpmfreq->box(FL_ROUND_UP_BOX);
  674. hpmfreq->color(FL_BACKGROUND_COLOR);
  675. hpmfreq->selection_color(FL_INACTIVE_COLOR);
  676. hpmfreq->labeltype(FL_NORMAL_LABEL);
  677. hpmfreq->labelfont(0);
  678. hpmfreq->labelsize(10);
  679. hpmfreq->labelcolor(FL_FOREGROUND_COLOR);
  680. hpmfreq->maximum(127);
  681. hpmfreq->step(1);
  682. hpmfreq->callback((Fl_Callback*)cb_hpmfreq);
  683. hpmfreq->align(Fl_Align(FL_ALIGN_TOP));
  684. hpmfreq->when(FL_WHEN_CHANGED);
  685. o->value(pars->Php.modulator.freq);
  686. } // WidgetPDial* hpmfreq
  687. { Fl_Group* o = new Fl_Group(10, 160, 80, 105);
  688. o->box(FL_BORDER_BOX);
  689. { Fl_Choice* o = hpamptype = new Fl_Choice(15, 175, 70, 15, "AmpMultiplier");
  690. hpamptype->down_box(FL_BORDER_BOX);
  691. hpamptype->labelsize(10);
  692. hpamptype->textsize(10);
  693. hpamptype->callback((Fl_Callback*)cb_hpamptype);
  694. hpamptype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  695. hpamptype->menu(menu_hpamptype);
  696. o->value(pars->Php.amp.type);
  697. } // Fl_Choice* hpamptype
  698. { Fl_Choice* o = hpampmode = new Fl_Choice(15, 205, 70, 15, "AmpMode");
  699. hpampmode->down_box(FL_BORDER_BOX);
  700. hpampmode->labelsize(10);
  701. hpampmode->textsize(10);
  702. hpampmode->callback((Fl_Callback*)cb_hpampmode);
  703. hpampmode->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  704. hpampmode->menu(menu_hpampmode);
  705. o->value(pars->Php.amp.mode);
  706. } // Fl_Choice* hpampmode
  707. { WidgetPDial* o = hpamppar1 = new WidgetPDial(15, 235, 25, 25, "Par1");
  708. hpamppar1->box(FL_ROUND_UP_BOX);
  709. hpamppar1->color(FL_BACKGROUND_COLOR);
  710. hpamppar1->selection_color(FL_INACTIVE_COLOR);
  711. hpamppar1->labeltype(FL_NORMAL_LABEL);
  712. hpamppar1->labelfont(0);
  713. hpamppar1->labelsize(10);
  714. hpamppar1->labelcolor(FL_FOREGROUND_COLOR);
  715. hpamppar1->maximum(127);
  716. hpamppar1->step(1);
  717. hpamppar1->callback((Fl_Callback*)cb_hpamppar1);
  718. hpamppar1->align(Fl_Align(FL_ALIGN_TOP));
  719. hpamppar1->when(FL_WHEN_CHANGED);
  720. o->value(pars->Php.amp.par1);
  721. } // WidgetPDial* hpamppar1
  722. { WidgetPDial* o = hpamppar2 = new WidgetPDial(55, 235, 25, 25, "Par2");
  723. hpamppar2->box(FL_ROUND_UP_BOX);
  724. hpamppar2->color(FL_BACKGROUND_COLOR);
  725. hpamppar2->selection_color(FL_INACTIVE_COLOR);
  726. hpamppar2->labeltype(FL_NORMAL_LABEL);
  727. hpamppar2->labelfont(0);
  728. hpamppar2->labelsize(10);
  729. hpamppar2->labelcolor(FL_FOREGROUND_COLOR);
  730. hpamppar2->maximum(127);
  731. hpamppar2->step(1);
  732. hpamppar2->callback((Fl_Callback*)cb_hpamppar2);
  733. hpamppar2->align(Fl_Align(FL_ALIGN_TOP));
  734. hpamppar2->when(FL_WHEN_CHANGED);
  735. o->value(pars->Php.amp.par2);
  736. } // WidgetPDial* hpamppar2
  737. o->end();
  738. } // Fl_Group* o
  739. { Fl_Check_Button* o = hpautoscale = new Fl_Check_Button(10, 270, 60, 15, "autoscale");
  740. hpautoscale->down_box(FL_DOWN_BOX);
  741. hpautoscale->labelsize(10);
  742. hpautoscale->callback((Fl_Callback*)cb_hpautoscale);
  743. o->value(pars->Php.autoscale);
  744. } // Fl_Check_Button* hpautoscale
  745. { Fl_Choice* o = hponehalf = new Fl_Choice(10, 143, 80, 15);
  746. hponehalf->down_box(FL_BORDER_BOX);
  747. hponehalf->labelsize(10);
  748. hponehalf->textsize(10);
  749. hponehalf->callback((Fl_Callback*)cb_hponehalf);
  750. hponehalf->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  751. hponehalf->menu(menu_hponehalf);
  752. o->value(pars->Php.onehalf);
  753. } // Fl_Choice* hponehalf
  754. { WidgetPDial* o = hpwidth = new WidgetPDial(65, 115, 20, 20, "Size");
  755. hpwidth->box(FL_ROUND_UP_BOX);
  756. hpwidth->color(FL_BACKGROUND_COLOR);
  757. hpwidth->selection_color(FL_INACTIVE_COLOR);
  758. hpwidth->labeltype(FL_NORMAL_LABEL);
  759. hpwidth->labelfont(0);
  760. hpwidth->labelsize(10);
  761. hpwidth->labelcolor(FL_FOREGROUND_COLOR);
  762. hpwidth->maximum(127);
  763. hpwidth->step(1);
  764. hpwidth->callback((Fl_Callback*)cb_hpwidth);
  765. hpwidth->align(Fl_Align(FL_ALIGN_TOP));
  766. hpwidth->when(FL_WHEN_CHANGED);
  767. o->value(pars->Php.width);
  768. } // WidgetPDial* hpwidth
  769. if (pars->Pmode!=0) o->deactivate();
  770. bwprofilegroup->end();
  771. } // Fl_Group* bwprofilegroup
  772. { Fl_Group* o = new Fl_Group(100, 155, 270, 135);
  773. o->box(FL_THIN_DOWN_BOX);
  774. o->color(FL_GRAY0);
  775. o->selection_color((Fl_Color)71);
  776. o->labelcolor((Fl_Color)179);
  777. o->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
  778. osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
  779. osc->init(pars->oscilgen,master);
  780. o->end();
  781. } // Fl_Group* o
  782. { Fl_Button* o = new Fl_Button(375, 270, 60, 20, "Change");
  783. o->box(FL_THIN_UP_BOX);
  784. o->labelfont(1);
  785. o->labelsize(11);
  786. o->callback((Fl_Callback*)cb_Change);
  787. } // Fl_Button* o
  788. { cbwidget = new Fl_Box(125, 135, 205, 20, "Harmonic Content");
  789. cbwidget->callback((Fl_Callback*)cb_cbwidget);
  790. cbwidget->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
  791. } // Fl_Box* cbwidget
  792. { Fl_Button* o = new Fl_Button(375, 225, 80, 20, "Resonance");
  793. o->box(FL_THIN_UP_BOX);
  794. o->callback((Fl_Callback*)cb_Resonance);
  795. } // Fl_Button* o
  796. { WidgetPDial* o = bwdial = new WidgetPDial(15, 295, 35, 35, "BandWidth");
  797. bwdial->box(FL_ROUND_UP_BOX);
  798. bwdial->color(FL_BACKGROUND_COLOR);
  799. bwdial->selection_color(FL_INACTIVE_COLOR);
  800. bwdial->labeltype(FL_NORMAL_LABEL);
  801. bwdial->labelfont(0);
  802. bwdial->labelsize(10);
  803. bwdial->labelcolor(FL_FOREGROUND_COLOR);
  804. bwdial->maximum(1000);
  805. bwdial->step(1);
  806. bwdial->callback((Fl_Callback*)cb_bwdial);
  807. bwdial->align(Fl_Align(FL_ALIGN_BOTTOM));
  808. bwdial->when(FL_WHEN_CHANGED);
  809. o->value(pars->Pbandwidth);
  810. if (pars->Pmode!=0) o->deactivate();
  811. } // WidgetPDial* bwdial
  812. { Fl_Value_Output* o = bwcents = new Fl_Value_Output(55, 305, 55, 15, "cents");
  813. bwcents->labelsize(10);
  814. bwcents->maximum(10000);
  815. bwcents->step(0.1);
  816. bwcents->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
  817. o->value(pars->setPbandwidth(pars->Pbandwidth));
  818. if (pars->Pmode!=0) o->deactivate();
  819. } // Fl_Value_Output* bwcents
  820. { Fl_Group* o = new Fl_Group(315, 295, 215, 45);
  821. o->box(FL_UP_FRAME);
  822. { Fl_Choice* o = hrpostype = new Fl_Choice(325, 310, 80, 20, "OvertonesPosition");
  823. hrpostype->down_box(FL_BORDER_BOX);
  824. hrpostype->labelsize(10);
  825. hrpostype->textsize(11);
  826. hrpostype->callback((Fl_Callback*)cb_hrpostype);
  827. hrpostype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  828. hrpostype->menu(menu_hrpostype);
  829. o->value(pars->Phrpos.type);
  830. } // Fl_Choice* hrpostype
  831. { WidgetPDial* o = hrpospar1 = new WidgetPDial(425, 310, 25, 25, "Par1");
  832. hrpospar1->box(FL_ROUND_UP_BOX);
  833. hrpospar1->color(FL_BACKGROUND_COLOR);
  834. hrpospar1->selection_color(FL_INACTIVE_COLOR);
  835. hrpospar1->labeltype(FL_NORMAL_LABEL);
  836. hrpospar1->labelfont(0);
  837. hrpospar1->labelsize(10);
  838. hrpospar1->labelcolor(FL_FOREGROUND_COLOR);
  839. hrpospar1->maximum(255);
  840. hrpospar1->step(1);
  841. hrpospar1->callback((Fl_Callback*)cb_hrpospar1);
  842. hrpospar1->align(Fl_Align(FL_ALIGN_TOP));
  843. hrpospar1->when(FL_WHEN_CHANGED);
  844. o->value(pars->Phrpos.par1);
  845. } // WidgetPDial* hrpospar1
  846. { WidgetPDial* o = hrpospar2 = new WidgetPDial(460, 310, 25, 25, "Par2");
  847. hrpospar2->box(FL_ROUND_UP_BOX);
  848. hrpospar2->color(FL_BACKGROUND_COLOR);
  849. hrpospar2->selection_color(FL_INACTIVE_COLOR);
  850. hrpospar2->labeltype(FL_NORMAL_LABEL);
  851. hrpospar2->labelfont(0);
  852. hrpospar2->labelsize(10);
  853. hrpospar2->labelcolor(FL_FOREGROUND_COLOR);
  854. hrpospar2->maximum(255);
  855. hrpospar2->step(1);
  856. hrpospar2->callback((Fl_Callback*)cb_hrpospar2);
  857. hrpospar2->align(Fl_Align(FL_ALIGN_TOP));
  858. hrpospar2->when(FL_WHEN_CHANGED);
  859. o->value(pars->Phrpos.par2);
  860. } // WidgetPDial* hrpospar2
  861. { WidgetPDial* o = hrpospar3 = new WidgetPDial(495, 310, 25, 25, "ForceH");
  862. hrpospar3->box(FL_ROUND_UP_BOX);
  863. hrpospar3->color(FL_BACKGROUND_COLOR);
  864. hrpospar3->selection_color(FL_INACTIVE_COLOR);
  865. hrpospar3->labeltype(FL_NORMAL_LABEL);
  866. hrpospar3->labelfont(0);
  867. hrpospar3->labelsize(10);
  868. hrpospar3->labelcolor(FL_FOREGROUND_COLOR);
  869. hrpospar3->maximum(255);
  870. hrpospar3->step(1);
  871. hrpospar3->callback((Fl_Callback*)cb_hrpospar3);
  872. hrpospar3->align(Fl_Align(FL_ALIGN_TOP));
  873. hrpospar3->when(FL_WHEN_CHANGED);
  874. o->value(pars->Phrpos.par3);
  875. } // WidgetPDial* hrpospar3
  876. o->end();
  877. } // Fl_Group* o
  878. { Fl_Choice* o = bwscale = new Fl_Choice(120, 305, 80, 20, "Bandwidth Scale");
  879. bwscale->down_box(FL_BORDER_BOX);
  880. bwscale->labelsize(10);
  881. bwscale->textsize(11);
  882. bwscale->callback((Fl_Callback*)cb_bwscale);
  883. bwscale->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  884. bwscale->menu(menu_bwscale);
  885. o->value(pars->Pbwscale);
  886. if (pars->Pmode!=0) o->deactivate();
  887. } // Fl_Choice* bwscale
  888. { Fl_Group* o = overtonepos = new Fl_Group(5, 345, 525, 45);
  889. overtonepos->box(FL_FLAT_BOX);
  890. overtonepos->color((Fl_Color)51);
  891. overtonepos->selection_color((Fl_Color)218);
  892. overtonepos->labelcolor(FL_GREEN);
  893. PADnoteOvertonePosition *opui=new PADnoteOvertonePosition(o->x(),o->y(),o->w(),o->h(),"");
  894. opui->init(pars,master);
  895. overtonepos->end();
  896. } // Fl_Group* overtonepos
  897. { Fl_Choice* o = qsamplesize = new Fl_Choice(375, 190, 115, 20, "Sample Size");
  898. qsamplesize->down_box(FL_BORDER_BOX);
  899. qsamplesize->labelsize(10);
  900. qsamplesize->textsize(11);
  901. qsamplesize->callback((Fl_Callback*)cb_qsamplesize);
  902. qsamplesize->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  903. qsamplesize->menu(menu_qsamplesize);
  904. o->value(pars->Pquality.samplesize);
  905. } // Fl_Choice* qsamplesize
  906. { Fl_Choice* o = qsmpoct = new Fl_Choice(430, 155, 45, 20, "smp/oct");
  907. qsmpoct->down_box(FL_BORDER_BOX);
  908. qsmpoct->labelsize(11);
  909. qsmpoct->textsize(11);
  910. qsmpoct->callback((Fl_Callback*)cb_qsmpoct);
  911. qsmpoct->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  912. qsmpoct->menu(menu_qsmpoct);
  913. o->value(pars->Pquality.smpoct);
  914. } // Fl_Choice* qsmpoct
  915. { Fl_Choice* o = qoct = new Fl_Choice(480, 155, 45, 20, "no.oct");
  916. qoct->down_box(FL_BORDER_BOX);
  917. qoct->labelsize(11);
  918. qoct->textsize(11);
  919. qoct->callback((Fl_Callback*)cb_qoct);
  920. qoct->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  921. qoct->menu(menu_qoct);
  922. o->value(pars->Pquality.oct);
  923. } // Fl_Choice* qoct
  924. { Fl_Choice* o = qbasenote = new Fl_Choice(375, 155, 50, 20, "base");
  925. qbasenote->down_box(FL_BORDER_BOX);
  926. qbasenote->labelsize(11);
  927. qbasenote->textsize(11);
  928. qbasenote->callback((Fl_Callback*)cb_qbasenote);
  929. qbasenote->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  930. qbasenote->menu(menu_qbasenote);
  931. o->value(pars->Pquality.basenote);
  932. } // Fl_Choice* qbasenote
  933. { Fl_Group* o = hprofile = new Fl_Group(100, 45, 430, 90);
  934. hprofile->box(FL_FLAT_BOX);
  935. hprofile->color((Fl_Color)51);
  936. hprofile->selection_color((Fl_Color)218);
  937. hprofile->labelcolor(FL_GREEN);
  938. PADnoteHarmonicProfile *hpui=new PADnoteHarmonicProfile(o->x(),o->y(),o->w(),o->h(),"");
  939. hpui->init(pars,master);
  940. if (pars->Pmode!=0) { o->deactivate(); o->color(48);};
  941. hprofile->end();
  942. } // Fl_Group* hprofile
  943. { new Fl_Box(160, 25, 315, 20, "Profile of One Harmonic (Frequency Distribution)");
  944. } // Fl_Box* o
  945. { Fl_Choice* o = spectrummode = new Fl_Choice(220, 305, 90, 20, "Spectrum Mode");
  946. spectrummode->down_box(FL_BORDER_BOX);
  947. spectrummode->labelfont(1);
  948. spectrummode->labelsize(10);
  949. spectrummode->textsize(11);
  950. spectrummode->callback((Fl_Callback*)cb_spectrummode);
  951. spectrummode->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  952. spectrummode->menu(menu_spectrummode);
  953. o->value(pars->Pmode);
  954. } // Fl_Choice* spectrummode
  955. harmonicstructuregroup->end();
  956. } // Fl_Group* harmonicstructuregroup
  957. { Fl_Group* o = new Fl_Group(0, 20, 535, 375, "Envelopes&LFOs");
  958. o->box(FL_UP_FRAME);
  959. o->hide();
  960. { Fl_Group* o = new Fl_Group(5, 275, 525, 115, "FREQUENCY");
  961. o->box(FL_UP_FRAME);
  962. o->labeltype(FL_EMBOSSED_LABEL);
  963. o->labelfont(1);
  964. o->labelsize(13);
  965. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  966. { EnvelopeUI* o = freqenv = new EnvelopeUI(10, 315, 205, 70, "PADSynth - Frequency Envelope");
  967. freqenv->box(FL_FLAT_BOX);
  968. freqenv->color((Fl_Color)51);
  969. freqenv->selection_color(FL_BACKGROUND_COLOR);
  970. freqenv->labeltype(FL_NORMAL_LABEL);
  971. freqenv->labelfont(0);
  972. freqenv->labelsize(14);
  973. freqenv->labelcolor(FL_FOREGROUND_COLOR);
  974. freqenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  975. freqenv->when(FL_WHEN_RELEASE);
  976. o->init(pars->FreqEnvelope);
  977. freqenv->end();
  978. } // EnvelopeUI* freqenv
  979. { Fl_Counter* o = octave = new Fl_Counter(470, 295, 45, 15, "Octave");
  980. octave->tooltip("Octave");
  981. octave->type(1);
  982. octave->labelsize(10);
  983. octave->minimum(-8);
  984. octave->maximum(7);
  985. octave->step(1);
  986. octave->textfont(1);
  987. octave->textsize(11);
  988. octave->callback((Fl_Callback*)cb_octave);
  989. octave->align(Fl_Align(FL_ALIGN_TOP));
  990. int k=pars->PCoarseDetune/1024;
  991. if (k>=8) k-=16;
  992. o->value(k);
  993. } // Fl_Counter* octave
  994. { Fl_Counter* o = coarsedet = new Fl_Counter(455, 365, 70, 20, "Coarse det.");
  995. coarsedet->tooltip("Coarse Detune");
  996. coarsedet->type(1);
  997. coarsedet->labelsize(10);
  998. coarsedet->minimum(-64);
  999. coarsedet->maximum(63);
  1000. coarsedet->step(1);
  1001. coarsedet->textfont(1);
  1002. coarsedet->textsize(11);
  1003. coarsedet->callback((Fl_Callback*)cb_coarsedet);
  1004. coarsedet->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1005. int k=pars->PCoarseDetune%1024;
  1006. if (k>=512) k-=1024;
  1007. o->value(k);
  1008. o->lstep(10);
  1009. } // Fl_Counter* coarsedet
  1010. { LFOUI* o = freqlfo = new LFOUI(215, 315, 230, 70, "Frequency LFO ");
  1011. freqlfo->box(FL_FLAT_BOX);
  1012. freqlfo->color(FL_DARK1);
  1013. freqlfo->selection_color(FL_BACKGROUND_COLOR);
  1014. freqlfo->labeltype(FL_NORMAL_LABEL);
  1015. freqlfo->labelfont(0);
  1016. freqlfo->labelsize(14);
  1017. freqlfo->labelcolor(FL_FOREGROUND_COLOR);
  1018. freqlfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1019. freqlfo->when(FL_WHEN_RELEASE);
  1020. o->init(pars->FreqLfo);
  1021. freqlfo->end();
  1022. } // LFOUI* freqlfo
  1023. { Fl_Slider* o = detune = new Fl_Slider(60, 295, 295, 15);
  1024. detune->tooltip("Fine Detune (cents)");
  1025. detune->type(5);
  1026. detune->box(FL_NO_BOX);
  1027. detune->minimum(-8192);
  1028. detune->maximum(8191);
  1029. detune->step(1);
  1030. detune->callback((Fl_Callback*)cb_detune);
  1031. o->value(pars->PDetune-8192);
  1032. } // Fl_Slider* detune
  1033. { Fl_Value_Output* o = detunevalueoutput = new Fl_Value_Output(12, 295, 45, 15, "Detune");
  1034. detunevalueoutput->labelsize(10);
  1035. detunevalueoutput->minimum(-5000);
  1036. detunevalueoutput->maximum(5000);
  1037. detunevalueoutput->step(0.01);
  1038. detunevalueoutput->textfont(1);
  1039. detunevalueoutput->textsize(10);
  1040. detunevalueoutput->callback((Fl_Callback*)cb_detunevalueoutput);
  1041. detunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1042. o->value(getdetune(pars->PDetuneType,0,pars->PDetune));
  1043. } // Fl_Value_Output* detunevalueoutput
  1044. { Fl_Choice* o = detunetype = new Fl_Choice(450, 330, 75, 20, "Detune Type");
  1045. detunetype->down_box(FL_BORDER_BOX);
  1046. detunetype->labelsize(10);
  1047. detunetype->textfont(1);
  1048. detunetype->textsize(10);
  1049. detunetype->callback((Fl_Callback*)cb_detunetype);
  1050. detunetype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  1051. o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");
  1052. o->value(pars->PDetuneType-1);
  1053. } // Fl_Choice* detunetype
  1054. { Fl_Check_Button* o = hz440 = new Fl_Check_Button(365, 295, 50, 15, "440Hz");
  1055. hz440->tooltip("set the base frequency to 440Hz");
  1056. hz440->down_box(FL_DOWN_BOX);
  1057. hz440->labelfont(1);
  1058. hz440->labelsize(10);
  1059. hz440->callback((Fl_Callback*)cb_hz440);
  1060. o->value(pars->Pfixedfreq);
  1061. } // Fl_Check_Button* hz440
  1062. { WidgetPDial* o = fixedfreqetdial = new WidgetPDial(420, 295, 15, 15, "Eq.T.");
  1063. fixedfreqetdial->tooltip("How the frequency varies acording to the keyboard (leftmost for fixed frequen\
  1064. cy)");
  1065. fixedfreqetdial->box(FL_ROUND_UP_BOX);
  1066. fixedfreqetdial->color(FL_BACKGROUND_COLOR);
  1067. fixedfreqetdial->selection_color(FL_INACTIVE_COLOR);
  1068. fixedfreqetdial->labeltype(FL_NORMAL_LABEL);
  1069. fixedfreqetdial->labelfont(0);
  1070. fixedfreqetdial->labelsize(10);
  1071. fixedfreqetdial->labelcolor(FL_FOREGROUND_COLOR);
  1072. fixedfreqetdial->maximum(127);
  1073. fixedfreqetdial->step(1);
  1074. fixedfreqetdial->callback((Fl_Callback*)cb_fixedfreqetdial);
  1075. fixedfreqetdial->align(Fl_Align(FL_ALIGN_RIGHT));
  1076. fixedfreqetdial->when(FL_WHEN_CHANGED);
  1077. o->value(pars->PfixedfreqET);
  1078. if (pars->Pfixedfreq==0) o->deactivate();
  1079. } // WidgetPDial* fixedfreqetdial
  1080. o->end();
  1081. } // Fl_Group* o
  1082. { Fl_Group* o = new Fl_Group(5, 25, 240, 250, "AMPLITUDE");
  1083. o->box(FL_UP_FRAME);
  1084. o->labeltype(FL_EMBOSSED_LABEL);
  1085. o->labelfont(1);
  1086. o->labelsize(13);
  1087. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  1088. { Fl_Value_Slider* o = volume = new Fl_Value_Slider(10, 50, 160, 15, "Vol");
  1089. volume->tooltip("Volume");
  1090. volume->type(5);
  1091. volume->box(FL_NO_BOX);
  1092. volume->labelsize(11);
  1093. volume->maximum(127);
  1094. volume->step(1);
  1095. volume->callback((Fl_Callback*)cb_volume);
  1096. volume->align(Fl_Align(FL_ALIGN_RIGHT));
  1097. o->value(pars->PVolume);
  1098. } // Fl_Value_Slider* volume
  1099. { Fl_Value_Slider* o = vsns = new Fl_Value_Slider(10, 70, 160, 15, "V.Sns");
  1100. vsns->tooltip("Velocity Sensing Function (rightmost to disable)");
  1101. vsns->type(5);
  1102. vsns->box(FL_NO_BOX);
  1103. vsns->labelsize(11);
  1104. vsns->maximum(127);
  1105. vsns->step(1);
  1106. vsns->callback((Fl_Callback*)cb_vsns);
  1107. vsns->align(Fl_Align(FL_ALIGN_RIGHT));
  1108. o->value(pars->PAmpVelocityScaleFunction);
  1109. } // Fl_Value_Slider* vsns
  1110. { WidgetPDial* o = pan = new WidgetPDial(210, 45, 30, 30, "Pan");
  1111. pan->tooltip("Panning (leftmost is Random)");
  1112. pan->box(FL_ROUND_UP_BOX);
  1113. pan->color(FL_BACKGROUND_COLOR);
  1114. pan->selection_color(FL_INACTIVE_COLOR);
  1115. pan->labeltype(FL_NORMAL_LABEL);
  1116. pan->labelfont(0);
  1117. pan->labelsize(10);
  1118. pan->labelcolor(FL_FOREGROUND_COLOR);
  1119. pan->maximum(127);
  1120. pan->step(1);
  1121. pan->callback((Fl_Callback*)cb_pan);
  1122. pan->align(Fl_Align(FL_ALIGN_BOTTOM));
  1123. pan->when(FL_WHEN_CHANGED);
  1124. o->value(pars->PPanning);
  1125. } // WidgetPDial* pan
  1126. { WidgetPDial* o = pstr = new WidgetPDial(125, 247, 25, 25, "P.Str.");
  1127. pstr->tooltip("Punch Strength");
  1128. pstr->box(FL_ROUND_UP_BOX);
  1129. pstr->color(FL_BACKGROUND_COLOR);
  1130. pstr->selection_color(FL_INACTIVE_COLOR);
  1131. pstr->labeltype(FL_NORMAL_LABEL);
  1132. pstr->labelfont(0);
  1133. pstr->labelsize(10);
  1134. pstr->labelcolor(FL_FOREGROUND_COLOR);
  1135. pstr->maximum(127);
  1136. pstr->step(1);
  1137. pstr->callback((Fl_Callback*)cb_pstr);
  1138. pstr->align(Fl_Align(FL_ALIGN_TOP));
  1139. pstr->when(FL_WHEN_CHANGED);
  1140. o->value(pars->PPunchStrength);
  1141. } // WidgetPDial* pstr
  1142. { WidgetPDial* o = pt = new WidgetPDial(155, 247, 25, 25, "P.t.");
  1143. pt->tooltip("Punch Time (duration)");
  1144. pt->box(FL_ROUND_UP_BOX);
  1145. pt->color(FL_BACKGROUND_COLOR);
  1146. pt->selection_color(FL_INACTIVE_COLOR);
  1147. pt->labeltype(FL_NORMAL_LABEL);
  1148. pt->labelfont(0);
  1149. pt->labelsize(10);
  1150. pt->labelcolor(FL_FOREGROUND_COLOR);
  1151. pt->maximum(127);
  1152. pt->step(1);
  1153. pt->callback((Fl_Callback*)cb_pt);
  1154. pt->align(Fl_Align(FL_ALIGN_TOP));
  1155. pt->when(FL_WHEN_CHANGED);
  1156. o->value(pars->PPunchTime);
  1157. } // WidgetPDial* pt
  1158. { WidgetPDial* o = pstc = new WidgetPDial(185, 247, 25, 25, "P.Stc.");
  1159. pstc->tooltip("Punch Stretch");
  1160. pstc->box(FL_ROUND_UP_BOX);
  1161. pstc->color(FL_BACKGROUND_COLOR);
  1162. pstc->selection_color(FL_INACTIVE_COLOR);
  1163. pstc->labeltype(FL_NORMAL_LABEL);
  1164. pstc->labelfont(0);
  1165. pstc->labelsize(10);
  1166. pstc->labelcolor(FL_FOREGROUND_COLOR);
  1167. pstc->maximum(127);
  1168. pstc->step(1);
  1169. pstc->callback((Fl_Callback*)cb_pstc);
  1170. pstc->align(Fl_Align(FL_ALIGN_TOP));
  1171. pstc->when(FL_WHEN_CHANGED);
  1172. o->value(pars->PPunchStretch);
  1173. } // WidgetPDial* pstc
  1174. { WidgetPDial* o = pvel = new WidgetPDial(215, 247, 25, 25, "P.Vel.");
  1175. pvel->tooltip("Punch Velocity Sensing");
  1176. pvel->box(FL_ROUND_UP_BOX);
  1177. pvel->color(FL_BACKGROUND_COLOR);
  1178. pvel->selection_color(FL_INACTIVE_COLOR);
  1179. pvel->labeltype(FL_NORMAL_LABEL);
  1180. pvel->labelfont(0);
  1181. pvel->labelsize(10);
  1182. pvel->labelcolor(FL_FOREGROUND_COLOR);
  1183. pvel->maximum(127);
  1184. pvel->step(1);
  1185. pvel->callback((Fl_Callback*)cb_pvel);
  1186. pvel->align(Fl_Align(FL_ALIGN_TOP));
  1187. pvel->when(FL_WHEN_CHANGED);
  1188. o->value(pars->PPunchVelocitySensing);
  1189. } // WidgetPDial* pvel
  1190. { EnvelopeUI* o = ampenv = new EnvelopeUI(10, 95, 205, 70, "PADSynth - Amplitude Envelope");
  1191. ampenv->box(FL_FLAT_BOX);
  1192. ampenv->color((Fl_Color)51);
  1193. ampenv->selection_color(FL_BACKGROUND_COLOR);
  1194. ampenv->labeltype(FL_NORMAL_LABEL);
  1195. ampenv->labelfont(0);
  1196. ampenv->labelsize(14);
  1197. ampenv->labelcolor(FL_FOREGROUND_COLOR);
  1198. ampenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1199. ampenv->when(FL_WHEN_RELEASE);
  1200. o->init(pars->AmpEnvelope);
  1201. ampenv->end();
  1202. } // EnvelopeUI* ampenv
  1203. { LFOUI* o = amplfo = new LFOUI(10, 165, 230, 70, "Amplitude LFO ");
  1204. amplfo->box(FL_FLAT_BOX);
  1205. amplfo->color(FL_DARK1);
  1206. amplfo->selection_color(FL_BACKGROUND_COLOR);
  1207. amplfo->labeltype(FL_NORMAL_LABEL);
  1208. amplfo->labelfont(0);
  1209. amplfo->labelsize(14);
  1210. amplfo->labelcolor(FL_FOREGROUND_COLOR);
  1211. amplfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1212. amplfo->when(FL_WHEN_RELEASE);
  1213. o->init(pars->AmpLfo);
  1214. amplfo->end();
  1215. } // LFOUI* amplfo
  1216. { Fl_Check_Button* o = stereo = new Fl_Check_Button(15, 245, 70, 25, "Stereo");
  1217. stereo->down_box(FL_DOWN_BOX);
  1218. stereo->callback((Fl_Callback*)cb_stereo);
  1219. o->value(pars->PStereo);
  1220. } // Fl_Check_Button* stereo
  1221. o->end();
  1222. } // Fl_Group* o
  1223. { Fl_Group* o = new Fl_Group(245, 25, 285, 250, "FILTER");
  1224. o->box(FL_UP_FRAME);
  1225. o->labeltype(FL_EMBOSSED_LABEL);
  1226. o->labelfont(1);
  1227. o->labelsize(13);
  1228. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  1229. { EnvelopeUI* o = filterenv = new EnvelopeUI(250, 130, 275, 70, "PADSynth - Filter Envelope");
  1230. filterenv->box(FL_FLAT_BOX);
  1231. filterenv->color((Fl_Color)51);
  1232. filterenv->selection_color(FL_BACKGROUND_COLOR);
  1233. filterenv->labeltype(FL_NORMAL_LABEL);
  1234. filterenv->labelfont(0);
  1235. filterenv->labelsize(14);
  1236. filterenv->labelcolor(FL_FOREGROUND_COLOR);
  1237. filterenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1238. filterenv->when(FL_WHEN_RELEASE);
  1239. o->init(pars->FilterEnvelope);
  1240. filterenv->end();
  1241. } // EnvelopeUI* filterenv
  1242. { LFOUI* o = filterlfo = new LFOUI(250, 200, 230, 70, "Filter LFO ");
  1243. filterlfo->box(FL_FLAT_BOX);
  1244. filterlfo->color(FL_DARK1);
  1245. filterlfo->selection_color(FL_BACKGROUND_COLOR);
  1246. filterlfo->labeltype(FL_NORMAL_LABEL);
  1247. filterlfo->labelfont(0);
  1248. filterlfo->labelsize(14);
  1249. filterlfo->labelcolor(FL_FOREGROUND_COLOR);
  1250. filterlfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1251. filterlfo->when(FL_WHEN_RELEASE);
  1252. o->init(pars->FilterLfo);
  1253. filterlfo->end();
  1254. } // LFOUI* filterlfo
  1255. { FilterUI* o = filterui = new FilterUI(250, 55, 275, 75, "PADsynth - Filter");
  1256. filterui->box(FL_FLAT_BOX);
  1257. filterui->color(FL_LIGHT1);
  1258. filterui->selection_color(FL_BACKGROUND_COLOR);
  1259. filterui->labeltype(FL_NORMAL_LABEL);
  1260. filterui->labelfont(0);
  1261. filterui->labelsize(14);
  1262. filterui->labelcolor(FL_FOREGROUND_COLOR);
  1263. filterui->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
  1264. filterui->when(FL_WHEN_RELEASE);
  1265. o->init(pars->GlobalFilter,&pars->PFilterVelocityScale,&pars->PFilterVelocityScaleFunction);
  1266. filterui->end();
  1267. } // FilterUI* filterui
  1268. o->end();
  1269. } // Fl_Group* o
  1270. o->end();
  1271. } // Fl_Group* o
  1272. o->end();
  1273. } // Fl_Tabs* o
  1274. { Fl_Button* o = applybutton = new Fl_Button(300, 400, 135, 30, "Apply Changes");
  1275. applybutton->box(FL_THIN_UP_BOX);
  1276. applybutton->callback((Fl_Callback*)cb_applybutton);
  1277. o->color(FL_RED);
  1278. } // Fl_Button* applybutton
  1279. { Fl_Button* o = new Fl_Button(440, 400, 90, 30, "Close");
  1280. o->box(FL_THIN_UP_BOX);
  1281. o->callback((Fl_Callback*)cb_Close);
  1282. } // Fl_Button* o
  1283. { Fl_Button* o = new Fl_Button(65, 400, 25, 15, "C");
  1284. o->box(FL_THIN_UP_BOX);
  1285. o->color((Fl_Color)179);
  1286. o->labelfont(1);
  1287. o->labelsize(11);
  1288. o->labelcolor(FL_BACKGROUND2_COLOR);
  1289. o->callback((Fl_Callback*)cb_C);
  1290. } // Fl_Button* o
  1291. { Fl_Button* o = new Fl_Button(95, 400, 25, 15, "P");
  1292. o->box(FL_THIN_UP_BOX);
  1293. o->color((Fl_Color)179);
  1294. o->labelfont(1);
  1295. o->labelsize(11);
  1296. o->labelcolor(FL_BACKGROUND2_COLOR);
  1297. o->callback((Fl_Callback*)cb_P);
  1298. } // Fl_Button* o
  1299. { Fl_Button* o = new Fl_Button(5, 400, 55, 30, "export");
  1300. o->tooltip("export samples as wav file");
  1301. o->box(FL_THIN_UP_BOX);
  1302. o->color((Fl_Color)51);
  1303. o->labelsize(11);
  1304. o->callback((Fl_Callback*)cb_export);
  1305. o->align(Fl_Align(FL_ALIGN_WRAP));
  1306. } // Fl_Button* o
  1307. padnotewindow->end();
  1308. } // Fl_Double_Window* padnotewindow
  1309. return padnotewindow;
  1310. }
  1311. void PADnoteUI::refresh() {
  1312. volume->value(pars->PVolume);
  1313. vsns->value(pars->PAmpVelocityScaleFunction);
  1314. pan->value(pars->PPanning);
  1315. stereo->value(pars->PStereo);
  1316. pstr->value(pars->PPunchStrength);
  1317. pt->value(pars->PPunchTime);
  1318. pstc->value(pars->PPunchStretch);
  1319. pvel->value(pars->PPunchVelocitySensing);
  1320. detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
  1321. detune->value(pars->PDetune-8192);
  1322. int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
  1323. octave->value(k);
  1324. detunetype->value(pars->PDetuneType-1);
  1325. k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
  1326. coarsedet->value(k);
  1327. hz440->value(pars->Pfixedfreq);
  1328. fixedfreqetdial->value(pars->PfixedfreqET);
  1329. amplfo->refresh();
  1330. freqlfo->refresh();
  1331. filterlfo->refresh();
  1332. ampenv->refresh();
  1333. freqenv->refresh();
  1334. filterenv->refresh();
  1335. filterui->refresh();
  1336. /* harmonic structure parametrs */
  1337. resui->refresh();
  1338. if (oscui!=NULL) oscui->refresh();
  1339. hpbasetype->value(pars->Php.base.type);
  1340. hpbasepar1->value(pars->Php.base.par1);
  1341. hpfreqmult->value(pars->Php.freqmult);
  1342. hpmpar1->value(pars->Php.modulator.par1);
  1343. hpmfreq->value(pars->Php.modulator.freq);
  1344. hpwidth->value(pars->Php.width);
  1345. hponehalf->value(pars->Php.onehalf);
  1346. hpamptype->value(pars->Php.amp.type);
  1347. hpampmode->value(pars->Php.amp.mode);
  1348. hpamppar1->value(pars->Php.amp.par1);
  1349. hpamppar2->value(pars->Php.amp.par2);
  1350. hpautoscale->value(pars->Php.autoscale);
  1351. bwdial->value(pars->Pbandwidth);
  1352. if (pars->Pmode==0){
  1353. bwprofilegroup->activate();
  1354. bwdial->activate();
  1355. bwcents->activate();
  1356. hprofile->activate();
  1357. hprofile->color(54);
  1358. bwscale->activate();
  1359. } else {
  1360. bwprofilegroup->deactivate();
  1361. bwdial->deactivate();
  1362. bwcents->deactivate();
  1363. hprofile->deactivate();
  1364. hprofile->color(48);
  1365. bwscale->activate();
  1366. };
  1367. spectrummode->value(pars->Pmode);
  1368. qbasenote->value(pars->Pquality.basenote);
  1369. qsmpoct->value(pars->Pquality.smpoct);
  1370. qoct->value(pars->Pquality.oct);
  1371. qsamplesize->value(pars->Pquality.samplesize);
  1372. hrpostype->value(pars->Phrpos.type);
  1373. hrpospar1->value(pars->Phrpos.par1);
  1374. hrpospar2->value(pars->Phrpos.par2);
  1375. hrpospar3->value(pars->Phrpos.par3);
  1376. hprofile->redraw();
  1377. overtonepos->redraw();
  1378. osc->redraw();
  1379. pars->applyparameters(true);
  1380. applybutton->color(FL_GRAY);
  1381. applybutton->parent()->redraw();
  1382. }
  1383. PADnoteUI::~PADnoteUI() {
  1384. delete(oscui);
  1385. delete(resui);
  1386. padnotewindow->hide();
  1387. delete(padnotewindow);
  1388. }