// generated by Fast Light User Interface Designer (fluid) version 1.0300 #include "external/zynaddsubfx/UI/FilterUI.h" //Copyright (c) 2002-2005 Nasca Octavian Paul //License: GNU GPL version 2 or later #include #include #include void FilterUI::cb_P_i(Fl_Button*, void*) { presetsui->paste(filterui->loc(),this); } void FilterUI::cb_P(Fl_Button* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_P_i(o,v); } Fl_Menu_Item FilterUI::menu_analogfiltertypechoice[] = { {"LPF1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"HPF1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"LPF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"HPF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"BPF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"NF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"PkF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"LSh2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"HSh2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Menu_Item FilterUI::menu_svfiltertypechoice[] = { {"1LPF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"1HPF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"1BPF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"1NF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {0,0,0,0,0,0,0,0,0} }; void FilterUI::cb_filtertype_i(Fl_Osc_Choice*, void*) { refresh(); } void FilterUI::cb_filtertype(Fl_Osc_Choice* o, void* v) { ((FilterUI*)(o->parent()->parent()->user_data()))->cb_filtertype_i(o,v); } Fl_Menu_Item FilterUI::menu_filtertype[] = { {"Analog", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"Formant", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {"StVarF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0}, {0,0,0,0,0,0,0,0,0} }; void FilterUI::cb_qdial_i(Fl_Osc_Dial*, void*) { formantfiltergraph->redraw(); } void FilterUI::cb_qdial(Fl_Osc_Dial* o, void* v) { ((FilterUI*)(o->parent()->parent()->user_data()))->cb_qdial_i(o,v); } void FilterUI::cb_gaindial_i(Fl_Osc_Dial*, void*) { formantfiltergraph->redraw(); } void FilterUI::cb_gaindial(Fl_Osc_Dial* o, void* v) { ((FilterUI*)(o->parent()->parent()->user_data()))->cb_gaindial_i(o,v); } void FilterUI::cb_stcounter_i(Fl_Osc_Choice*, void*) { formantfiltergraph->redraw(); } void FilterUI::cb_stcounter(Fl_Osc_Choice* o, void* v) { ((FilterUI*)(o->parent()->parent()->user_data()))->cb_stcounter_i(o,v); } void FilterUI::cb_editbutton_i(Fl_Button*, void*) { formantparswindow->show(); } void FilterUI::cb_editbutton(Fl_Button* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_editbutton_i(o,v); } void FilterUI::cb_C_i(Fl_Button*, void*) { presetsui->copy(filterui->loc()); } void FilterUI::cb_C(Fl_Button* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_C_i(o,v); } void FilterUI::cb_P1_i(Fl_Button*, void*) { presetsui->paste(filterui->loc(),this); } void FilterUI::cb_P1(Fl_Button* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_P1_i(o,v); } void FilterUI::cb_P2_i(Fl_Button*, void*) { presetsui->paste(filterui->loc(),this,nvowel); } void FilterUI::cb_P2(Fl_Button* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_P2_i(o,v); } void FilterUI::cb_Formant_i(Fl_Counter* o, void*) { nformant=(int) o->value(); formantparsgroup->reext("Pvowels"+to_s(nvowel)+"/Pformants"+to_s(nformant)+"/"); update_formant_window(); formantfiltergraph->redraw(); } void FilterUI::cb_Formant(Fl_Counter* o, void* v) { ((FilterUI*)(o->parent()->parent()->user_data()))->cb_Formant_i(o,v); } void FilterUI::cb_Vowel_i(Fl_Counter* o, void*) { nvowel=(int) o->value(); formantparsgroup->reext("Pvowels"+to_s(nvowel)+"/Pformants"+to_s(nformant)+"/"); update_formant_window(); formantfiltergraph->redraw(); } void FilterUI::cb_Vowel(Fl_Counter* o, void* v) { ((FilterUI*)(o->parent()->parent()->user_data()))->cb_Vowel_i(o,v); } void FilterUI::cb_formant_freq_dial_i(Fl_Osc_Dial*, void*) { formantfiltergraph->update(); } void FilterUI::cb_formant_freq_dial(Fl_Osc_Dial* o, void* v) { ((FilterUI*)(o->parent()->parent()->parent()->user_data()))->cb_formant_freq_dial_i(o,v); } void FilterUI::cb_formant_q_dial_i(Fl_Osc_Dial*, void*) { formantfiltergraph->update(); } void FilterUI::cb_formant_q_dial(Fl_Osc_Dial* o, void* v) { ((FilterUI*)(o->parent()->parent()->parent()->user_data()))->cb_formant_q_dial_i(o,v); } void FilterUI::cb_formant_amp_dial_i(Fl_Osc_Dial*, void*) { formantfiltergraph->update(); } void FilterUI::cb_formant_amp_dial(Fl_Osc_Dial* o, void* v) { ((FilterUI*)(o->parent()->parent()->parent()->user_data()))->cb_formant_amp_dial_i(o,v); } void FilterUI::cb_sequencesize_i(Fl_Osc_Counter*, void*) { update_formant_window(); } void FilterUI::cb_sequencesize(Fl_Osc_Counter* o, void* v) { ((FilterUI*)(o->parent()->parent()->user_data()))->cb_sequencesize_i(o,v); } void FilterUI::cb_S_i(Fl_Counter* o, void*) { nseqpos = o->value();update_formant_window();vowel_counter->oscMove("vowel_seq"+to_s(nseqpos)); } void FilterUI::cb_S(Fl_Counter* o, void* v) { ((FilterUI*)(o->parent()->parent()->user_data()))->cb_S_i(o,v); } void FilterUI::cb_vowel_counter_i(Fl_Osc_Counter* o, void*) { (void)o;//pars->Psequence[nseqpos].nvowel=(int) o->value(); pars->changed=true; } void FilterUI::cb_vowel_counter(Fl_Osc_Counter* o, void* v) { ((FilterUI*)(o->parent()->parent()->user_data()))->cb_vowel_counter_i(o,v); } void FilterUI::cb_numformants_i(Fl_Osc_Counter*, void*) { update_formant_window(); formantfiltergraph->redraw(); } void FilterUI::cb_numformants(Fl_Osc_Counter* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_numformants_i(o,v); } void FilterUI::cb_centerfreqvo_i(Fl_Osc_Output* o, void*) { o->value(o->newvalue()/1000.0); } void FilterUI::cb_centerfreqvo(Fl_Osc_Output* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_centerfreqvo_i(o,v); } void FilterUI::cb_octavesfreqvo_i(Fl_Osc_Output* o, void*) { o->value(o->newvalue()); } void FilterUI::cb_octavesfreqvo(Fl_Osc_Output* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_octavesfreqvo_i(o,v); } void FilterUI::cb_cfknob_i(Fl_Osc_Slider*, void*) { centerfreqvo->update(); } void FilterUI::cb_cfknob(Fl_Osc_Slider* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_cfknob_i(o,v); } void FilterUI::cb_octknob_i(Fl_Osc_Slider*, void*) { octavesfreqvo->update(); } void FilterUI::cb_octknob(Fl_Osc_Slider* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_octknob_i(o,v); } void FilterUI::cb_Close_i(Fl_Button*, void*) { formantparswindow->hide(); } void FilterUI::cb_Close(Fl_Button* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_Close_i(o,v); } void FilterUI::cb_C1_i(Fl_Button*, void*) { presetsui->copy(filterui->loc(),nvowel); } void FilterUI::cb_C1(Fl_Button* o, void* v) { ((FilterUI*)(o->parent()->user_data()))->cb_C1_i(o,v); } FilterUI::FilterUI(int x,int y, int w, int h, const char *label):Fl_Osc_Group(x,y,w,h) { nvowel=0;nformant=0;nseqpos=0; } FilterUI::~FilterUI() { filterui->hide(); formantparswindow->hide(); hide(); //delete (filterui); delete (formantparswindow); } Fl_Osc_Group* FilterUI::make_window() { { filterui = new Fl_Osc_Group(0, 0, 275, 70); filterui->box(FL_FLAT_BOX); filterui->color(FL_LIGHT1); filterui->selection_color(FL_BACKGROUND_COLOR); filterui->labeltype(FL_NO_LABEL); filterui->labelfont(1); filterui->labelsize(14); filterui->labelcolor(FL_FOREGROUND_COLOR); filterui->user_data((void*)(this)); filterui->align(Fl_Align(FL_ALIGN_TOP)); filterui->when(FL_WHEN_RELEASE); { Fl_Button* o = new Fl_Button(203, 5, 15, 15, "P"); o->box(FL_THIN_UP_BOX); o->color((Fl_Color)179); o->labelfont(1); o->labelsize(10); o->labelcolor((Fl_Color)55); o->callback((Fl_Callback*)cb_P); } // Fl_Button* o { Fl_Group* o = filterparamswindow = new Fl_Group(0, 0, 275, 75, "Filter Parameters"); filterparamswindow->box(FL_UP_FRAME); filterparamswindow->color((Fl_Color)183); filterparamswindow->labeltype(FL_ENGRAVED_LABEL); filterparamswindow->labelsize(10); filterparamswindow->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE)); { Fl_Osc_Choice* o = analogfiltertypechoice = new Fl_Osc_Choice(10, 50, 50, 15, "FilterType"); analogfiltertypechoice->tooltip("The Filter type"); analogfiltertypechoice->box(FL_UP_BOX); analogfiltertypechoice->down_box(FL_BORDER_BOX); analogfiltertypechoice->color(FL_BACKGROUND_COLOR); analogfiltertypechoice->selection_color(FL_SELECTION_COLOR); analogfiltertypechoice->labeltype(FL_NORMAL_LABEL); analogfiltertypechoice->labelfont(0); analogfiltertypechoice->labelsize(10); analogfiltertypechoice->labelcolor(FL_FOREGROUND_COLOR); analogfiltertypechoice->textsize(10); analogfiltertypechoice->align(Fl_Align(FL_ALIGN_TOP_LEFT)); analogfiltertypechoice->when(FL_WHEN_RELEASE); analogfiltertypechoice->menu(menu_analogfiltertypechoice); o->init("Ptype"); } // Fl_Osc_Choice* analogfiltertypechoice { Fl_Osc_Choice* o = svfiltertypechoice = new Fl_Osc_Choice(10, 50, 50, 15, "FilterType"); svfiltertypechoice->tooltip("The Filter type"); svfiltertypechoice->box(FL_UP_BOX); svfiltertypechoice->down_box(FL_BORDER_BOX); svfiltertypechoice->color(FL_BACKGROUND_COLOR); svfiltertypechoice->selection_color(FL_SELECTION_COLOR); svfiltertypechoice->labeltype(FL_NORMAL_LABEL); svfiltertypechoice->labelfont(0); svfiltertypechoice->labelsize(10); svfiltertypechoice->labelcolor(FL_FOREGROUND_COLOR); svfiltertypechoice->textsize(10); svfiltertypechoice->align(Fl_Align(FL_ALIGN_TOP_LEFT)); svfiltertypechoice->when(FL_WHEN_RELEASE); svfiltertypechoice->menu(menu_svfiltertypechoice); o->init("Ptype"); } // Fl_Osc_Choice* svfiltertypechoice { Fl_Osc_Choice* o = filtertype = new Fl_Osc_Choice(10, 20, 60, 15, "Category"); filtertype->tooltip("The Category of the Filter (Analog/Formantic/etc.)"); filtertype->box(FL_UP_BOX); filtertype->down_box(FL_BORDER_BOX); filtertype->color(FL_BACKGROUND_COLOR); filtertype->selection_color(FL_SELECTION_COLOR); filtertype->labeltype(FL_NORMAL_LABEL); filtertype->labelfont(0); filtertype->labelsize(10); filtertype->labelcolor(FL_FOREGROUND_COLOR); filtertype->textsize(10); filtertype->callback((Fl_Callback*)cb_filtertype); filtertype->align(Fl_Align(FL_ALIGN_TOP_LEFT)); filtertype->when(FL_WHEN_RELEASE); filtertype->menu(menu_filtertype); o->init("Pcategory"); } // Fl_Osc_Choice* filtertype { Fl_Osc_Dial* o = cfreqdial = new Fl_Osc_Dial(75, 25, 30, 30, "C.Freq"); cfreqdial->tooltip("Center Frequency of the Filter or the base position in the vowel\'s sequence"); cfreqdial->box(FL_ROUND_UP_BOX); cfreqdial->color(FL_BACKGROUND_COLOR); cfreqdial->selection_color(FL_INACTIVE_COLOR); cfreqdial->labeltype(FL_NORMAL_LABEL); cfreqdial->labelfont(0); cfreqdial->labelsize(10); cfreqdial->labelcolor(FL_FOREGROUND_COLOR); cfreqdial->maximum(127); cfreqdial->step(1); cfreqdial->align(Fl_Align(FL_ALIGN_BOTTOM)); cfreqdial->when(FL_WHEN_CHANGED); o->init("Pfreq"); } // Fl_Osc_Dial* cfreqdial { Fl_Osc_Dial* o = qdial = new Fl_Osc_Dial(110, 25, 30, 30, "Q"); qdial->tooltip("Filter resonance or bandwidth"); qdial->box(FL_ROUND_UP_BOX); qdial->color(FL_BACKGROUND_COLOR); qdial->selection_color(FL_INACTIVE_COLOR); qdial->labeltype(FL_NORMAL_LABEL); qdial->labelfont(0); qdial->labelsize(10); qdial->labelcolor(FL_FOREGROUND_COLOR); qdial->maximum(127); qdial->step(1); qdial->callback((Fl_Callback*)cb_qdial); qdial->align(Fl_Align(FL_ALIGN_BOTTOM)); qdial->when(FL_WHEN_CHANGED); o->init("Pq"); } // Fl_Osc_Dial* qdial { Fl_Osc_Dial* o = freqtrdial = new Fl_Osc_Dial(215, 25, 30, 30, "freq.tr."); freqtrdial->tooltip("Filter frequency tracking (left is negative, middle is 0, and right is positi\ ve)"); freqtrdial->box(FL_ROUND_UP_BOX); freqtrdial->color(FL_BACKGROUND_COLOR); freqtrdial->selection_color(FL_INACTIVE_COLOR); freqtrdial->labeltype(FL_NORMAL_LABEL); freqtrdial->labelfont(0); freqtrdial->labelsize(10); freqtrdial->labelcolor(FL_FOREGROUND_COLOR); freqtrdial->maximum(127); freqtrdial->step(1); freqtrdial->align(Fl_Align(FL_ALIGN_BOTTOM)); freqtrdial->when(FL_WHEN_CHANGED); o->init("Pfreqtrack"); } // Fl_Osc_Dial* freqtrdial { Fl_Osc_Dial* o = vsnsadial = new Fl_Osc_Dial(145, 25, 30, 30, "V.SnsA."); vsnsadial->tooltip("Velocity sensing amount of the Filter"); vsnsadial->box(FL_ROUND_UP_BOX); vsnsadial->color(FL_BACKGROUND_COLOR); vsnsadial->selection_color(FL_INACTIVE_COLOR); vsnsadial->labeltype(FL_NORMAL_LABEL); vsnsadial->labelfont(0); vsnsadial->labelsize(10); vsnsadial->labelcolor(FL_FOREGROUND_COLOR); vsnsadial->maximum(127); vsnsadial->step(1); vsnsadial->align(Fl_Align(FL_ALIGN_BOTTOM)); vsnsadial->when(FL_WHEN_CHANGED); if(!alt_root.empty()) o->alt_init(alt_root, "VelocityScale"); else {o->deactivate(); o->value(127);o->mark_dead();} } // Fl_Osc_Dial* vsnsadial { Fl_Osc_Dial* o = vsnsdial = new Fl_Osc_Dial(180, 25, 30, 30, "V.Sns."); vsnsdial->tooltip("Velocity Sensing Function of the Filter"); vsnsdial->box(FL_ROUND_UP_BOX); vsnsdial->color(FL_BACKGROUND_COLOR); vsnsdial->selection_color(FL_INACTIVE_COLOR); vsnsdial->labeltype(FL_NORMAL_LABEL); vsnsdial->labelfont(0); vsnsdial->labelsize(10); vsnsdial->labelcolor(FL_FOREGROUND_COLOR); vsnsdial->maximum(127); vsnsdial->step(1); vsnsdial->align(Fl_Align(FL_ALIGN_BOTTOM)); vsnsdial->when(FL_WHEN_CHANGED); if(!alt_root.empty()) o->alt_init(alt_root, "VelocityScaleFunction"); else {o->deactivate(); o->value(127);o->mark_dead();} } // Fl_Osc_Dial* vsnsdial { Fl_Osc_Dial* o = gaindial = new Fl_Osc_Dial(250, 35, 20, 20, "gain"); gaindial->tooltip("Filter output gain/damp"); gaindial->box(FL_ROUND_UP_BOX); gaindial->color(FL_BACKGROUND_COLOR); gaindial->selection_color(FL_INACTIVE_COLOR); gaindial->labeltype(FL_NORMAL_LABEL); gaindial->labelfont(0); gaindial->labelsize(10); gaindial->labelcolor(FL_FOREGROUND_COLOR); gaindial->maximum(127); gaindial->step(1); gaindial->callback((Fl_Callback*)cb_gaindial); gaindial->align(Fl_Align(FL_ALIGN_BOTTOM)); gaindial->when(FL_WHEN_CHANGED); o->init("Pgain"); } // Fl_Osc_Dial* gaindial { Fl_Osc_Choice* o = stcounter = new Fl_Osc_Choice(235, 5, 35, 15, "St"); stcounter->tooltip("Filter stages (in order to increase dB/oct. value and the order of the filter\ )"); stcounter->box(FL_UP_BOX); stcounter->down_box(FL_BORDER_BOX); stcounter->color(FL_BACKGROUND_COLOR); stcounter->selection_color(FL_SELECTION_COLOR); stcounter->labeltype(FL_NORMAL_LABEL); stcounter->labelfont(0); stcounter->labelsize(10); stcounter->labelcolor(FL_FOREGROUND_COLOR); stcounter->textfont(1); stcounter->textsize(10); stcounter->callback((Fl_Callback*)cb_stcounter); stcounter->align(Fl_Align(FL_ALIGN_LEFT)); stcounter->when(FL_WHEN_RELEASE); for (int i=0;iadd(tmp);}; o->init("Pstages"); } // Fl_Osc_Choice* stcounter set_module_parameters( o ); filterparamswindow->end(); } // Fl_Group* filterparamswindow { editbutton = new Fl_Button(15, 40, 50, 25, "Edit"); editbutton->labelfont(1); editbutton->labelsize(11); editbutton->callback((Fl_Callback*)cb_editbutton); } // Fl_Button* editbutton { Fl_Button* o = new Fl_Button(186, 5, 15, 15, "C"); o->box(FL_THIN_UP_BOX); o->color((Fl_Color)179); o->labelfont(1); o->labelsize(10); o->labelcolor((Fl_Color)55); o->callback((Fl_Callback*)cb_C); } // Fl_Button* o { Fl_Button* o = new Fl_Button(203, 5, 15, 15, "P"); o->box(FL_THIN_UP_BOX); o->color((Fl_Color)179); o->labelfont(1); o->labelsize(10); o->labelcolor((Fl_Color)55); o->callback((Fl_Callback*)cb_P1); } // Fl_Button* o filterui->end(); } // Fl_Osc_Group* filterui return filterui; } Fl_Osc_Window* FilterUI::make_formant_window() { { formantparswindow = new Fl_Osc_Window(700, 205, "Formant Filter Parameters"); formantparswindow->box(FL_FLAT_BOX); formantparswindow->color(FL_BACKGROUND_COLOR); formantparswindow->selection_color(FL_BACKGROUND_COLOR); formantparswindow->labeltype(FL_NO_LABEL); formantparswindow->labelfont(0); formantparswindow->labelsize(14); formantparswindow->labelcolor(FL_FOREGROUND_COLOR); formantparswindow->user_data((void*)(this)); formantparswindow->align(Fl_Align(FL_ALIGN_TOP)); formantparswindow->when(FL_WHEN_RELEASE); { Fl_Button* o = new Fl_Button(665, 25, 25, 15, "P"); o->box(FL_THIN_UP_BOX); o->color((Fl_Color)179); o->labelfont(1); o->labelsize(11); o->labelcolor((Fl_Color)55); o->callback((Fl_Callback*)cb_P2); formantparswindow->osc = osc; formantparswindow->base = loc(); } // Fl_Button* o { Fl_Osc_Group* o = new Fl_Osc_Group(485, 47, 105, 113); o->box(FL_THIN_UP_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->align(Fl_Align(FL_ALIGN_TOP)); o->when(FL_WHEN_RELEASE); { Fl_Counter* o = new Fl_Counter(545, 80, 40, 15, "Formant "); o->type(1); o->labelfont(1); o->labelsize(10); o->minimum(0); o->maximum(127); o->step(1); o->textsize(10); o->callback((Fl_Callback*)cb_Formant); o->align(Fl_Align(FL_ALIGN_LEFT)); o->bounds(0,FF_MAX_FORMANTS-1); o->value(nformant); } // Fl_Counter* o { Fl_Counter* o = new Fl_Counter(545, 55, 40, 20, "Vowel no."); o->type(1); o->labelfont(1); o->labelsize(10); o->minimum(0); o->maximum(127); o->step(1); o->textfont(1); o->textsize(11); o->callback((Fl_Callback*)cb_Vowel); o->align(Fl_Align(FL_ALIGN_LEFT)); o->bounds(0,FF_MAX_VOWELS-1); o->value(nvowel); } // Fl_Counter* o { formantparsgroup = new Fl_Osc_Group(490, 105, 95, 50); formantparsgroup->box(FL_ENGRAVED_FRAME); formantparsgroup->color(FL_BACKGROUND_COLOR); formantparsgroup->selection_color(FL_BACKGROUND_COLOR); formantparsgroup->labeltype(FL_NORMAL_LABEL); formantparsgroup->labelfont(0); formantparsgroup->labelsize(14); formantparsgroup->labelcolor(FL_FOREGROUND_COLOR); formantparsgroup->align(Fl_Align(FL_ALIGN_TOP)); formantparsgroup->when(FL_WHEN_RELEASE); { Fl_Box* o = new Fl_Box(515, 130, 35, 16, "dummy"); o->hide(); o->deactivate(); formantparsgroup->ext = "Pvowels0/Pformants0/"; } // Fl_Box* o { Fl_Osc_Dial* o = formant_freq_dial = new Fl_Osc_Dial(495, 115, 25, 25, "freq"); formant_freq_dial->tooltip("Formant frequency"); formant_freq_dial->box(FL_ROUND_UP_BOX); formant_freq_dial->color(FL_BACKGROUND_COLOR); formant_freq_dial->selection_color(FL_INACTIVE_COLOR); formant_freq_dial->labeltype(FL_NORMAL_LABEL); formant_freq_dial->labelfont(0); formant_freq_dial->labelsize(10); formant_freq_dial->labelcolor(FL_FOREGROUND_COLOR); formant_freq_dial->maximum(127); formant_freq_dial->step(1); formant_freq_dial->callback((Fl_Callback*)cb_formant_freq_dial); formant_freq_dial->align(Fl_Align(FL_ALIGN_BOTTOM)); formant_freq_dial->when(FL_WHEN_CHANGED); //TODO get widget renaming working here!!! o->init("freq"); } // Fl_Osc_Dial* formant_freq_dial { Fl_Osc_Dial* o = formant_q_dial = new Fl_Osc_Dial(525, 115, 24, 25, "Q"); formant_q_dial->tooltip("Formant\'s Q"); formant_q_dial->box(FL_ROUND_UP_BOX); formant_q_dial->color(FL_BACKGROUND_COLOR); formant_q_dial->selection_color(FL_INACTIVE_COLOR); formant_q_dial->labeltype(FL_NORMAL_LABEL); formant_q_dial->labelfont(0); formant_q_dial->labelsize(10); formant_q_dial->labelcolor(FL_FOREGROUND_COLOR); formant_q_dial->maximum(127); formant_q_dial->step(1); formant_q_dial->callback((Fl_Callback*)cb_formant_q_dial); formant_q_dial->align(Fl_Align(FL_ALIGN_BOTTOM)); formant_q_dial->when(FL_WHEN_CHANGED); o->init("q"); } // Fl_Osc_Dial* formant_q_dial { Fl_Osc_Dial* o = formant_amp_dial = new Fl_Osc_Dial(555, 115, 24, 25, "amp"); formant_amp_dial->tooltip("Formant amplitude"); formant_amp_dial->box(FL_ROUND_UP_BOX); formant_amp_dial->color(FL_BACKGROUND_COLOR); formant_amp_dial->selection_color(FL_INACTIVE_COLOR); formant_amp_dial->labeltype(FL_NORMAL_LABEL); formant_amp_dial->labelfont(0); formant_amp_dial->labelsize(10); formant_amp_dial->labelcolor(FL_FOREGROUND_COLOR); formant_amp_dial->maximum(127); formant_amp_dial->step(1); formant_amp_dial->callback((Fl_Callback*)cb_formant_amp_dial); formant_amp_dial->align(Fl_Align(FL_ALIGN_BOTTOM)); formant_amp_dial->when(FL_WHEN_CHANGED); o->init("amp"); } // Fl_Osc_Dial* formant_amp_dial formantparsgroup->end(); } // Fl_Osc_Group* formantparsgroup o->end(); } // Fl_Osc_Group* o { Fl_Osc_Group* o = new Fl_Osc_Group(590, 47, 100, 113); o->box(FL_THIN_UP_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->align(Fl_Align(FL_ALIGN_TOP)); o->when(FL_WHEN_RELEASE); { Fl_Osc_Counter* o = sequencesize = new Fl_Osc_Counter(595, 62, 55, 20, "Seq.Size"); sequencesize->type(1); sequencesize->box(FL_UP_BOX); sequencesize->color(FL_BACKGROUND_COLOR); sequencesize->selection_color(FL_INACTIVE_COLOR); sequencesize->labeltype(FL_NORMAL_LABEL); sequencesize->labelfont(1); sequencesize->labelsize(10); sequencesize->labelcolor(FL_FOREGROUND_COLOR); sequencesize->minimum(0); sequencesize->maximum(127); sequencesize->step(1); sequencesize->textfont(1); sequencesize->textsize(11); sequencesize->callback((Fl_Callback*)cb_sequencesize); sequencesize->align(Fl_Align(FL_ALIGN_TOP_LEFT)); sequencesize->when(FL_WHEN_CHANGED); o->bounds(1,FF_MAX_SEQUENCE-1); o->init("Psequencesize"); } // Fl_Osc_Counter* sequencesize { Fl_Counter* o = new Fl_Counter(595, 97, 40, 15, "S.Pos."); o->tooltip("Current position from the sequence"); o->type(1); o->labelfont(1); o->labelsize(10); o->minimum(0); o->maximum(127); o->step(1); o->textsize(10); o->callback((Fl_Callback*)cb_S); o->align(Fl_Align(FL_ALIGN_TOP_RIGHT)); o->bounds(0,FF_MAX_SEQUENCE-2); o->value(nseqpos); } // Fl_Counter* o { Fl_Osc_Counter* o = vowel_counter = new Fl_Osc_Counter(640, 97, 40, 15, "Vowel"); vowel_counter->type(1); vowel_counter->box(FL_UP_BOX); vowel_counter->color(FL_BACKGROUND_COLOR); vowel_counter->selection_color(FL_INACTIVE_COLOR); vowel_counter->labeltype(FL_NORMAL_LABEL); vowel_counter->labelfont(0); vowel_counter->labelsize(10); vowel_counter->labelcolor(FL_FOREGROUND_COLOR); vowel_counter->minimum(0); vowel_counter->maximum(127); vowel_counter->step(1); vowel_counter->textsize(10); vowel_counter->callback((Fl_Callback*)cb_vowel_counter); vowel_counter->align(Fl_Align(FL_ALIGN_TOP)); vowel_counter->when(FL_WHEN_CHANGED); o->bounds(0,FF_MAX_VOWELS-1); o->init("vowel_seq0"); } // Fl_Osc_Counter* vowel_counter { Fl_Osc_Check* o = new Fl_Osc_Check(625, 132, 60, 20, "Neg.Input"); o->tooltip("Negate the input from LFO/envelopes/etc."); o->box(FL_NO_BOX); o->down_box(FL_DOWN_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_FOREGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(10); o->labelcolor(FL_FOREGROUND_COLOR); o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); o->when(FL_WHEN_RELEASE); o->init("Psequencereversed"); } // Fl_Osc_Check* o { Fl_Osc_Dial* o = strchdial = new Fl_Osc_Dial(595, 130, 25, 25, "Strch"); strchdial->tooltip("Sequence Stretch"); strchdial->box(FL_ROUND_UP_BOX); strchdial->color(FL_BACKGROUND_COLOR); strchdial->selection_color(FL_INACTIVE_COLOR); strchdial->labeltype(FL_NORMAL_LABEL); strchdial->labelfont(0); strchdial->labelsize(10); strchdial->labelcolor(FL_FOREGROUND_COLOR); strchdial->maximum(127); strchdial->step(1); strchdial->align(Fl_Align(FL_ALIGN_TOP)); strchdial->when(FL_WHEN_CHANGED); o->init("Psequencestretch"); } // Fl_Osc_Dial* strchdial o->end(); } // Fl_Osc_Group* o { Fl_Osc_Counter* o = numformants = new Fl_Osc_Counter(485, 15, 65, 20, "Num.Formants"); numformants->type(1); numformants->box(FL_UP_BOX); numformants->color(FL_BACKGROUND_COLOR); numformants->selection_color(FL_INACTIVE_COLOR); numformants->labeltype(FL_NORMAL_LABEL); numformants->labelfont(0); numformants->labelsize(10); numformants->labelcolor(FL_FOREGROUND_COLOR); numformants->minimum(0); numformants->maximum(127); numformants->step(1); numformants->callback((Fl_Callback*)cb_numformants); numformants->align(Fl_Align(FL_ALIGN_TOP_LEFT)); numformants->when(FL_WHEN_CHANGED); o->bounds(1,FF_MAX_FORMANTS); o->init("Pnumformants"); } // Fl_Osc_Counter* numformants { Fl_Osc_Dial* o = frsldial = new Fl_Osc_Dial(565, 15, 25, 25, "Fr.Sl."); frsldial->tooltip("Formant\'s Slowness (Morphing)"); frsldial->box(FL_ROUND_UP_BOX); frsldial->color(FL_BACKGROUND_COLOR); frsldial->selection_color(FL_INACTIVE_COLOR); frsldial->labeltype(FL_NORMAL_LABEL); frsldial->labelfont(0); frsldial->labelsize(10); frsldial->labelcolor(FL_FOREGROUND_COLOR); frsldial->maximum(127); frsldial->step(1); frsldial->align(Fl_Align(FL_ALIGN_TOP)); frsldial->when(FL_WHEN_CHANGED); o->init("Pformantslowness"); } // Fl_Osc_Dial* frsldial { Fl_Osc_Output* o = centerfreqvo = new Fl_Osc_Output(511, 164, 40, 18, "C.f."); centerfreqvo->tooltip("Center Frequency (kHz)"); centerfreqvo->box(FL_NO_BOX); centerfreqvo->color(FL_BACKGROUND_COLOR); centerfreqvo->selection_color(FL_BACKGROUND_COLOR); centerfreqvo->labeltype(FL_NORMAL_LABEL); centerfreqvo->labelfont(0); centerfreqvo->labelsize(13); centerfreqvo->labelcolor(FL_FOREGROUND_COLOR); centerfreqvo->minimum(1); centerfreqvo->maximum(10); centerfreqvo->step(0.01); centerfreqvo->value(1); centerfreqvo->textfont(1); centerfreqvo->textsize(11); centerfreqvo->callback((Fl_Callback*)cb_centerfreqvo); centerfreqvo->align(Fl_Align(FL_ALIGN_LEFT)); centerfreqvo->when(3); o->init("centerfreq"); } // Fl_Osc_Output* centerfreqvo { Fl_Osc_Output* o = octavesfreqvo = new Fl_Osc_Output(511, 182, 40, 18, "Oct."); octavesfreqvo->tooltip("No. of octaves"); octavesfreqvo->box(FL_NO_BOX); octavesfreqvo->color(FL_BACKGROUND_COLOR); octavesfreqvo->selection_color(FL_BACKGROUND_COLOR); octavesfreqvo->labeltype(FL_NORMAL_LABEL); octavesfreqvo->labelfont(0); octavesfreqvo->labelsize(13); octavesfreqvo->labelcolor(FL_FOREGROUND_COLOR); octavesfreqvo->minimum(1); octavesfreqvo->maximum(127); octavesfreqvo->step(0.01); octavesfreqvo->value(5); octavesfreqvo->textfont(1); octavesfreqvo->textsize(11); octavesfreqvo->callback((Fl_Callback*)cb_octavesfreqvo); octavesfreqvo->align(Fl_Align(FL_ALIGN_LEFT)); octavesfreqvo->when(3); o->init("octavesfreq"); } // Fl_Osc_Output* octavesfreqvo { Fl_Osc_Slider* o = cfknob = new Fl_Osc_Slider(555, 167, 84, 15); cfknob->type(5); cfknob->box(FL_FLAT_BOX); cfknob->color(FL_BACKGROUND_COLOR); cfknob->selection_color(FL_BACKGROUND_COLOR); cfknob->labeltype(FL_NORMAL_LABEL); cfknob->labelfont(0); cfknob->labelsize(14); cfknob->labelcolor(FL_FOREGROUND_COLOR); cfknob->maximum(127); cfknob->callback((Fl_Callback*)cb_cfknob); cfknob->align(Fl_Align(FL_ALIGN_BOTTOM)); cfknob->when(FL_WHEN_CHANGED); o->init("Pcenterfreq", 'i'); } // Fl_Osc_Slider* cfknob { Fl_Osc_Slider* o = octknob = new Fl_Osc_Slider(555, 185, 84, 15); octknob->type(5); octknob->box(FL_FLAT_BOX); octknob->color(FL_BACKGROUND_COLOR); octknob->selection_color(FL_BACKGROUND_COLOR); octknob->labeltype(FL_NORMAL_LABEL); octknob->labelfont(0); octknob->labelsize(14); octknob->labelcolor(FL_FOREGROUND_COLOR); octknob->maximum(127); octknob->callback((Fl_Callback*)cb_octknob); octknob->align(Fl_Align(FL_ALIGN_BOTTOM)); octknob->when(FL_WHEN_CHANGED); o->init("Poctavesfreq", 'i'); } // Fl_Osc_Slider* octknob { FormantFilterGraph* o = formantfiltergraph = new FormantFilterGraph(5, 5, 475, 195); formantfiltergraph->box(FL_BORDER_BOX); formantfiltergraph->color(FL_BACKGROUND_COLOR); formantfiltergraph->selection_color(FL_BACKGROUND_COLOR); formantfiltergraph->labeltype(FL_NORMAL_LABEL); formantfiltergraph->labelfont(0); formantfiltergraph->labelsize(14); formantfiltergraph->labelcolor(FL_FOREGROUND_COLOR); formantfiltergraph->align(Fl_Align(FL_ALIGN_CENTER)); formantfiltergraph->when(FL_WHEN_RELEASE); o->init(&nvowel,&nformant); } // FormantFilterGraph* formantfiltergraph { Fl_Osc_Dial* o = wvknob = new Fl_Osc_Dial(600, 15, 25, 25, "Vw.Cl."); wvknob->tooltip("Vowel \"clearness\" (how the mixed vowels are avoided)"); wvknob->box(FL_ROUND_UP_BOX); wvknob->color(FL_BACKGROUND_COLOR); wvknob->selection_color(FL_INACTIVE_COLOR); wvknob->labeltype(FL_NORMAL_LABEL); wvknob->labelfont(0); wvknob->labelsize(10); wvknob->labelcolor(FL_FOREGROUND_COLOR); wvknob->maximum(127); wvknob->step(1); wvknob->align(Fl_Align(FL_ALIGN_TOP)); wvknob->when(FL_WHEN_CHANGED); o->init("Pvowelclearness"); } // Fl_Osc_Dial* wvknob { Fl_Button* o = new Fl_Button(645, 180, 50, 25, "Close"); o->box(FL_THIN_UP_BOX); o->callback((Fl_Callback*)cb_Close); } // Fl_Button* o { Fl_Button* o = new Fl_Button(635, 25, 25, 15, "C"); o->box(FL_THIN_UP_BOX); o->color((Fl_Color)179); o->labelfont(1); o->labelsize(11); o->labelcolor((Fl_Color)55); o->callback((Fl_Callback*)cb_C1); } // Fl_Button* o { Fl_Box* o = new Fl_Box(635, 6, 55, 15, "Vowel"); o->labelfont(1); } // Fl_Box* o formantparswindow->end(); } // Fl_Osc_Window* formantparswindow return formantparswindow; } void FilterUI::update_formant_window() { //formant_freq_dial->value(pars->Pvowels[nvowel].formants[nformant].freq); //formant_q_dial->value(pars->Pvowels[nvowel].formants[nformant].q); //formant_amp_dial->value(pars->Pvowels[nvowel].formants[nformant].amp); if (nformantvalue()) formantparsgroup->activate(); else formantparsgroup->deactivate(); if (nseqposvalue()) vowel_counter->activate(); else vowel_counter->deactivate(); //vowel_counter->value(pars->Psequence[nseqpos].nvowel); } void FilterUI::refresh() { update_formant_window(); formantfiltergraph->redraw(); const int Pcategory = filtertype->value(); const int Ptype = analogfiltertypechoice->value(); if (Pcategory==2) svfiltertypechoice->value(Ptype); if (Pcategory==0) analogfiltertypechoice->value(Ptype); const int categ=Pcategory; if ((categ==0)||(categ==2)) { if (categ==0) { analogfiltertypechoice->show(); svfiltertypechoice->hide(); } else { svfiltertypechoice->show(); analogfiltertypechoice->hide(); }; editbutton->hide(); formantparswindow->hide(); cfreqdial->label("C.freq"); } else { analogfiltertypechoice->hide(); svfiltertypechoice->hide(); editbutton->show(); cfreqdial->label("BS.pos"); }; filterparamswindow->redraw(); } void FilterUI::rebase(std::string new_base) { formantparswindow->rebase(new_base+"VoiceFilter/"); Fl_Osc_Group::rebase(new_base); } void FilterUI::init(std::string alt_root_, Fl_Osc_Interface *osc_, std::string base_, std::string ext_) { alt_root = alt_root_; osc = osc_; base = base_; ext = ext_; assert(osc); make_window(); end(); make_formant_window(); filterui->resize(this->x(),this->y(),this->w(),this->h()); switchcategory(0); formantparswindow->label(this->label()); update_formant_window(); } void FilterUI::switchcategory(int newcat) { //TODO update Pgain & filter type on switch Pgain=64; (void) newcat; refresh(); } void FilterUI::use_for_dynamic_filter() { freqtrdial->deactivate(); gaindial->when(0); cfknob->when(FL_WHEN_RELEASE); octknob->when(FL_WHEN_RELEASE); frsldial->when(0); wvknob->when(0); formant_freq_dial->when(0); formant_q_dial->when(0); formant_amp_dial->when(0); strchdial->when(0); }