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.

1127 lines
35KB

  1. # data file for the Fltk User Interface Designer (fluid)
  2. version 1.0300
  3. header_name {.h}
  4. code_name {.cc}
  5. decl {\#include "../Params/PADnoteParameters.h"} {public local
  6. }
  7. decl {\#include "../Misc/Util.h"} {public local
  8. }
  9. decl {\#include "../Misc/Master.h"} {public local
  10. }
  11. decl {\#include "ResonanceUI.h"} {public local
  12. }
  13. decl {\#include <FL/Fl_Box.H>} {public local
  14. }
  15. decl {\#include <FL/Fl_Group.H>} {public local
  16. }
  17. decl {\#include <FL/Fl_File_Chooser.H>} {public local
  18. }
  19. decl {\#include <math.h>} {private local
  20. }
  21. decl {\#include <stdio.h>} {private local
  22. }
  23. decl {\#include <stdlib.h>} {private local
  24. }
  25. decl {\#include <string.h>} {private local
  26. }
  27. decl {\#include "WidgetPDial.h"} {public local
  28. }
  29. decl {\#include "EnvelopeUI.h"} {public local
  30. }
  31. decl {\#include "LFOUI.h"} {public local
  32. }
  33. decl {\#include "FilterUI.h"} {public local
  34. }
  35. decl {\#include "OscilGenUI.h"} {public local
  36. }
  37. decl {\#include "PresetsUI.h"} {public local
  38. }
  39. class PADnoteHarmonicProfile {: {public Fl_Box}
  40. } {
  41. Function {PADnoteHarmonicProfile(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
  42. code {pars=NULL;} {}
  43. }
  44. Function {init(PADnoteParameters *pars,Master *master_)} {} {
  45. code {master=master_;
  46. this->pars=pars;} {}
  47. }
  48. Function {draw()} {} {
  49. code {int ox=x(),oy=y(),lx=w(),ly=h();
  50. if (!visible()) return;
  51. float smps[lx];
  52. float realbw=pars->getprofile(smps,lx);
  53. bool active=active_r();
  54. //draw the equivalent bandwidth
  55. if (active) fl_color(220,220,220);
  56. else fl_color(160,165,165);
  57. fl_line_style(FL_DASH);
  58. int rbw=(int)(realbw*(lx-1.0)/2.0);
  59. fl_begin_line();
  60. for (int i=lx/2-rbw;i<(lx/2+rbw);i++) { fl_vertex(ox+i,oy); }
  61. fl_end_line();
  62. fl_line_style(FL_DASH);
  63. if (active) fl_color(200,200,200);
  64. else fl_color(160,160,160);
  65. for (int i=1;i<10;i++){
  66. int kx=(int)(lx/10.0*i);
  67. fl_line( ox + kx, oy, ox + kx, oy + ly - 1 );
  68. };
  69. for (int i=1;i<5;i++){
  70. int ky=(int)(ly/5.0*i);
  71. fl_line(ox,oy+ly-ky,ox+lx,oy+ly-ky-1);
  72. };
  73. fl_color(120,120,120);
  74. fl_line_style(FL_DASH);
  75. fl_line(ox+lx/2,oy,ox+lx/2,oy+ly);
  76. //draw the graph
  77. fl_line_style(FL_SOLID);
  78. int old=0;
  79. if (active) fl_color(180,210,240);
  80. else fl_color(150,150,155);
  81. fl_color( fl_color_add_alpha( fl_color(), 127 ) );
  82. fl_begin_polygon();
  83. fl_vertex( ox, oy + h() );
  84. for (int i=0;i<lx;i++){
  85. int val=(int) ((ly-2)*smps[i]);
  86. // fl_vertex(ox+i,oy+ly-1);
  87. fl_vertex(ox+i,oy+ly-1-val);
  88. // if (active) fl_color(0,0,100);
  89. // else fl_color(150,150,150);
  90. // if (i>0)
  91. // {
  92. // fl_vertex(ox+i-1,oy+ly-2-old);
  93. // fl_vertex(ox+i,oy+ly-2-val);
  94. // }
  95. old=val;
  96. };
  97. fl_vertex( ox + w(), oy + h() );
  98. fl_end_polygon();
  99. fl_line_style(FL_DASH);
  100. if (active) fl_color(0,100,220);
  101. else fl_color(150,160,170);
  102. fl_line(ox+lx/2-rbw,oy,ox+lx/2-rbw,oy+ly-1);
  103. fl_line(ox+lx/2+rbw,oy,ox+lx/2+rbw,oy+ly-1);
  104. fl_line_style(0);} {}
  105. }
  106. decl {Master *master;} {private local
  107. }
  108. decl {PADnoteParameters *pars;} {public local
  109. }
  110. }
  111. class PADnoteOvertonePosition {: {public Fl_Box}
  112. } {
  113. Function {PADnoteOvertonePosition(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
  114. code {pars=NULL;} {}
  115. }
  116. Function {init(PADnoteParameters *pars,Master *master_)} {} {
  117. code {master=master_;
  118. this->pars=pars;} {}
  119. }
  120. Function {draw()} {} {
  121. code {if (!visible()) return;
  122. const int maxdb=60;
  123. int ox=x(),oy=y(),lx=w(),ly=h();
  124. const int maxharmonic=64;
  125. for (int i=1;i<maxharmonic;i++){
  126. fl_color(100,100,100);
  127. fl_line_style(FL_DOT);
  128. if (i%5==0) fl_line_style(0);
  129. if (i%10==0) fl_color(120,120,120);
  130. int kx=(int)(lx/(float)maxharmonic*i);
  131. fl_line(ox+kx,oy,ox+kx,oy+ly);
  132. };
  133. int n=synth->oscilsize/2;
  134. float spc[n];
  135. for (int i=0;i<n;i++) spc[i]=0.0;
  136. pthread_mutex_lock(&master->mutex);
  137. pars->oscilgen->getspectrum(n,spc,0);
  138. pthread_mutex_unlock(&master->mutex);
  139. //normalize
  140. float max=0;
  141. for (int i=0;i<n;i++){
  142. float x=fabs(spc[i]);
  143. if (max<x) max=x;
  144. }
  145. if (max<0.000001) max=1.0;
  146. max=max*1.05;
  147. float spectrum[lx];
  148. for (int i=0;i<lx;i++) spectrum[i]=0;
  149. for (int i=1;i<n;i++){
  150. float nhr=pars->getNhr(i);
  151. int kx=(int)(lx/(float)maxharmonic*nhr);
  152. if ((kx<0)||(kx>lx)) continue;
  153. spectrum[kx]=spc[i-1]/max+1e-9;
  154. };
  155. fl_color(180,0,0);
  156. fl_line_style(0);
  157. if (pars->Pmode==2){
  158. int old=0;
  159. for (int i=1;i<lx;i++){
  160. if ((spectrum[i]>1e-10)||(i==(lx-1))){
  161. int delta=i-old;
  162. float val1=spectrum[old];
  163. float val2=spectrum[i];
  164. float idelta=1.0/delta;
  165. for (int j=0;j<delta;j++){
  166. float x=idelta*j;
  167. spectrum[old+j]=val1*(1.0-x)+val2*x;
  168. };
  169. old=i;
  170. };
  171. };
  172. };
  173. for (int i=0;i<lx;i++){
  174. float x=spectrum[i];
  175. if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
  176. else continue;
  177. int yy=(int)(x*ly);
  178. fl_line(ox+i,oy+ly-1-yy,ox+i,oy+ly-1);
  179. };} {}
  180. }
  181. decl {Master *master;} {private local
  182. }
  183. decl {PADnoteParameters *pars;} {public local
  184. }
  185. }
  186. class PADnoteUI {open : {public PresetsUI_}
  187. } {
  188. Function {PADnoteUI(PADnoteParameters *parameters,Master *master_)} {open
  189. } {
  190. code {pars=parameters;
  191. master=master_;
  192. oscui=NULL;
  193. resui=new ResonanceUI(pars->resonance);
  194. make_window();} {}
  195. }
  196. Function {make_window()} {open
  197. } {
  198. Fl_Window padnotewindow {
  199. label {PAD synth Parameters} open
  200. xywh {291 369 535 435} type Double visible
  201. } {
  202. Fl_Tabs {} {
  203. callback {if (o->value()!=harmonicstructuregroup) applybutton->hide();
  204. else applybutton->show();} open
  205. xywh {0 0 535 395} box UP_FRAME
  206. } {
  207. Fl_Group harmonicstructuregroup {
  208. label {Harmonic Structure} open selected
  209. xywh {0 20 535 375} box UP_FRAME
  210. } {
  211. Fl_Group bwprofilegroup {
  212. xywh {5 30 90 260} box UP_FRAME
  213. code0 {if (pars->Pmode!=0) o->deactivate();}
  214. } {
  215. Fl_Dial hpbasepar1 {
  216. label Width
  217. callback {pars->Php.base.par1=(int) o->value();
  218. hprofile->redraw();
  219. cbwidget->do_callback();}
  220. xywh {20 75 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  221. code0 {o->value(pars->Php.base.par1);}
  222. class WidgetPDial
  223. }
  224. Fl_Choice hpbasetype {
  225. label {Base Type}
  226. callback {pars->Php.base.type=o->value();
  227. hprofile->redraw();
  228. cbwidget->do_callback();}
  229. xywh {15 45 75 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
  230. code0 {o->value(pars->Php.base.type);}
  231. } {
  232. MenuItem {} {
  233. label Gauss
  234. xywh {15 15 100 20} labelfont 1 labelsize 10
  235. }
  236. MenuItem {} {
  237. label Square
  238. xywh {25 25 100 20} labelfont 1 labelsize 10
  239. }
  240. MenuItem {} {
  241. label DoubleExp
  242. xywh {35 35 100 20} labelfont 1 labelsize 10
  243. }
  244. }
  245. Fl_Dial hpfreqmult {
  246. label FreqMlt
  247. callback {pars->Php.freqmult=(int) o->value();
  248. hprofile->redraw();
  249. cbwidget->do_callback();}
  250. xywh {55 75 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  251. code0 {o->value(pars->Php.freqmult);}
  252. class WidgetPDial
  253. }
  254. Fl_Dial hpmpar1 {
  255. label Str
  256. callback {pars->Php.modulator.par1=(int) o->value();
  257. hprofile->redraw();
  258. cbwidget->do_callback();}
  259. xywh {15 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  260. code0 {o->value(pars->Php.modulator.par1);}
  261. class WidgetPDial
  262. }
  263. Fl_Dial hpmfreq {
  264. label SFreq
  265. callback {pars->Php.modulator.freq=(int) o->value();
  266. hprofile->redraw();
  267. cbwidget->do_callback();}
  268. xywh {40 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  269. code0 {o->value(pars->Php.modulator.freq);}
  270. class WidgetPDial
  271. }
  272. Fl_Group {} {
  273. xywh {10 160 80 105} box BORDER_BOX
  274. } {
  275. Fl_Choice hpamptype {
  276. label AmpMultiplier
  277. callback {pars->Php.amp.type=o->value();
  278. hprofile->redraw();
  279. cbwidget->do_callback();}
  280. xywh {15 175 70 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
  281. code0 {o->value(pars->Php.amp.type);}
  282. } {
  283. MenuItem {} {
  284. label OFF
  285. xywh {45 45 100 20} labelfont 1 labelsize 10
  286. }
  287. MenuItem {} {
  288. label Gauss
  289. xywh {55 55 100 20} labelfont 1 labelsize 10
  290. }
  291. MenuItem {} {
  292. label Sine
  293. xywh {65 65 100 20} labelfont 1 labelsize 10
  294. }
  295. MenuItem {} {
  296. label Flat
  297. xywh {75 75 100 20} labelfont 1 labelsize 10
  298. }
  299. }
  300. Fl_Choice hpampmode {
  301. label AmpMode
  302. callback {pars->Php.amp.mode=o->value();
  303. hprofile->redraw();
  304. cbwidget->do_callback();}
  305. xywh {15 205 70 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
  306. code0 {o->value(pars->Php.amp.mode);}
  307. } {
  308. MenuItem {} {
  309. label Sum
  310. xywh {60 60 100 20} labelfont 1 labelsize 10
  311. }
  312. MenuItem {} {
  313. label Mult
  314. xywh {70 70 100 20} labelfont 1 labelsize 10
  315. }
  316. MenuItem {} {
  317. label Div1
  318. xywh {80 80 100 20} labelfont 1 labelsize 10
  319. }
  320. MenuItem {} {
  321. label Div2
  322. xywh {90 90 100 20} labelfont 1 labelsize 10
  323. }
  324. }
  325. Fl_Dial hpamppar1 {
  326. label Par1
  327. callback {pars->Php.amp.par1=(int) o->value();
  328. hprofile->redraw();
  329. cbwidget->do_callback();}
  330. xywh {15 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  331. code0 {o->value(pars->Php.amp.par1);}
  332. class WidgetPDial
  333. }
  334. Fl_Dial hpamppar2 {
  335. label Par2
  336. callback {pars->Php.amp.par2=(int) o->value();
  337. hprofile->redraw();
  338. cbwidget->do_callback();}
  339. xywh {55 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  340. code0 {o->value(pars->Php.amp.par2);}
  341. class WidgetPDial
  342. }
  343. }
  344. Fl_Check_Button hpautoscale {
  345. label autoscale
  346. callback {pars->Php.autoscale=(int) o->value();
  347. hprofile->redraw();
  348. cbwidget->do_callback();}
  349. xywh {10 270 60 15} down_box DOWN_BOX labelsize 10
  350. code0 {o->value(pars->Php.autoscale);}
  351. }
  352. Fl_Choice hponehalf {
  353. callback {pars->Php.onehalf=o->value();
  354. hprofile->redraw();
  355. cbwidget->do_callback();}
  356. xywh {10 143 80 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
  357. code0 {o->value(pars->Php.onehalf);}
  358. } {
  359. MenuItem {} {
  360. label Full
  361. xywh {25 25 100 20} labelfont 1 labelsize 10
  362. }
  363. MenuItem {} {
  364. label {Upper Half}
  365. xywh {45 45 100 20} labelfont 1 labelsize 10
  366. }
  367. MenuItem {} {
  368. label {Lower Half}
  369. xywh {35 35 100 20} labelfont 1 labelsize 10
  370. }
  371. }
  372. Fl_Dial hpwidth {
  373. label Size
  374. callback {pars->Php.width=(int) o->value();
  375. hprofile->redraw();
  376. cbwidget->do_callback();}
  377. xywh {65 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  378. code0 {o->value(pars->Php.width);}
  379. class WidgetPDial
  380. }
  381. }
  382. Fl_Group {} {
  383. xywh {100 155 270 135} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 align 6
  384. code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  385. code1 {osc->init(pars->oscilgen,master);}
  386. } {}
  387. Fl_Button {} {
  388. label Change
  389. callback {if (oscui!=NULL) delete (oscui);
  390. oscui=new OscilEditor(pars->oscilgen,osc,cbwidget,applybutton,master);}
  391. xywh {375 270 60 20} box THIN_UP_BOX labelfont 1 labelsize 11
  392. }
  393. Fl_Box cbwidget {
  394. label {Harmonic Content}
  395. callback {overtonepos->redraw();
  396. applybutton->color(FL_RED);
  397. applybutton->redraw();}
  398. xywh {125 135 205 20} align 16
  399. }
  400. Fl_Button {} {
  401. label Resonance
  402. callback {resui->resonancewindow->redraw();
  403. resui->resonancewindow->show();
  404. resui->setcbwidget(cbwidget,applybutton);}
  405. xywh {375 225 80 20} box THIN_UP_BOX
  406. }
  407. Fl_Dial bwdial {
  408. label BandWidth
  409. callback {bwcents->value(pars->setPbandwidth((int) o->value()));
  410. cbwidget->do_callback();}
  411. xywh {15 295 35 35} box ROUND_UP_BOX labelsize 10 maximum 1000 step 1
  412. code0 {o->value(pars->Pbandwidth);}
  413. code1 {if (pars->Pmode!=0) o->deactivate();}
  414. class WidgetPDial
  415. }
  416. Fl_Value_Output bwcents {
  417. label cents
  418. xywh {55 305 55 15} labelsize 10 align 6 maximum 10000 step 0.1
  419. code0 {o->value(pars->setPbandwidth(pars->Pbandwidth));}
  420. code1 {if (pars->Pmode!=0) o->deactivate();}
  421. }
  422. Fl_Group {} {
  423. xywh {315 295 215 45} box UP_FRAME
  424. } {
  425. Fl_Choice hrpostype {
  426. label OvertonesPosition
  427. callback {pars->Phrpos.type=o->value();
  428. overtonepos->redraw();
  429. cbwidget->do_callback();}
  430. xywh {325 310 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11
  431. code0 {o->value(pars->Phrpos.type);}
  432. } {
  433. MenuItem {} {
  434. label Harmonic
  435. xywh {70 70 100 20} labelfont 1 labelsize 11
  436. }
  437. MenuItem {} {
  438. label ShiftU
  439. xywh {80 80 100 20} labelfont 1 labelsize 11
  440. }
  441. MenuItem {} {
  442. label ShiftL
  443. xywh {90 90 100 20} labelfont 1 labelsize 11
  444. }
  445. MenuItem {} {
  446. label PowerU
  447. xywh {90 90 100 20} labelfont 1 labelsize 11
  448. }
  449. MenuItem {} {
  450. label PowerL
  451. xywh {100 100 100 20} labelfont 1 labelsize 11
  452. }
  453. MenuItem {} {
  454. label Sine
  455. xywh {110 110 100 20} labelfont 1 labelsize 11
  456. }
  457. MenuItem {} {
  458. label Power
  459. xywh {120 120 100 20} labelfont 1 labelsize 11
  460. }
  461. }
  462. Fl_Dial hrpospar1 {
  463. label Par1
  464. callback {pars->Phrpos.par1=(int) o->value();
  465. overtonepos->redraw();
  466. cbwidget->do_callback();}
  467. xywh {425 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1
  468. code0 {o->value(pars->Phrpos.par1);}
  469. class WidgetPDial
  470. }
  471. Fl_Dial hrpospar2 {
  472. label Par2
  473. callback {pars->Phrpos.par2=(int) o->value();
  474. overtonepos->redraw();
  475. cbwidget->do_callback();}
  476. xywh {460 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1
  477. code0 {o->value(pars->Phrpos.par2);}
  478. class WidgetPDial
  479. }
  480. Fl_Dial hrpospar3 {
  481. label ForceH
  482. callback {pars->Phrpos.par3=(int) o->value();
  483. overtonepos->redraw();
  484. cbwidget->do_callback();}
  485. xywh {495 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1
  486. code0 {o->value(pars->Phrpos.par3);}
  487. class WidgetPDial
  488. }
  489. }
  490. Fl_Choice bwscale {
  491. label {Bandwidth Scale}
  492. callback {pars->Pbwscale=(int) o->value();
  493. cbwidget->do_callback();}
  494. xywh {120 305 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11
  495. code0 {o->value(pars->Pbwscale);}
  496. code1 {if (pars->Pmode!=0) o->deactivate();}
  497. } {
  498. MenuItem {} {
  499. label Normal
  500. xywh {95 95 100 20} labelfont 1 labelsize 11
  501. }
  502. MenuItem {} {
  503. label EqualHz
  504. xywh {105 105 100 20} labelfont 1 labelsize 11
  505. }
  506. MenuItem {} {
  507. label Quater
  508. xywh {115 115 100 20} labelfont 1 labelsize 11
  509. }
  510. MenuItem {} {
  511. label Half
  512. xywh {125 125 100 20} labelfont 1 labelsize 11
  513. }
  514. MenuItem {} {
  515. label {75%}
  516. xywh {135 135 100 20} labelfont 1 labelsize 11
  517. }
  518. MenuItem {} {
  519. label {150%}
  520. xywh {145 145 100 20} labelfont 1 labelsize 11
  521. }
  522. MenuItem {} {
  523. label Double
  524. xywh {145 145 100 20} labelfont 1 labelsize 11
  525. }
  526. MenuItem {} {
  527. label {Inv.Half}
  528. xywh {155 155 100 20} labelfont 1 labelsize 11
  529. }
  530. }
  531. Fl_Group overtonepos {
  532. xywh {5 345 525 45} box FLAT_BOX color 51 selection_color 218 labelcolor 63
  533. code0 {PADnoteOvertonePosition *opui=new PADnoteOvertonePosition(o->x(),o->y(),o->w(),o->h(),"");}
  534. code1 {opui->init(pars,master);}
  535. } {}
  536. Fl_Choice qsamplesize {
  537. label {Sample Size}
  538. callback {pars->Pquality.samplesize=(int) o->value();
  539. cbwidget->do_callback();}
  540. xywh {375 190 115 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11
  541. code0 {o->value(pars->Pquality.samplesize);}
  542. } {
  543. MenuItem {} {
  544. label {16k (Tiny)}
  545. xywh {155 155 100 20} labelfont 1 labelsize 11
  546. }
  547. MenuItem {} {
  548. label 32k
  549. xywh {165 165 100 20} labelfont 1 labelsize 11
  550. }
  551. MenuItem {} {
  552. label {64k (Small)}
  553. xywh {175 175 100 20} labelfont 1 labelsize 11
  554. }
  555. MenuItem {} {
  556. label 128k
  557. xywh {185 185 100 20} labelfont 1 labelsize 11
  558. }
  559. MenuItem {} {
  560. label {256k (Normal)}
  561. xywh {205 205 100 20} labelfont 1 labelsize 11
  562. }
  563. MenuItem {} {
  564. label 512k
  565. xywh {200 200 100 20} labelfont 1 labelsize 11
  566. }
  567. MenuItem {} {
  568. label {1M (Big)}
  569. xywh {205 205 100 20} labelfont 1 labelsize 11
  570. }
  571. }
  572. Fl_Choice qsmpoct {
  573. label {smp/oct}
  574. callback {pars->Pquality.smpoct=(int) o->value();
  575. cbwidget->do_callback();}
  576. xywh {430 155 45 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
  577. code0 {o->value(pars->Pquality.smpoct);}
  578. } {
  579. MenuItem {} {
  580. label {0.5}
  581. xywh {10 10 100 20} labelfont 1 labelsize 11
  582. }
  583. MenuItem {} {
  584. label 1
  585. xywh {0 0 100 20} labelfont 1 labelsize 11
  586. }
  587. MenuItem {} {
  588. label 2
  589. xywh {10 10 100 20} labelfont 1 labelsize 11
  590. }
  591. MenuItem {} {
  592. label 3
  593. xywh {20 20 100 20} labelfont 1 labelsize 11
  594. }
  595. MenuItem {} {
  596. label 4
  597. xywh {30 30 100 20} labelfont 1 labelsize 11
  598. }
  599. MenuItem {} {
  600. label 6
  601. xywh {40 40 100 20} labelfont 1 labelsize 11
  602. }
  603. MenuItem {} {
  604. label 12
  605. xywh {50 50 100 20} labelfont 1 labelsize 11
  606. }
  607. }
  608. Fl_Choice qoct {
  609. label {no.oct}
  610. callback {pars->Pquality.oct=(int) o->value();
  611. cbwidget->do_callback();}
  612. xywh {480 155 45 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
  613. code0 {o->value(pars->Pquality.oct);}
  614. } {
  615. MenuItem {} {
  616. label 1
  617. xywh {10 10 100 20} labelfont 1 labelsize 11
  618. }
  619. MenuItem {} {
  620. label 2
  621. xywh {20 20 100 20} labelfont 1 labelsize 11
  622. }
  623. MenuItem {} {
  624. label 3
  625. xywh {30 30 100 20} labelfont 1 labelsize 11
  626. }
  627. MenuItem {} {
  628. label 4
  629. xywh {40 40 100 20} labelfont 1 labelsize 11
  630. }
  631. MenuItem {} {
  632. label 5
  633. xywh {50 50 100 20} labelfont 1 labelsize 11
  634. }
  635. MenuItem {} {
  636. label 6
  637. xywh {60 60 100 20} labelfont 1 labelsize 11
  638. }
  639. MenuItem {} {
  640. label 7
  641. xywh {70 70 100 20} labelfont 1 labelsize 11
  642. }
  643. MenuItem {} {
  644. label 8
  645. xywh {80 80 100 20} labelfont 1 labelsize 11
  646. }
  647. }
  648. Fl_Choice qbasenote {
  649. label base
  650. callback {pars->Pquality.basenote=(int) o->value();
  651. cbwidget->do_callback();}
  652. xywh {375 155 50 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
  653. code0 {o->value(pars->Pquality.basenote);}
  654. } {
  655. MenuItem {} {
  656. label {C-2}
  657. xywh {10 10 100 20} labelfont 1
  658. }
  659. MenuItem {} {
  660. label {G-2}
  661. xywh {20 20 100 20} labelfont 1
  662. }
  663. MenuItem {} {
  664. label {C-3}
  665. xywh {20 20 100 20} labelfont 1
  666. }
  667. MenuItem {} {
  668. label {G-3}
  669. xywh {30 30 100 20} labelfont 1
  670. }
  671. MenuItem {} {
  672. label {C-4}
  673. xywh {30 30 100 20} labelfont 1
  674. }
  675. MenuItem {} {
  676. label {G-4}
  677. xywh {40 40 100 20} labelfont 1
  678. }
  679. MenuItem {} {
  680. label {C-5}
  681. xywh {40 40 100 20} labelfont 1
  682. }
  683. MenuItem {} {
  684. label {G-5}
  685. xywh {50 50 100 20} labelfont 1
  686. }
  687. MenuItem {} {
  688. label {G-6}
  689. xywh {60 60 100 20} labelfont 1
  690. }
  691. }
  692. Fl_Group hprofile {
  693. xywh {100 45 430 90} box FLAT_BOX color 51 selection_color 218 labelcolor 63
  694. code0 {PADnoteHarmonicProfile *hpui=new PADnoteHarmonicProfile(o->x(),o->y(),o->w(),o->h(),"");}
  695. code1 {hpui->init(pars,master);}
  696. code2 {if (pars->Pmode!=0) { o->deactivate(); o->color(48);};}
  697. } {}
  698. Fl_Box {} {
  699. label {Profile of One Harmonic (Frequency Distribution)}
  700. xywh {160 25 315 20}
  701. }
  702. Fl_Choice spectrummode {
  703. label {Spectrum Mode}
  704. callback {pars->Pmode=(int) o->value();
  705. if (pars->Pmode==0){
  706. bwprofilegroup->activate();
  707. bwdial->activate();
  708. bwcents->activate();
  709. hprofile->activate();
  710. hprofile->color(54);
  711. bwscale->activate();
  712. } else {
  713. bwprofilegroup->deactivate();
  714. bwdial->deactivate();
  715. bwcents->deactivate();
  716. hprofile->deactivate();
  717. hprofile->color(48);
  718. bwscale->deactivate();
  719. };
  720. cbwidget->do_callback();}
  721. xywh {220 305 90 20} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 11
  722. code0 {o->value(pars->Pmode);}
  723. } {
  724. MenuItem {} {
  725. label Bandwidth
  726. xywh {105 105 100 20} labelfont 1 labelsize 11
  727. }
  728. MenuItem {} {
  729. label Discrete
  730. xywh {125 125 100 20} labelfont 1 labelsize 11
  731. }
  732. MenuItem {} {
  733. label Continous
  734. xywh {115 115 100 20} labelfont 1 labelsize 11
  735. }
  736. }
  737. }
  738. Fl_Group {} {
  739. label {Envelopes&LFOs} open
  740. xywh {0 20 535 375} box UP_FRAME hide
  741. } {
  742. Fl_Group {} {
  743. label FREQUENCY
  744. xywh {5 275 525 115} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  745. } {
  746. Fl_Group freqenv {
  747. label {PADSynth - Frequency Envelope} open
  748. xywh {10 315 205 70} box FLAT_BOX color 51 align 144
  749. code0 {o->init(pars->FreqEnvelope);}
  750. class EnvelopeUI
  751. } {}
  752. Fl_Counter octave {
  753. label Octave
  754. callback {int k=(int) o->value();
  755. if (k<0) k+=16;
  756. pars->PCoarseDetune = k*1024+
  757. pars->PCoarseDetune%1024;}
  758. tooltip Octave xywh {470 295 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
  759. code0 {int k=pars->PCoarseDetune/1024;}
  760. code1 {if (k>=8) k-=16;}
  761. code2 {o->value(k);}
  762. }
  763. Fl_Counter coarsedet {
  764. label {Coarse det.}
  765. callback {int k=(int) o->value();
  766. if (k<0) k+=1024;
  767. pars->PCoarseDetune = k+
  768. (pars->PCoarseDetune/1024)*1024;}
  769. tooltip {Coarse Detune} xywh {455 365 70 20} type Simple labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 11
  770. code0 {int k=pars->PCoarseDetune%1024;}
  771. code1 {if (k>=512) k-=1024;}
  772. code2 {o->value(k);}
  773. code3 {o->lstep(10);}
  774. }
  775. Fl_Group freqlfo {
  776. label {Frequency LFO } open
  777. xywh {215 315 230 70} box FLAT_BOX color 47 align 144
  778. code0 {o->init(pars->FreqLfo);}
  779. class LFOUI
  780. } {}
  781. Fl_Slider detune {
  782. callback {pars->PDetune=(int)o->value()+8192;
  783. detunevalueoutput->do_callback();}
  784. tooltip {Fine Detune (cents)} xywh {60 295 295 15} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1
  785. code0 {o->value(pars->PDetune-8192);}
  786. }
  787. Fl_Value_Output detunevalueoutput {
  788. label Detune
  789. callback {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
  790. xywh {12 295 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  791. code0 {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
  792. }
  793. Fl_Choice detunetype {
  794. label {Detune Type}
  795. callback {pars->PDetuneType=(int) o->value()+1;
  796. detunevalueoutput->do_callback();} open
  797. xywh {450 330 75 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  798. code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  799. code1 {o->value(pars->PDetuneType-1);}
  800. } {}
  801. Fl_Check_Button hz440 {
  802. label 440Hz
  803. callback {int x=(int) o->value();
  804. pars->Pfixedfreq=x;
  805. if (x==0) fixedfreqetdial->deactivate();
  806. else fixedfreqetdial->activate();}
  807. tooltip {set the base frequency to 440Hz} xywh {365 295 50 15} down_box DOWN_BOX labelfont 1 labelsize 10
  808. code0 {o->value(pars->Pfixedfreq);}
  809. }
  810. Fl_Dial fixedfreqetdial {
  811. label {Eq.T.}
  812. callback {pars->PfixedfreqET=(int) o->value();}
  813. tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {420 295 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
  814. code0 {o->value(pars->PfixedfreqET);}
  815. code1 {if (pars->Pfixedfreq==0) o->deactivate();}
  816. class WidgetPDial
  817. }
  818. }
  819. Fl_Group {} {
  820. label AMPLITUDE
  821. xywh {5 25 240 250} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  822. } {
  823. Fl_Value_Slider volume {
  824. label Vol
  825. callback {pars->PVolume=(int)o->value();}
  826. tooltip Volume xywh {10 50 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
  827. code0 {o->value(pars->PVolume);}
  828. }
  829. Fl_Value_Slider vsns {
  830. label {V.Sns}
  831. callback {pars->PAmpVelocityScaleFunction=(int) o->value();}
  832. tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 70 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
  833. code0 {o->value(pars->PAmpVelocityScaleFunction);}
  834. }
  835. Fl_Dial pan {
  836. label Pan
  837. callback {pars->PPanning=(int) o->value();}
  838. tooltip {Panning (leftmost is Random)} xywh {210 45 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  839. code0 {o->value(pars->PPanning);}
  840. class WidgetPDial
  841. }
  842. Fl_Dial pstr {
  843. label {P.Str.}
  844. callback {pars->PPunchStrength=(int) o->value();}
  845. tooltip {Punch Strength} xywh {125 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  846. code0 {o->value(pars->PPunchStrength);}
  847. class WidgetPDial
  848. }
  849. Fl_Dial pt {
  850. label {P.t.}
  851. callback {pars->PPunchTime=(int) o->value();}
  852. tooltip {Punch Time (duration)} xywh {155 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  853. code0 {o->value(pars->PPunchTime);}
  854. class WidgetPDial
  855. }
  856. Fl_Dial pstc {
  857. label {P.Stc.}
  858. callback {pars->PPunchStretch=(int) o->value();}
  859. tooltip {Punch Stretch} xywh {185 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  860. code0 {o->value(pars->PPunchStretch);}
  861. class WidgetPDial
  862. }
  863. Fl_Dial pvel {
  864. label {P.Vel.}
  865. callback {pars->PPunchVelocitySensing=(int) o->value();}
  866. tooltip {Punch Velocity Sensing} xywh {215 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
  867. code0 {o->value(pars->PPunchVelocitySensing);}
  868. class WidgetPDial
  869. }
  870. Fl_Group ampenv {
  871. label {PADSynth - Amplitude Envelope} open
  872. xywh {10 95 205 70} box FLAT_BOX color 51 align 144
  873. code0 {o->init(pars->AmpEnvelope);}
  874. class EnvelopeUI
  875. } {}
  876. Fl_Group amplfo {
  877. label {Amplitude LFO } open
  878. xywh {10 165 230 70} box FLAT_BOX color 47 align 144
  879. code0 {o->init(pars->AmpLfo);}
  880. class LFOUI
  881. } {}
  882. Fl_Check_Button stereo {
  883. label Stereo
  884. callback {pars->PStereo=(int) o->value();
  885. hprofile->redraw();}
  886. xywh {15 245 70 25} down_box DOWN_BOX
  887. code0 {o->value(pars->PStereo);}
  888. }
  889. }
  890. Fl_Group {} {
  891. label FILTER
  892. xywh {245 25 285 250} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
  893. } {
  894. Fl_Group filterenv {
  895. label {PADSynth - Filter Envelope} open
  896. xywh {250 130 275 70} box FLAT_BOX color 51 align 144
  897. code0 {o->init(pars->FilterEnvelope);}
  898. class EnvelopeUI
  899. } {}
  900. Fl_Group filterlfo {
  901. label {Filter LFO } open
  902. xywh {250 200 230 70} box FLAT_BOX color 47 align 144
  903. code0 {o->init(pars->FilterLfo);}
  904. class LFOUI
  905. } {}
  906. Fl_Group filterui {
  907. label {PADsynth - Filter} open
  908. xywh {250 55 275 75} box FLAT_BOX color 50 align 144
  909. code0 {o->init(pars->GlobalFilter,&pars->PFilterVelocityScale,&pars->PFilterVelocityScaleFunction);}
  910. class FilterUI
  911. } {}
  912. }
  913. }
  914. }
  915. Fl_Button applybutton {
  916. label {Apply Changes}
  917. callback {pars->applyparameters(true);
  918. o->color(FL_GRAY);
  919. if (oscui!=NULL) {
  920. oscui->applybutton->color(FL_GRAY);
  921. oscui->applybutton->redraw();
  922. };
  923. if (resui!=NULL) {
  924. resui->applybutton->color(FL_GRAY);
  925. resui->applybutton->redraw();
  926. };}
  927. xywh {300 400 135 30} box THIN_UP_BOX
  928. code0 {o->color(FL_RED);}
  929. }
  930. Fl_Button {} {
  931. label Close
  932. callback {padnotewindow->hide();}
  933. xywh {440 400 90 30} box THIN_UP_BOX
  934. }
  935. Fl_Button {} {
  936. label C
  937. callback {presetsui->copy(pars);}
  938. xywh {65 400 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
  939. }
  940. Fl_Button {} {
  941. label P
  942. callback {presetsui->paste(pars,this);}
  943. xywh {95 400 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
  944. }
  945. Fl_Button {} {
  946. label export
  947. callback {char *filename;
  948. filename=fl_file_chooser("Export samples:","(*.wav)",NULL,0);
  949. if (filename==NULL) return;
  950. fl_filename_setext(filename,"");
  951. pars->export2wav(filename);}
  952. tooltip {export samples as wav file} xywh {5 400 55 30} box THIN_UP_BOX color 51 labelsize 11 align 128
  953. }
  954. }
  955. }
  956. Function {refresh()} {} {
  957. code {volume->value(pars->PVolume);
  958. vsns->value(pars->PAmpVelocityScaleFunction);
  959. pan->value(pars->PPanning);
  960. stereo->value(pars->PStereo);
  961. pstr->value(pars->PPunchStrength);
  962. pt->value(pars->PPunchTime);
  963. pstc->value(pars->PPunchStretch);
  964. pvel->value(pars->PPunchVelocitySensing);
  965. detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
  966. detune->value(pars->PDetune-8192);
  967. int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
  968. octave->value(k);
  969. detunetype->value(pars->PDetuneType-1);
  970. k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
  971. coarsedet->value(k);
  972. hz440->value(pars->Pfixedfreq);
  973. fixedfreqetdial->value(pars->PfixedfreqET);
  974. amplfo->refresh();
  975. freqlfo->refresh();
  976. filterlfo->refresh();
  977. ampenv->refresh();
  978. freqenv->refresh();
  979. filterenv->refresh();
  980. filterui->refresh();
  981. /* harmonic structure parametrs */
  982. resui->refresh();
  983. if (oscui!=NULL) oscui->refresh();
  984. hpbasetype->value(pars->Php.base.type);
  985. hpbasepar1->value(pars->Php.base.par1);
  986. hpfreqmult->value(pars->Php.freqmult);
  987. hpmpar1->value(pars->Php.modulator.par1);
  988. hpmfreq->value(pars->Php.modulator.freq);
  989. hpwidth->value(pars->Php.width);
  990. hponehalf->value(pars->Php.onehalf);
  991. hpamptype->value(pars->Php.amp.type);
  992. hpampmode->value(pars->Php.amp.mode);
  993. hpamppar1->value(pars->Php.amp.par1);
  994. hpamppar2->value(pars->Php.amp.par2);
  995. hpautoscale->value(pars->Php.autoscale);
  996. bwdial->value(pars->Pbandwidth);
  997. if (pars->Pmode==0){
  998. bwprofilegroup->activate();
  999. bwdial->activate();
  1000. bwcents->activate();
  1001. hprofile->activate();
  1002. hprofile->color(54);
  1003. bwscale->activate();
  1004. } else {
  1005. bwprofilegroup->deactivate();
  1006. bwdial->deactivate();
  1007. bwcents->deactivate();
  1008. hprofile->deactivate();
  1009. hprofile->color(48);
  1010. bwscale->activate();
  1011. };
  1012. spectrummode->value(pars->Pmode);
  1013. qbasenote->value(pars->Pquality.basenote);
  1014. qsmpoct->value(pars->Pquality.smpoct);
  1015. qoct->value(pars->Pquality.oct);
  1016. qsamplesize->value(pars->Pquality.samplesize);
  1017. hrpostype->value(pars->Phrpos.type);
  1018. hrpospar1->value(pars->Phrpos.par1);
  1019. hrpospar2->value(pars->Phrpos.par2);
  1020. hrpospar3->value(pars->Phrpos.par3);
  1021. hprofile->redraw();
  1022. overtonepos->redraw();
  1023. osc->redraw();
  1024. pars->applyparameters(true);
  1025. applybutton->color(FL_GRAY);
  1026. applybutton->parent()->redraw();} {}
  1027. }
  1028. Function {~PADnoteUI()} {} {
  1029. code {delete(oscui);
  1030. delete(resui);
  1031. padnotewindow->hide();
  1032. delete(padnotewindow);} {}
  1033. }
  1034. decl {PADnoteParameters *pars;} {public local
  1035. }
  1036. decl {Master *master;} {public local
  1037. }
  1038. decl {OscilEditor *oscui;} {public local
  1039. }
  1040. decl {Oscilloscope *osc;} {public local
  1041. }
  1042. decl {ResonanceUI *resui;} {public local
  1043. }
  1044. }