External plugins for Carla
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

906 lines
34KB

  1. // generated by Fast Light User Interface Designer (fluid) version 1.0300
  2. #include "external/zynaddsubfx/UI/FilterUI.h"
  3. //Copyright (c) 2002-2005 Nasca Octavian Paul
  4. //License: GNU GPL version 2 or later
  5. #include <cmath>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. void FilterUI::cb_P_i(Fl_Button*, void*) {
  9. presetsui->paste(filterui->loc(),this);
  10. }
  11. void FilterUI::cb_P(Fl_Button* o, void* v) {
  12. ((FilterUI*)(o->parent()->user_data()))->cb_P_i(o,v);
  13. }
  14. Fl_Menu_Item FilterUI::menu_analogfiltertypechoice[] = {
  15. {"LPF1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  16. {"HPF1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  17. {"LPF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  18. {"HPF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  19. {"BPF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  20. {"NF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  21. {"PkF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  22. {"LSh2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  23. {"HSh2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  24. {0,0,0,0,0,0,0,0,0}
  25. };
  26. Fl_Menu_Item FilterUI::menu_svfiltertypechoice[] = {
  27. {"1LPF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  28. {"1HPF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  29. {"1BPF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  30. {"1NF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  31. {0,0,0,0,0,0,0,0,0}
  32. };
  33. void FilterUI::cb_filtertype_i(Fl_Osc_Choice*, void*) {
  34. refresh();
  35. }
  36. void FilterUI::cb_filtertype(Fl_Osc_Choice* o, void* v) {
  37. ((FilterUI*)(o->parent()->parent()->user_data()))->cb_filtertype_i(o,v);
  38. }
  39. Fl_Menu_Item FilterUI::menu_filtertype[] = {
  40. {"Analog", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  41. {"Formant", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  42. {"StVarF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  43. {0,0,0,0,0,0,0,0,0}
  44. };
  45. void FilterUI::cb_qdial_i(Fl_Osc_Dial*, void*) {
  46. formantfiltergraph->redraw();
  47. }
  48. void FilterUI::cb_qdial(Fl_Osc_Dial* o, void* v) {
  49. ((FilterUI*)(o->parent()->parent()->user_data()))->cb_qdial_i(o,v);
  50. }
  51. void FilterUI::cb_gaindial_i(Fl_Osc_Dial*, void*) {
  52. formantfiltergraph->redraw();
  53. }
  54. void FilterUI::cb_gaindial(Fl_Osc_Dial* o, void* v) {
  55. ((FilterUI*)(o->parent()->parent()->user_data()))->cb_gaindial_i(o,v);
  56. }
  57. void FilterUI::cb_stcounter_i(Fl_Osc_Choice*, void*) {
  58. formantfiltergraph->redraw();
  59. }
  60. void FilterUI::cb_stcounter(Fl_Osc_Choice* o, void* v) {
  61. ((FilterUI*)(o->parent()->parent()->user_data()))->cb_stcounter_i(o,v);
  62. }
  63. void FilterUI::cb_editbutton_i(Fl_Button*, void*) {
  64. formantparswindow->show();
  65. }
  66. void FilterUI::cb_editbutton(Fl_Button* o, void* v) {
  67. ((FilterUI*)(o->parent()->user_data()))->cb_editbutton_i(o,v);
  68. }
  69. void FilterUI::cb_C_i(Fl_Button*, void*) {
  70. presetsui->copy(filterui->loc());
  71. }
  72. void FilterUI::cb_C(Fl_Button* o, void* v) {
  73. ((FilterUI*)(o->parent()->user_data()))->cb_C_i(o,v);
  74. }
  75. void FilterUI::cb_P1_i(Fl_Button*, void*) {
  76. presetsui->paste(filterui->loc(),this);
  77. }
  78. void FilterUI::cb_P1(Fl_Button* o, void* v) {
  79. ((FilterUI*)(o->parent()->user_data()))->cb_P1_i(o,v);
  80. }
  81. void FilterUI::cb_P2_i(Fl_Button*, void*) {
  82. presetsui->paste(filterui->loc(),this,nvowel);
  83. }
  84. void FilterUI::cb_P2(Fl_Button* o, void* v) {
  85. ((FilterUI*)(o->parent()->user_data()))->cb_P2_i(o,v);
  86. }
  87. void FilterUI::cb_Formant_i(Fl_Counter* o, void*) {
  88. nformant=(int) o->value();
  89. formantparsgroup->reext("Pvowels"+to_s(nvowel)+"/Pformants"+to_s(nformant)+"/");
  90. update_formant_window();
  91. formantfiltergraph->redraw();
  92. }
  93. void FilterUI::cb_Formant(Fl_Counter* o, void* v) {
  94. ((FilterUI*)(o->parent()->parent()->user_data()))->cb_Formant_i(o,v);
  95. }
  96. void FilterUI::cb_Vowel_i(Fl_Counter* o, void*) {
  97. nvowel=(int) o->value();
  98. formantparsgroup->reext("Pvowels"+to_s(nvowel)+"/Pformants"+to_s(nformant)+"/");
  99. update_formant_window();
  100. formantfiltergraph->redraw();
  101. }
  102. void FilterUI::cb_Vowel(Fl_Counter* o, void* v) {
  103. ((FilterUI*)(o->parent()->parent()->user_data()))->cb_Vowel_i(o,v);
  104. }
  105. void FilterUI::cb_formant_freq_dial_i(Fl_Osc_Dial*, void*) {
  106. formantfiltergraph->update();
  107. }
  108. void FilterUI::cb_formant_freq_dial(Fl_Osc_Dial* o, void* v) {
  109. ((FilterUI*)(o->parent()->parent()->parent()->user_data()))->cb_formant_freq_dial_i(o,v);
  110. }
  111. void FilterUI::cb_formant_q_dial_i(Fl_Osc_Dial*, void*) {
  112. formantfiltergraph->update();
  113. }
  114. void FilterUI::cb_formant_q_dial(Fl_Osc_Dial* o, void* v) {
  115. ((FilterUI*)(o->parent()->parent()->parent()->user_data()))->cb_formant_q_dial_i(o,v);
  116. }
  117. void FilterUI::cb_formant_amp_dial_i(Fl_Osc_Dial*, void*) {
  118. formantfiltergraph->update();
  119. }
  120. void FilterUI::cb_formant_amp_dial(Fl_Osc_Dial* o, void* v) {
  121. ((FilterUI*)(o->parent()->parent()->parent()->user_data()))->cb_formant_amp_dial_i(o,v);
  122. }
  123. void FilterUI::cb_sequencesize_i(Fl_Osc_Counter*, void*) {
  124. update_formant_window();
  125. }
  126. void FilterUI::cb_sequencesize(Fl_Osc_Counter* o, void* v) {
  127. ((FilterUI*)(o->parent()->parent()->user_data()))->cb_sequencesize_i(o,v);
  128. }
  129. void FilterUI::cb_S_i(Fl_Counter* o, void*) {
  130. nseqpos = o->value();update_formant_window();vowel_counter->oscMove("vowel_seq"+to_s(nseqpos));
  131. }
  132. void FilterUI::cb_S(Fl_Counter* o, void* v) {
  133. ((FilterUI*)(o->parent()->parent()->user_data()))->cb_S_i(o,v);
  134. }
  135. void FilterUI::cb_vowel_counter_i(Fl_Osc_Counter* o, void*) {
  136. (void)o;//pars->Psequence[nseqpos].nvowel=(int) o->value(); pars->changed=true;
  137. }
  138. void FilterUI::cb_vowel_counter(Fl_Osc_Counter* o, void* v) {
  139. ((FilterUI*)(o->parent()->parent()->user_data()))->cb_vowel_counter_i(o,v);
  140. }
  141. void FilterUI::cb_numformants_i(Fl_Osc_Counter*, void*) {
  142. update_formant_window();
  143. formantfiltergraph->redraw();
  144. }
  145. void FilterUI::cb_numformants(Fl_Osc_Counter* o, void* v) {
  146. ((FilterUI*)(o->parent()->user_data()))->cb_numformants_i(o,v);
  147. }
  148. void FilterUI::cb_centerfreqvo_i(Fl_Osc_Output* o, void*) {
  149. o->value(o->newvalue()/1000.0);
  150. }
  151. void FilterUI::cb_centerfreqvo(Fl_Osc_Output* o, void* v) {
  152. ((FilterUI*)(o->parent()->user_data()))->cb_centerfreqvo_i(o,v);
  153. }
  154. void FilterUI::cb_octavesfreqvo_i(Fl_Osc_Output* o, void*) {
  155. o->value(o->newvalue());
  156. }
  157. void FilterUI::cb_octavesfreqvo(Fl_Osc_Output* o, void* v) {
  158. ((FilterUI*)(o->parent()->user_data()))->cb_octavesfreqvo_i(o,v);
  159. }
  160. void FilterUI::cb_cfknob_i(Fl_Osc_Slider*, void*) {
  161. centerfreqvo->update();
  162. }
  163. void FilterUI::cb_cfknob(Fl_Osc_Slider* o, void* v) {
  164. ((FilterUI*)(o->parent()->user_data()))->cb_cfknob_i(o,v);
  165. }
  166. void FilterUI::cb_octknob_i(Fl_Osc_Slider*, void*) {
  167. octavesfreqvo->update();
  168. }
  169. void FilterUI::cb_octknob(Fl_Osc_Slider* o, void* v) {
  170. ((FilterUI*)(o->parent()->user_data()))->cb_octknob_i(o,v);
  171. }
  172. void FilterUI::cb_Close_i(Fl_Button*, void*) {
  173. formantparswindow->hide();
  174. }
  175. void FilterUI::cb_Close(Fl_Button* o, void* v) {
  176. ((FilterUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
  177. }
  178. void FilterUI::cb_C1_i(Fl_Button*, void*) {
  179. presetsui->copy(filterui->loc(),nvowel);
  180. }
  181. void FilterUI::cb_C1(Fl_Button* o, void* v) {
  182. ((FilterUI*)(o->parent()->user_data()))->cb_C1_i(o,v);
  183. }
  184. FilterUI::FilterUI(int x,int y, int w, int h, const char *label):Fl_Osc_Group(x,y,w,h) {
  185. nvowel=0;nformant=0;nseqpos=0;
  186. }
  187. FilterUI::~FilterUI() {
  188. filterui->hide();
  189. formantparswindow->hide();
  190. hide();
  191. //delete (filterui);
  192. delete (formantparswindow);
  193. }
  194. Fl_Osc_Group* FilterUI::make_window() {
  195. { filterui = new Fl_Osc_Group(0, 0, 275, 70);
  196. filterui->box(FL_FLAT_BOX);
  197. filterui->color(FL_LIGHT1);
  198. filterui->selection_color(FL_BACKGROUND_COLOR);
  199. filterui->labeltype(FL_NO_LABEL);
  200. filterui->labelfont(1);
  201. filterui->labelsize(14);
  202. filterui->labelcolor(FL_FOREGROUND_COLOR);
  203. filterui->user_data((void*)(this));
  204. filterui->align(Fl_Align(FL_ALIGN_TOP));
  205. filterui->when(FL_WHEN_RELEASE);
  206. { Fl_Button* o = new Fl_Button(203, 5, 15, 15, "P");
  207. o->box(FL_THIN_UP_BOX);
  208. o->color((Fl_Color)179);
  209. o->labelfont(1);
  210. o->labelsize(10);
  211. o->labelcolor((Fl_Color)55);
  212. o->callback((Fl_Callback*)cb_P);
  213. } // Fl_Button* o
  214. { Fl_Group* o = filterparamswindow = new Fl_Group(0, 0, 275, 75, "Filter Parameters");
  215. filterparamswindow->box(FL_UP_FRAME);
  216. filterparamswindow->color((Fl_Color)183);
  217. filterparamswindow->labeltype(FL_ENGRAVED_LABEL);
  218. filterparamswindow->labelsize(10);
  219. filterparamswindow->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  220. { Fl_Osc_Choice* o = analogfiltertypechoice = new Fl_Osc_Choice(10, 50, 50, 15, "FilterType");
  221. analogfiltertypechoice->tooltip("The Filter type");
  222. analogfiltertypechoice->box(FL_UP_BOX);
  223. analogfiltertypechoice->down_box(FL_BORDER_BOX);
  224. analogfiltertypechoice->color(FL_BACKGROUND_COLOR);
  225. analogfiltertypechoice->selection_color(FL_SELECTION_COLOR);
  226. analogfiltertypechoice->labeltype(FL_NORMAL_LABEL);
  227. analogfiltertypechoice->labelfont(0);
  228. analogfiltertypechoice->labelsize(10);
  229. analogfiltertypechoice->labelcolor(FL_FOREGROUND_COLOR);
  230. analogfiltertypechoice->textsize(10);
  231. analogfiltertypechoice->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  232. analogfiltertypechoice->when(FL_WHEN_RELEASE);
  233. analogfiltertypechoice->menu(menu_analogfiltertypechoice);
  234. o->init("Ptype");
  235. } // Fl_Osc_Choice* analogfiltertypechoice
  236. { Fl_Osc_Choice* o = svfiltertypechoice = new Fl_Osc_Choice(10, 50, 50, 15, "FilterType");
  237. svfiltertypechoice->tooltip("The Filter type");
  238. svfiltertypechoice->box(FL_UP_BOX);
  239. svfiltertypechoice->down_box(FL_BORDER_BOX);
  240. svfiltertypechoice->color(FL_BACKGROUND_COLOR);
  241. svfiltertypechoice->selection_color(FL_SELECTION_COLOR);
  242. svfiltertypechoice->labeltype(FL_NORMAL_LABEL);
  243. svfiltertypechoice->labelfont(0);
  244. svfiltertypechoice->labelsize(10);
  245. svfiltertypechoice->labelcolor(FL_FOREGROUND_COLOR);
  246. svfiltertypechoice->textsize(10);
  247. svfiltertypechoice->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  248. svfiltertypechoice->when(FL_WHEN_RELEASE);
  249. svfiltertypechoice->menu(menu_svfiltertypechoice);
  250. o->init("Ptype");
  251. } // Fl_Osc_Choice* svfiltertypechoice
  252. { Fl_Osc_Choice* o = filtertype = new Fl_Osc_Choice(10, 20, 60, 15, "Category");
  253. filtertype->tooltip("The Category of the Filter (Analog/Formantic/etc.)");
  254. filtertype->box(FL_UP_BOX);
  255. filtertype->down_box(FL_BORDER_BOX);
  256. filtertype->color(FL_BACKGROUND_COLOR);
  257. filtertype->selection_color(FL_SELECTION_COLOR);
  258. filtertype->labeltype(FL_NORMAL_LABEL);
  259. filtertype->labelfont(0);
  260. filtertype->labelsize(10);
  261. filtertype->labelcolor(FL_FOREGROUND_COLOR);
  262. filtertype->textsize(10);
  263. filtertype->callback((Fl_Callback*)cb_filtertype);
  264. filtertype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  265. filtertype->when(FL_WHEN_RELEASE);
  266. filtertype->menu(menu_filtertype);
  267. o->init("Pcategory");
  268. } // Fl_Osc_Choice* filtertype
  269. { Fl_Osc_Dial* o = cfreqdial = new Fl_Osc_Dial(75, 25, 30, 30, "C.Freq");
  270. cfreqdial->tooltip("Center Frequency of the Filter or the base position in the vowel\'s sequence");
  271. cfreqdial->box(FL_ROUND_UP_BOX);
  272. cfreqdial->color(FL_BACKGROUND_COLOR);
  273. cfreqdial->selection_color(FL_INACTIVE_COLOR);
  274. cfreqdial->labeltype(FL_NORMAL_LABEL);
  275. cfreqdial->labelfont(0);
  276. cfreqdial->labelsize(10);
  277. cfreqdial->labelcolor(FL_FOREGROUND_COLOR);
  278. cfreqdial->maximum(127);
  279. cfreqdial->step(1);
  280. cfreqdial->align(Fl_Align(FL_ALIGN_BOTTOM));
  281. cfreqdial->when(FL_WHEN_CHANGED);
  282. o->init("Pfreq");
  283. } // Fl_Osc_Dial* cfreqdial
  284. { Fl_Osc_Dial* o = qdial = new Fl_Osc_Dial(110, 25, 30, 30, "Q");
  285. qdial->tooltip("Filter resonance or bandwidth");
  286. qdial->box(FL_ROUND_UP_BOX);
  287. qdial->color(FL_BACKGROUND_COLOR);
  288. qdial->selection_color(FL_INACTIVE_COLOR);
  289. qdial->labeltype(FL_NORMAL_LABEL);
  290. qdial->labelfont(0);
  291. qdial->labelsize(10);
  292. qdial->labelcolor(FL_FOREGROUND_COLOR);
  293. qdial->maximum(127);
  294. qdial->step(1);
  295. qdial->callback((Fl_Callback*)cb_qdial);
  296. qdial->align(Fl_Align(FL_ALIGN_BOTTOM));
  297. qdial->when(FL_WHEN_CHANGED);
  298. o->init("Pq");
  299. } // Fl_Osc_Dial* qdial
  300. { Fl_Osc_Dial* o = freqtrdial = new Fl_Osc_Dial(215, 25, 30, 30, "freq.tr.");
  301. freqtrdial->tooltip("Filter frequency tracking (left is negative, middle is 0, and right is positi\
  302. ve)");
  303. freqtrdial->box(FL_ROUND_UP_BOX);
  304. freqtrdial->color(FL_BACKGROUND_COLOR);
  305. freqtrdial->selection_color(FL_INACTIVE_COLOR);
  306. freqtrdial->labeltype(FL_NORMAL_LABEL);
  307. freqtrdial->labelfont(0);
  308. freqtrdial->labelsize(10);
  309. freqtrdial->labelcolor(FL_FOREGROUND_COLOR);
  310. freqtrdial->maximum(127);
  311. freqtrdial->step(1);
  312. freqtrdial->align(Fl_Align(FL_ALIGN_BOTTOM));
  313. freqtrdial->when(FL_WHEN_CHANGED);
  314. o->init("Pfreqtrack");
  315. } // Fl_Osc_Dial* freqtrdial
  316. { Fl_Osc_Dial* o = vsnsadial = new Fl_Osc_Dial(145, 25, 30, 30, "V.SnsA.");
  317. vsnsadial->tooltip("Velocity sensing amount of the Filter");
  318. vsnsadial->box(FL_ROUND_UP_BOX);
  319. vsnsadial->color(FL_BACKGROUND_COLOR);
  320. vsnsadial->selection_color(FL_INACTIVE_COLOR);
  321. vsnsadial->labeltype(FL_NORMAL_LABEL);
  322. vsnsadial->labelfont(0);
  323. vsnsadial->labelsize(10);
  324. vsnsadial->labelcolor(FL_FOREGROUND_COLOR);
  325. vsnsadial->maximum(127);
  326. vsnsadial->step(1);
  327. vsnsadial->align(Fl_Align(FL_ALIGN_BOTTOM));
  328. vsnsadial->when(FL_WHEN_CHANGED);
  329. if(!alt_root.empty()) o->alt_init(alt_root, "VelocityScale");
  330. else {o->deactivate(); o->value(127);o->mark_dead();}
  331. } // Fl_Osc_Dial* vsnsadial
  332. { Fl_Osc_Dial* o = vsnsdial = new Fl_Osc_Dial(180, 25, 30, 30, "V.Sns.");
  333. vsnsdial->tooltip("Velocity Sensing Function of the Filter");
  334. vsnsdial->box(FL_ROUND_UP_BOX);
  335. vsnsdial->color(FL_BACKGROUND_COLOR);
  336. vsnsdial->selection_color(FL_INACTIVE_COLOR);
  337. vsnsdial->labeltype(FL_NORMAL_LABEL);
  338. vsnsdial->labelfont(0);
  339. vsnsdial->labelsize(10);
  340. vsnsdial->labelcolor(FL_FOREGROUND_COLOR);
  341. vsnsdial->maximum(127);
  342. vsnsdial->step(1);
  343. vsnsdial->align(Fl_Align(FL_ALIGN_BOTTOM));
  344. vsnsdial->when(FL_WHEN_CHANGED);
  345. if(!alt_root.empty()) o->alt_init(alt_root, "VelocityScaleFunction");
  346. else {o->deactivate(); o->value(127);o->mark_dead();}
  347. } // Fl_Osc_Dial* vsnsdial
  348. { Fl_Osc_Dial* o = gaindial = new Fl_Osc_Dial(250, 35, 20, 20, "gain");
  349. gaindial->tooltip("Filter output gain/damp");
  350. gaindial->box(FL_ROUND_UP_BOX);
  351. gaindial->color(FL_BACKGROUND_COLOR);
  352. gaindial->selection_color(FL_INACTIVE_COLOR);
  353. gaindial->labeltype(FL_NORMAL_LABEL);
  354. gaindial->labelfont(0);
  355. gaindial->labelsize(10);
  356. gaindial->labelcolor(FL_FOREGROUND_COLOR);
  357. gaindial->maximum(127);
  358. gaindial->step(1);
  359. gaindial->callback((Fl_Callback*)cb_gaindial);
  360. gaindial->align(Fl_Align(FL_ALIGN_BOTTOM));
  361. gaindial->when(FL_WHEN_CHANGED);
  362. o->init("Pgain");
  363. } // Fl_Osc_Dial* gaindial
  364. { Fl_Osc_Choice* o = stcounter = new Fl_Osc_Choice(235, 5, 35, 15, "St");
  365. stcounter->tooltip("Filter stages (in order to increase dB/oct. value and the order of the filter\
  366. )");
  367. stcounter->box(FL_UP_BOX);
  368. stcounter->down_box(FL_BORDER_BOX);
  369. stcounter->color(FL_BACKGROUND_COLOR);
  370. stcounter->selection_color(FL_SELECTION_COLOR);
  371. stcounter->labeltype(FL_NORMAL_LABEL);
  372. stcounter->labelfont(0);
  373. stcounter->labelsize(10);
  374. stcounter->labelcolor(FL_FOREGROUND_COLOR);
  375. stcounter->textfont(1);
  376. stcounter->textsize(10);
  377. stcounter->callback((Fl_Callback*)cb_stcounter);
  378. stcounter->align(Fl_Align(FL_ALIGN_LEFT));
  379. stcounter->when(FL_WHEN_RELEASE);
  380. for (int i=0;i<MAX_FILTER_STAGES;i++) {char tmp[10];snprintf(tmp,10,"%dx",i+1);o->add(tmp);};
  381. o->init("Pstages");
  382. } // Fl_Osc_Choice* stcounter
  383. set_module_parameters( o );
  384. filterparamswindow->end();
  385. } // Fl_Group* filterparamswindow
  386. { editbutton = new Fl_Button(15, 40, 50, 25, "Edit");
  387. editbutton->labelfont(1);
  388. editbutton->labelsize(11);
  389. editbutton->callback((Fl_Callback*)cb_editbutton);
  390. } // Fl_Button* editbutton
  391. { Fl_Button* o = new Fl_Button(186, 5, 15, 15, "C");
  392. o->box(FL_THIN_UP_BOX);
  393. o->color((Fl_Color)179);
  394. o->labelfont(1);
  395. o->labelsize(10);
  396. o->labelcolor((Fl_Color)55);
  397. o->callback((Fl_Callback*)cb_C);
  398. } // Fl_Button* o
  399. { Fl_Button* o = new Fl_Button(203, 5, 15, 15, "P");
  400. o->box(FL_THIN_UP_BOX);
  401. o->color((Fl_Color)179);
  402. o->labelfont(1);
  403. o->labelsize(10);
  404. o->labelcolor((Fl_Color)55);
  405. o->callback((Fl_Callback*)cb_P1);
  406. } // Fl_Button* o
  407. filterui->end();
  408. } // Fl_Osc_Group* filterui
  409. return filterui;
  410. }
  411. Fl_Osc_Window* FilterUI::make_formant_window() {
  412. { formantparswindow = new Fl_Osc_Window(700, 205, "Formant Filter Parameters");
  413. formantparswindow->box(FL_FLAT_BOX);
  414. formantparswindow->color(FL_BACKGROUND_COLOR);
  415. formantparswindow->selection_color(FL_BACKGROUND_COLOR);
  416. formantparswindow->labeltype(FL_NO_LABEL);
  417. formantparswindow->labelfont(0);
  418. formantparswindow->labelsize(14);
  419. formantparswindow->labelcolor(FL_FOREGROUND_COLOR);
  420. formantparswindow->user_data((void*)(this));
  421. formantparswindow->align(Fl_Align(FL_ALIGN_TOP));
  422. formantparswindow->when(FL_WHEN_RELEASE);
  423. { Fl_Button* o = new Fl_Button(665, 25, 25, 15, "P");
  424. o->box(FL_THIN_UP_BOX);
  425. o->color((Fl_Color)179);
  426. o->labelfont(1);
  427. o->labelsize(11);
  428. o->labelcolor((Fl_Color)55);
  429. o->callback((Fl_Callback*)cb_P2);
  430. formantparswindow->osc = osc;
  431. formantparswindow->base = loc();
  432. } // Fl_Button* o
  433. { Fl_Osc_Group* o = new Fl_Osc_Group(485, 47, 105, 113);
  434. o->box(FL_THIN_UP_BOX);
  435. o->color(FL_BACKGROUND_COLOR);
  436. o->selection_color(FL_BACKGROUND_COLOR);
  437. o->labeltype(FL_NORMAL_LABEL);
  438. o->labelfont(0);
  439. o->labelsize(14);
  440. o->labelcolor(FL_FOREGROUND_COLOR);
  441. o->align(Fl_Align(FL_ALIGN_TOP));
  442. o->when(FL_WHEN_RELEASE);
  443. { Fl_Counter* o = new Fl_Counter(545, 80, 40, 15, "Formant ");
  444. o->type(1);
  445. o->labelfont(1);
  446. o->labelsize(10);
  447. o->minimum(0);
  448. o->maximum(127);
  449. o->step(1);
  450. o->textsize(10);
  451. o->callback((Fl_Callback*)cb_Formant);
  452. o->align(Fl_Align(FL_ALIGN_LEFT));
  453. o->bounds(0,FF_MAX_FORMANTS-1);
  454. o->value(nformant);
  455. } // Fl_Counter* o
  456. { Fl_Counter* o = new Fl_Counter(545, 55, 40, 20, "Vowel no.");
  457. o->type(1);
  458. o->labelfont(1);
  459. o->labelsize(10);
  460. o->minimum(0);
  461. o->maximum(127);
  462. o->step(1);
  463. o->textfont(1);
  464. o->textsize(11);
  465. o->callback((Fl_Callback*)cb_Vowel);
  466. o->align(Fl_Align(FL_ALIGN_LEFT));
  467. o->bounds(0,FF_MAX_VOWELS-1);
  468. o->value(nvowel);
  469. } // Fl_Counter* o
  470. { formantparsgroup = new Fl_Osc_Group(490, 105, 95, 50);
  471. formantparsgroup->box(FL_ENGRAVED_FRAME);
  472. formantparsgroup->color(FL_BACKGROUND_COLOR);
  473. formantparsgroup->selection_color(FL_BACKGROUND_COLOR);
  474. formantparsgroup->labeltype(FL_NORMAL_LABEL);
  475. formantparsgroup->labelfont(0);
  476. formantparsgroup->labelsize(14);
  477. formantparsgroup->labelcolor(FL_FOREGROUND_COLOR);
  478. formantparsgroup->align(Fl_Align(FL_ALIGN_TOP));
  479. formantparsgroup->when(FL_WHEN_RELEASE);
  480. { Fl_Box* o = new Fl_Box(515, 130, 35, 16, "dummy");
  481. o->hide();
  482. o->deactivate();
  483. formantparsgroup->ext = "Pvowels0/Pformants0/";
  484. } // Fl_Box* o
  485. { Fl_Osc_Dial* o = formant_freq_dial = new Fl_Osc_Dial(495, 115, 25, 25, "freq");
  486. formant_freq_dial->tooltip("Formant frequency");
  487. formant_freq_dial->box(FL_ROUND_UP_BOX);
  488. formant_freq_dial->color(FL_BACKGROUND_COLOR);
  489. formant_freq_dial->selection_color(FL_INACTIVE_COLOR);
  490. formant_freq_dial->labeltype(FL_NORMAL_LABEL);
  491. formant_freq_dial->labelfont(0);
  492. formant_freq_dial->labelsize(10);
  493. formant_freq_dial->labelcolor(FL_FOREGROUND_COLOR);
  494. formant_freq_dial->maximum(127);
  495. formant_freq_dial->step(1);
  496. formant_freq_dial->callback((Fl_Callback*)cb_formant_freq_dial);
  497. formant_freq_dial->align(Fl_Align(FL_ALIGN_BOTTOM));
  498. formant_freq_dial->when(FL_WHEN_CHANGED);
  499. //TODO get widget renaming working here!!!
  500. o->init("freq");
  501. } // Fl_Osc_Dial* formant_freq_dial
  502. { Fl_Osc_Dial* o = formant_q_dial = new Fl_Osc_Dial(525, 115, 24, 25, "Q");
  503. formant_q_dial->tooltip("Formant\'s Q");
  504. formant_q_dial->box(FL_ROUND_UP_BOX);
  505. formant_q_dial->color(FL_BACKGROUND_COLOR);
  506. formant_q_dial->selection_color(FL_INACTIVE_COLOR);
  507. formant_q_dial->labeltype(FL_NORMAL_LABEL);
  508. formant_q_dial->labelfont(0);
  509. formant_q_dial->labelsize(10);
  510. formant_q_dial->labelcolor(FL_FOREGROUND_COLOR);
  511. formant_q_dial->maximum(127);
  512. formant_q_dial->step(1);
  513. formant_q_dial->callback((Fl_Callback*)cb_formant_q_dial);
  514. formant_q_dial->align(Fl_Align(FL_ALIGN_BOTTOM));
  515. formant_q_dial->when(FL_WHEN_CHANGED);
  516. o->init("q");
  517. } // Fl_Osc_Dial* formant_q_dial
  518. { Fl_Osc_Dial* o = formant_amp_dial = new Fl_Osc_Dial(555, 115, 24, 25, "amp");
  519. formant_amp_dial->tooltip("Formant amplitude");
  520. formant_amp_dial->box(FL_ROUND_UP_BOX);
  521. formant_amp_dial->color(FL_BACKGROUND_COLOR);
  522. formant_amp_dial->selection_color(FL_INACTIVE_COLOR);
  523. formant_amp_dial->labeltype(FL_NORMAL_LABEL);
  524. formant_amp_dial->labelfont(0);
  525. formant_amp_dial->labelsize(10);
  526. formant_amp_dial->labelcolor(FL_FOREGROUND_COLOR);
  527. formant_amp_dial->maximum(127);
  528. formant_amp_dial->step(1);
  529. formant_amp_dial->callback((Fl_Callback*)cb_formant_amp_dial);
  530. formant_amp_dial->align(Fl_Align(FL_ALIGN_BOTTOM));
  531. formant_amp_dial->when(FL_WHEN_CHANGED);
  532. o->init("amp");
  533. } // Fl_Osc_Dial* formant_amp_dial
  534. formantparsgroup->end();
  535. } // Fl_Osc_Group* formantparsgroup
  536. o->end();
  537. } // Fl_Osc_Group* o
  538. { Fl_Osc_Group* o = new Fl_Osc_Group(590, 47, 100, 113);
  539. o->box(FL_THIN_UP_BOX);
  540. o->color(FL_BACKGROUND_COLOR);
  541. o->selection_color(FL_BACKGROUND_COLOR);
  542. o->labeltype(FL_NORMAL_LABEL);
  543. o->labelfont(0);
  544. o->labelsize(14);
  545. o->labelcolor(FL_FOREGROUND_COLOR);
  546. o->align(Fl_Align(FL_ALIGN_TOP));
  547. o->when(FL_WHEN_RELEASE);
  548. { Fl_Osc_Counter* o = sequencesize = new Fl_Osc_Counter(595, 62, 55, 20, "Seq.Size");
  549. sequencesize->type(1);
  550. sequencesize->box(FL_UP_BOX);
  551. sequencesize->color(FL_BACKGROUND_COLOR);
  552. sequencesize->selection_color(FL_INACTIVE_COLOR);
  553. sequencesize->labeltype(FL_NORMAL_LABEL);
  554. sequencesize->labelfont(1);
  555. sequencesize->labelsize(10);
  556. sequencesize->labelcolor(FL_FOREGROUND_COLOR);
  557. sequencesize->minimum(0);
  558. sequencesize->maximum(127);
  559. sequencesize->step(1);
  560. sequencesize->textfont(1);
  561. sequencesize->textsize(11);
  562. sequencesize->callback((Fl_Callback*)cb_sequencesize);
  563. sequencesize->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  564. sequencesize->when(FL_WHEN_CHANGED);
  565. o->bounds(1,FF_MAX_SEQUENCE-1);
  566. o->init("Psequencesize");
  567. } // Fl_Osc_Counter* sequencesize
  568. { Fl_Counter* o = new Fl_Counter(595, 97, 40, 15, "S.Pos.");
  569. o->tooltip("Current position from the sequence");
  570. o->type(1);
  571. o->labelfont(1);
  572. o->labelsize(10);
  573. o->minimum(0);
  574. o->maximum(127);
  575. o->step(1);
  576. o->textsize(10);
  577. o->callback((Fl_Callback*)cb_S);
  578. o->align(Fl_Align(FL_ALIGN_TOP_RIGHT));
  579. o->bounds(0,FF_MAX_SEQUENCE-2);
  580. o->value(nseqpos);
  581. } // Fl_Counter* o
  582. { Fl_Osc_Counter* o = vowel_counter = new Fl_Osc_Counter(640, 97, 40, 15, "Vowel");
  583. vowel_counter->type(1);
  584. vowel_counter->box(FL_UP_BOX);
  585. vowel_counter->color(FL_BACKGROUND_COLOR);
  586. vowel_counter->selection_color(FL_INACTIVE_COLOR);
  587. vowel_counter->labeltype(FL_NORMAL_LABEL);
  588. vowel_counter->labelfont(0);
  589. vowel_counter->labelsize(10);
  590. vowel_counter->labelcolor(FL_FOREGROUND_COLOR);
  591. vowel_counter->minimum(0);
  592. vowel_counter->maximum(127);
  593. vowel_counter->step(1);
  594. vowel_counter->textsize(10);
  595. vowel_counter->callback((Fl_Callback*)cb_vowel_counter);
  596. vowel_counter->align(Fl_Align(FL_ALIGN_TOP));
  597. vowel_counter->when(FL_WHEN_CHANGED);
  598. o->bounds(0,FF_MAX_VOWELS-1);
  599. o->init("vowel_seq0");
  600. } // Fl_Osc_Counter* vowel_counter
  601. { Fl_Osc_Check* o = new Fl_Osc_Check(625, 132, 60, 20, "Neg.Input");
  602. o->tooltip("Negate the input from LFO/envelopes/etc.");
  603. o->box(FL_NO_BOX);
  604. o->down_box(FL_DOWN_BOX);
  605. o->color(FL_BACKGROUND_COLOR);
  606. o->selection_color(FL_FOREGROUND_COLOR);
  607. o->labeltype(FL_NORMAL_LABEL);
  608. o->labelfont(0);
  609. o->labelsize(10);
  610. o->labelcolor(FL_FOREGROUND_COLOR);
  611. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  612. o->when(FL_WHEN_RELEASE);
  613. o->init("Psequencereversed");
  614. } // Fl_Osc_Check* o
  615. { Fl_Osc_Dial* o = strchdial = new Fl_Osc_Dial(595, 130, 25, 25, "Strch");
  616. strchdial->tooltip("Sequence Stretch");
  617. strchdial->box(FL_ROUND_UP_BOX);
  618. strchdial->color(FL_BACKGROUND_COLOR);
  619. strchdial->selection_color(FL_INACTIVE_COLOR);
  620. strchdial->labeltype(FL_NORMAL_LABEL);
  621. strchdial->labelfont(0);
  622. strchdial->labelsize(10);
  623. strchdial->labelcolor(FL_FOREGROUND_COLOR);
  624. strchdial->maximum(127);
  625. strchdial->step(1);
  626. strchdial->align(Fl_Align(FL_ALIGN_TOP));
  627. strchdial->when(FL_WHEN_CHANGED);
  628. o->init("Psequencestretch");
  629. } // Fl_Osc_Dial* strchdial
  630. o->end();
  631. } // Fl_Osc_Group* o
  632. { Fl_Osc_Counter* o = numformants = new Fl_Osc_Counter(485, 15, 65, 20, "Num.Formants");
  633. numformants->type(1);
  634. numformants->box(FL_UP_BOX);
  635. numformants->color(FL_BACKGROUND_COLOR);
  636. numformants->selection_color(FL_INACTIVE_COLOR);
  637. numformants->labeltype(FL_NORMAL_LABEL);
  638. numformants->labelfont(0);
  639. numformants->labelsize(10);
  640. numformants->labelcolor(FL_FOREGROUND_COLOR);
  641. numformants->minimum(0);
  642. numformants->maximum(127);
  643. numformants->step(1);
  644. numformants->callback((Fl_Callback*)cb_numformants);
  645. numformants->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  646. numformants->when(FL_WHEN_CHANGED);
  647. o->bounds(1,FF_MAX_FORMANTS);
  648. o->init("Pnumformants");
  649. } // Fl_Osc_Counter* numformants
  650. { Fl_Osc_Dial* o = frsldial = new Fl_Osc_Dial(565, 15, 25, 25, "Fr.Sl.");
  651. frsldial->tooltip("Formant\'s Slowness (Morphing)");
  652. frsldial->box(FL_ROUND_UP_BOX);
  653. frsldial->color(FL_BACKGROUND_COLOR);
  654. frsldial->selection_color(FL_INACTIVE_COLOR);
  655. frsldial->labeltype(FL_NORMAL_LABEL);
  656. frsldial->labelfont(0);
  657. frsldial->labelsize(10);
  658. frsldial->labelcolor(FL_FOREGROUND_COLOR);
  659. frsldial->maximum(127);
  660. frsldial->step(1);
  661. frsldial->align(Fl_Align(FL_ALIGN_TOP));
  662. frsldial->when(FL_WHEN_CHANGED);
  663. o->init("Pformantslowness");
  664. } // Fl_Osc_Dial* frsldial
  665. { Fl_Osc_Output* o = centerfreqvo = new Fl_Osc_Output(511, 164, 40, 18, "C.f.");
  666. centerfreqvo->tooltip("Center Frequency (kHz)");
  667. centerfreqvo->box(FL_NO_BOX);
  668. centerfreqvo->color(FL_BACKGROUND_COLOR);
  669. centerfreqvo->selection_color(FL_BACKGROUND_COLOR);
  670. centerfreqvo->labeltype(FL_NORMAL_LABEL);
  671. centerfreqvo->labelfont(0);
  672. centerfreqvo->labelsize(13);
  673. centerfreqvo->labelcolor(FL_FOREGROUND_COLOR);
  674. centerfreqvo->minimum(1);
  675. centerfreqvo->maximum(10);
  676. centerfreqvo->step(0.01);
  677. centerfreqvo->value(1);
  678. centerfreqvo->textfont(1);
  679. centerfreqvo->textsize(11);
  680. centerfreqvo->callback((Fl_Callback*)cb_centerfreqvo);
  681. centerfreqvo->align(Fl_Align(FL_ALIGN_LEFT));
  682. centerfreqvo->when(3);
  683. o->init("centerfreq");
  684. } // Fl_Osc_Output* centerfreqvo
  685. { Fl_Osc_Output* o = octavesfreqvo = new Fl_Osc_Output(511, 182, 40, 18, "Oct.");
  686. octavesfreqvo->tooltip("No. of octaves");
  687. octavesfreqvo->box(FL_NO_BOX);
  688. octavesfreqvo->color(FL_BACKGROUND_COLOR);
  689. octavesfreqvo->selection_color(FL_BACKGROUND_COLOR);
  690. octavesfreqvo->labeltype(FL_NORMAL_LABEL);
  691. octavesfreqvo->labelfont(0);
  692. octavesfreqvo->labelsize(13);
  693. octavesfreqvo->labelcolor(FL_FOREGROUND_COLOR);
  694. octavesfreqvo->minimum(1);
  695. octavesfreqvo->maximum(127);
  696. octavesfreqvo->step(0.01);
  697. octavesfreqvo->value(5);
  698. octavesfreqvo->textfont(1);
  699. octavesfreqvo->textsize(11);
  700. octavesfreqvo->callback((Fl_Callback*)cb_octavesfreqvo);
  701. octavesfreqvo->align(Fl_Align(FL_ALIGN_LEFT));
  702. octavesfreqvo->when(3);
  703. o->init("octavesfreq");
  704. } // Fl_Osc_Output* octavesfreqvo
  705. { Fl_Osc_Slider* o = cfknob = new Fl_Osc_Slider(555, 167, 84, 15);
  706. cfknob->type(5);
  707. cfknob->box(FL_FLAT_BOX);
  708. cfknob->color(FL_BACKGROUND_COLOR);
  709. cfknob->selection_color(FL_BACKGROUND_COLOR);
  710. cfknob->labeltype(FL_NORMAL_LABEL);
  711. cfknob->labelfont(0);
  712. cfknob->labelsize(14);
  713. cfknob->labelcolor(FL_FOREGROUND_COLOR);
  714. cfknob->maximum(127);
  715. cfknob->callback((Fl_Callback*)cb_cfknob);
  716. cfknob->align(Fl_Align(FL_ALIGN_BOTTOM));
  717. cfknob->when(FL_WHEN_CHANGED);
  718. o->init("Pcenterfreq", 'i');
  719. } // Fl_Osc_Slider* cfknob
  720. { Fl_Osc_Slider* o = octknob = new Fl_Osc_Slider(555, 185, 84, 15);
  721. octknob->type(5);
  722. octknob->box(FL_FLAT_BOX);
  723. octknob->color(FL_BACKGROUND_COLOR);
  724. octknob->selection_color(FL_BACKGROUND_COLOR);
  725. octknob->labeltype(FL_NORMAL_LABEL);
  726. octknob->labelfont(0);
  727. octknob->labelsize(14);
  728. octknob->labelcolor(FL_FOREGROUND_COLOR);
  729. octknob->maximum(127);
  730. octknob->callback((Fl_Callback*)cb_octknob);
  731. octknob->align(Fl_Align(FL_ALIGN_BOTTOM));
  732. octknob->when(FL_WHEN_CHANGED);
  733. o->init("Poctavesfreq", 'i');
  734. } // Fl_Osc_Slider* octknob
  735. { FormantFilterGraph* o = formantfiltergraph = new FormantFilterGraph(5, 5, 475, 195);
  736. formantfiltergraph->box(FL_BORDER_BOX);
  737. formantfiltergraph->color(FL_BACKGROUND_COLOR);
  738. formantfiltergraph->selection_color(FL_BACKGROUND_COLOR);
  739. formantfiltergraph->labeltype(FL_NORMAL_LABEL);
  740. formantfiltergraph->labelfont(0);
  741. formantfiltergraph->labelsize(14);
  742. formantfiltergraph->labelcolor(FL_FOREGROUND_COLOR);
  743. formantfiltergraph->align(Fl_Align(FL_ALIGN_CENTER));
  744. formantfiltergraph->when(FL_WHEN_RELEASE);
  745. o->init(&nvowel,&nformant);
  746. } // FormantFilterGraph* formantfiltergraph
  747. { Fl_Osc_Dial* o = wvknob = new Fl_Osc_Dial(600, 15, 25, 25, "Vw.Cl.");
  748. wvknob->tooltip("Vowel \"clearness\" (how the mixed vowels are avoided)");
  749. wvknob->box(FL_ROUND_UP_BOX);
  750. wvknob->color(FL_BACKGROUND_COLOR);
  751. wvknob->selection_color(FL_INACTIVE_COLOR);
  752. wvknob->labeltype(FL_NORMAL_LABEL);
  753. wvknob->labelfont(0);
  754. wvknob->labelsize(10);
  755. wvknob->labelcolor(FL_FOREGROUND_COLOR);
  756. wvknob->maximum(127);
  757. wvknob->step(1);
  758. wvknob->align(Fl_Align(FL_ALIGN_TOP));
  759. wvknob->when(FL_WHEN_CHANGED);
  760. o->init("Pvowelclearness");
  761. } // Fl_Osc_Dial* wvknob
  762. { Fl_Button* o = new Fl_Button(645, 180, 50, 25, "Close");
  763. o->box(FL_THIN_UP_BOX);
  764. o->callback((Fl_Callback*)cb_Close);
  765. } // Fl_Button* o
  766. { Fl_Button* o = new Fl_Button(635, 25, 25, 15, "C");
  767. o->box(FL_THIN_UP_BOX);
  768. o->color((Fl_Color)179);
  769. o->labelfont(1);
  770. o->labelsize(11);
  771. o->labelcolor((Fl_Color)55);
  772. o->callback((Fl_Callback*)cb_C1);
  773. } // Fl_Button* o
  774. { Fl_Box* o = new Fl_Box(635, 6, 55, 15, "Vowel");
  775. o->labelfont(1);
  776. } // Fl_Box* o
  777. formantparswindow->end();
  778. } // Fl_Osc_Window* formantparswindow
  779. return formantparswindow;
  780. }
  781. void FilterUI::update_formant_window() {
  782. //formant_freq_dial->value(pars->Pvowels[nvowel].formants[nformant].freq);
  783. //formant_q_dial->value(pars->Pvowels[nvowel].formants[nformant].q);
  784. //formant_amp_dial->value(pars->Pvowels[nvowel].formants[nformant].amp);
  785. if (nformant<numformants->value()) formantparsgroup->activate();
  786. else formantparsgroup->deactivate();
  787. if (nseqpos<sequencesize->value()) vowel_counter->activate();
  788. else vowel_counter->deactivate();
  789. //vowel_counter->value(pars->Psequence[nseqpos].nvowel);
  790. }
  791. void FilterUI::refresh() {
  792. update_formant_window();
  793. formantfiltergraph->redraw();
  794. const int Pcategory = filtertype->value();
  795. const int Ptype = analogfiltertypechoice->value();
  796. if (Pcategory==2) svfiltertypechoice->value(Ptype);
  797. if (Pcategory==0) analogfiltertypechoice->value(Ptype);
  798. const int categ=Pcategory;
  799. if ((categ==0)||(categ==2)) {
  800. if (categ==0) {
  801. analogfiltertypechoice->show();
  802. svfiltertypechoice->hide();
  803. } else {
  804. svfiltertypechoice->show();
  805. analogfiltertypechoice->hide();
  806. };
  807. editbutton->hide();
  808. formantparswindow->hide();
  809. cfreqdial->label("C.freq");
  810. } else {
  811. analogfiltertypechoice->hide();
  812. svfiltertypechoice->hide();
  813. editbutton->show();
  814. cfreqdial->label("BS.pos");
  815. };
  816. filterparamswindow->redraw();
  817. }
  818. void FilterUI::rebase(std::string new_base) {
  819. formantparswindow->rebase(new_base+"VoiceFilter/");
  820. Fl_Osc_Group::rebase(new_base);
  821. }
  822. void FilterUI::init(std::string alt_root_, Fl_Osc_Interface *osc_, std::string base_, std::string ext_) {
  823. alt_root = alt_root_;
  824. osc = osc_;
  825. base = base_;
  826. ext = ext_;
  827. assert(osc);
  828. make_window();
  829. end();
  830. make_formant_window();
  831. filterui->resize(this->x(),this->y(),this->w(),this->h());
  832. switchcategory(0);
  833. formantparswindow->label(this->label());
  834. update_formant_window();
  835. }
  836. void FilterUI::switchcategory(int newcat) {
  837. //TODO update Pgain & filter type on switch Pgain=64;
  838. (void) newcat;
  839. refresh();
  840. }
  841. void FilterUI::use_for_dynamic_filter() {
  842. freqtrdial->deactivate();
  843. gaindial->when(0);
  844. cfknob->when(FL_WHEN_RELEASE);
  845. octknob->when(FL_WHEN_RELEASE);
  846. frsldial->when(0);
  847. wvknob->when(0);
  848. formant_freq_dial->when(0);
  849. formant_q_dial->when(0);
  850. formant_amp_dial->when(0);
  851. strchdial->when(0);
  852. }