ZynAddSubFX: regenerated UI source code files with recent Fluid
Now that we updated FLTK we also need to regenerate ZynAddSubFX'
UI source code files using recent Fluid tool. Indentation seems to
have been fixed.
(cherry picked from commit 13d1e38f4b)
This commit is contained in:
@@ -202,39 +202,39 @@ Fl_Group* ADvoicelistitem::make_window() {
|
||||
|
||||
ADvoicelistitem::ADvoicelistitem(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
|
||||
nvoice=0;
|
||||
pars=NULL;
|
||||
pars=NULL;
|
||||
}
|
||||
|
||||
void ADvoicelistitem::init(ADnoteParameters *parameters,int nvoice_,Master *master_) {
|
||||
pars=parameters;
|
||||
nvoice=nvoice_;
|
||||
master=master_;
|
||||
make_window();
|
||||
ADnoteVoiceListItem->show();
|
||||
end();
|
||||
nvoice=nvoice_;
|
||||
master=master_;
|
||||
make_window();
|
||||
ADnoteVoiceListItem->show();
|
||||
end();
|
||||
}
|
||||
|
||||
void ADvoicelistitem::refreshlist() {
|
||||
voiceenabled->value(pars->VoicePar[nvoice].Enabled);
|
||||
voiceresonanceenabled->value(pars->VoicePar[nvoice].Presonance);
|
||||
voicevolume->value(pars->VoicePar[nvoice].PVolume);
|
||||
voicedetune->value(pars->VoicePar[nvoice].PDetune-8192);
|
||||
voicepanning->value(pars->VoicePar[nvoice].PPanning);
|
||||
voicelfofreq->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);
|
||||
if (pars->VoicePar[nvoice].Pextoscil != -1) {
|
||||
osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
|
||||
} else
|
||||
osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
|
||||
if (pars->VoicePar[nvoice].Enabled==0) voicelistitemgroup->deactivate();
|
||||
else voicelistitemgroup->activate();
|
||||
detunevalueoutput->do_callback();
|
||||
noiselabel->do_callback();
|
||||
ADnoteVoiceListItem->redraw();
|
||||
voiceresonanceenabled->value(pars->VoicePar[nvoice].Presonance);
|
||||
voicevolume->value(pars->VoicePar[nvoice].PVolume);
|
||||
voicedetune->value(pars->VoicePar[nvoice].PDetune-8192);
|
||||
voicepanning->value(pars->VoicePar[nvoice].PPanning);
|
||||
voicelfofreq->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);
|
||||
if (pars->VoicePar[nvoice].Pextoscil != -1) {
|
||||
osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
|
||||
} else
|
||||
osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
|
||||
if (pars->VoicePar[nvoice].Enabled==0) voicelistitemgroup->deactivate();
|
||||
else voicelistitemgroup->activate();
|
||||
detunevalueoutput->do_callback();
|
||||
noiselabel->do_callback();
|
||||
ADnoteVoiceListItem->redraw();
|
||||
}
|
||||
|
||||
ADvoicelistitem::~ADvoicelistitem() {
|
||||
ADnoteVoiceListItem->hide();
|
||||
//delete(ADnoteVoiceListItem);
|
||||
//delete(ADnoteVoiceListItem);
|
||||
}
|
||||
|
||||
void ADvoiceUI::cb_Enable_i(Fl_Check_Button* o, void*) {
|
||||
@@ -1469,26 +1469,26 @@ cy)");
|
||||
|
||||
ADvoiceUI::ADvoiceUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
|
||||
nvoice=0;
|
||||
pars=NULL;
|
||||
oscedit=NULL;
|
||||
pars=NULL;
|
||||
oscedit=NULL;
|
||||
}
|
||||
|
||||
void ADvoiceUI::init(ADnoteParameters *parameters,int nvoice_,Master *master_) {
|
||||
pars=parameters;
|
||||
nvoice=nvoice_;
|
||||
master=master_;
|
||||
make_window();
|
||||
end();
|
||||
ADnoteVoiceParameters->show();
|
||||
nvoice=nvoice_;
|
||||
master=master_;
|
||||
make_window();
|
||||
end();
|
||||
ADnoteVoiceParameters->show();
|
||||
}
|
||||
|
||||
ADvoiceUI::~ADvoiceUI() {
|
||||
ADnoteVoiceParameters->hide();
|
||||
hide();
|
||||
if (oscedit!=NULL) {
|
||||
delete(oscedit);
|
||||
};
|
||||
//delete (ADnoteVoiceParameters);
|
||||
hide();
|
||||
if (oscedit!=NULL) {
|
||||
delete(oscedit);
|
||||
};
|
||||
//delete (ADnoteVoiceParameters);
|
||||
}
|
||||
|
||||
void ADnoteUI::cb_octave_i(Fl_Counter* o, void*) {
|
||||
@@ -2148,55 +2148,55 @@ Fl_Double_Window* ADnoteUI::make_window() {
|
||||
|
||||
ADnoteUI::ADnoteUI(ADnoteParameters *parameters,Master *master_) {
|
||||
pars=parameters;
|
||||
master=master_;
|
||||
nvoice=0;
|
||||
resui=new ResonanceUI(pars->GlobalPar.Reson);
|
||||
make_window();
|
||||
master=master_;
|
||||
nvoice=0;
|
||||
resui=new ResonanceUI(pars->GlobalPar.Reson);
|
||||
make_window();
|
||||
}
|
||||
|
||||
ADnoteUI::~ADnoteUI() {
|
||||
ADnoteVoiceList->hide();
|
||||
ADnoteGlobalParameters->hide();
|
||||
ADnoteVoice->hide();
|
||||
delete(ADnoteVoiceList);
|
||||
delete(ADnoteGlobalParameters);
|
||||
delete(ADnoteVoice);
|
||||
delete(resui);
|
||||
ADnoteGlobalParameters->hide();
|
||||
ADnoteVoice->hide();
|
||||
delete(ADnoteVoiceList);
|
||||
delete(ADnoteGlobalParameters);
|
||||
delete(ADnoteVoice);
|
||||
delete(resui);
|
||||
}
|
||||
|
||||
void ADnoteUI::refresh() {
|
||||
volume->value(pars->GlobalPar.PVolume);
|
||||
vsns->value(pars->GlobalPar.PAmpVelocityScaleFunction);
|
||||
pan->value(pars->GlobalPar.PPanning);
|
||||
|
||||
stereo->value(pars->GlobalPar.PStereo);
|
||||
rndgrp->value(pars->GlobalPar.Hrandgrouping);
|
||||
|
||||
pstr->value(pars->GlobalPar.PPunchStrength);
|
||||
pt->value(pars->GlobalPar.PPunchTime);
|
||||
pstc->value(pars->GlobalPar.PPunchStretch);
|
||||
pvel->value(pars->GlobalPar.PPunchVelocitySensing);
|
||||
|
||||
detunevalueoutput->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));
|
||||
freq->value(pars->GlobalPar.PDetune-8192);
|
||||
|
||||
int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;
|
||||
octave->value(k);
|
||||
|
||||
detunetype->value(pars->GlobalPar.PDetuneType-1);
|
||||
k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;
|
||||
coarsedet->value(k);
|
||||
amplfo->refresh();
|
||||
freqlfo->refresh();
|
||||
filterlfo->refresh();
|
||||
|
||||
ampenv->refresh();
|
||||
freqenv->refresh();
|
||||
filterenv->refresh();
|
||||
filterui->refresh();
|
||||
|
||||
for (int i=0;i<NUM_VOICES;i++) voicelistitem[i]->refreshlist();
|
||||
|
||||
resui->refresh();
|
||||
currentvoicecounter->do_callback();
|
||||
vsns->value(pars->GlobalPar.PAmpVelocityScaleFunction);
|
||||
pan->value(pars->GlobalPar.PPanning);
|
||||
|
||||
stereo->value(pars->GlobalPar.PStereo);
|
||||
rndgrp->value(pars->GlobalPar.Hrandgrouping);
|
||||
|
||||
pstr->value(pars->GlobalPar.PPunchStrength);
|
||||
pt->value(pars->GlobalPar.PPunchTime);
|
||||
pstc->value(pars->GlobalPar.PPunchStretch);
|
||||
pvel->value(pars->GlobalPar.PPunchVelocitySensing);
|
||||
|
||||
detunevalueoutput->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));
|
||||
freq->value(pars->GlobalPar.PDetune-8192);
|
||||
|
||||
int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;
|
||||
octave->value(k);
|
||||
|
||||
detunetype->value(pars->GlobalPar.PDetuneType-1);
|
||||
k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;
|
||||
coarsedet->value(k);
|
||||
amplfo->refresh();
|
||||
freqlfo->refresh();
|
||||
filterlfo->refresh();
|
||||
|
||||
ampenv->refresh();
|
||||
freqenv->refresh();
|
||||
filterenv->refresh();
|
||||
filterui->refresh();
|
||||
|
||||
for (int i=0;i<NUM_VOICES;i++) voicelistitem[i]->refreshlist();
|
||||
|
||||
resui->refresh();
|
||||
currentvoicecounter->do_callback();
|
||||
}
|
||||
|
||||
@@ -5,58 +5,59 @@
|
||||
//License: GNU GPL version 2 or later
|
||||
|
||||
void BankProcess_::process() {
|
||||
;
|
||||
}
|
||||
|
||||
BankSlot::BankSlot(int x,int y, int w, int h, const char *label):Fl_Button(x,y,w,h,label) {
|
||||
what=NULL;
|
||||
whatslot=NULL;
|
||||
nslot=0;
|
||||
nselected=NULL;
|
||||
whatslot=NULL;
|
||||
nslot=0;
|
||||
nselected=NULL;
|
||||
}
|
||||
|
||||
int BankSlot::handle(int event) {
|
||||
if (what==NULL) return(0);
|
||||
if (Fl::event_inside(this)){
|
||||
*what=0;*whatslot=nslot;
|
||||
if ((event==FL_RELEASE)&&(Fl::event_button()==1))*what=1;
|
||||
if ((event==FL_RELEASE)&&(Fl::event_button()==3))*what=2;
|
||||
if (event==FL_PUSH) highlight=1;
|
||||
}else highlight=0;
|
||||
|
||||
int tmp=Fl_Button::handle(event);
|
||||
if ((*what!=0) && Fl::event_inside(this)) (bp->*fnc)();
|
||||
return(tmp);
|
||||
if (Fl::event_inside(this)){
|
||||
*what=0;*whatslot=nslot;
|
||||
if ((event==FL_RELEASE)&&(Fl::event_button()==1))*what=1;
|
||||
if ((event==FL_RELEASE)&&(Fl::event_button()==3))*what=2;
|
||||
if (event==FL_PUSH) highlight=1;
|
||||
}else highlight=0;
|
||||
|
||||
int tmp=Fl_Button::handle(event);
|
||||
if ((*what!=0) && Fl::event_inside(this)) (bp->*fnc)();
|
||||
return(tmp);
|
||||
}
|
||||
|
||||
void BankSlot::init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_,int *nselected_) {
|
||||
nslot=nslot_;
|
||||
what=what_;
|
||||
whatslot=whatslot_;
|
||||
fnc=fnc_;
|
||||
bp=bp_;
|
||||
bank=bank_;
|
||||
nselected=nselected_;
|
||||
box(FL_THIN_UP_BOX);
|
||||
labelfont(0);
|
||||
labelsize(13);
|
||||
align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
|
||||
|
||||
highlight=0;
|
||||
refresh();
|
||||
what=what_;
|
||||
whatslot=whatslot_;
|
||||
fnc=fnc_;
|
||||
bp=bp_;
|
||||
bank=bank_;
|
||||
nselected=nselected_;
|
||||
box(FL_THIN_UP_BOX);
|
||||
labelfont(0);
|
||||
labelsize(13);
|
||||
align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
|
||||
|
||||
highlight=0;
|
||||
refresh();
|
||||
}
|
||||
|
||||
void BankSlot::refresh() {
|
||||
if (bank->emptyslot(nslot)) {
|
||||
color(46);
|
||||
} else {
|
||||
if (bank->isPADsynth_used(nslot)) color(26);
|
||||
else color(51);
|
||||
};
|
||||
|
||||
if (*nselected==nslot) color(6);
|
||||
|
||||
|
||||
label(bank->getnamenumbered(nslot));
|
||||
color(46);
|
||||
} else {
|
||||
if (bank->isPADsynth_used(nslot)) color(26);
|
||||
else color(51);
|
||||
};
|
||||
|
||||
if (*nselected==nslot) color(6);
|
||||
|
||||
|
||||
label(bank->getnamenumbered(nslot));
|
||||
}
|
||||
|
||||
void BankUI::cb_Close_i(Fl_Button*, void*) {
|
||||
@@ -285,23 +286,23 @@ Fl_Double_Window* BankUI::make_window() {
|
||||
|
||||
BankUI::BankUI(Master *master_,int *npart_) {
|
||||
fnc=&BankProcess_::process;
|
||||
master=master_;
|
||||
npart=npart_;
|
||||
bank=&master_->bank;
|
||||
what=0;
|
||||
nselected=-1;
|
||||
make_window();
|
||||
mode=1;
|
||||
master=master_;
|
||||
npart=npart_;
|
||||
bank=&master_->bank;
|
||||
what=0;
|
||||
nselected=-1;
|
||||
make_window();
|
||||
mode=1;
|
||||
}
|
||||
|
||||
BankUI::~BankUI() {
|
||||
bankuiwindow->hide();
|
||||
delete(bankuiwindow);
|
||||
delete(bankuiwindow);
|
||||
}
|
||||
|
||||
void BankUI::show() {
|
||||
bankuiwindow->show();
|
||||
simplesetmode(config.cfg.UserInterfaceMode==2);
|
||||
simplesetmode(config.cfg.UserInterfaceMode==2);
|
||||
}
|
||||
|
||||
void BankUI::hide() {
|
||||
@@ -310,111 +311,111 @@ void BankUI::hide() {
|
||||
|
||||
void BankUI::init(Fl_Valuator *cbwig_) {
|
||||
cbwig=cbwig_;
|
||||
rescan_for_banks();
|
||||
rescan_for_banks();
|
||||
}
|
||||
|
||||
void BankUI::process() {
|
||||
int slot=this->slot;
|
||||
|
||||
if ((what==2)&&(bank->emptyslot(slot)==0)&&(mode!=4)) {//Rename slot
|
||||
const char *tmp=fl_input("Slot (instrument) name:",(const char *)bank->getname(slot));
|
||||
if (tmp!=NULL) bank->setname(slot,tmp,-1);
|
||||
bs[slot]->refresh();
|
||||
};
|
||||
|
||||
if ((what==1)&&(mode==1)&&(!bank->emptyslot(slot))){//Reads from slot
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
bank->loadfromslot(slot,master->part[*npart]);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
master->part[*npart]->applyparameters();
|
||||
snprintf((char *)master->part[*npart]->Pname,PART_MAX_NAME_LEN,"%s",bank->getname(slot));
|
||||
cbwig->do_callback();
|
||||
|
||||
if (config.cfg.BankUIAutoClose!=0)
|
||||
bankuiwindow->hide();
|
||||
|
||||
};
|
||||
|
||||
if ((what==1)&&(mode==2)){//save(write) to slot
|
||||
if (!bank->emptyslot(slot)){
|
||||
if (!fl_choice("Overwrite the slot no. %d ?","No","Yes",NULL,slot+1)) goto nooverwriteslot;
|
||||
|
||||
if ((what==2)&&(bank->emptyslot(slot)==0)&&(mode!=4)) {//Rename slot
|
||||
const char *tmp=fl_input("Slot (instrument) name:",(const char *)bank->getname(slot));
|
||||
if (tmp!=NULL) bank->setname(slot,tmp,-1);
|
||||
bs[slot]->refresh();
|
||||
};
|
||||
|
||||
if ((what==1)&&(mode==1)&&(!bank->emptyslot(slot))){//Reads from slot
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
bank->loadfromslot(slot,master->part[*npart]);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
master->part[*npart]->applyparameters();
|
||||
snprintf((char *)master->part[*npart]->Pname,PART_MAX_NAME_LEN,"%s",bank->getname(slot));
|
||||
cbwig->do_callback();
|
||||
|
||||
if (config.cfg.BankUIAutoClose!=0)
|
||||
bankuiwindow->hide();
|
||||
|
||||
};
|
||||
|
||||
if ((what==1)&&(mode==2)){//save(write) to slot
|
||||
if (!bank->emptyslot(slot)){
|
||||
if (!fl_choice("Overwrite the slot no. %d ?","No","Yes",NULL,slot+1)) goto nooverwriteslot;
|
||||
};
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
bank->savetoslot(slot,master->part[*npart]);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
bs[slot]->refresh();
|
||||
mode=1;readbutton->value(1);writebutton->value(0);
|
||||
nooverwriteslot:;
|
||||
};
|
||||
|
||||
|
||||
|
||||
if ((what==1)&&(mode==3)&&(!bank->emptyslot(slot))){//Clears the slot
|
||||
if (fl_choice("Clear the slot no. %d ?","No","Yes",NULL,slot+1)){
|
||||
bank->clearslot(slot);
|
||||
bs[slot]->refresh();
|
||||
};
|
||||
};
|
||||
|
||||
if (mode==4){//swap
|
||||
bool done=false;
|
||||
if ((what==1)&&(nselected>=0)){
|
||||
bank->swapslot(nselected,slot);
|
||||
int ns=nselected;
|
||||
nselected=-1;
|
||||
bs[slot]->refresh();
|
||||
bs[ns]->refresh();
|
||||
done=true;
|
||||
};
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
bank->savetoslot(slot,master->part[*npart]);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
bs[slot]->refresh();
|
||||
mode=1;readbutton->value(1);writebutton->value(0);
|
||||
nooverwriteslot:;
|
||||
};
|
||||
|
||||
|
||||
|
||||
if ((what==1)&&(mode==3)&&(!bank->emptyslot(slot))){//Clears the slot
|
||||
if (fl_choice("Clear the slot no. %d ?","No","Yes",NULL,slot+1)){
|
||||
bank->clearslot(slot);
|
||||
if (((nselected<0)||(what==2))&&(!done)){
|
||||
int ns=nselected;
|
||||
nselected=slot;
|
||||
if (ns>0) bs[ns]->refresh();
|
||||
bs[slot]->refresh();
|
||||
};
|
||||
};
|
||||
|
||||
if (mode==4){//swap
|
||||
bool done=false;
|
||||
if ((what==1)&&(nselected>=0)){
|
||||
bank->swapslot(nselected,slot);
|
||||
int ns=nselected;
|
||||
nselected=-1;
|
||||
bs[slot]->refresh();
|
||||
bs[ns]->refresh();
|
||||
done=true;
|
||||
};
|
||||
if (((nselected<0)||(what==2))&&(!done)){
|
||||
int ns=nselected;
|
||||
nselected=slot;
|
||||
if (ns>0) bs[ns]->refresh();
|
||||
bs[slot]->refresh();
|
||||
};
|
||||
};
|
||||
if (mode!=4) refreshmainwindow();
|
||||
};
|
||||
if (mode!=4) refreshmainwindow();
|
||||
}
|
||||
|
||||
void BankUI::refreshmainwindow() {
|
||||
bankuiwindow->label(bank->bankfiletitle);
|
||||
mode=1;readbutton->value(1);writebutton->value(0);clearbutton->value(0);swapbutton->value(0);
|
||||
nselected=-1;
|
||||
if (bank->locked()){
|
||||
writebutton->deactivate();
|
||||
clearbutton->deactivate();
|
||||
swapbutton->deactivate();
|
||||
} else {
|
||||
writebutton->activate();
|
||||
clearbutton->activate();
|
||||
swapbutton->activate();
|
||||
};
|
||||
for (int i=0;i<BANK_SIZE;i++) bs[i]->refresh();
|
||||
mode=1;readbutton->value(1);writebutton->value(0);clearbutton->value(0);swapbutton->value(0);
|
||||
nselected=-1;
|
||||
if (bank->locked()){
|
||||
writebutton->deactivate();
|
||||
clearbutton->deactivate();
|
||||
swapbutton->deactivate();
|
||||
} else {
|
||||
writebutton->activate();
|
||||
clearbutton->activate();
|
||||
swapbutton->activate();
|
||||
};
|
||||
for (int i=0;i<BANK_SIZE;i++) bs[i]->refresh();
|
||||
}
|
||||
|
||||
void BankUI::removeselection() {
|
||||
if (nselected>=0) {
|
||||
int ns=nselected;
|
||||
nselected=-1;
|
||||
bs[ns]->refresh();
|
||||
};
|
||||
int ns=nselected;
|
||||
nselected=-1;
|
||||
bs[ns]->refresh();
|
||||
};
|
||||
}
|
||||
|
||||
void BankUI::rescan_for_banks() {
|
||||
banklist->clear();
|
||||
banklist->add(" ");
|
||||
bank->rescanforbanks();
|
||||
|
||||
for (int i=1;i<MAX_NUM_BANKS;i++) {
|
||||
if (bank->banks[i].name!=NULL) banklist->add(bank->banks[i].name);
|
||||
};
|
||||
banklist->add(" ");
|
||||
bank->rescanforbanks();
|
||||
|
||||
for (int i=1;i<MAX_NUM_BANKS;i++) {
|
||||
if (bank->banks[i].name!=NULL) banklist->add(bank->banks[i].name);
|
||||
};
|
||||
}
|
||||
|
||||
void BankUI::simplesetmode(bool beginnerui) {
|
||||
readbutton->value(1);
|
||||
mode=1;
|
||||
removeselection();
|
||||
if (beginnerui) modeselect->hide();
|
||||
else modeselect->show();
|
||||
mode=1;
|
||||
removeselection();
|
||||
if (beginnerui) modeselect->hide();
|
||||
else modeselect->show();
|
||||
}
|
||||
|
||||
@@ -37,19 +37,19 @@ Fl_Menu_Item ConfigUI::menu_[] = {
|
||||
{0,0,0,0,0,0,0,0,0}
|
||||
};
|
||||
|
||||
void ConfigUI::cb_samplerateinput_i(Fl_Input* o, void*) {
|
||||
void ConfigUI::cb_samplerateinput_i(Fl_Int_Input* o, void*) {
|
||||
char *tmp;
|
||||
config.cfg.SampleRate=strtoul(o->value(),&tmp,10);
|
||||
}
|
||||
void ConfigUI::cb_samplerateinput(Fl_Input* o, void* v) {
|
||||
void ConfigUI::cb_samplerateinput(Fl_Int_Input* o, void* v) {
|
||||
((ConfigUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_samplerateinput_i(o,v);
|
||||
}
|
||||
|
||||
void ConfigUI::cb_Buffer_i(Fl_Input* o, void*) {
|
||||
void ConfigUI::cb_Buffer_i(Fl_Int_Input* o, void*) {
|
||||
char *tmp;
|
||||
config.cfg.SoundBufferSize=strtoul(o->value(),&tmp,10);
|
||||
}
|
||||
void ConfigUI::cb_Buffer(Fl_Input* o, void* v) {
|
||||
void ConfigUI::cb_Buffer(Fl_Int_Input* o, void* v) {
|
||||
((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_Buffer_i(o,v);
|
||||
}
|
||||
|
||||
@@ -266,16 +266,16 @@ Fl_Double_Window* ConfigUI::make_window() {
|
||||
o->menu(menu_);
|
||||
o->value(getsamplerateorder());
|
||||
} // Fl_Choice* o
|
||||
{ Fl_Input* o = samplerateinput = new Fl_Input(115, 50, 60, 20);
|
||||
{ Fl_Int_Input* o = samplerateinput = new Fl_Int_Input(115, 50, 60, 20);
|
||||
samplerateinput->type(2);
|
||||
samplerateinput->textfont(1);
|
||||
samplerateinput->callback((Fl_Callback*)cb_samplerateinput);
|
||||
setsamplerateinput();
|
||||
if (getsamplerateorder()!=0) o->deactivate();
|
||||
} // Fl_Input* samplerateinput
|
||||
} // Fl_Int_Input* samplerateinput
|
||||
o->end();
|
||||
} // Fl_Group* o
|
||||
{ Fl_Input* o = new Fl_Input(190, 45, 60, 20, "Buffer Size");
|
||||
{ Fl_Int_Input* o = new Fl_Int_Input(190, 45, 60, 20, "Buffer Size");
|
||||
o->tooltip("Internal Sound Buffer Size (samples)");
|
||||
o->type(2);
|
||||
o->labelsize(11);
|
||||
@@ -285,7 +285,7 @@ Fl_Double_Window* ConfigUI::make_window() {
|
||||
char *tmpbuf=new char[100];o->cut(0,o->maximum_size());
|
||||
snprintf(tmpbuf,100,"%d",config.cfg.SoundBufferSize);o->insert(tmpbuf);
|
||||
delete []tmpbuf;
|
||||
} // Fl_Input* o
|
||||
} // Fl_Int_Input* o
|
||||
{ Fl_Light_Button* o = new Fl_Light_Button(20, 80, 85, 20, "Swap Stereo ");
|
||||
o->box(FL_THIN_UP_BOX);
|
||||
o->labelsize(10);
|
||||
@@ -475,86 +475,86 @@ system, etc..)");
|
||||
|
||||
ConfigUI::ConfigUI() {
|
||||
make_window();
|
||||
readbankcfg();
|
||||
readpresetcfg();
|
||||
readbankcfg();
|
||||
readpresetcfg();
|
||||
}
|
||||
|
||||
void ConfigUI::activatebutton_rootdir(bool active) {
|
||||
if (active) {
|
||||
removerootdirbutton->activate();
|
||||
makedefaultrootdirbutton->activate();
|
||||
}else{
|
||||
removerootdirbutton->deactivate();
|
||||
makedefaultrootdirbutton->deactivate();
|
||||
};
|
||||
removerootdirbutton->activate();
|
||||
makedefaultrootdirbutton->activate();
|
||||
}else{
|
||||
removerootdirbutton->deactivate();
|
||||
makedefaultrootdirbutton->deactivate();
|
||||
};
|
||||
}
|
||||
|
||||
void ConfigUI::activatebutton_presetdir(bool active) {
|
||||
if (active) {
|
||||
removepresetbutton->activate();
|
||||
makedefaultpresetbutton->activate();
|
||||
}else{
|
||||
removepresetbutton->deactivate();
|
||||
makedefaultpresetbutton->deactivate();
|
||||
};
|
||||
removepresetbutton->activate();
|
||||
makedefaultpresetbutton->activate();
|
||||
}else{
|
||||
removepresetbutton->deactivate();
|
||||
makedefaultpresetbutton->deactivate();
|
||||
};
|
||||
}
|
||||
|
||||
void ConfigUI::readbankcfg() {
|
||||
rootsbrowse->clear();
|
||||
|
||||
for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
|
||||
if (config.cfg.bankRootDirList[i]!=NULL) rootsbrowse->add(config.cfg.bankRootDirList[i]);
|
||||
};
|
||||
|
||||
for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
|
||||
if (config.cfg.bankRootDirList[i]!=NULL) rootsbrowse->add(config.cfg.bankRootDirList[i]);
|
||||
};
|
||||
}
|
||||
|
||||
void ConfigUI::writebankcfg() {
|
||||
config.clearbankrootdirlist();
|
||||
|
||||
for (int n=0;n<rootsbrowse->size();n++){
|
||||
config.cfg.bankRootDirList[n]=new char [MAX_STRING_SIZE];
|
||||
strncpy(config.cfg.bankRootDirList[n],rootsbrowse->text(n+1),MAX_STRING_SIZE);
|
||||
};
|
||||
|
||||
for (int n=0;n<rootsbrowse->size();n++){
|
||||
config.cfg.bankRootDirList[n]=new char [MAX_STRING_SIZE];
|
||||
strncpy(config.cfg.bankRootDirList[n],rootsbrowse->text(n+1),MAX_STRING_SIZE);
|
||||
};
|
||||
}
|
||||
|
||||
void ConfigUI::readpresetcfg() {
|
||||
presetbrowse->clear();
|
||||
|
||||
for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
|
||||
if (config.cfg.presetsDirList[i]!=NULL) presetbrowse->add(config.cfg.presetsDirList[i]);
|
||||
};
|
||||
|
||||
for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
|
||||
if (config.cfg.presetsDirList[i]!=NULL) presetbrowse->add(config.cfg.presetsDirList[i]);
|
||||
};
|
||||
}
|
||||
|
||||
void ConfigUI::writepresetcfg() {
|
||||
config.clearpresetsdirlist();
|
||||
|
||||
for (int n=0;n<presetbrowse->size();n++){
|
||||
config.cfg.presetsDirList[n]=new char [MAX_STRING_SIZE];
|
||||
strncpy(config.cfg.presetsDirList[n],presetbrowse->text(n+1),MAX_STRING_SIZE);
|
||||
};
|
||||
|
||||
for (int n=0;n<presetbrowse->size();n++){
|
||||
config.cfg.presetsDirList[n]=new char [MAX_STRING_SIZE];
|
||||
strncpy(config.cfg.presetsDirList[n],presetbrowse->text(n+1),MAX_STRING_SIZE);
|
||||
};
|
||||
}
|
||||
|
||||
int ConfigUI::getsamplerateorder() {
|
||||
int smpr=config.cfg.SampleRate;
|
||||
int order=0;
|
||||
switch(smpr){
|
||||
case 16000:order=1;break;
|
||||
case 22050:order=2;break;
|
||||
case 32000:order=3;break;
|
||||
case 44100:order=4;break;
|
||||
case 48000:order=5;break;
|
||||
case 88200:order=6;break;
|
||||
case 96000:order=7;break;
|
||||
default:order=0;break;
|
||||
};
|
||||
return(order);
|
||||
int order=0;
|
||||
switch(smpr){
|
||||
case 16000:order=1;break;
|
||||
case 22050:order=2;break;
|
||||
case 32000:order=3;break;
|
||||
case 44100:order=4;break;
|
||||
case 48000:order=5;break;
|
||||
case 88200:order=6;break;
|
||||
case 96000:order=7;break;
|
||||
default:order=0;break;
|
||||
};
|
||||
return(order);
|
||||
}
|
||||
|
||||
void ConfigUI::setsamplerateinput() {
|
||||
char *tmpbuf=new char[100];
|
||||
samplerateinput->cut(0,samplerateinput->maximum_size());
|
||||
snprintf(tmpbuf,100,"%d",config.cfg.SampleRate);
|
||||
samplerateinput->insert(tmpbuf);
|
||||
delete []tmpbuf;
|
||||
samplerateinput->cut(0,samplerateinput->maximum_size());
|
||||
snprintf(tmpbuf,100,"%d",config.cfg.SampleRate);
|
||||
samplerateinput->insert(tmpbuf);
|
||||
delete []tmpbuf;
|
||||
}
|
||||
|
||||
void ConfigUI::show() {
|
||||
|
||||
@@ -6,116 +6,116 @@
|
||||
|
||||
EQGraph::EQGraph(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
|
||||
eff=NULL;
|
||||
maxdB=30;
|
||||
maxdB=30;
|
||||
}
|
||||
|
||||
void EQGraph::init(EffectMgr *eff_) {
|
||||
eff=eff_;
|
||||
oldx=-1;
|
||||
khzval=-1;
|
||||
oldx=-1;
|
||||
khzval=-1;
|
||||
}
|
||||
|
||||
void EQGraph::draw_freq_line(REALTYPE freq,int type) {
|
||||
fl_color(FL_GRAY);
|
||||
REALTYPE freqx=getfreqpos(freq);
|
||||
switch(type){
|
||||
case 0:if (active_r()) fl_color(FL_WHITE);
|
||||
else fl_color(205,205,205);
|
||||
fl_line_style(FL_SOLID);
|
||||
break;
|
||||
case 1:fl_line_style(FL_DOT);break;
|
||||
case 2:fl_line_style(FL_DASH);break;
|
||||
};
|
||||
|
||||
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(x()+(int) (freqx*w()),y(),
|
||||
x()+(int) (freqx*w()),y()+h());
|
||||
REALTYPE freqx=getfreqpos(freq);
|
||||
switch(type){
|
||||
case 0:if (active_r()) fl_color(FL_WHITE);
|
||||
else fl_color(205,205,205);
|
||||
fl_line_style(FL_SOLID);
|
||||
break;
|
||||
case 1:fl_line_style(FL_DOT);break;
|
||||
case 2:fl_line_style(FL_DASH);break;
|
||||
};
|
||||
|
||||
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(x()+(int) (freqx*w()),y(),
|
||||
x()+(int) (freqx*w()),y()+h());
|
||||
}
|
||||
|
||||
void EQGraph::draw() {
|
||||
int ox=x(),oy=y(),lx=w(),ly=h(),i,iy,oiy;
|
||||
REALTYPE freqx;
|
||||
|
||||
if (active_r()) fl_color(0,70,150);
|
||||
else fl_color(80,120,160);
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
|
||||
|
||||
//draw the lines
|
||||
fl_color(FL_GRAY);
|
||||
|
||||
fl_line_style(FL_SOLID);
|
||||
fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
|
||||
|
||||
freqx=getfreqpos(1000.0);
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(ox+(int) (freqx*lx),oy,
|
||||
ox+(int) (freqx*lx),oy+ly);
|
||||
|
||||
for (i=1;i<10;i++){
|
||||
if(i==1){
|
||||
draw_freq_line(i*100.0,0);
|
||||
draw_freq_line(i*1000.0,0);
|
||||
}else
|
||||
if (i==5){
|
||||
draw_freq_line(i*10.0,2);
|
||||
draw_freq_line(i*100.0,2);
|
||||
draw_freq_line(i*1000.0,2);
|
||||
}else{
|
||||
draw_freq_line(i*10.0,1);
|
||||
draw_freq_line(i*100.0,1);
|
||||
draw_freq_line(i*1000.0,1);
|
||||
};
|
||||
};
|
||||
|
||||
draw_freq_line(10000.0,0);
|
||||
draw_freq_line(20000.0,1);
|
||||
|
||||
|
||||
fl_line_style(FL_DOT);
|
||||
int GY=6;if (ly<GY*3) GY=-1;
|
||||
for (i=1;i<GY;i++){
|
||||
int tmp=(int)(ly/(REALTYPE)GY*i);
|
||||
fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
|
||||
};
|
||||
|
||||
|
||||
//draw the frequency response
|
||||
if (active_r()) fl_color(FL_YELLOW);
|
||||
else fl_color(200,200,80);
|
||||
fl_line_style(FL_SOLID);
|
||||
oiy=getresponse(ly,getfreqx(0.0));
|
||||
for (i=1;i<lx;i++){
|
||||
REALTYPE frq=getfreqx(i/(REALTYPE) lx);
|
||||
if (frq>SAMPLE_RATE/2) break;
|
||||
iy=getresponse(ly,frq);
|
||||
if ((oiy>=0) && (oiy<ly) &&
|
||||
(iy>=0) && (iy<ly) )
|
||||
fl_line(ox+i-1,oy+ly-oiy,ox+i,oy+ly-iy);
|
||||
oiy=iy;
|
||||
};
|
||||
REALTYPE freqx;
|
||||
|
||||
if (active_r()) fl_color(0,70,150);
|
||||
else fl_color(80,120,160);
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
|
||||
|
||||
//draw the lines
|
||||
fl_color(FL_GRAY);
|
||||
|
||||
fl_line_style(FL_SOLID);
|
||||
fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
|
||||
|
||||
freqx=getfreqpos(1000.0);
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(ox+(int) (freqx*lx),oy,
|
||||
ox+(int) (freqx*lx),oy+ly);
|
||||
|
||||
for (i=1;i<10;i++){
|
||||
if(i==1){
|
||||
draw_freq_line(i*100.0,0);
|
||||
draw_freq_line(i*1000.0,0);
|
||||
}else
|
||||
if (i==5){
|
||||
draw_freq_line(i*10.0,2);
|
||||
draw_freq_line(i*100.0,2);
|
||||
draw_freq_line(i*1000.0,2);
|
||||
}else{
|
||||
draw_freq_line(i*10.0,1);
|
||||
draw_freq_line(i*100.0,1);
|
||||
draw_freq_line(i*1000.0,1);
|
||||
};
|
||||
};
|
||||
|
||||
draw_freq_line(10000.0,0);
|
||||
draw_freq_line(20000.0,1);
|
||||
|
||||
|
||||
fl_line_style(FL_DOT);
|
||||
int GY=6;if (ly<GY*3) GY=-1;
|
||||
for (i=1;i<GY;i++){
|
||||
int tmp=(int)(ly/(REALTYPE)GY*i);
|
||||
fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
|
||||
};
|
||||
|
||||
|
||||
//draw the frequency response
|
||||
if (active_r()) fl_color(FL_YELLOW);
|
||||
else fl_color(200,200,80);
|
||||
fl_line_style(FL_SOLID);
|
||||
oiy=getresponse(ly,getfreqx(0.0));
|
||||
for (i=1;i<lx;i++){
|
||||
REALTYPE frq=getfreqx(i/(REALTYPE) lx);
|
||||
if (frq>SAMPLE_RATE/2) break;
|
||||
iy=getresponse(ly,frq);
|
||||
if ((oiy>=0) && (oiy<ly) &&
|
||||
(iy>=0) && (iy<ly) )
|
||||
fl_line(ox+i-1,oy+ly-oiy,ox+i,oy+ly-iy);
|
||||
oiy=iy;
|
||||
};
|
||||
}
|
||||
|
||||
int EQGraph::getresponse(int maxy,REALTYPE freq) {
|
||||
REALTYPE dbresp=eff->getEQfreqresponse(freq);
|
||||
int idbresp=(int) ((dbresp/maxdB+1.0)*maxy/2.0);
|
||||
|
||||
|
||||
//fprintf(stderr,"%.5f\n",(dbresp/maxdB+1.0)*maxy/2.0);
|
||||
|
||||
|
||||
return(idbresp);
|
||||
int idbresp=(int) ((dbresp/maxdB+1.0)*maxy/2.0);
|
||||
|
||||
|
||||
//fprintf(stderr,"%.5f\n",(dbresp/maxdB+1.0)*maxy/2.0);
|
||||
|
||||
|
||||
return(idbresp);
|
||||
}
|
||||
|
||||
REALTYPE EQGraph::getfreqx(REALTYPE x) {
|
||||
if (x>1.0) x=1.0;
|
||||
return(20.0*pow((REALTYPE)1000.0,x));
|
||||
return(20.0*pow((REALTYPE)1000.0,x));
|
||||
}
|
||||
|
||||
REALTYPE EQGraph::getfreqpos(REALTYPE freq) {
|
||||
if (freq<0.00001) freq=0.00001;
|
||||
return(log(freq/20.0)/log(1000.0));
|
||||
return(log(freq/20.0)/log(1000.0));
|
||||
}
|
||||
|
||||
void EffUI::cb_revp_i(Fl_Choice* o, void*) {
|
||||
@@ -975,24 +975,24 @@ void EffUI::cb_Close(Fl_Button* o, void* v) {
|
||||
|
||||
EffUI::EffUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
|
||||
eff=NULL;
|
||||
filterwindow=NULL;
|
||||
filterwindow=NULL;
|
||||
}
|
||||
|
||||
EffUI::~EffUI() {
|
||||
effnullwindow->hide();//delete (effnullwindow);
|
||||
effreverbwindow->hide();//delete (effreverbwindow);
|
||||
effechowindow->hide();//delete (effechowindow);
|
||||
effchoruswindow->hide();//delete (effchoruswindow);
|
||||
effphaserwindow->hide();//delete (effphaserwindow);
|
||||
effalienwahwindow->hide();//delete (effalienwahwindow);
|
||||
effdistorsionwindow->hide();//delete (effdistorsionwindow);
|
||||
effeqwindow->hide();//delete (effeqwindow);
|
||||
effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);
|
||||
|
||||
if (filterwindow!=NULL){
|
||||
filterwindow->hide();
|
||||
delete(filterwindow);
|
||||
};
|
||||
effreverbwindow->hide();//delete (effreverbwindow);
|
||||
effechowindow->hide();//delete (effechowindow);
|
||||
effchoruswindow->hide();//delete (effchoruswindow);
|
||||
effphaserwindow->hide();//delete (effphaserwindow);
|
||||
effalienwahwindow->hide();//delete (effalienwahwindow);
|
||||
effdistorsionwindow->hide();//delete (effdistorsionwindow);
|
||||
effeqwindow->hide();//delete (effeqwindow);
|
||||
effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);
|
||||
|
||||
if (filterwindow!=NULL){
|
||||
filterwindow->hide();
|
||||
delete(filterwindow);
|
||||
};
|
||||
}
|
||||
|
||||
Fl_Group* EffUI::make_null_window() {
|
||||
@@ -2446,185 +2446,185 @@ Fl_Double_Window* EffUI::make_filter_window() {
|
||||
|
||||
void EffUI::init(EffectMgr *eff_) {
|
||||
eff=eff_;
|
||||
|
||||
make_null_window();
|
||||
make_reverb_window();
|
||||
make_echo_window();
|
||||
make_chorus_window();
|
||||
make_phaser_window();
|
||||
make_alienwah_window();
|
||||
make_distorsion_window();
|
||||
make_eq_window();
|
||||
make_dynamicfilter_window();
|
||||
|
||||
int px=this->parent()->x();
|
||||
int py=this->parent()->y();
|
||||
|
||||
effnullwindow->position(px,py);
|
||||
effreverbwindow->position(px,py);
|
||||
effechowindow->position(px,py);
|
||||
effchoruswindow->position(px,py);
|
||||
effphaserwindow->position(px,py);
|
||||
effalienwahwindow->position(px,py);
|
||||
effdistorsionwindow->position(px,py);
|
||||
effeqwindow->position(px,py);
|
||||
effdynamicfilterwindow->position(px,py);
|
||||
|
||||
refresh(eff);
|
||||
|
||||
make_null_window();
|
||||
make_reverb_window();
|
||||
make_echo_window();
|
||||
make_chorus_window();
|
||||
make_phaser_window();
|
||||
make_alienwah_window();
|
||||
make_distorsion_window();
|
||||
make_eq_window();
|
||||
make_dynamicfilter_window();
|
||||
|
||||
int px=this->parent()->x();
|
||||
int py=this->parent()->y();
|
||||
|
||||
effnullwindow->position(px,py);
|
||||
effreverbwindow->position(px,py);
|
||||
effechowindow->position(px,py);
|
||||
effchoruswindow->position(px,py);
|
||||
effphaserwindow->position(px,py);
|
||||
effalienwahwindow->position(px,py);
|
||||
effdistorsionwindow->position(px,py);
|
||||
effeqwindow->position(px,py);
|
||||
effdynamicfilterwindow->position(px,py);
|
||||
|
||||
refresh(eff);
|
||||
}
|
||||
|
||||
void EffUI::refresh(EffectMgr *eff_) {
|
||||
eff=eff_;
|
||||
this->hide();
|
||||
|
||||
effnullwindow->hide();
|
||||
effreverbwindow->hide();
|
||||
effechowindow->hide();
|
||||
effchoruswindow->hide();
|
||||
effphaserwindow->hide();
|
||||
effalienwahwindow->hide();
|
||||
effdistorsionwindow->hide();
|
||||
effeqwindow->hide();
|
||||
effdynamicfilterwindow->hide();
|
||||
|
||||
eqband=0;
|
||||
|
||||
if (filterwindow!=NULL){
|
||||
filterwindow->hide();
|
||||
delete(filterwindow);
|
||||
filterwindow=NULL;
|
||||
};
|
||||
|
||||
switch(eff->geteffect()){
|
||||
case 1:
|
||||
revp->value(eff->getpreset());
|
||||
revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W");
|
||||
revp1->value(eff->geteffectpar(1));
|
||||
revp2->value(eff->geteffectpar(2));
|
||||
revp3->value(eff->geteffectpar(3));
|
||||
revp4->value(eff->geteffectpar(4));
|
||||
//revp5->value(eff->geteffectpar(5));
|
||||
revp6->value(eff->geteffectpar(6));
|
||||
revp7->value(eff->geteffectpar(7));
|
||||
revp8->value(eff->geteffectpar(8));
|
||||
revp9->value(eff->geteffectpar(9));
|
||||
revp10->value(eff->geteffectpar(10));
|
||||
revp11->value(eff->geteffectpar(11));
|
||||
revp12->value(eff->geteffectpar(12));
|
||||
|
||||
effreverbwindow->show();
|
||||
break;
|
||||
case 2:
|
||||
echop->value(eff->getpreset());
|
||||
echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W");
|
||||
echop1->value(eff->geteffectpar(1));
|
||||
echop2->value(eff->geteffectpar(2));
|
||||
echop3->value(eff->geteffectpar(3));
|
||||
echop4->value(eff->geteffectpar(4));
|
||||
echop5->value(eff->geteffectpar(5));
|
||||
echop6->value(eff->geteffectpar(6));
|
||||
effechowindow->show();
|
||||
break;
|
||||
case 3:
|
||||
chorusp->value(eff->getpreset());
|
||||
chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W");
|
||||
chorusp1->value(eff->geteffectpar(1));
|
||||
chorusp2->value(eff->geteffectpar(2));
|
||||
chorusp3->value(eff->geteffectpar(3));
|
||||
chorusp4->value(eff->geteffectpar(4));
|
||||
chorusp5->value(eff->geteffectpar(5));
|
||||
chorusp6->value(eff->geteffectpar(6));
|
||||
chorusp7->value(eff->geteffectpar(7));
|
||||
chorusp8->value(eff->geteffectpar(8));
|
||||
chorusp9->value(eff->geteffectpar(9));
|
||||
chorusp11->value(eff->geteffectpar(11));
|
||||
effchoruswindow->show();
|
||||
break;
|
||||
case 4:
|
||||
phaserp->value(eff->getpreset());
|
||||
phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W");
|
||||
phaserp1->value(eff->geteffectpar(1));
|
||||
phaserp2->value(eff->geteffectpar(2));
|
||||
phaserp3->value(eff->geteffectpar(3));
|
||||
phaserp4->value(eff->geteffectpar(4));
|
||||
phaserp5->value(eff->geteffectpar(5));
|
||||
phaserp6->value(eff->geteffectpar(6));
|
||||
phaserp7->value(eff->geteffectpar(7));
|
||||
phaserp8->value(eff->geteffectpar(8));
|
||||
phaserp9->value(eff->geteffectpar(9));
|
||||
phaserp10->value(eff->geteffectpar(10));
|
||||
phaserp11->value(eff->geteffectpar(11));
|
||||
phaserp12->value(eff->geteffectpar(12));
|
||||
phaserp13->value(eff->geteffectpar(13));
|
||||
phaserp14->value(eff->geteffectpar(14));
|
||||
effphaserwindow->show();
|
||||
break;
|
||||
case 5:
|
||||
awp->value(eff->getpreset());
|
||||
awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W");
|
||||
awp1->value(eff->geteffectpar(1));
|
||||
awp2->value(eff->geteffectpar(2));
|
||||
awp3->value(eff->geteffectpar(3));
|
||||
awp4->value(eff->geteffectpar(4));
|
||||
awp5->value(eff->geteffectpar(5));
|
||||
awp6->value(eff->geteffectpar(6));
|
||||
awp7->value(eff->geteffectpar(7));
|
||||
awp8->value(eff->geteffectpar(8));
|
||||
awp9->value(eff->geteffectpar(9));
|
||||
awp10->value(eff->geteffectpar(10));
|
||||
|
||||
effalienwahwindow->show();
|
||||
break;
|
||||
case 6:
|
||||
distp->value(eff->getpreset());
|
||||
distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W");
|
||||
distp1->value(eff->geteffectpar(1));
|
||||
distp2->value(eff->geteffectpar(2));
|
||||
distp3->value(eff->geteffectpar(3));
|
||||
distp4->value(eff->geteffectpar(4));
|
||||
distp5->value(eff->geteffectpar(5));
|
||||
distp6->value(eff->geteffectpar(6));
|
||||
distp7->value(eff->geteffectpar(7));
|
||||
distp8->value(eff->geteffectpar(8));
|
||||
distp9->value(eff->geteffectpar(9));
|
||||
distp10->value(eff->geteffectpar(10));
|
||||
effdistorsionwindow->show();
|
||||
break;
|
||||
case 7:eqband=0;
|
||||
eqp0->value(eff->geteffectpar(0));
|
||||
bandcounter->value(eqband);
|
||||
bandcounter->do_callback();
|
||||
typechoice->value(eff->geteffectpar(10));
|
||||
eqgraph->redraw();
|
||||
freqdial->value(eff->geteffectpar(11));
|
||||
gaindial->value(eff->geteffectpar(12));
|
||||
if (eff->geteffectpar(10)<6) gaindial->deactivate();
|
||||
qdial->value(eff->geteffectpar(13));
|
||||
stagescounter->value(eff->geteffectpar(14));
|
||||
eqgraph->init(eff);
|
||||
effeqwindow->show();
|
||||
break;
|
||||
case 8:make_filter_window();
|
||||
dfp->value(eff->getpreset());
|
||||
dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W");
|
||||
dfp1->value(eff->geteffectpar(1));
|
||||
dfp2->value(eff->geteffectpar(2));
|
||||
dfp3->value(eff->geteffectpar(3));
|
||||
dfp4->value(eff->geteffectpar(4));
|
||||
dfp5->value(eff->geteffectpar(5));
|
||||
dfp6->value(eff->geteffectpar(6));
|
||||
dfp7->value(eff->geteffectpar(7));
|
||||
dfp8->value(eff->geteffectpar(8));
|
||||
dfp9->value(eff->geteffectpar(9));
|
||||
|
||||
|
||||
effdynamicfilterwindow->show();
|
||||
break;
|
||||
default:effnullwindow->show();
|
||||
break;
|
||||
};
|
||||
|
||||
this->show();
|
||||
this->hide();
|
||||
|
||||
effnullwindow->hide();
|
||||
effreverbwindow->hide();
|
||||
effechowindow->hide();
|
||||
effchoruswindow->hide();
|
||||
effphaserwindow->hide();
|
||||
effalienwahwindow->hide();
|
||||
effdistorsionwindow->hide();
|
||||
effeqwindow->hide();
|
||||
effdynamicfilterwindow->hide();
|
||||
|
||||
eqband=0;
|
||||
|
||||
if (filterwindow!=NULL){
|
||||
filterwindow->hide();
|
||||
delete(filterwindow);
|
||||
filterwindow=NULL;
|
||||
};
|
||||
|
||||
switch(eff->geteffect()){
|
||||
case 1:
|
||||
revp->value(eff->getpreset());
|
||||
revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W");
|
||||
revp1->value(eff->geteffectpar(1));
|
||||
revp2->value(eff->geteffectpar(2));
|
||||
revp3->value(eff->geteffectpar(3));
|
||||
revp4->value(eff->geteffectpar(4));
|
||||
//revp5->value(eff->geteffectpar(5));
|
||||
revp6->value(eff->geteffectpar(6));
|
||||
revp7->value(eff->geteffectpar(7));
|
||||
revp8->value(eff->geteffectpar(8));
|
||||
revp9->value(eff->geteffectpar(9));
|
||||
revp10->value(eff->geteffectpar(10));
|
||||
revp11->value(eff->geteffectpar(11));
|
||||
revp12->value(eff->geteffectpar(12));
|
||||
|
||||
effreverbwindow->show();
|
||||
break;
|
||||
case 2:
|
||||
echop->value(eff->getpreset());
|
||||
echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W");
|
||||
echop1->value(eff->geteffectpar(1));
|
||||
echop2->value(eff->geteffectpar(2));
|
||||
echop3->value(eff->geteffectpar(3));
|
||||
echop4->value(eff->geteffectpar(4));
|
||||
echop5->value(eff->geteffectpar(5));
|
||||
echop6->value(eff->geteffectpar(6));
|
||||
effechowindow->show();
|
||||
break;
|
||||
case 3:
|
||||
chorusp->value(eff->getpreset());
|
||||
chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W");
|
||||
chorusp1->value(eff->geteffectpar(1));
|
||||
chorusp2->value(eff->geteffectpar(2));
|
||||
chorusp3->value(eff->geteffectpar(3));
|
||||
chorusp4->value(eff->geteffectpar(4));
|
||||
chorusp5->value(eff->geteffectpar(5));
|
||||
chorusp6->value(eff->geteffectpar(6));
|
||||
chorusp7->value(eff->geteffectpar(7));
|
||||
chorusp8->value(eff->geteffectpar(8));
|
||||
chorusp9->value(eff->geteffectpar(9));
|
||||
chorusp11->value(eff->geteffectpar(11));
|
||||
effchoruswindow->show();
|
||||
break;
|
||||
case 4:
|
||||
phaserp->value(eff->getpreset());
|
||||
phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W");
|
||||
phaserp1->value(eff->geteffectpar(1));
|
||||
phaserp2->value(eff->geteffectpar(2));
|
||||
phaserp3->value(eff->geteffectpar(3));
|
||||
phaserp4->value(eff->geteffectpar(4));
|
||||
phaserp5->value(eff->geteffectpar(5));
|
||||
phaserp6->value(eff->geteffectpar(6));
|
||||
phaserp7->value(eff->geteffectpar(7));
|
||||
phaserp8->value(eff->geteffectpar(8));
|
||||
phaserp9->value(eff->geteffectpar(9));
|
||||
phaserp10->value(eff->geteffectpar(10));
|
||||
phaserp11->value(eff->geteffectpar(11));
|
||||
phaserp12->value(eff->geteffectpar(12));
|
||||
phaserp13->value(eff->geteffectpar(13));
|
||||
phaserp14->value(eff->geteffectpar(14));
|
||||
effphaserwindow->show();
|
||||
break;
|
||||
case 5:
|
||||
awp->value(eff->getpreset());
|
||||
awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W");
|
||||
awp1->value(eff->geteffectpar(1));
|
||||
awp2->value(eff->geteffectpar(2));
|
||||
awp3->value(eff->geteffectpar(3));
|
||||
awp4->value(eff->geteffectpar(4));
|
||||
awp5->value(eff->geteffectpar(5));
|
||||
awp6->value(eff->geteffectpar(6));
|
||||
awp7->value(eff->geteffectpar(7));
|
||||
awp8->value(eff->geteffectpar(8));
|
||||
awp9->value(eff->geteffectpar(9));
|
||||
awp10->value(eff->geteffectpar(10));
|
||||
|
||||
effalienwahwindow->show();
|
||||
break;
|
||||
case 6:
|
||||
distp->value(eff->getpreset());
|
||||
distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W");
|
||||
distp1->value(eff->geteffectpar(1));
|
||||
distp2->value(eff->geteffectpar(2));
|
||||
distp3->value(eff->geteffectpar(3));
|
||||
distp4->value(eff->geteffectpar(4));
|
||||
distp5->value(eff->geteffectpar(5));
|
||||
distp6->value(eff->geteffectpar(6));
|
||||
distp7->value(eff->geteffectpar(7));
|
||||
distp8->value(eff->geteffectpar(8));
|
||||
distp9->value(eff->geteffectpar(9));
|
||||
distp10->value(eff->geteffectpar(10));
|
||||
effdistorsionwindow->show();
|
||||
break;
|
||||
case 7:eqband=0;
|
||||
eqp0->value(eff->geteffectpar(0));
|
||||
bandcounter->value(eqband);
|
||||
bandcounter->do_callback();
|
||||
typechoice->value(eff->geteffectpar(10));
|
||||
eqgraph->redraw();
|
||||
freqdial->value(eff->geteffectpar(11));
|
||||
gaindial->value(eff->geteffectpar(12));
|
||||
if (eff->geteffectpar(10)<6) gaindial->deactivate();
|
||||
qdial->value(eff->geteffectpar(13));
|
||||
stagescounter->value(eff->geteffectpar(14));
|
||||
eqgraph->init(eff);
|
||||
effeqwindow->show();
|
||||
break;
|
||||
case 8:make_filter_window();
|
||||
dfp->value(eff->getpreset());
|
||||
dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W");
|
||||
dfp1->value(eff->geteffectpar(1));
|
||||
dfp2->value(eff->geteffectpar(2));
|
||||
dfp3->value(eff->geteffectpar(3));
|
||||
dfp4->value(eff->geteffectpar(4));
|
||||
dfp5->value(eff->geteffectpar(5));
|
||||
dfp6->value(eff->geteffectpar(6));
|
||||
dfp7->value(eff->geteffectpar(7));
|
||||
dfp8->value(eff->geteffectpar(8));
|
||||
dfp9->value(eff->geteffectpar(9));
|
||||
|
||||
|
||||
effdynamicfilterwindow->show();
|
||||
break;
|
||||
default:effnullwindow->show();
|
||||
break;
|
||||
};
|
||||
|
||||
this->show();
|
||||
}
|
||||
|
||||
void EffUI::refresh() {
|
||||
@@ -3113,14 +3113,14 @@ SimpleEffUI::SimpleEffUI(int x,int y, int w, int h, const char *label):Fl_Group(
|
||||
|
||||
SimpleEffUI::~SimpleEffUI() {
|
||||
effnullwindow->hide();//delete (effnullwindow);
|
||||
effreverbwindow->hide();//delete (effreverbwindow);
|
||||
effechowindow->hide();//delete (effechowindow);
|
||||
effchoruswindow->hide();//delete (effchoruswindow);
|
||||
effphaserwindow->hide();//delete (effphaserwindow);
|
||||
effalienwahwindow->hide();//delete (effalienwahwindow);
|
||||
effdistorsionwindow->hide();//delete (effdistorsionwindow);
|
||||
effeqwindow->hide();//delete (effeqwindow);
|
||||
effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);
|
||||
effreverbwindow->hide();//delete (effreverbwindow);
|
||||
effechowindow->hide();//delete (effechowindow);
|
||||
effchoruswindow->hide();//delete (effchoruswindow);
|
||||
effphaserwindow->hide();//delete (effphaserwindow);
|
||||
effalienwahwindow->hide();//delete (effalienwahwindow);
|
||||
effdistorsionwindow->hide();//delete (effdistorsionwindow);
|
||||
effeqwindow->hide();//delete (effeqwindow);
|
||||
effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);
|
||||
}
|
||||
|
||||
Fl_Group* SimpleEffUI::make_null_window() {
|
||||
@@ -3981,131 +3981,131 @@ Fl_Group* SimpleEffUI::make_dynamicfilter_window() {
|
||||
|
||||
void SimpleEffUI::init(EffectMgr *eff_) {
|
||||
eff=eff_;
|
||||
|
||||
make_null_window();
|
||||
make_reverb_window();
|
||||
make_echo_window();
|
||||
make_chorus_window();
|
||||
make_phaser_window();
|
||||
make_alienwah_window();
|
||||
make_distorsion_window();
|
||||
make_eq_window();
|
||||
make_dynamicfilter_window();
|
||||
|
||||
int px=this->parent()->x();
|
||||
int py=this->parent()->y();
|
||||
|
||||
effnullwindow->position(px,py);
|
||||
effreverbwindow->position(px,py);
|
||||
effechowindow->position(px,py);
|
||||
effchoruswindow->position(px,py);
|
||||
effphaserwindow->position(px,py);
|
||||
effalienwahwindow->position(px,py);
|
||||
effdistorsionwindow->position(px,py);
|
||||
effeqwindow->position(px,py);
|
||||
effdynamicfilterwindow->position(px,py);
|
||||
|
||||
refresh(eff);
|
||||
|
||||
make_null_window();
|
||||
make_reverb_window();
|
||||
make_echo_window();
|
||||
make_chorus_window();
|
||||
make_phaser_window();
|
||||
make_alienwah_window();
|
||||
make_distorsion_window();
|
||||
make_eq_window();
|
||||
make_dynamicfilter_window();
|
||||
|
||||
int px=this->parent()->x();
|
||||
int py=this->parent()->y();
|
||||
|
||||
effnullwindow->position(px,py);
|
||||
effreverbwindow->position(px,py);
|
||||
effechowindow->position(px,py);
|
||||
effchoruswindow->position(px,py);
|
||||
effphaserwindow->position(px,py);
|
||||
effalienwahwindow->position(px,py);
|
||||
effdistorsionwindow->position(px,py);
|
||||
effeqwindow->position(px,py);
|
||||
effdynamicfilterwindow->position(px,py);
|
||||
|
||||
refresh(eff);
|
||||
}
|
||||
|
||||
void SimpleEffUI::refresh(EffectMgr *eff_) {
|
||||
eff=eff_;
|
||||
this->hide();
|
||||
|
||||
effnullwindow->hide();
|
||||
effreverbwindow->hide();
|
||||
effechowindow->hide();
|
||||
effchoruswindow->hide();
|
||||
effphaserwindow->hide();
|
||||
effalienwahwindow->hide();
|
||||
effdistorsionwindow->hide();
|
||||
effeqwindow->hide();
|
||||
effdynamicfilterwindow->hide();
|
||||
|
||||
eqband=0;
|
||||
|
||||
|
||||
switch(eff->geteffect()){
|
||||
case 1:
|
||||
revp->value(eff->getpreset());
|
||||
revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W");
|
||||
revp2->value(eff->geteffectpar(2));
|
||||
revp3->value(eff->geteffectpar(3));
|
||||
revp9->value(eff->geteffectpar(9));
|
||||
effreverbwindow->show();
|
||||
break;
|
||||
case 2:
|
||||
echop->value(eff->getpreset());
|
||||
echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W");
|
||||
echop2->value(eff->geteffectpar(2));
|
||||
echop5->value(eff->geteffectpar(5));
|
||||
effechowindow->show();
|
||||
break;
|
||||
case 3:
|
||||
chorusp->value(eff->getpreset());
|
||||
chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W");
|
||||
chorusp2->value(eff->geteffectpar(2));
|
||||
chorusp6->value(eff->geteffectpar(6));
|
||||
chorusp7->value(eff->geteffectpar(7));
|
||||
chorusp8->value(eff->geteffectpar(8));
|
||||
effchoruswindow->show();
|
||||
break;
|
||||
case 4:
|
||||
phaserp->value(eff->getpreset());
|
||||
phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W");
|
||||
phaserp2->value(eff->geteffectpar(2));
|
||||
phaserp5->value(eff->geteffectpar(5));
|
||||
phaserp6->value(eff->geteffectpar(6));
|
||||
phaserp7->value(eff->geteffectpar(7));
|
||||
phaserp8->value(eff->geteffectpar(8));
|
||||
effphaserwindow->show();
|
||||
break;
|
||||
case 5:
|
||||
awp->value(eff->getpreset());
|
||||
awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W");
|
||||
awp2->value(eff->geteffectpar(2));
|
||||
awp6->value(eff->geteffectpar(6));
|
||||
awp8->value(eff->geteffectpar(8));
|
||||
effalienwahwindow->show();
|
||||
break;
|
||||
case 6:
|
||||
distp->value(eff->getpreset());
|
||||
distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W");
|
||||
distp3->value(eff->geteffectpar(3));
|
||||
distp4->value(eff->geteffectpar(4));
|
||||
distp5->value(eff->geteffectpar(5));
|
||||
distp7->value(eff->geteffectpar(7));
|
||||
effdistorsionwindow->show();
|
||||
break;
|
||||
case 7:
|
||||
bandcounter->value(eqband);
|
||||
bandcounter->do_callback();
|
||||
typechoice->value(eff->geteffectpar(10));
|
||||
eqgraph->redraw();
|
||||
freqdial->value(eff->geteffectpar(11));
|
||||
gaindial->value(eff->geteffectpar(12));
|
||||
if (eff->geteffectpar(10)<6) gaindial->deactivate();
|
||||
qdial->value(eff->geteffectpar(13));
|
||||
stagescounter->value(eff->geteffectpar(14));
|
||||
eqgraph->init(eff);
|
||||
effeqwindow->show();
|
||||
break;
|
||||
case 8:
|
||||
dfp->value(eff->getpreset());
|
||||
dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W");
|
||||
dfp2->value(eff->geteffectpar(2));
|
||||
dfp6->value(eff->geteffectpar(6));
|
||||
dfp7->value(eff->geteffectpar(7));
|
||||
dfp9->value(eff->geteffectpar(9));
|
||||
|
||||
|
||||
effdynamicfilterwindow->show();
|
||||
break;
|
||||
default:effnullwindow->show();
|
||||
break;
|
||||
};
|
||||
|
||||
this->show();
|
||||
this->hide();
|
||||
|
||||
effnullwindow->hide();
|
||||
effreverbwindow->hide();
|
||||
effechowindow->hide();
|
||||
effchoruswindow->hide();
|
||||
effphaserwindow->hide();
|
||||
effalienwahwindow->hide();
|
||||
effdistorsionwindow->hide();
|
||||
effeqwindow->hide();
|
||||
effdynamicfilterwindow->hide();
|
||||
|
||||
eqband=0;
|
||||
|
||||
|
||||
switch(eff->geteffect()){
|
||||
case 1:
|
||||
revp->value(eff->getpreset());
|
||||
revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W");
|
||||
revp2->value(eff->geteffectpar(2));
|
||||
revp3->value(eff->geteffectpar(3));
|
||||
revp9->value(eff->geteffectpar(9));
|
||||
effreverbwindow->show();
|
||||
break;
|
||||
case 2:
|
||||
echop->value(eff->getpreset());
|
||||
echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W");
|
||||
echop2->value(eff->geteffectpar(2));
|
||||
echop5->value(eff->geteffectpar(5));
|
||||
effechowindow->show();
|
||||
break;
|
||||
case 3:
|
||||
chorusp->value(eff->getpreset());
|
||||
chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W");
|
||||
chorusp2->value(eff->geteffectpar(2));
|
||||
chorusp6->value(eff->geteffectpar(6));
|
||||
chorusp7->value(eff->geteffectpar(7));
|
||||
chorusp8->value(eff->geteffectpar(8));
|
||||
effchoruswindow->show();
|
||||
break;
|
||||
case 4:
|
||||
phaserp->value(eff->getpreset());
|
||||
phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W");
|
||||
phaserp2->value(eff->geteffectpar(2));
|
||||
phaserp5->value(eff->geteffectpar(5));
|
||||
phaserp6->value(eff->geteffectpar(6));
|
||||
phaserp7->value(eff->geteffectpar(7));
|
||||
phaserp8->value(eff->geteffectpar(8));
|
||||
effphaserwindow->show();
|
||||
break;
|
||||
case 5:
|
||||
awp->value(eff->getpreset());
|
||||
awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W");
|
||||
awp2->value(eff->geteffectpar(2));
|
||||
awp6->value(eff->geteffectpar(6));
|
||||
awp8->value(eff->geteffectpar(8));
|
||||
effalienwahwindow->show();
|
||||
break;
|
||||
case 6:
|
||||
distp->value(eff->getpreset());
|
||||
distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W");
|
||||
distp3->value(eff->geteffectpar(3));
|
||||
distp4->value(eff->geteffectpar(4));
|
||||
distp5->value(eff->geteffectpar(5));
|
||||
distp7->value(eff->geteffectpar(7));
|
||||
effdistorsionwindow->show();
|
||||
break;
|
||||
case 7:
|
||||
bandcounter->value(eqband);
|
||||
bandcounter->do_callback();
|
||||
typechoice->value(eff->geteffectpar(10));
|
||||
eqgraph->redraw();
|
||||
freqdial->value(eff->geteffectpar(11));
|
||||
gaindial->value(eff->geteffectpar(12));
|
||||
if (eff->geteffectpar(10)<6) gaindial->deactivate();
|
||||
qdial->value(eff->geteffectpar(13));
|
||||
stagescounter->value(eff->geteffectpar(14));
|
||||
eqgraph->init(eff);
|
||||
effeqwindow->show();
|
||||
break;
|
||||
case 8:
|
||||
dfp->value(eff->getpreset());
|
||||
dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W");
|
||||
dfp2->value(eff->geteffectpar(2));
|
||||
dfp6->value(eff->geteffectpar(6));
|
||||
dfp7->value(eff->geteffectpar(7));
|
||||
dfp9->value(eff->geteffectpar(9));
|
||||
|
||||
|
||||
effdynamicfilterwindow->show();
|
||||
break;
|
||||
default:effnullwindow->show();
|
||||
break;
|
||||
};
|
||||
|
||||
this->show();
|
||||
}
|
||||
|
||||
void SimpleEffUI::refresh() {
|
||||
|
||||
@@ -6,15 +6,15 @@
|
||||
|
||||
EnvelopeFreeEdit::EnvelopeFreeEdit(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
|
||||
env=NULL;
|
||||
pair=NULL;
|
||||
pair=NULL;
|
||||
}
|
||||
|
||||
void EnvelopeFreeEdit::init(EnvelopeParams *env_) {
|
||||
env=env_;
|
||||
oldx=-1;
|
||||
currentpoint=-1;
|
||||
cpx=0;
|
||||
lastpoint=-1;
|
||||
oldx=-1;
|
||||
currentpoint=-1;
|
||||
cpx=0;
|
||||
lastpoint=-1;
|
||||
}
|
||||
|
||||
void EnvelopeFreeEdit::setpair(Fl_Box *pair_) {
|
||||
@@ -23,137 +23,137 @@ void EnvelopeFreeEdit::setpair(Fl_Box *pair_) {
|
||||
|
||||
int EnvelopeFreeEdit::getpointx(int n) {
|
||||
int lx=w()-10;
|
||||
int npoints=env->Penvpoints;
|
||||
|
||||
float sum=0;
|
||||
for (int i=1;i<npoints;i++) sum+=env->getdt(i)+1;
|
||||
|
||||
float sumbefore=0;//the sum of all points before the computed point
|
||||
for (int i=1;i<=n;i++) sumbefore+=env->getdt(i)+1;
|
||||
|
||||
return((int) (sumbefore/(REALTYPE) sum*lx));
|
||||
int npoints=env->Penvpoints;
|
||||
|
||||
float sum=0;
|
||||
for (int i=1;i<npoints;i++) sum+=env->getdt(i)+1;
|
||||
|
||||
float sumbefore=0;//the sum of all points before the computed point
|
||||
for (int i=1;i<=n;i++) sumbefore+=env->getdt(i)+1;
|
||||
|
||||
return((int) (sumbefore/(REALTYPE) sum*lx));
|
||||
}
|
||||
|
||||
int EnvelopeFreeEdit::getpointy(int n) {
|
||||
int ly=h()-10;
|
||||
|
||||
return((int) ((1.0-env->Penvval[n]/127.0)*ly));
|
||||
|
||||
return((int) ((1.0-env->Penvval[n]/127.0)*ly));
|
||||
}
|
||||
|
||||
int EnvelopeFreeEdit::getnearest(int x,int y) {
|
||||
x-=5;y-=5;
|
||||
|
||||
int nearestpoint=0;
|
||||
int nearestval=1000000;//a big value
|
||||
for (int i=0;i<env->Penvpoints;i++){
|
||||
int distance=abs(x-getpointx(i))+abs(y-getpointy(i));
|
||||
if (distance<nearestval) {
|
||||
nearestpoint=i;
|
||||
nearestval=distance;
|
||||
};
|
||||
};
|
||||
return(nearestpoint);
|
||||
|
||||
int nearestpoint=0;
|
||||
int nearestval=1000000;//a big value
|
||||
for (int i=0;i<env->Penvpoints;i++){
|
||||
int distance=abs(x-getpointx(i))+abs(y-getpointy(i));
|
||||
if (distance<nearestval) {
|
||||
nearestpoint=i;
|
||||
nearestval=distance;
|
||||
};
|
||||
};
|
||||
return(nearestpoint);
|
||||
}
|
||||
|
||||
void EnvelopeFreeEdit::draw() {
|
||||
int ox=x(),oy=y(),lx=w(),ly=h();
|
||||
if (env->Pfreemode==0) env->converttofree();
|
||||
int npoints=env->Penvpoints;
|
||||
|
||||
if (active_r()) fl_color(FL_BLACK);
|
||||
else fl_color(90,90,90);
|
||||
if (!active_r()) currentpoint=-1;
|
||||
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
|
||||
ox+=5;oy+=5;lx-=10;ly-=10;
|
||||
|
||||
//draw the lines
|
||||
fl_color(FL_GRAY);
|
||||
|
||||
fl_line_style(FL_SOLID);
|
||||
fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
|
||||
|
||||
//draws the evelope points and lines
|
||||
Fl_Color alb=FL_WHITE;
|
||||
if (!active_r()) alb=fl_rgb_color(180,180,180);
|
||||
fl_color(alb);
|
||||
int oldxx=0,xx=0,oldyy=0,yy=getpointy(0);
|
||||
fl_rectf(ox-3,oy+yy-3,6,6);
|
||||
for (int i=1;i<npoints;i++){
|
||||
oldxx=xx;oldyy=yy;
|
||||
xx=getpointx(i);yy=getpointy(i);
|
||||
if (i==currentpoint) fl_color(FL_RED);
|
||||
else fl_color(alb);
|
||||
fl_line(ox+oldxx,oy+oldyy,ox+xx,oy+yy);
|
||||
fl_rectf(ox+xx-3,oy+yy-3,6,6);
|
||||
};
|
||||
|
||||
//draw the last moved point point (if exists)
|
||||
if (lastpoint>=0){
|
||||
fl_color(FL_CYAN);
|
||||
fl_rectf(ox+getpointx(lastpoint)-5,oy+getpointy(lastpoint)-5,10,10);
|
||||
};
|
||||
|
||||
//draw the sustain position
|
||||
if (env->Penvsustain>0){
|
||||
fl_color(FL_YELLOW);
|
||||
xx=getpointx(env->Penvsustain);
|
||||
fl_line(ox+xx,oy+0,ox+xx,oy+ly);
|
||||
};
|
||||
|
||||
//Show the envelope duration and the current line duration
|
||||
fl_font(FL_HELVETICA|FL_BOLD,10);
|
||||
float time=0.0;
|
||||
if (currentpoint<=0){
|
||||
fl_color(alb);
|
||||
for (int i=1;i<npoints;i++) time+=env->getdt(i);
|
||||
} else {
|
||||
fl_color(255,0,0);
|
||||
time=env->getdt(currentpoint);
|
||||
};
|
||||
char tmpstr[20];
|
||||
if (time<1000.0) snprintf((char *)&tmpstr,20,"%.1fms",time);
|
||||
else snprintf((char *)&tmpstr,20,"%.2fs",time/1000.0);
|
||||
fl_draw(tmpstr,ox+lx-20,oy+ly-10,20,10,FL_ALIGN_RIGHT,NULL,0);
|
||||
if (env->Pfreemode==0) env->converttofree();
|
||||
int npoints=env->Penvpoints;
|
||||
|
||||
if (active_r()) fl_color(FL_BLACK);
|
||||
else fl_color(90,90,90);
|
||||
if (!active_r()) currentpoint=-1;
|
||||
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
|
||||
ox+=5;oy+=5;lx-=10;ly-=10;
|
||||
|
||||
//draw the lines
|
||||
fl_color(FL_GRAY);
|
||||
|
||||
fl_line_style(FL_SOLID);
|
||||
fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
|
||||
|
||||
//draws the evelope points and lines
|
||||
Fl_Color alb=FL_WHITE;
|
||||
if (!active_r()) alb=fl_rgb_color(180,180,180);
|
||||
fl_color(alb);
|
||||
int oldxx=0,xx=0,oldyy=0,yy=getpointy(0);
|
||||
fl_rectf(ox-3,oy+yy-3,6,6);
|
||||
for (int i=1;i<npoints;i++){
|
||||
oldxx=xx;oldyy=yy;
|
||||
xx=getpointx(i);yy=getpointy(i);
|
||||
if (i==currentpoint) fl_color(FL_RED);
|
||||
else fl_color(alb);
|
||||
fl_line(ox+oldxx,oy+oldyy,ox+xx,oy+yy);
|
||||
fl_rectf(ox+xx-3,oy+yy-3,6,6);
|
||||
};
|
||||
|
||||
//draw the last moved point point (if exists)
|
||||
if (lastpoint>=0){
|
||||
fl_color(FL_CYAN);
|
||||
fl_rectf(ox+getpointx(lastpoint)-5,oy+getpointy(lastpoint)-5,10,10);
|
||||
};
|
||||
|
||||
//draw the sustain position
|
||||
if (env->Penvsustain>0){
|
||||
fl_color(FL_YELLOW);
|
||||
xx=getpointx(env->Penvsustain);
|
||||
fl_line(ox+xx,oy+0,ox+xx,oy+ly);
|
||||
};
|
||||
|
||||
//Show the envelope duration and the current line duration
|
||||
fl_font(FL_HELVETICA|FL_BOLD,10);
|
||||
float time=0.0;
|
||||
if (currentpoint<=0){
|
||||
fl_color(alb);
|
||||
for (int i=1;i<npoints;i++) time+=env->getdt(i);
|
||||
} else {
|
||||
fl_color(255,0,0);
|
||||
time=env->getdt(currentpoint);
|
||||
};
|
||||
char tmpstr[20];
|
||||
if (time<1000.0) snprintf((char *)&tmpstr,20,"%.1fms",time);
|
||||
else snprintf((char *)&tmpstr,20,"%.2fs",time/1000.0);
|
||||
fl_draw(tmpstr,ox+lx-20,oy+ly-10,20,10,FL_ALIGN_RIGHT,NULL,0);
|
||||
}
|
||||
|
||||
int EnvelopeFreeEdit::handle(int event) {
|
||||
int x_=Fl::event_x()-x();
|
||||
int y_=Fl::event_y()-y();
|
||||
|
||||
if (event==FL_PUSH) {
|
||||
currentpoint=getnearest(x_,y_);
|
||||
cpx=x_;
|
||||
cpdt=env->Penvdt[currentpoint];
|
||||
lastpoint=currentpoint;
|
||||
redraw();
|
||||
if (pair!=NULL) pair->redraw();
|
||||
};
|
||||
|
||||
if (event==FL_RELEASE){
|
||||
currentpoint=-1;
|
||||
redraw();
|
||||
if (pair!=NULL) pair->redraw();
|
||||
};
|
||||
|
||||
if ((event==FL_DRAG)&&(currentpoint>=0)){
|
||||
int ny=127-(int) (y_*127.0/h());
|
||||
if (ny<0) ny=0;if (ny>127) ny=127;
|
||||
env->Penvval[currentpoint]=ny;
|
||||
|
||||
int dx=(int)((x_-cpx)*0.1);
|
||||
int newdt=cpdt+dx;
|
||||
if (newdt<0) newdt=0;if (newdt>127) newdt=127;
|
||||
if (currentpoint!=0) env->Penvdt[currentpoint]=newdt;
|
||||
else env->Penvdt[currentpoint]=0;
|
||||
|
||||
redraw();
|
||||
if (pair!=NULL) pair->redraw();
|
||||
};
|
||||
|
||||
|
||||
return(1);
|
||||
int y_=Fl::event_y()-y();
|
||||
|
||||
if (event==FL_PUSH) {
|
||||
currentpoint=getnearest(x_,y_);
|
||||
cpx=x_;
|
||||
cpdt=env->Penvdt[currentpoint];
|
||||
lastpoint=currentpoint;
|
||||
redraw();
|
||||
if (pair!=NULL) pair->redraw();
|
||||
};
|
||||
|
||||
if (event==FL_RELEASE){
|
||||
currentpoint=-1;
|
||||
redraw();
|
||||
if (pair!=NULL) pair->redraw();
|
||||
};
|
||||
|
||||
if ((event==FL_DRAG)&&(currentpoint>=0)){
|
||||
int ny=127-(int) (y_*127.0/h());
|
||||
if (ny<0) ny=0;if (ny>127) ny=127;
|
||||
env->Penvval[currentpoint]=ny;
|
||||
|
||||
int dx=(int)((x_-cpx)*0.1);
|
||||
int newdt=cpdt+dx;
|
||||
if (newdt<0) newdt=0;if (newdt>127) newdt=127;
|
||||
if (currentpoint!=0) env->Penvdt[currentpoint]=newdt;
|
||||
else env->Penvdt[currentpoint]=0;
|
||||
|
||||
redraw();
|
||||
if (pair!=NULL) pair->redraw();
|
||||
};
|
||||
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
void EnvelopeUI::cb_addpoint_i(Fl_Button*, void*) {
|
||||
@@ -594,19 +594,19 @@ void EnvelopeUI::cb_P5(Fl_Button* o, void* v) {
|
||||
|
||||
EnvelopeUI::EnvelopeUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
|
||||
env=NULL;
|
||||
freemodeeditwindow=NULL;
|
||||
envADSR=NULL;
|
||||
envASR=NULL;
|
||||
envADSRfilter=NULL;
|
||||
envASRbw=NULL;
|
||||
envfree=NULL;
|
||||
freemodeeditwindow=NULL;
|
||||
envADSR=NULL;
|
||||
envASR=NULL;
|
||||
envADSRfilter=NULL;
|
||||
envASRbw=NULL;
|
||||
envfree=NULL;
|
||||
}
|
||||
|
||||
EnvelopeUI::~EnvelopeUI() {
|
||||
envwindow->hide();
|
||||
hide();
|
||||
freemodeeditwindow->hide();
|
||||
delete (freemodeeditwindow);
|
||||
hide();
|
||||
freemodeeditwindow->hide();
|
||||
delete (freemodeeditwindow);
|
||||
}
|
||||
|
||||
Fl_Double_Window* EnvelopeUI::make_freemode_edit_window() {
|
||||
@@ -1356,170 +1356,170 @@ Fl_Group* EnvelopeUI::make_free_window() {
|
||||
|
||||
void EnvelopeUI::init(EnvelopeParams *env_) {
|
||||
env=env_;
|
||||
make_ADSR_window();
|
||||
make_ASR_window();
|
||||
make_ADSRfilter_window();
|
||||
make_ASRbw_window();
|
||||
make_free_window();
|
||||
|
||||
make_freemode_edit_window();
|
||||
|
||||
envwindow=NULL;
|
||||
if (env->Envmode==3) envfreegroup->label("Frequency Envelope");
|
||||
if (env->Envmode==4) envfreegroup->label("Filter Envelope");
|
||||
if (env->Envmode==5) envfreegroup->label("Bandwidth Envelope");
|
||||
|
||||
freemodeeditwindow->label(this->label());
|
||||
|
||||
|
||||
freeeditsmall->setpair(freeedit);
|
||||
freeedit->setpair(freeeditsmall);
|
||||
|
||||
|
||||
refresh();
|
||||
make_ADSR_window();
|
||||
make_ASR_window();
|
||||
make_ADSRfilter_window();
|
||||
make_ASRbw_window();
|
||||
make_free_window();
|
||||
|
||||
make_freemode_edit_window();
|
||||
|
||||
envwindow=NULL;
|
||||
if (env->Envmode==3) envfreegroup->label("Frequency Envelope");
|
||||
if (env->Envmode==4) envfreegroup->label("Filter Envelope");
|
||||
if (env->Envmode==5) envfreegroup->label("Bandwidth Envelope");
|
||||
|
||||
freemodeeditwindow->label(this->label());
|
||||
|
||||
|
||||
freeeditsmall->setpair(freeedit);
|
||||
freeedit->setpair(freeeditsmall);
|
||||
|
||||
|
||||
refresh();
|
||||
}
|
||||
|
||||
void EnvelopeUI::reinit() {
|
||||
if (env->Pfreemode!=0){
|
||||
int answer=fl_choice("Disable the free mode of the Envelope?","No","Yes",NULL);
|
||||
if (env->Pfreemode!=0) freemodebutton->value(1);
|
||||
else freemodebutton->value(0);
|
||||
if (answer==0) return;
|
||||
};
|
||||
|
||||
if (env->Pfreemode==0) env->Pfreemode=1;
|
||||
else env->Pfreemode=0;
|
||||
|
||||
hide();
|
||||
int winx=freemodeeditwindow->x();
|
||||
int winy=freemodeeditwindow->y();
|
||||
|
||||
freemodeeditwindow->hide();
|
||||
|
||||
envwindow->hide();
|
||||
Fl_Group *par=envwindow->parent();
|
||||
par->hide();
|
||||
|
||||
|
||||
refresh();
|
||||
envwindow->show();
|
||||
par->redraw();
|
||||
|
||||
par->show();
|
||||
show();
|
||||
freemodeeditwindow->position(winx,winy);
|
||||
freemodeeditwindow->show();
|
||||
|
||||
if (env->Pfreemode!=0) {
|
||||
freemodebutton->value(1);
|
||||
addpoint->show();
|
||||
deletepoint->show();
|
||||
forcedreleasecheck->show();
|
||||
}else{
|
||||
freemodebutton->value(0);
|
||||
addpoint->hide();
|
||||
deletepoint->hide();
|
||||
forcedreleasecheck->hide();
|
||||
};
|
||||
int answer=fl_choice("Disable the free mode of the Envelope?","No","Yes",NULL);
|
||||
if (env->Pfreemode!=0) freemodebutton->value(1);
|
||||
else freemodebutton->value(0);
|
||||
if (answer==0) return;
|
||||
};
|
||||
|
||||
if (env->Pfreemode==0) env->Pfreemode=1;
|
||||
else env->Pfreemode=0;
|
||||
|
||||
hide();
|
||||
int winx=freemodeeditwindow->x();
|
||||
int winy=freemodeeditwindow->y();
|
||||
|
||||
freemodeeditwindow->hide();
|
||||
|
||||
envwindow->hide();
|
||||
Fl_Group *par=envwindow->parent();
|
||||
par->hide();
|
||||
|
||||
|
||||
refresh();
|
||||
envwindow->show();
|
||||
par->redraw();
|
||||
|
||||
par->show();
|
||||
show();
|
||||
freemodeeditwindow->position(winx,winy);
|
||||
freemodeeditwindow->show();
|
||||
|
||||
if (env->Pfreemode!=0) {
|
||||
freemodebutton->value(1);
|
||||
addpoint->show();
|
||||
deletepoint->show();
|
||||
forcedreleasecheck->show();
|
||||
}else{
|
||||
freemodebutton->value(0);
|
||||
addpoint->hide();
|
||||
deletepoint->hide();
|
||||
forcedreleasecheck->hide();
|
||||
};
|
||||
}
|
||||
|
||||
void EnvelopeUI::refresh() {
|
||||
freemodebutton->value(env->Pfreemode);
|
||||
|
||||
sustaincounter->value(env->Penvsustain);
|
||||
if (env->Pfreemode==0) sustaincounter->hide();
|
||||
else sustaincounter->show();
|
||||
sustaincounter->maximum(env->Penvpoints-2);
|
||||
|
||||
envstretchdial->value(env->Penvstretch);
|
||||
if (env->Pfreemode==0) envstretchdial->hide();
|
||||
else envstretchdial->show();
|
||||
|
||||
linearenvelopecheck->value(env->Plinearenvelope);
|
||||
if ((env->Pfreemode==0)||(env->Envmode>2)) linearenvelopecheck->hide();
|
||||
else linearenvelopecheck->show();
|
||||
|
||||
forcedreleasecheck->value(env->Pforcedrelease);
|
||||
if (env->Pfreemode==0) forcedreleasecheck->hide();
|
||||
|
||||
freeedit->redraw();
|
||||
|
||||
|
||||
if (env->Pfreemode==0){
|
||||
switch(env->Envmode){
|
||||
case(1):
|
||||
case(2):
|
||||
e1adt->value(env->PA_dt);
|
||||
e1ddt->value(env->PD_dt);
|
||||
e1sval->value(env->PS_val);
|
||||
e1rdt->value(env->PR_dt);
|
||||
e1envstretch->value(env->Penvstretch);
|
||||
e1linearenvelope->value(env->Plinearenvelope);
|
||||
e1forcedrelease->value(env->Pforcedrelease);
|
||||
break;
|
||||
case(3):
|
||||
e2aval->value(env->PA_val);
|
||||
e2adt->value(env->PA_dt);
|
||||
e2rdt->value(env->PR_dt);
|
||||
e2rval->value(env->PR_val);
|
||||
e2envstretch->value(env->Penvstretch);
|
||||
e2forcedrelease->value(env->Pforcedrelease);
|
||||
break;
|
||||
case(4):
|
||||
e3aval->value(env->PA_val);
|
||||
e3adt->value(env->PA_dt);
|
||||
e3dval->value(env->PD_val);
|
||||
e3ddt->value(env->PD_dt);
|
||||
e3rdt->value(env->PR_dt);
|
||||
e3rval->value(env->PR_val);
|
||||
e3envstretch->value(env->Penvstretch);
|
||||
e3forcedrelease->value(env->Pforcedrelease);
|
||||
break;
|
||||
case(5):
|
||||
e4aval->value(env->PA_val);
|
||||
e4adt->value(env->PA_dt);
|
||||
e4rdt->value(env->PR_dt);
|
||||
e4rval->value(env->PR_val);
|
||||
e4envstretch->value(env->Penvstretch);
|
||||
e4forcedrelease->value(env->Pforcedrelease);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
}else{
|
||||
envfree->redraw();
|
||||
};
|
||||
|
||||
|
||||
envADSR->hide();
|
||||
envASR->hide();
|
||||
envADSRfilter->hide();
|
||||
envASRbw->hide();
|
||||
envfree->hide();
|
||||
|
||||
if (env->Pfreemode==0){
|
||||
switch(env->Envmode){
|
||||
case(1):
|
||||
case(2):
|
||||
envwindow=envADSR;
|
||||
break;
|
||||
case(3):
|
||||
envwindow=envASR;
|
||||
break;
|
||||
case(4):
|
||||
envwindow=envADSRfilter;
|
||||
break;
|
||||
case(5):
|
||||
envwindow=envASRbw;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
}else{
|
||||
envwindow=envfree;
|
||||
};
|
||||
|
||||
envwindow->resize(this->x(),this->y(),this->w(),this->h());
|
||||
|
||||
envwindow->show();
|
||||
|
||||
sustaincounter->value(env->Penvsustain);
|
||||
if (env->Pfreemode==0) sustaincounter->hide();
|
||||
else sustaincounter->show();
|
||||
sustaincounter->maximum(env->Penvpoints-2);
|
||||
|
||||
envstretchdial->value(env->Penvstretch);
|
||||
if (env->Pfreemode==0) envstretchdial->hide();
|
||||
else envstretchdial->show();
|
||||
|
||||
linearenvelopecheck->value(env->Plinearenvelope);
|
||||
if ((env->Pfreemode==0)||(env->Envmode>2)) linearenvelopecheck->hide();
|
||||
else linearenvelopecheck->show();
|
||||
|
||||
forcedreleasecheck->value(env->Pforcedrelease);
|
||||
if (env->Pfreemode==0) forcedreleasecheck->hide();
|
||||
|
||||
freeedit->redraw();
|
||||
|
||||
|
||||
if (env->Pfreemode==0){
|
||||
switch(env->Envmode){
|
||||
case(1):
|
||||
case(2):
|
||||
e1adt->value(env->PA_dt);
|
||||
e1ddt->value(env->PD_dt);
|
||||
e1sval->value(env->PS_val);
|
||||
e1rdt->value(env->PR_dt);
|
||||
e1envstretch->value(env->Penvstretch);
|
||||
e1linearenvelope->value(env->Plinearenvelope);
|
||||
e1forcedrelease->value(env->Pforcedrelease);
|
||||
break;
|
||||
case(3):
|
||||
e2aval->value(env->PA_val);
|
||||
e2adt->value(env->PA_dt);
|
||||
e2rdt->value(env->PR_dt);
|
||||
e2rval->value(env->PR_val);
|
||||
e2envstretch->value(env->Penvstretch);
|
||||
e2forcedrelease->value(env->Pforcedrelease);
|
||||
break;
|
||||
case(4):
|
||||
e3aval->value(env->PA_val);
|
||||
e3adt->value(env->PA_dt);
|
||||
e3dval->value(env->PD_val);
|
||||
e3ddt->value(env->PD_dt);
|
||||
e3rdt->value(env->PR_dt);
|
||||
e3rval->value(env->PR_val);
|
||||
e3envstretch->value(env->Penvstretch);
|
||||
e3forcedrelease->value(env->Pforcedrelease);
|
||||
break;
|
||||
case(5):
|
||||
e4aval->value(env->PA_val);
|
||||
e4adt->value(env->PA_dt);
|
||||
e4rdt->value(env->PR_dt);
|
||||
e4rval->value(env->PR_val);
|
||||
e4envstretch->value(env->Penvstretch);
|
||||
e4forcedrelease->value(env->Pforcedrelease);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
}else{
|
||||
envfree->redraw();
|
||||
};
|
||||
|
||||
|
||||
envADSR->hide();
|
||||
envASR->hide();
|
||||
envADSRfilter->hide();
|
||||
envASRbw->hide();
|
||||
envfree->hide();
|
||||
|
||||
if (env->Pfreemode==0){
|
||||
switch(env->Envmode){
|
||||
case(1):
|
||||
case(2):
|
||||
envwindow=envADSR;
|
||||
break;
|
||||
case(3):
|
||||
envwindow=envASR;
|
||||
break;
|
||||
case(4):
|
||||
envwindow=envADSRfilter;
|
||||
break;
|
||||
case(5):
|
||||
envwindow=envASRbw;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
}else{
|
||||
envwindow=envfree;
|
||||
};
|
||||
|
||||
envwindow->resize(this->x(),this->y(),this->w(),this->h());
|
||||
|
||||
envwindow->show();
|
||||
}
|
||||
|
||||
@@ -6,107 +6,107 @@
|
||||
|
||||
FormantFilterGraph::FormantFilterGraph(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
|
||||
pars=NULL;
|
||||
nvowel=NULL;
|
||||
nformant=NULL;
|
||||
graphpoints=NULL;
|
||||
nvowel=NULL;
|
||||
nformant=NULL;
|
||||
graphpoints=NULL;
|
||||
}
|
||||
|
||||
void FormantFilterGraph::init(FilterParams *pars_,int *nvowel_,int *nformant_) {
|
||||
pars=pars_;
|
||||
nvowel=nvowel_;
|
||||
nformant=nformant_;
|
||||
oldx=-1;
|
||||
graphpoints=new REALTYPE [w()];
|
||||
nvowel=nvowel_;
|
||||
nformant=nformant_;
|
||||
oldx=-1;
|
||||
graphpoints=new REALTYPE [w()];
|
||||
}
|
||||
|
||||
void FormantFilterGraph::draw_freq_line(REALTYPE freq,int type) {
|
||||
REALTYPE freqx=pars->getfreqpos(freq);
|
||||
switch(type){
|
||||
case 0:fl_line_style(FL_SOLID);break;
|
||||
case 1:fl_line_style(FL_DOT);break;
|
||||
case 2:fl_line_style(FL_DASH);break;
|
||||
};
|
||||
|
||||
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(x()+(int) (freqx*w()),y(),
|
||||
x()+(int) (freqx*w()),y()+h());
|
||||
switch(type){
|
||||
case 0:fl_line_style(FL_SOLID);break;
|
||||
case 1:fl_line_style(FL_DOT);break;
|
||||
case 2:fl_line_style(FL_DASH);break;
|
||||
};
|
||||
|
||||
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(x()+(int) (freqx*w()),y(),
|
||||
x()+(int) (freqx*w()),y()+h());
|
||||
}
|
||||
|
||||
void FormantFilterGraph::draw() {
|
||||
int maxdB=30;
|
||||
int ox=x(),oy=y(),lx=w(),ly=h(),i,oiy;
|
||||
REALTYPE freqx;
|
||||
|
||||
fl_color(FL_BLACK);
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
|
||||
|
||||
//draw the lines
|
||||
fl_color(FL_GRAY);
|
||||
|
||||
fl_line_style(FL_SOLID);
|
||||
//fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
|
||||
|
||||
freqx=pars->getfreqpos(1000.0);
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(ox+(int) (freqx*lx),oy,
|
||||
ox+(int) (freqx*lx),oy+ly);
|
||||
|
||||
for (i=1;i<10;i++){
|
||||
if(i==1){
|
||||
draw_freq_line(i*100.0,0);
|
||||
draw_freq_line(i*1000.0,0);
|
||||
}else
|
||||
if (i==5){
|
||||
draw_freq_line(i*100.0,2);
|
||||
draw_freq_line(i*1000.0,2);
|
||||
}else{
|
||||
draw_freq_line(i*100.0,1);
|
||||
draw_freq_line(i*1000.0,1);
|
||||
};
|
||||
};
|
||||
|
||||
draw_freq_line(10000.0,0);
|
||||
draw_freq_line(20000.0,1);
|
||||
|
||||
fl_line_style(FL_DOT);
|
||||
int GY=10;if (ly<GY*3) GY=-1;
|
||||
for (i=1;i<GY;i++){
|
||||
int tmp=(int)(ly/(REALTYPE)GY*i);
|
||||
fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
|
||||
};
|
||||
|
||||
fl_color(FL_YELLOW);
|
||||
fl_font(FL_HELVETICA,10);
|
||||
if (*nformant<pars->Pnumformants){
|
||||
draw_freq_line(pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq),2);
|
||||
|
||||
//show some information (like current formant frequency,amplitude)
|
||||
char tmpstr[20];
|
||||
|
||||
snprintf(tmpstr,20,"%.2f kHz",pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq)*0.001);
|
||||
fl_draw(tmpstr,ox+1,oy+1,40,12,FL_ALIGN_LEFT,NULL,0);
|
||||
|
||||
snprintf(tmpstr,20,"%d dB",(int)( rap2dB(1e-9 + pars->getformantamp(pars->Pvowels[*nvowel].formants[*nformant].amp)) + pars->getgain() ));
|
||||
fl_draw(tmpstr,ox+1,oy+15,40,12,FL_ALIGN_LEFT,NULL,0);
|
||||
|
||||
};
|
||||
|
||||
//draw the data
|
||||
|
||||
fl_color(FL_RED);
|
||||
fl_line_style(FL_SOLID);
|
||||
|
||||
pars->formantfilterH(*nvowel,lx,graphpoints);
|
||||
|
||||
oiy=(int) ((graphpoints[0]/maxdB+1.0)*ly/2.0);
|
||||
for (i=1;i<lx;i++){
|
||||
int iy=(int) ((graphpoints[i]/maxdB+1.0)*ly/2.0);
|
||||
if ((iy>=0)&&(oiy>=0)&&(iy<ly)&&(oiy<lx))
|
||||
fl_line(ox+i-1,oy+ly-oiy,ox+i,oy+ly-iy);
|
||||
oiy=iy;
|
||||
};
|
||||
int ox=x(),oy=y(),lx=w(),ly=h(),i,oiy;
|
||||
REALTYPE freqx;
|
||||
|
||||
fl_color(FL_BLACK);
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
|
||||
|
||||
//draw the lines
|
||||
fl_color(FL_GRAY);
|
||||
|
||||
fl_line_style(FL_SOLID);
|
||||
//fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
|
||||
|
||||
freqx=pars->getfreqpos(1000.0);
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(ox+(int) (freqx*lx),oy,
|
||||
ox+(int) (freqx*lx),oy+ly);
|
||||
|
||||
for (i=1;i<10;i++){
|
||||
if(i==1){
|
||||
draw_freq_line(i*100.0,0);
|
||||
draw_freq_line(i*1000.0,0);
|
||||
}else
|
||||
if (i==5){
|
||||
draw_freq_line(i*100.0,2);
|
||||
draw_freq_line(i*1000.0,2);
|
||||
}else{
|
||||
draw_freq_line(i*100.0,1);
|
||||
draw_freq_line(i*1000.0,1);
|
||||
};
|
||||
};
|
||||
|
||||
draw_freq_line(10000.0,0);
|
||||
draw_freq_line(20000.0,1);
|
||||
|
||||
fl_line_style(FL_DOT);
|
||||
int GY=10;if (ly<GY*3) GY=-1;
|
||||
for (i=1;i<GY;i++){
|
||||
int tmp=(int)(ly/(REALTYPE)GY*i);
|
||||
fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
|
||||
};
|
||||
|
||||
fl_color(FL_YELLOW);
|
||||
fl_font(FL_HELVETICA,10);
|
||||
if (*nformant<pars->Pnumformants){
|
||||
draw_freq_line(pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq),2);
|
||||
|
||||
//show some information (like current formant frequency,amplitude)
|
||||
char tmpstr[20];
|
||||
|
||||
snprintf(tmpstr,20,"%.2f kHz",pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq)*0.001);
|
||||
fl_draw(tmpstr,ox+1,oy+1,40,12,FL_ALIGN_LEFT,NULL,0);
|
||||
|
||||
snprintf(tmpstr,20,"%d dB",(int)( rap2dB(1e-9 + pars->getformantamp(pars->Pvowels[*nvowel].formants[*nformant].amp)) + pars->getgain() ));
|
||||
fl_draw(tmpstr,ox+1,oy+15,40,12,FL_ALIGN_LEFT,NULL,0);
|
||||
|
||||
};
|
||||
|
||||
//draw the data
|
||||
|
||||
fl_color(FL_RED);
|
||||
fl_line_style(FL_SOLID);
|
||||
|
||||
pars->formantfilterH(*nvowel,lx,graphpoints);
|
||||
|
||||
oiy=(int) ((graphpoints[0]/maxdB+1.0)*ly/2.0);
|
||||
for (i=1;i<lx;i++){
|
||||
int iy=(int) ((graphpoints[i]/maxdB+1.0)*ly/2.0);
|
||||
if ((iy>=0)&&(oiy>=0)&&(iy<ly)&&(oiy<lx))
|
||||
fl_line(ox+i-1,oy+ly-oiy,ox+i,oy+ly-iy);
|
||||
oiy=iy;
|
||||
};
|
||||
}
|
||||
|
||||
FormantFilterGraph::~FormantFilterGraph() {
|
||||
@@ -409,17 +409,17 @@ void FilterUI::cb_P1(Fl_Button* o, void* v) {
|
||||
|
||||
FilterUI::FilterUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
|
||||
pars=NULL;
|
||||
velsnsamp=NULL;
|
||||
velsns=NULL;
|
||||
nvowel=0;nformant=0;nseqpos=0;
|
||||
velsnsamp=NULL;
|
||||
velsns=NULL;
|
||||
nvowel=0;nformant=0;nseqpos=0;
|
||||
}
|
||||
|
||||
FilterUI::~FilterUI() {
|
||||
filterui->hide();
|
||||
formantparswindow->hide();
|
||||
hide();
|
||||
//delete (filterui);
|
||||
delete (formantparswindow);
|
||||
formantparswindow->hide();
|
||||
hide();
|
||||
//delete (filterui);
|
||||
delete (formantparswindow);
|
||||
}
|
||||
|
||||
Fl_Group* FilterUI::make_window() {
|
||||
@@ -875,113 +875,113 @@ Fl_Double_Window* FilterUI::make_formant_window() {
|
||||
|
||||
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 (nformant<pars->Pnumformants) formantparsgroup->activate();
|
||||
else formantparsgroup->deactivate();
|
||||
|
||||
if (nseqpos<pars->Psequencesize) vowel_counter->activate();
|
||||
else vowel_counter->deactivate();
|
||||
|
||||
|
||||
vowel_counter->value(pars->Psequence[nseqpos].nvowel);
|
||||
formant_q_dial->value(pars->Pvowels[nvowel].formants[nformant].q);
|
||||
formant_amp_dial->value(pars->Pvowels[nvowel].formants[nformant].amp);
|
||||
if (nformant<pars->Pnumformants) formantparsgroup->activate();
|
||||
else formantparsgroup->deactivate();
|
||||
|
||||
if (nseqpos<pars->Psequencesize) vowel_counter->activate();
|
||||
else vowel_counter->deactivate();
|
||||
|
||||
|
||||
vowel_counter->value(pars->Psequence[nseqpos].nvowel);
|
||||
}
|
||||
|
||||
void FilterUI::refresh() {
|
||||
update_formant_window();
|
||||
formantfiltergraph->redraw();
|
||||
|
||||
if (pars->Pcategory==0) svfiltertypechoice->value(pars->Ptype);
|
||||
if (pars->Pcategory==2) analogfiltertypechoice->value(pars->Ptype);
|
||||
|
||||
filtertype->value(pars->Pcategory);
|
||||
|
||||
cfreqdial->value(pars->Pfreq);
|
||||
qdial->value(pars->Pq);
|
||||
|
||||
freqtrdial->value(pars->Pfreqtrack);
|
||||
gaindial->value(pars->Pgain);
|
||||
|
||||
stcounter->value(pars->Pstages);
|
||||
|
||||
int categ=pars->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();
|
||||
formantfiltergraph->redraw();
|
||||
|
||||
if (pars->Pcategory==0) svfiltertypechoice->value(pars->Ptype);
|
||||
if (pars->Pcategory==2) analogfiltertypechoice->value(pars->Ptype);
|
||||
|
||||
filtertype->value(pars->Pcategory);
|
||||
|
||||
cfreqdial->value(pars->Pfreq);
|
||||
qdial->value(pars->Pq);
|
||||
|
||||
freqtrdial->value(pars->Pfreqtrack);
|
||||
gaindial->value(pars->Pgain);
|
||||
|
||||
stcounter->value(pars->Pstages);
|
||||
|
||||
int categ=pars->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::init(FilterParams *filterpars_,unsigned char *velsnsamp_,unsigned char *velsns_) {
|
||||
pars=filterpars_;
|
||||
velsnsamp=velsnsamp_;
|
||||
velsns=velsns_;
|
||||
|
||||
make_window();
|
||||
end();
|
||||
make_formant_window();
|
||||
|
||||
|
||||
filterui->resize(this->x(),this->y(),this->w(),this->h());
|
||||
|
||||
|
||||
if (velsnsamp==NULL){
|
||||
vsnsadial->deactivate();
|
||||
vsnsadial->value(127);
|
||||
} else vsnsadial->value(*velsnsamp);
|
||||
|
||||
if (velsns==NULL){
|
||||
vsnsdial->deactivate();
|
||||
vsnsdial->value(127);
|
||||
} else vsnsdial->value(*velsns);
|
||||
|
||||
switchcategory(pars->Pcategory);
|
||||
|
||||
|
||||
formantparswindow->label(this->label());
|
||||
|
||||
update_formant_window();
|
||||
velsnsamp=velsnsamp_;
|
||||
velsns=velsns_;
|
||||
|
||||
make_window();
|
||||
end();
|
||||
make_formant_window();
|
||||
|
||||
|
||||
filterui->resize(this->x(),this->y(),this->w(),this->h());
|
||||
|
||||
|
||||
if (velsnsamp==NULL){
|
||||
vsnsadial->deactivate();
|
||||
vsnsadial->value(127);
|
||||
} else vsnsadial->value(*velsnsamp);
|
||||
|
||||
if (velsns==NULL){
|
||||
vsnsdial->deactivate();
|
||||
vsnsdial->value(127);
|
||||
} else vsnsdial->value(*velsns);
|
||||
|
||||
switchcategory(pars->Pcategory);
|
||||
|
||||
|
||||
formantparswindow->label(this->label());
|
||||
|
||||
update_formant_window();
|
||||
}
|
||||
|
||||
void FilterUI::switchcategory(int newcat) {
|
||||
if (pars->Pcategory!=newcat){
|
||||
pars->Pgain=64;
|
||||
gaindial->value(64);
|
||||
analogfiltertypechoice->value(0);
|
||||
analogfiltertypechoice->do_callback();
|
||||
svfiltertypechoice->value(0);
|
||||
svfiltertypechoice->do_callback();
|
||||
};
|
||||
pars->Pcategory=newcat;
|
||||
|
||||
refresh();
|
||||
pars->Pgain=64;
|
||||
gaindial->value(64);
|
||||
analogfiltertypechoice->value(0);
|
||||
analogfiltertypechoice->do_callback();
|
||||
svfiltertypechoice->value(0);
|
||||
svfiltertypechoice->do_callback();
|
||||
};
|
||||
pars->Pcategory=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);
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -98,8 +98,8 @@ LFOUI::LFOUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,labe
|
||||
|
||||
LFOUI::~LFOUI() {
|
||||
lfoui->hide();
|
||||
hide();
|
||||
//delete (lfoui);
|
||||
hide();
|
||||
//delete (lfoui);
|
||||
}
|
||||
|
||||
Fl_Group* LFOUI::make_window() {
|
||||
@@ -265,25 +265,25 @@ Fl_Group* LFOUI::make_window() {
|
||||
|
||||
void LFOUI::refresh() {
|
||||
freq->value(pars->Pfreq);
|
||||
intensity->value(pars->Pintensity);
|
||||
startphase->value(pars->Pstartphase);
|
||||
delay->value(pars->Pdelay);
|
||||
continous->value(pars->Pcontinous);
|
||||
stretch->value(pars->Pstretch);
|
||||
randomness->value(pars->Prandomness);
|
||||
freqrand->value(pars->Pfreqrand);
|
||||
LFOtype->value(pars->PLFOtype);
|
||||
intensity->value(pars->Pintensity);
|
||||
startphase->value(pars->Pstartphase);
|
||||
delay->value(pars->Pdelay);
|
||||
continous->value(pars->Pcontinous);
|
||||
stretch->value(pars->Pstretch);
|
||||
randomness->value(pars->Prandomness);
|
||||
freqrand->value(pars->Pfreqrand);
|
||||
LFOtype->value(pars->PLFOtype);
|
||||
}
|
||||
|
||||
void LFOUI::init(LFOParams *lfopars_) {
|
||||
pars=lfopars_;
|
||||
|
||||
make_window();
|
||||
end();
|
||||
|
||||
refresh();
|
||||
|
||||
lfoui->resize(this->x(),this->y(),this->w(),this->h());
|
||||
|
||||
lfoparamswindow->label(this->label());
|
||||
|
||||
make_window();
|
||||
end();
|
||||
|
||||
refresh();
|
||||
|
||||
lfoui->resize(this->x(),this->y(),this->w(),this->h());
|
||||
|
||||
lfoparamswindow->label(this->label());
|
||||
}
|
||||
|
||||
@@ -6,167 +6,167 @@
|
||||
|
||||
VUMeter::VUMeter(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
|
||||
master=NULL;
|
||||
npart=-1;
|
||||
npart=-1;
|
||||
}
|
||||
|
||||
void VUMeter::init(Master *master_,int part_) {
|
||||
//the "part_" parameters sets the part (if it is >=0), else it sets the master
|
||||
master=master_;
|
||||
label(NULL);
|
||||
npart=part_;
|
||||
olddbl=0.0;
|
||||
olddbr=0.0;
|
||||
oldrmsdbl=0.0;
|
||||
oldrmsdbr=0.0;
|
||||
master=master_;
|
||||
label(NULL);
|
||||
npart=part_;
|
||||
olddbl=0.0;
|
||||
olddbr=0.0;
|
||||
oldrmsdbl=0.0;
|
||||
oldrmsdbr=0.0;
|
||||
}
|
||||
|
||||
void VUMeter::draw_master() {
|
||||
#define MIN_DB (-48)
|
||||
|
||||
int ox=x(); int oy=y(); int lx=w(); int ly=h();
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
REALTYPE dbl=rap2dB(master->vuoutpeakl);
|
||||
REALTYPE dbr=rap2dB(master->vuoutpeakr);
|
||||
REALTYPE rmsdbl=rap2dB(master->vurmspeakl);
|
||||
REALTYPE rmsdbr=rap2dB(master->vurmspeakr);
|
||||
REALTYPE maxdbl=rap2dB(master->vumaxoutpeakl);
|
||||
REALTYPE maxdbr=rap2dB(master->vumaxoutpeakr);
|
||||
int clipped=master->vuclipped;
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
dbl=(MIN_DB-dbl)/MIN_DB;
|
||||
if (dbl<0.0) dbl=0.0;
|
||||
else if (dbl>1.0)dbl=1.0;
|
||||
|
||||
dbr=(MIN_DB-dbr)/MIN_DB;
|
||||
if (dbr<0.0) dbr=0.0;
|
||||
else if (dbr>1.0) dbr=1.0;
|
||||
|
||||
dbl=dbl*0.4+olddbl*0.6;
|
||||
dbr=dbr*0.4+olddbr*0.6;
|
||||
|
||||
olddbl=dbl;
|
||||
olddbr=dbr;
|
||||
|
||||
#define VULENX (lx-35)
|
||||
#define VULENY (ly/2-3)
|
||||
|
||||
dbl*=VULENX;dbr*=VULENX;
|
||||
|
||||
int idbl=(int) dbl;
|
||||
int idbr=(int) dbr;
|
||||
|
||||
//compute RMS - start
|
||||
rmsdbl=(MIN_DB-rmsdbl)/MIN_DB;
|
||||
if (rmsdbl<0.0) rmsdbl=0.0;
|
||||
else if (rmsdbl>1.0) rmsdbl=1.0;
|
||||
|
||||
rmsdbr=(MIN_DB-rmsdbr)/MIN_DB;
|
||||
if (rmsdbr<0.0) rmsdbr=0.0;
|
||||
else if (rmsdbr>1.0) rmsdbr=1.0;
|
||||
|
||||
rmsdbl=rmsdbl*0.4+oldrmsdbl*0.6;
|
||||
rmsdbr=rmsdbr*0.4+oldrmsdbr*0.6;
|
||||
|
||||
oldrmsdbl=rmsdbl;
|
||||
oldrmsdbr=rmsdbr;
|
||||
|
||||
|
||||
rmsdbl*=VULENX;rmsdbr*=VULENX;
|
||||
|
||||
int irmsdbl=(int) rmsdbl;
|
||||
int irmsdbr=(int) rmsdbr;
|
||||
//compute RMS - end
|
||||
|
||||
|
||||
|
||||
//draw the vu-meter lines
|
||||
//db
|
||||
fl_rectf(ox,oy,idbr,VULENY,0,200,255);
|
||||
fl_rectf(ox,oy+ly/2,idbl,VULENY,0,200,255);
|
||||
//black
|
||||
fl_rectf(ox+idbr,oy,VULENX-idbr,VULENY,0,0,0);
|
||||
fl_rectf(ox+idbl,oy+ly/2,VULENX-idbl,VULENY,0,0,0);
|
||||
|
||||
//draw the scales
|
||||
REALTYPE tmp=VULENX*1.0/MIN_DB;
|
||||
for (int i=1;i<1-MIN_DB;i++){
|
||||
int tx=VULENX+(int) (tmp*i);
|
||||
fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,160,200);
|
||||
if (i%5==0) fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,230,240);
|
||||
if (i%10==0) fl_rectf(ox+tx-1,oy,2,VULENY+ly/2,0,225,255);
|
||||
};
|
||||
|
||||
//rms
|
||||
if (irmsdbr>2) fl_rectf(ox+irmsdbr-1,oy,3,VULENY,255,255,0);
|
||||
if (irmsdbl>2) fl_rectf(ox+irmsdbl-1,oy+ly/2,3,VULENY,255,255,0);
|
||||
|
||||
|
||||
//draw the red box if clipping has occured
|
||||
if (clipped==0) fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,0,0,10);
|
||||
else fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,250,10,10);
|
||||
|
||||
//draw the maxdB
|
||||
fl_font(FL_HELVETICA|FL_BOLD,10);
|
||||
fl_color(255,255,255);
|
||||
char tmpstr[10];
|
||||
if ((maxdbl>MIN_DB-20)){
|
||||
snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbr);
|
||||
fl_draw(tmpstr,ox+VULENX+1,oy+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0);
|
||||
};
|
||||
if ((maxdbr>MIN_DB-20)){
|
||||
snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbl);
|
||||
fl_draw(tmpstr,ox+VULENX+1,oy+ly/2+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0);
|
||||
};
|
||||
|
||||
int ox=x(); int oy=y(); int lx=w(); int ly=h();
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
REALTYPE dbl=rap2dB(master->vuoutpeakl);
|
||||
REALTYPE dbr=rap2dB(master->vuoutpeakr);
|
||||
REALTYPE rmsdbl=rap2dB(master->vurmspeakl);
|
||||
REALTYPE rmsdbr=rap2dB(master->vurmspeakr);
|
||||
REALTYPE maxdbl=rap2dB(master->vumaxoutpeakl);
|
||||
REALTYPE maxdbr=rap2dB(master->vumaxoutpeakr);
|
||||
int clipped=master->vuclipped;
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
dbl=(MIN_DB-dbl)/MIN_DB;
|
||||
if (dbl<0.0) dbl=0.0;
|
||||
else if (dbl>1.0)dbl=1.0;
|
||||
|
||||
dbr=(MIN_DB-dbr)/MIN_DB;
|
||||
if (dbr<0.0) dbr=0.0;
|
||||
else if (dbr>1.0) dbr=1.0;
|
||||
|
||||
dbl=dbl*0.4+olddbl*0.6;
|
||||
dbr=dbr*0.4+olddbr*0.6;
|
||||
|
||||
olddbl=dbl;
|
||||
olddbr=dbr;
|
||||
|
||||
#define VULENX (lx-35)
|
||||
#define VULENY (ly/2-3)
|
||||
|
||||
dbl*=VULENX;dbr*=VULENX;
|
||||
|
||||
int idbl=(int) dbl;
|
||||
int idbr=(int) dbr;
|
||||
|
||||
//compute RMS - start
|
||||
rmsdbl=(MIN_DB-rmsdbl)/MIN_DB;
|
||||
if (rmsdbl<0.0) rmsdbl=0.0;
|
||||
else if (rmsdbl>1.0) rmsdbl=1.0;
|
||||
|
||||
rmsdbr=(MIN_DB-rmsdbr)/MIN_DB;
|
||||
if (rmsdbr<0.0) rmsdbr=0.0;
|
||||
else if (rmsdbr>1.0) rmsdbr=1.0;
|
||||
|
||||
rmsdbl=rmsdbl*0.4+oldrmsdbl*0.6;
|
||||
rmsdbr=rmsdbr*0.4+oldrmsdbr*0.6;
|
||||
|
||||
oldrmsdbl=rmsdbl;
|
||||
oldrmsdbr=rmsdbr;
|
||||
|
||||
|
||||
rmsdbl*=VULENX;rmsdbr*=VULENX;
|
||||
|
||||
int irmsdbl=(int) rmsdbl;
|
||||
int irmsdbr=(int) rmsdbr;
|
||||
//compute RMS - end
|
||||
|
||||
|
||||
|
||||
//draw the vu-meter lines
|
||||
//db
|
||||
fl_rectf(ox,oy,idbr,VULENY,0,200,255);
|
||||
fl_rectf(ox,oy+ly/2,idbl,VULENY,0,200,255);
|
||||
//black
|
||||
fl_rectf(ox+idbr,oy,VULENX-idbr,VULENY,0,0,0);
|
||||
fl_rectf(ox+idbl,oy+ly/2,VULENX-idbl,VULENY,0,0,0);
|
||||
|
||||
//draw the scales
|
||||
REALTYPE tmp=VULENX*1.0/MIN_DB;
|
||||
for (int i=1;i<1-MIN_DB;i++){
|
||||
int tx=VULENX+(int) (tmp*i);
|
||||
fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,160,200);
|
||||
if (i%5==0) fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,230,240);
|
||||
if (i%10==0) fl_rectf(ox+tx-1,oy,2,VULENY+ly/2,0,225,255);
|
||||
};
|
||||
|
||||
//rms
|
||||
if (irmsdbr>2) fl_rectf(ox+irmsdbr-1,oy,3,VULENY,255,255,0);
|
||||
if (irmsdbl>2) fl_rectf(ox+irmsdbl-1,oy+ly/2,3,VULENY,255,255,0);
|
||||
|
||||
|
||||
//draw the red box if clipping has occured
|
||||
if (clipped==0) fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,0,0,10);
|
||||
else fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,250,10,10);
|
||||
|
||||
//draw the maxdB
|
||||
fl_font(FL_HELVETICA|FL_BOLD,10);
|
||||
fl_color(255,255,255);
|
||||
char tmpstr[10];
|
||||
if ((maxdbl>MIN_DB-20)){
|
||||
snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbr);
|
||||
fl_draw(tmpstr,ox+VULENX+1,oy+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0);
|
||||
};
|
||||
if ((maxdbr>MIN_DB-20)){
|
||||
snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbl);
|
||||
fl_draw(tmpstr,ox+VULENX+1,oy+ly/2+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0);
|
||||
};
|
||||
}
|
||||
|
||||
void VUMeter::draw_part() {
|
||||
#define MIN_DB (-48)
|
||||
int ox=x(); int oy=y(); int lx=w(); int ly=h();
|
||||
|
||||
if (!active_r()){
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
int fakedb=master->fakepeakpart[npart];
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
fl_rectf(ox,oy,lx,ly,140,140,140);
|
||||
if (fakedb>0){
|
||||
fakedb=(int)(fakedb/255.0*ly)+4;
|
||||
fl_rectf(ox+2,oy+ly-fakedb,lx-4,fakedb,0,0,0);
|
||||
int ox=x(); int oy=y(); int lx=w(); int ly=h();
|
||||
|
||||
if (!active_r()){
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
int fakedb=master->fakepeakpart[npart];
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
fl_rectf(ox,oy,lx,ly,140,140,140);
|
||||
if (fakedb>0){
|
||||
fakedb=(int)(fakedb/255.0*ly)+4;
|
||||
fl_rectf(ox+2,oy+ly-fakedb,lx-4,fakedb,0,0,0);
|
||||
};
|
||||
|
||||
return;
|
||||
};
|
||||
|
||||
return;
|
||||
};
|
||||
|
||||
//draw the vu lines
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
REALTYPE db=rap2dB(master->vuoutpeakpart[npart]);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
db=(MIN_DB-db)/MIN_DB;
|
||||
if (db<0.0) db=0.0;
|
||||
else if (db>1.0) db=1.0;
|
||||
|
||||
db*=ly-2;
|
||||
|
||||
int idb=(int) db;
|
||||
|
||||
fl_rectf(ox,oy+ly-idb,lx,idb,0,200,255);
|
||||
fl_rectf(ox,oy,lx,ly-idb,0,0,0);
|
||||
|
||||
|
||||
//draw the scales
|
||||
REALTYPE tmp=ly*1.0/MIN_DB;
|
||||
for (int i=1;i<1-MIN_DB;i++){
|
||||
int ty=ly+(int) (tmp*i);
|
||||
if (i%5==0) fl_rectf(ox,oy+ly-ty,lx,1,0,160,200);
|
||||
if (i%10==0) fl_rectf(ox,oy+ly-ty,lx,1,0,230,240);
|
||||
};
|
||||
//draw the vu lines
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
REALTYPE db=rap2dB(master->vuoutpeakpart[npart]);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
db=(MIN_DB-db)/MIN_DB;
|
||||
if (db<0.0) db=0.0;
|
||||
else if (db>1.0) db=1.0;
|
||||
|
||||
db*=ly-2;
|
||||
|
||||
int idb=(int) db;
|
||||
|
||||
fl_rectf(ox,oy+ly-idb,lx,idb,0,200,255);
|
||||
fl_rectf(ox,oy,lx,ly-idb,0,0,0);
|
||||
|
||||
|
||||
//draw the scales
|
||||
REALTYPE tmp=ly*1.0/MIN_DB;
|
||||
for (int i=1;i<1-MIN_DB;i++){
|
||||
int ty=ly+(int) (tmp*i);
|
||||
if (i%5==0) fl_rectf(ox,oy+ly-ty,lx,1,0,160,200);
|
||||
if (i%10==0) fl_rectf(ox,oy+ly-ty,lx,1,0,230,240);
|
||||
};
|
||||
}
|
||||
|
||||
void VUMeter::draw() {
|
||||
if (npart>=0) draw_part();
|
||||
else draw_master();
|
||||
else draw_master();
|
||||
}
|
||||
|
||||
void VUMeter::tickdraw(VUMeter *o) {
|
||||
@@ -175,47 +175,47 @@ void VUMeter::tickdraw(VUMeter *o) {
|
||||
|
||||
void VUMeter::tick(void *v) {
|
||||
tickdraw((VUMeter *) v);
|
||||
Fl::add_timeout(1.0/25.0,tick,v);//25 fps
|
||||
Fl::add_timeout(1.0/25.0,tick,v);//25 fps
|
||||
}
|
||||
|
||||
int VUMeter::handle(int event) {
|
||||
switch(event){
|
||||
case FL_SHOW:
|
||||
tick(this);
|
||||
break;
|
||||
case FL_HIDE:
|
||||
Fl::remove_timeout(tick,this);
|
||||
break;
|
||||
case FL_PUSH:
|
||||
if (npart>=0) break;
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
master->vuresetpeaks();
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
break;
|
||||
};
|
||||
return(1);
|
||||
case FL_SHOW:
|
||||
tick(this);
|
||||
break;
|
||||
case FL_HIDE:
|
||||
Fl::remove_timeout(tick,this);
|
||||
break;
|
||||
case FL_PUSH:
|
||||
if (npart>=0) break;
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
master->vuresetpeaks();
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
break;
|
||||
};
|
||||
return(1);
|
||||
}
|
||||
|
||||
SysEffSend::SysEffSend(int x,int y, int w, int h, const char *label):WidgetPDial(x,y,w,h,label) {
|
||||
master=NULL;
|
||||
neff1=0;
|
||||
neff2=0;
|
||||
neff1=0;
|
||||
neff2=0;
|
||||
}
|
||||
|
||||
void SysEffSend::init(Master *master_,int neff1_,int neff2_) {
|
||||
neff1=neff1_;
|
||||
neff2=neff2_;
|
||||
master=master_;
|
||||
minimum(0);
|
||||
maximum(127);
|
||||
step(1);
|
||||
labelfont(1);
|
||||
labelsize(10);
|
||||
align(FL_ALIGN_TOP);
|
||||
|
||||
value(master->Psysefxsend[neff1][neff2]);
|
||||
char tmp[20];snprintf(tmp,20,"%d->%d",neff1+1,neff2+1);
|
||||
this->copy_label(tmp);
|
||||
neff2=neff2_;
|
||||
master=master_;
|
||||
minimum(0);
|
||||
maximum(127);
|
||||
step(1);
|
||||
labelfont(1);
|
||||
labelsize(10);
|
||||
align(FL_ALIGN_TOP);
|
||||
|
||||
value(master->Psysefxsend[neff1][neff2]);
|
||||
char tmp[20];snprintf(tmp,20,"%d->%d",neff1+1,neff2+1);
|
||||
this->copy_label(tmp);
|
||||
}
|
||||
|
||||
SysEffSend::~SysEffSend() {
|
||||
@@ -224,10 +224,10 @@ SysEffSend::~SysEffSend() {
|
||||
|
||||
int SysEffSend::handle(int event) {
|
||||
if ((event==FL_PUSH) || (event==FL_DRAG)){
|
||||
master->setPsysefxsend(neff1,neff2,(int) value());
|
||||
};
|
||||
|
||||
return(WidgetPDial::handle(event));
|
||||
master->setPsysefxsend(neff1,neff2,(int) value());
|
||||
};
|
||||
|
||||
return(WidgetPDial::handle(event));
|
||||
}
|
||||
|
||||
void Panellistitem::cb_partname_i(Fl_Button*, void*) {
|
||||
@@ -391,42 +391,42 @@ Fl_Group* Panellistitem::make_window() {
|
||||
|
||||
Panellistitem::Panellistitem(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
|
||||
npart=0;
|
||||
master=NULL;
|
||||
bankui=NULL;
|
||||
master=NULL;
|
||||
bankui=NULL;
|
||||
}
|
||||
|
||||
void Panellistitem::init(Master *master_, int npart_,BankUI *bankui_) {
|
||||
npart=npart_;
|
||||
master=master_;
|
||||
bankui=bankui_;
|
||||
|
||||
make_window();
|
||||
panellistitem->show();
|
||||
end();
|
||||
master=master_;
|
||||
bankui=bankui_;
|
||||
|
||||
make_window();
|
||||
panellistitem->show();
|
||||
end();
|
||||
}
|
||||
|
||||
void Panellistitem::refresh() {
|
||||
partenabled->value(master->part[npart]->Penabled);
|
||||
if (master->part[npart]->Penabled!=0) panellistitemgroup->activate();
|
||||
else panellistitemgroup->deactivate();
|
||||
|
||||
partvolume->value(master->part[npart]->Pvolume);
|
||||
partpanning->value(master->part[npart]->Ppanning);
|
||||
partrcv->value(master->part[npart]->Prcvchn);
|
||||
|
||||
partname->label((char *)master->part[npart]->Pname);
|
||||
|
||||
if ((int)bankui->cbwig->value()!=(npart+1))
|
||||
panellistitemgroup->color(fl_rgb_color(160,160,160));
|
||||
else
|
||||
panellistitemgroup->color(fl_rgb_color(50,190,240));
|
||||
|
||||
panellistitemgroup->redraw();
|
||||
if (master->part[npart]->Penabled!=0) panellistitemgroup->activate();
|
||||
else panellistitemgroup->deactivate();
|
||||
|
||||
partvolume->value(master->part[npart]->Pvolume);
|
||||
partpanning->value(master->part[npart]->Ppanning);
|
||||
partrcv->value(master->part[npart]->Prcvchn);
|
||||
|
||||
partname->label((char *)master->part[npart]->Pname);
|
||||
|
||||
if ((int)bankui->cbwig->value()!=(npart+1))
|
||||
panellistitemgroup->color(fl_rgb_color(160,160,160));
|
||||
else
|
||||
panellistitemgroup->color(fl_rgb_color(50,190,240));
|
||||
|
||||
panellistitemgroup->redraw();
|
||||
}
|
||||
|
||||
Panellistitem::~Panellistitem() {
|
||||
panellistitem->hide();
|
||||
//delete(panellistitem);
|
||||
//delete(panellistitem);
|
||||
}
|
||||
|
||||
void MasterUI::cb_masterwindow_i(Fl_Double_Window*, void*) {
|
||||
@@ -2295,210 +2295,210 @@ de to make simple the learning/using it.");
|
||||
|
||||
void MasterUI::updatesendwindow() {
|
||||
for (int neff1=0;neff1<NUM_SYS_EFX;neff1++)
|
||||
for (int neff2=neff1+1;neff2<NUM_SYS_EFX;neff2++)
|
||||
syseffsend[neff1][neff2]->value(master->Psysefxsend[neff1][neff2]);
|
||||
for (int neff2=neff1+1;neff2<NUM_SYS_EFX;neff2++)
|
||||
syseffsend[neff1][neff2]->value(master->Psysefxsend[neff1][neff2]);
|
||||
}
|
||||
|
||||
void MasterUI::updatepanel() {
|
||||
for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
|
||||
panellistitem[npart]->refresh();
|
||||
};
|
||||
panellistitem[npart]->refresh();
|
||||
};
|
||||
}
|
||||
|
||||
void MasterUI::setfilelabel(const char *filename) {
|
||||
if (filename!=NULL) snprintf(&masterwindowlabel[0],100,"%s - ZynAddSubFX",fl_filename_name(filename));
|
||||
else snprintf(&masterwindowlabel[0],100,"%s","ZynAddSubFX");
|
||||
masterwindowlabel[99]='\0';
|
||||
masterwindow->label(&masterwindowlabel[0]);
|
||||
simplemasterwindow->label(&masterwindowlabel[0]);
|
||||
else snprintf(&masterwindowlabel[0],100,"%s","ZynAddSubFX");
|
||||
masterwindowlabel[99]='\0';
|
||||
masterwindow->label(&masterwindowlabel[0]);
|
||||
simplemasterwindow->label(&masterwindowlabel[0]);
|
||||
}
|
||||
|
||||
MasterUI::MasterUI(Master *master_,int *exitprogram_) {
|
||||
master=master_;
|
||||
exitprogram=exitprogram_;
|
||||
ninseff=0;
|
||||
nsyseff=0;
|
||||
npart=0;
|
||||
|
||||
for (int i=0;i<NUM_SYS_EFX;i++)
|
||||
for (int j=0;j<NUM_SYS_EFX;j++)
|
||||
syseffsend[i][j]=NULL;
|
||||
|
||||
microtonalui=new MicrotonalUI(&master->microtonal);
|
||||
virkeyboard=new VirKeyboard(master);
|
||||
bankui=new BankUI(master,&npart);
|
||||
configui=new ConfigUI();
|
||||
sequi=new SeqUI(master);
|
||||
|
||||
make_window();
|
||||
#ifdef OS_WINDOWS
|
||||
masterwindow->icon((char *)LoadIcon(GetModuleHandle(NULL), "zynaddsubfx_icon"));
|
||||
#endif
|
||||
presetsui=new PresetsUI();
|
||||
setfilelabel(NULL);
|
||||
swapefftype=0;
|
||||
simplerefresh();
|
||||
exitprogram=exitprogram_;
|
||||
ninseff=0;
|
||||
nsyseff=0;
|
||||
npart=0;
|
||||
|
||||
for (int i=0;i<NUM_SYS_EFX;i++)
|
||||
for (int j=0;j<NUM_SYS_EFX;j++)
|
||||
syseffsend[i][j]=NULL;
|
||||
|
||||
microtonalui=new MicrotonalUI(&master->microtonal);
|
||||
virkeyboard=new VirKeyboard(master);
|
||||
bankui=new BankUI(master,&npart);
|
||||
configui=new ConfigUI();
|
||||
sequi=new SeqUI(master);
|
||||
|
||||
make_window();
|
||||
#ifdef OS_WINDOWS
|
||||
masterwindow->icon((char *)LoadIcon(GetModuleHandle(NULL), "zynaddsubfx_icon"));
|
||||
#endif
|
||||
presetsui=new PresetsUI();
|
||||
setfilelabel(NULL);
|
||||
swapefftype=0;
|
||||
simplerefresh();
|
||||
}
|
||||
|
||||
MasterUI::~MasterUI() {
|
||||
masterwindow->hide();
|
||||
delete masterwindow;
|
||||
simplemasterwindow->hide();
|
||||
delete simplemasterwindow;
|
||||
aboutwindow->hide();
|
||||
delete aboutwindow;
|
||||
syseffsendwindow->hide();
|
||||
delete syseffsendwindow;
|
||||
|
||||
delete virkeyboard;
|
||||
delete microtonalui;
|
||||
delete bankui;
|
||||
delete configui;
|
||||
delete sequi;
|
||||
|
||||
delete presetsui;
|
||||
delete panelwindow;
|
||||
delete selectuiwindow;
|
||||
delete masterwindow;
|
||||
simplemasterwindow->hide();
|
||||
delete simplemasterwindow;
|
||||
aboutwindow->hide();
|
||||
delete aboutwindow;
|
||||
syseffsendwindow->hide();
|
||||
delete syseffsendwindow;
|
||||
|
||||
delete virkeyboard;
|
||||
delete microtonalui;
|
||||
delete bankui;
|
||||
delete configui;
|
||||
delete sequi;
|
||||
|
||||
delete presetsui;
|
||||
delete panelwindow;
|
||||
delete selectuiwindow;
|
||||
}
|
||||
|
||||
void MasterUI::showUI() {
|
||||
switch (config.cfg.UserInterfaceMode){
|
||||
case 0:selectuiwindow->show();
|
||||
break;
|
||||
case 1:masterwindow->show();
|
||||
break;
|
||||
case 2:simplemasterwindow->show();
|
||||
break;
|
||||
};
|
||||
case 0:selectuiwindow->show();
|
||||
break;
|
||||
case 1:masterwindow->show();
|
||||
break;
|
||||
case 2:simplemasterwindow->show();
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
void MasterUI::simplerefresh() {
|
||||
partenabled->value(master->part[npart]->Penabled);
|
||||
if (master->part[npart]->Penabled!=0) simplelistitemgroup->activate();
|
||||
else simplelistitemgroup->deactivate();
|
||||
|
||||
partvolume->value(master->part[npart]->Pvolume);
|
||||
partpanning->value(master->part[npart]->Ppanning);
|
||||
partrcv->value(master->part[npart]->Prcvchn);
|
||||
|
||||
if (master->part[npart]->Pname[0]!=0) partname->label((char *)master->part[npart]->Pname);
|
||||
else partname->label("Click here to load a instrument");
|
||||
|
||||
simplelistitemgroup->redraw();
|
||||
simplepartportamento->value(master->part[npart]->ctl.portamento.portamento);
|
||||
simpleminkcounter->value(master->part[npart]->Pminkey);
|
||||
simplemaxkcounter->value(master->part[npart]->Pmaxkey);
|
||||
|
||||
simplepartkeyshiftcounter->value(master->part[npart]->Pkeyshift-64);
|
||||
simplesyseffsend->value(master->Psysefxvol[nsyseff][npart]);
|
||||
if (master->part[npart]->Penabled!=0) simplelistitemgroup->activate();
|
||||
else simplelistitemgroup->deactivate();
|
||||
|
||||
partvolume->value(master->part[npart]->Pvolume);
|
||||
partpanning->value(master->part[npart]->Ppanning);
|
||||
partrcv->value(master->part[npart]->Prcvchn);
|
||||
|
||||
if (master->part[npart]->Pname[0]!=0) partname->label((char *)master->part[npart]->Pname);
|
||||
else partname->label("Click here to load a instrument");
|
||||
|
||||
simplelistitemgroup->redraw();
|
||||
simplepartportamento->value(master->part[npart]->ctl.portamento.portamento);
|
||||
simpleminkcounter->value(master->part[npart]->Pminkey);
|
||||
simplemaxkcounter->value(master->part[npart]->Pmaxkey);
|
||||
|
||||
simplepartkeyshiftcounter->value(master->part[npart]->Pkeyshift-64);
|
||||
simplesyseffsend->value(master->Psysefxvol[nsyseff][npart]);
|
||||
}
|
||||
|
||||
void MasterUI::do_new_master() {
|
||||
if (fl_choice("Clear *ALL* the parameters ?","No","Yes",NULL)){
|
||||
delete microtonalui;
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
master->defaults();
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
npartcounter->value(1);
|
||||
refresh_master_ui();
|
||||
|
||||
};
|
||||
|
||||
updatepanel();
|
||||
delete microtonalui;
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
master->defaults();
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
npartcounter->value(1);
|
||||
refresh_master_ui();
|
||||
|
||||
};
|
||||
|
||||
updatepanel();
|
||||
}
|
||||
|
||||
void MasterUI::do_load_master(const char* file ) {
|
||||
const char *filename;
|
||||
if (file == NULL) {
|
||||
filename=fl_file_chooser("Open:","({*.xmz})",NULL,0);
|
||||
if (filename==NULL) return;
|
||||
}
|
||||
else {
|
||||
filename = file;
|
||||
}
|
||||
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
//clear all parameters
|
||||
master->defaults();
|
||||
|
||||
//load the data
|
||||
int result=master->loadXML(filename);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
master->applyparameters();
|
||||
|
||||
npartcounter->value(1);
|
||||
refresh_master_ui();
|
||||
updatepanel();
|
||||
if (result>=0) setfilelabel(filename);
|
||||
|
||||
|
||||
if (result==-10) fl_alert("Error: Could not load the file\nbecause it is not a zynaddsubfx parameters file.");
|
||||
else if (result<0) fl_alert("Error: Could not load the file.");
|
||||
if (file == NULL) {
|
||||
filename=fl_file_chooser("Open:","({*.xmz})",NULL,0);
|
||||
if (filename==NULL) return;
|
||||
}
|
||||
else {
|
||||
filename = file;
|
||||
}
|
||||
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
//clear all parameters
|
||||
master->defaults();
|
||||
|
||||
//load the data
|
||||
int result=master->loadXML(filename);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
master->applyparameters();
|
||||
|
||||
npartcounter->value(1);
|
||||
refresh_master_ui();
|
||||
updatepanel();
|
||||
if (result>=0) setfilelabel(filename);
|
||||
|
||||
|
||||
if (result==-10) fl_alert("Error: Could not load the file\nbecause it is not a zynaddsubfx parameters file.");
|
||||
else if (result<0) fl_alert("Error: Could not load the file.");
|
||||
}
|
||||
|
||||
void MasterUI::do_save_master(const char* file ) {
|
||||
const char *filename;
|
||||
char *tmp;
|
||||
int result=0;
|
||||
if (file == NULL) {
|
||||
tmp=fl_file_chooser("Save:","({*.xmz})",NULL,0);
|
||||
if (tmp==NULL) return;
|
||||
tmp=fl_filename_setext(tmp,".xmz");
|
||||
filename=tmp;
|
||||
result=fileexists(tmp);
|
||||
if (result) {
|
||||
result=0;
|
||||
if (!fl_choice("The file exists. Overwrite it?","No","Yes",NULL)) return;
|
||||
|
||||
char *tmp;
|
||||
int result=0;
|
||||
if (file == NULL) {
|
||||
tmp=fl_file_chooser("Save:","({*.xmz})",NULL,0);
|
||||
if (tmp==NULL) return;
|
||||
tmp=fl_filename_setext(tmp,".xmz");
|
||||
filename=tmp;
|
||||
result=fileexists(tmp);
|
||||
if (result) {
|
||||
result=0;
|
||||
if (!fl_choice("The file exists. Overwrite it?","No","Yes",NULL)) return;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
filename = file;
|
||||
}
|
||||
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
result=master->saveXML(filename);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
if (result<0) fl_alert("Error: Could not save the file.");
|
||||
else setfilelabel(filename);
|
||||
|
||||
updatepanel();
|
||||
else {
|
||||
filename = file;
|
||||
}
|
||||
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
result=master->saveXML(filename);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
if (result<0) fl_alert("Error: Could not save the file.");
|
||||
else setfilelabel(filename);
|
||||
|
||||
updatepanel();
|
||||
}
|
||||
|
||||
void MasterUI::refresh_master_ui() {
|
||||
ninseff=0;
|
||||
nsyseff=0;
|
||||
npart=0;
|
||||
|
||||
//the Master UI
|
||||
npartcounter->do_callback();
|
||||
syseffnocounter->do_callback();
|
||||
inseffnocounter->do_callback();
|
||||
masterkeyshiftcounter->value(master->Pkeyshift-64);
|
||||
mastervolumedial->value(master->Pvolume);
|
||||
globalfinedetuneslider->value(master->microtonal.Pglobalfinedetune);
|
||||
microtonalui=new MicrotonalUI(&master->microtonal);
|
||||
nrpnbutton->value(master->ctl.NRPN.receive);
|
||||
updatesendwindow();
|
||||
updatepanel();
|
||||
|
||||
//the simle MasterUI
|
||||
simplenpartcounter->value(1);
|
||||
simplesyseffnocounter->value(1);
|
||||
simpleinseffnocounter->value(1);
|
||||
simplenpartcounter->do_callback();
|
||||
simplesyseffnocounter->do_callback();
|
||||
simpleinseffnocounter->do_callback();
|
||||
simplemasterkeyshiftcounter->value(master->Pkeyshift-64);
|
||||
simplemastervolumedial->value(master->Pvolume);
|
||||
simpleglobalfinedetuneslider->value(master->microtonal.Pglobalfinedetune);
|
||||
virkeys->midich=master->part[npart]->Prcvchn;
|
||||
|
||||
simplerefresh();
|
||||
bankui->hide();
|
||||
nsyseff=0;
|
||||
npart=0;
|
||||
|
||||
//the Master UI
|
||||
npartcounter->do_callback();
|
||||
syseffnocounter->do_callback();
|
||||
inseffnocounter->do_callback();
|
||||
masterkeyshiftcounter->value(master->Pkeyshift-64);
|
||||
mastervolumedial->value(master->Pvolume);
|
||||
globalfinedetuneslider->value(master->microtonal.Pglobalfinedetune);
|
||||
microtonalui=new MicrotonalUI(&master->microtonal);
|
||||
nrpnbutton->value(master->ctl.NRPN.receive);
|
||||
updatesendwindow();
|
||||
updatepanel();
|
||||
|
||||
//the simle MasterUI
|
||||
simplenpartcounter->value(1);
|
||||
simplesyseffnocounter->value(1);
|
||||
simpleinseffnocounter->value(1);
|
||||
simplenpartcounter->do_callback();
|
||||
simplesyseffnocounter->do_callback();
|
||||
simpleinseffnocounter->do_callback();
|
||||
simplemasterkeyshiftcounter->value(master->Pkeyshift-64);
|
||||
simplemastervolumedial->value(master->Pvolume);
|
||||
simpleglobalfinedetuneslider->value(master->microtonal.Pglobalfinedetune);
|
||||
virkeys->midich=master->part[npart]->Prcvchn;
|
||||
|
||||
simplerefresh();
|
||||
bankui->hide();
|
||||
}
|
||||
|
||||
@@ -406,43 +406,43 @@ pings\"");
|
||||
|
||||
void MicrotonalUI::updateTuningsInput() {
|
||||
char *tmpbuf=new char[100];
|
||||
|
||||
tuningsinput->cut(0,tuningsinput->maximum_size());
|
||||
|
||||
for (int i=0;i<microtonal->getoctavesize();i++){
|
||||
if (i!=0) tuningsinput->insert("\n");
|
||||
microtonal->tuningtoline(i,tmpbuf,100);
|
||||
tuningsinput->insert(tmpbuf);
|
||||
};
|
||||
|
||||
delete []tmpbuf;
|
||||
|
||||
tuningsinput->cut(0,tuningsinput->maximum_size());
|
||||
|
||||
for (int i=0;i<microtonal->getoctavesize();i++){
|
||||
if (i!=0) tuningsinput->insert("\n");
|
||||
microtonal->tuningtoline(i,tmpbuf,100);
|
||||
tuningsinput->insert(tmpbuf);
|
||||
};
|
||||
|
||||
delete []tmpbuf;
|
||||
}
|
||||
|
||||
void MicrotonalUI::updateMappingInput() {
|
||||
char *tmpbuf=new char[100];
|
||||
|
||||
mappinginput->cut(0,tuningsinput->maximum_size());
|
||||
|
||||
for (int i=0;i<microtonal->Pmapsize;i++){
|
||||
if (i!=0) mappinginput->insert("\n");
|
||||
if ((microtonal->Pmapping[i])==-1)
|
||||
snprintf(tmpbuf,100,"x");
|
||||
else snprintf(tmpbuf,100,"%d",microtonal->Pmapping[i]);
|
||||
mappinginput->insert(tmpbuf);
|
||||
};
|
||||
|
||||
delete []tmpbuf;
|
||||
|
||||
mappinginput->cut(0,tuningsinput->maximum_size());
|
||||
|
||||
for (int i=0;i<microtonal->Pmapsize;i++){
|
||||
if (i!=0) mappinginput->insert("\n");
|
||||
if ((microtonal->Pmapping[i])==-1)
|
||||
snprintf(tmpbuf,100,"x");
|
||||
else snprintf(tmpbuf,100,"%d",microtonal->Pmapping[i]);
|
||||
mappinginput->insert(tmpbuf);
|
||||
};
|
||||
|
||||
delete []tmpbuf;
|
||||
}
|
||||
|
||||
MicrotonalUI::MicrotonalUI(Microtonal *microtonal_) {
|
||||
microtonal=microtonal_;
|
||||
|
||||
make_window();
|
||||
|
||||
make_window();
|
||||
}
|
||||
|
||||
MicrotonalUI::~MicrotonalUI() {
|
||||
microtonaluiwindow->hide();
|
||||
delete(microtonaluiwindow);
|
||||
delete(microtonaluiwindow);
|
||||
}
|
||||
|
||||
void MicrotonalUI::show() {
|
||||
@@ -451,13 +451,13 @@ void MicrotonalUI::show() {
|
||||
|
||||
void MicrotonalUI::apply() {
|
||||
int err=microtonal->texttotunings(tuningsinput->value());
|
||||
if (err>=0) fl_alert("Parse Error: The input may contain only numbers (like 232.59)\n or divisions (like 121/64).");
|
||||
if (err==-2) fl_alert("Parse Error: The input is empty.");
|
||||
octavesizeoutput->do_callback();
|
||||
|
||||
microtonal->texttomapping(mappinginput->value());
|
||||
mapsizeoutput->do_callback();
|
||||
anotecounter->do_callback();
|
||||
|
||||
//applybutton->color(FL_GRAY);
|
||||
if (err>=0) fl_alert("Parse Error: The input may contain only numbers (like 232.59)\n or divisions (like 121/64).");
|
||||
if (err==-2) fl_alert("Parse Error: The input is empty.");
|
||||
octavesizeoutput->do_callback();
|
||||
|
||||
microtonal->texttomapping(mappinginput->value());
|
||||
mapsizeoutput->do_callback();
|
||||
anotecounter->do_callback();
|
||||
|
||||
//applybutton->color(FL_GRAY);
|
||||
}
|
||||
|
||||
@@ -14,174 +14,175 @@ OscilSpectrum::OscilSpectrum(int x,int y, int w, int h, const char *label):Fl_Bo
|
||||
|
||||
void OscilSpectrum::init(OscilGen *oscil_,int oscbase_,Master *master_) {
|
||||
oscil=oscil_;
|
||||
oscbase=oscbase_;
|
||||
master=master_;
|
||||
oscbase=oscbase_;
|
||||
master=master_;
|
||||
}
|
||||
|
||||
void OscilSpectrum::draw() {
|
||||
int ox=x(),oy=y(),lx=w(),ly=h(),i;
|
||||
const int maxdb=60;//must be multiple of 10
|
||||
int GX=2;
|
||||
int n=lx/GX-1;
|
||||
if (n>OSCIL_SIZE/2) n=OSCIL_SIZE/2;
|
||||
|
||||
REALTYPE x;
|
||||
REALTYPE* spc=new REALTYPE[n];
|
||||
for (i=0;i<n;i++) spc[i]=0.0;
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
if (oscbase==0) oscil->getspectrum(n,spc,0);
|
||||
else oscil->getspectrum(n,spc,1);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
//normalize
|
||||
REALTYPE max=0;
|
||||
for (i=0;i<n;i++){
|
||||
x=fabs(spc[i]);
|
||||
if (max<x) max=x;
|
||||
}
|
||||
if (max<0.000001) max=1.0;
|
||||
max=max*1.05;
|
||||
|
||||
//draw
|
||||
|
||||
if (this->active_r()) fl_color(this->parent()->selection_color());
|
||||
else fl_color(this->parent()->color());
|
||||
fl_line_style(FL_DOT);
|
||||
|
||||
for (i=1;i<maxdb/10;i++){
|
||||
int ky=(int)((REALTYPE)i*ly*10.0/maxdb)/2;
|
||||
ky*=2;
|
||||
fl_line(ox,oy+ky-1,ox+lx-2,oy+ky-1);
|
||||
};
|
||||
|
||||
for (i=2;i<n;i++){
|
||||
int tmp=i*GX-2;
|
||||
if (i%10==1) fl_line_style(0);
|
||||
else fl_line_style(FL_DOT);
|
||||
fl_line(ox+tmp,oy+2,ox+tmp,oy+ly-2);
|
||||
}
|
||||
|
||||
if (this->active_r()) fl_color(this->parent()->labelcolor());
|
||||
else fl_color(this->parent()->color());
|
||||
fl_line_style(0);
|
||||
|
||||
//draws the spectrum
|
||||
for (i=0;i<n;i++){
|
||||
int tmp=i*GX+2;
|
||||
x=spc[i]/max;
|
||||
|
||||
if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
|
||||
else x=0;
|
||||
|
||||
int val=(int) ((ly-2)*x);
|
||||
if (val>0) fl_line(ox+tmp,oy+ly-2-val,ox+tmp,oy+ly-2);
|
||||
}
|
||||
delete [] spc;
|
||||
const int maxdb=60;//must be multiple of 10
|
||||
int GX=2;
|
||||
int n=lx/GX-1;
|
||||
if (n>OSCIL_SIZE/2) n=OSCIL_SIZE/2;
|
||||
|
||||
REALTYPE x;
|
||||
REALTYPE* spc=new REALTYPE[n];
|
||||
for (i=0;i<n;i++) spc[i]=0.0;
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
if (oscbase==0) oscil->getspectrum(n,spc,0);
|
||||
else oscil->getspectrum(n,spc,1);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
//normalize
|
||||
REALTYPE max=0;
|
||||
for (i=0;i<n;i++){
|
||||
x=fabs(spc[i]);
|
||||
if (max<x) max=x;
|
||||
}
|
||||
if (max<0.000001) max=1.0;
|
||||
max=max*1.05;
|
||||
|
||||
//draw
|
||||
|
||||
if (this->active_r()) fl_color(this->parent()->selection_color());
|
||||
else fl_color(this->parent()->color());
|
||||
fl_line_style(FL_DOT);
|
||||
|
||||
for (i=1;i<maxdb/10;i++){
|
||||
int ky=(int)((REALTYPE)i*ly*10.0/maxdb)/2;
|
||||
ky*=2;
|
||||
fl_line(ox,oy+ky-1,ox+lx-2,oy+ky-1);
|
||||
};
|
||||
|
||||
for (i=2;i<n;i++){
|
||||
int tmp=i*GX-2;
|
||||
if (i%10==1) fl_line_style(0);
|
||||
else fl_line_style(FL_DOT);
|
||||
fl_line(ox+tmp,oy+2,ox+tmp,oy+ly-2);
|
||||
}
|
||||
|
||||
if (this->active_r()) fl_color(this->parent()->labelcolor());
|
||||
else fl_color(this->parent()->color());
|
||||
fl_line_style(0);
|
||||
|
||||
//draws the spectrum
|
||||
for (i=0;i<n;i++){
|
||||
int tmp=i*GX+2;
|
||||
x=spc[i]/max;
|
||||
|
||||
if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
|
||||
else x=0;
|
||||
|
||||
int val=(int) ((ly-2)*x);
|
||||
if (val>0) fl_line(ox+tmp,oy+ly-2-val,ox+tmp,oy+ly-2);
|
||||
}
|
||||
delete [] spc;
|
||||
}
|
||||
|
||||
PSlider::PSlider(int x,int y, int w, int h, const char *label):Fl_Slider(x,y,w,h,label) {
|
||||
;
|
||||
}
|
||||
|
||||
int PSlider::handle(int event) {
|
||||
int X=x(),Y=y(),W=w(),H=h();
|
||||
|
||||
if ((!Fl::event_buttons())|| (event==0)||(Fl::event_shift()==0)) return(Fl_Slider::handle(event));
|
||||
|
||||
if (!Fl::event_inside(X,Y,W,H)) {
|
||||
if (event==FL_DRAG){
|
||||
Fl_Slider::handle(FL_RELEASE);
|
||||
Fl_Slider::handle(FL_LEAVE);
|
||||
deactivate();
|
||||
activate();
|
||||
return(1);
|
||||
}else{
|
||||
return(Fl_Slider::handle(event));
|
||||
};
|
||||
} else {
|
||||
//Fl_Slider::handle(FL_FOCUS);
|
||||
Fl_Slider::handle(FL_PUSH);
|
||||
};
|
||||
|
||||
return(1);
|
||||
|
||||
if ((!Fl::event_buttons())|| (event==0)||(Fl::event_shift()==0)) return(Fl_Slider::handle(event));
|
||||
|
||||
if (!Fl::event_inside(X,Y,W,H)) {
|
||||
if (event==FL_DRAG){
|
||||
Fl_Slider::handle(FL_RELEASE);
|
||||
Fl_Slider::handle(FL_LEAVE);
|
||||
deactivate();
|
||||
activate();
|
||||
return(1);
|
||||
}else{
|
||||
return(Fl_Slider::handle(event));
|
||||
};
|
||||
} else {
|
||||
//Fl_Slider::handle(FL_FOCUS);
|
||||
Fl_Slider::handle(FL_PUSH);
|
||||
};
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
Oscilloscope::Oscilloscope(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
|
||||
oscil=NULL;
|
||||
phase=64;
|
||||
oscbase=0;
|
||||
phase=64;
|
||||
oscbase=0;
|
||||
}
|
||||
|
||||
void Oscilloscope::init(OscilGen *oscil_,Master *master_) {
|
||||
oscil=oscil_;
|
||||
master=master_;
|
||||
master=master_;
|
||||
}
|
||||
|
||||
void Oscilloscope::init(OscilGen *oscil_,int oscbase_,Master *master_) {
|
||||
oscil=oscil_;
|
||||
oscbase=oscbase_;
|
||||
master=master_;
|
||||
oscbase=oscbase_;
|
||||
master=master_;
|
||||
}
|
||||
|
||||
void Oscilloscope::init(OscilGen *oscil_,int oscbase_,int phase_,Master *master_) {
|
||||
oscil=oscil_;
|
||||
oscbase=oscbase_;
|
||||
phase=phase_;
|
||||
master=master_;
|
||||
oscbase=oscbase_;
|
||||
phase=phase_;
|
||||
master=master_;
|
||||
}
|
||||
|
||||
void Oscilloscope::draw() {
|
||||
int ox=x(),oy=y(),lx=w(),ly=h()-1,i;
|
||||
REALTYPE smps[OSCIL_SIZE];
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
if (oscbase==0) oscil->get(smps,-1.0);
|
||||
else oscil->getcurrentbasefunction(smps);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
if (damage()!=1){
|
||||
fl_color(0,0,0);
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
};
|
||||
|
||||
//normalize
|
||||
REALTYPE max=0;
|
||||
for (i=0;i<OSCIL_SIZE;i++)
|
||||
if (max<fabs(smps[i])) max=fabs(smps[i]);
|
||||
//fprintf(stderr,"%.4f\n",max);
|
||||
if (max<0.00001) max=1.0;
|
||||
max=-max*1.05;
|
||||
|
||||
//draw
|
||||
fl_line_style(FL_DASH);
|
||||
if (this->active_r()) fl_color(this->parent()->labelcolor());
|
||||
else fl_color(this->parent()->color());
|
||||
int GX=16;if (lx<GX*3) GX=-1;
|
||||
for (i=1;i<GX;i++){
|
||||
int tmp=(int)(lx/(REALTYPE)GX*i);
|
||||
fl_line(ox+tmp,oy+2,ox+tmp,oy+ly-2);
|
||||
};
|
||||
int GY=8;if (ly<GY*3) GY=-1;
|
||||
for (i=1;i<GY;i++){
|
||||
int tmp=(int)(ly/(REALTYPE)GY*i);
|
||||
fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
|
||||
};
|
||||
|
||||
//draw the function
|
||||
fl_line_style(0,1);
|
||||
fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
|
||||
if (this->active_r()) fl_color(this->parent()->selection_color());
|
||||
else fl_color(this->parent()->labelcolor());
|
||||
int lw=1;
|
||||
//if ((lx<135)||(ly<135)) lw=1;
|
||||
fl_line_style(0,lw);
|
||||
int ph=(int)((phase-64.0)/128.0*OSCIL_SIZE+OSCIL_SIZE);
|
||||
for (i=1;i<lx;i++){
|
||||
int k1=(int)((REALTYPE)OSCIL_SIZE*(i-1)/lx)+ph;
|
||||
int k2=(int)((REALTYPE)OSCIL_SIZE*i/lx)+ph;
|
||||
REALTYPE y1=smps[k1%OSCIL_SIZE]/max;
|
||||
REALTYPE y2=smps[k2%OSCIL_SIZE]/max;
|
||||
fl_line(i-1+ox,(int)(y1*ly/2.0)+oy+ly/2,i+ox,(int)(y2*ly/2.0)+oy+ly/2);
|
||||
};
|
||||
REALTYPE smps[OSCIL_SIZE];
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
if (oscbase==0) oscil->get(smps,-1.0);
|
||||
else oscil->getcurrentbasefunction(smps);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
if (damage()!=1){
|
||||
fl_color(0,0,0);
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
};
|
||||
|
||||
//normalize
|
||||
REALTYPE max=0;
|
||||
for (i=0;i<OSCIL_SIZE;i++)
|
||||
if (max<fabs(smps[i])) max=fabs(smps[i]);
|
||||
//fprintf(stderr,"%.4f\n",max);
|
||||
if (max<0.00001) max=1.0;
|
||||
max=-max*1.05;
|
||||
|
||||
//draw
|
||||
fl_line_style(FL_DASH);
|
||||
if (this->active_r()) fl_color(this->parent()->labelcolor());
|
||||
else fl_color(this->parent()->color());
|
||||
int GX=16;if (lx<GX*3) GX=-1;
|
||||
for (i=1;i<GX;i++){
|
||||
int tmp=(int)(lx/(REALTYPE)GX*i);
|
||||
fl_line(ox+tmp,oy+2,ox+tmp,oy+ly-2);
|
||||
};
|
||||
int GY=8;if (ly<GY*3) GY=-1;
|
||||
for (i=1;i<GY;i++){
|
||||
int tmp=(int)(ly/(REALTYPE)GY*i);
|
||||
fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
|
||||
};
|
||||
|
||||
//draw the function
|
||||
fl_line_style(0,1);
|
||||
fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
|
||||
if (this->active_r()) fl_color(this->parent()->selection_color());
|
||||
else fl_color(this->parent()->labelcolor());
|
||||
int lw=1;
|
||||
//if ((lx<135)||(ly<135)) lw=1;
|
||||
fl_line_style(0,lw);
|
||||
int ph=(int)((phase-64.0)/128.0*OSCIL_SIZE+OSCIL_SIZE);
|
||||
for (i=1;i<lx;i++){
|
||||
int k1=(int)((REALTYPE)OSCIL_SIZE*(i-1)/lx)+ph;
|
||||
int k2=(int)((REALTYPE)OSCIL_SIZE*i/lx)+ph;
|
||||
REALTYPE y1=smps[k1%OSCIL_SIZE]/max;
|
||||
REALTYPE y2=smps[k2%OSCIL_SIZE]/max;
|
||||
fl_line(i-1+ox,(int)(y1*ly/2.0)+oy+ly/2,i+ox,(int)(y2*ly/2.0)+oy+ly/2);
|
||||
};
|
||||
}
|
||||
|
||||
void Oscilharmonic::cb_mag_i(PSlider* o, void*) {
|
||||
@@ -308,36 +309,36 @@ Fl_Group* Oscilharmonic::make_window() {
|
||||
|
||||
Oscilharmonic::Oscilharmonic(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
|
||||
n=0;
|
||||
oscil=NULL;
|
||||
display=NULL;
|
||||
applybutton=NULL;
|
||||
cbwidget=NULL;
|
||||
oscil=NULL;
|
||||
display=NULL;
|
||||
applybutton=NULL;
|
||||
cbwidget=NULL;
|
||||
}
|
||||
|
||||
void Oscilharmonic::init(OscilGen *oscil_,int n_,Fl_Group *display_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *applybutton_, Master *master_) {
|
||||
oscil=oscil_;
|
||||
n=n_;
|
||||
display=display_;
|
||||
master=master_;
|
||||
oldosc=oldosc_;
|
||||
cbwidget=cbwidget_;
|
||||
applybutton=applybutton_;
|
||||
make_window();
|
||||
end();
|
||||
harmonic->show();
|
||||
n=n_;
|
||||
display=display_;
|
||||
master=master_;
|
||||
oldosc=oldosc_;
|
||||
cbwidget=cbwidget_;
|
||||
applybutton=applybutton_;
|
||||
make_window();
|
||||
end();
|
||||
harmonic->show();
|
||||
}
|
||||
|
||||
void Oscilharmonic::refresh() {
|
||||
mag->value(127-oscil->Phmag[n]);
|
||||
phase->value(oscil->Phphase[n]);
|
||||
|
||||
if (oscil->Phmag[n]==64) mag->selection_color(0);
|
||||
else mag->selection_color(222);
|
||||
phase->value(oscil->Phphase[n]);
|
||||
|
||||
if (oscil->Phmag[n]==64) mag->selection_color(0);
|
||||
else mag->selection_color(222);
|
||||
}
|
||||
|
||||
Oscilharmonic::~Oscilharmonic() {
|
||||
harmonic->hide();
|
||||
//delete(harmonic);
|
||||
//delete(harmonic);
|
||||
}
|
||||
|
||||
void OscilEditor::cb_applybutton_i(Fl_Button*, void*) {
|
||||
@@ -1330,80 +1331,80 @@ Fl_Double_Window* OscilEditor::make_window() {
|
||||
|
||||
OscilEditor::OscilEditor(OscilGen *oscil_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *cbapplywidget_,Master *master_) {
|
||||
oscil=oscil_;
|
||||
oldosc=oldosc_;
|
||||
cbwidget=cbwidget_;
|
||||
cbapplywidget=cbapplywidget_;
|
||||
master=master_;
|
||||
|
||||
make_window();
|
||||
|
||||
refresh();
|
||||
osceditUI->show();
|
||||
oldosc=oldosc_;
|
||||
cbwidget=cbwidget_;
|
||||
cbapplywidget=cbapplywidget_;
|
||||
master=master_;
|
||||
|
||||
make_window();
|
||||
|
||||
refresh();
|
||||
osceditUI->show();
|
||||
}
|
||||
|
||||
OscilEditor::~OscilEditor() {
|
||||
osceditUI->hide();
|
||||
//for (int i=0;i<MAX_AD_HARMONICS;i++) delete (h[i]);
|
||||
delete (osceditUI);
|
||||
//for (int i=0;i<MAX_AD_HARMONICS;i++) delete (h[i]);
|
||||
delete (osceditUI);
|
||||
}
|
||||
|
||||
void OscilEditor::refresh() {
|
||||
magtype->value(oscil->Phmagtype);
|
||||
rndslider->value(oscil->Prand-64);
|
||||
|
||||
hrndtype->value(oscil->Pamprandtype);
|
||||
hrnddial->value(oscil->Pamprandpower);
|
||||
|
||||
bftype->value(oscil->Pcurrentbasefunc);
|
||||
bfparval->value(oscil->Pbasefuncpar-64);
|
||||
bfslider->value(oscil->Pbasefuncpar-64);
|
||||
|
||||
bfmodtype->value(oscil->Pbasefuncmodulation);
|
||||
bfmodpar1->value(oscil->Pbasefuncmodulationpar1);
|
||||
bfmodpar2->value(oscil->Pbasefuncmodulationpar2);
|
||||
bfmodpar3->value(oscil->Pbasefuncmodulationpar3);
|
||||
|
||||
wshbutton->value(oscil->Pwaveshapingfunction);
|
||||
wsparval->value(oscil->Pwaveshaping-64);
|
||||
wshpar->value(oscil->Pwaveshaping-64);
|
||||
|
||||
fltbutton->value(oscil->Pfiltertype);
|
||||
filtervalue1->value(oscil->Pfilterpar1);
|
||||
filtervalue2->value(oscil->Pfilterpar2);
|
||||
filterpref->value(oscil->Pfilterbeforews);
|
||||
|
||||
modtype->value(oscil->Pmodulation);
|
||||
modpar1->value(oscil->Pmodulationpar1);
|
||||
modpar2->value(oscil->Pmodulationpar2);
|
||||
modpar3->value(oscil->Pmodulationpar3);
|
||||
|
||||
sabutton->value(oscil->Psatype);
|
||||
sadjpar->value(oscil->Psapar);
|
||||
|
||||
harmonicshiftcounter->value(oscil->Pharmonicshift);
|
||||
harmonicshiftpre->value(oscil->Pharmonicshiftfirst);
|
||||
|
||||
adhrtype->value(oscil->Padaptiveharmonics);
|
||||
adhrbf->value(oscil->Padaptiveharmonicsbasefreq);
|
||||
adhrpow->value(oscil->Padaptiveharmonicspower);
|
||||
adhrtype->value(oscil->Padaptiveharmonicspar);
|
||||
|
||||
for (int i=0;i<MAX_AD_HARMONICS;i++) h[i]->refresh();
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
oscil->prepare();
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
basefuncdisplaygroup->redraw();
|
||||
redrawoscil();
|
||||
rndslider->value(oscil->Prand-64);
|
||||
|
||||
hrndtype->value(oscil->Pamprandtype);
|
||||
hrnddial->value(oscil->Pamprandpower);
|
||||
|
||||
bftype->value(oscil->Pcurrentbasefunc);
|
||||
bfparval->value(oscil->Pbasefuncpar-64);
|
||||
bfslider->value(oscil->Pbasefuncpar-64);
|
||||
|
||||
bfmodtype->value(oscil->Pbasefuncmodulation);
|
||||
bfmodpar1->value(oscil->Pbasefuncmodulationpar1);
|
||||
bfmodpar2->value(oscil->Pbasefuncmodulationpar2);
|
||||
bfmodpar3->value(oscil->Pbasefuncmodulationpar3);
|
||||
|
||||
wshbutton->value(oscil->Pwaveshapingfunction);
|
||||
wsparval->value(oscil->Pwaveshaping-64);
|
||||
wshpar->value(oscil->Pwaveshaping-64);
|
||||
|
||||
fltbutton->value(oscil->Pfiltertype);
|
||||
filtervalue1->value(oscil->Pfilterpar1);
|
||||
filtervalue2->value(oscil->Pfilterpar2);
|
||||
filterpref->value(oscil->Pfilterbeforews);
|
||||
|
||||
modtype->value(oscil->Pmodulation);
|
||||
modpar1->value(oscil->Pmodulationpar1);
|
||||
modpar2->value(oscil->Pmodulationpar2);
|
||||
modpar3->value(oscil->Pmodulationpar3);
|
||||
|
||||
sabutton->value(oscil->Psatype);
|
||||
sadjpar->value(oscil->Psapar);
|
||||
|
||||
harmonicshiftcounter->value(oscil->Pharmonicshift);
|
||||
harmonicshiftpre->value(oscil->Pharmonicshiftfirst);
|
||||
|
||||
adhrtype->value(oscil->Padaptiveharmonics);
|
||||
adhrbf->value(oscil->Padaptiveharmonicsbasefreq);
|
||||
adhrpow->value(oscil->Padaptiveharmonicspower);
|
||||
adhrtype->value(oscil->Padaptiveharmonicspar);
|
||||
|
||||
for (int i=0;i<MAX_AD_HARMONICS;i++) h[i]->refresh();
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
oscil->prepare();
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
basefuncdisplaygroup->redraw();
|
||||
redrawoscil();
|
||||
}
|
||||
|
||||
void OscilEditor::redrawoscil() {
|
||||
oscildisplaygroup->redraw();
|
||||
oldosc->redraw();
|
||||
if (cbwidget!=NULL) {
|
||||
cbwidget->do_callback();
|
||||
applybutton->color(FL_RED);
|
||||
applybutton->redraw();
|
||||
};
|
||||
oldosc->redraw();
|
||||
if (cbwidget!=NULL) {
|
||||
cbwidget->do_callback();
|
||||
applybutton->color(FL_RED);
|
||||
applybutton->redraw();
|
||||
};
|
||||
}
|
||||
|
||||
@@ -12,63 +12,63 @@ PADnoteHarmonicProfile::PADnoteHarmonicProfile(int x,int y, int w, int h, const
|
||||
|
||||
void PADnoteHarmonicProfile::init(PADnoteParameters *pars,Master *master_) {
|
||||
master=master_;
|
||||
this->pars=pars;
|
||||
this->pars=pars;
|
||||
}
|
||||
|
||||
void PADnoteHarmonicProfile::draw() {
|
||||
int ox=x(),oy=y(),lx=w(),ly=h();
|
||||
if (!visible()) return;
|
||||
REALTYPE smps[lx];
|
||||
|
||||
REALTYPE realbw=pars->getprofile(smps,lx);
|
||||
bool active=active_r();
|
||||
|
||||
//draw the equivalent bandwidth
|
||||
if (active) fl_color(220,220,220);
|
||||
else fl_color(160,165,165);
|
||||
fl_line_style(0);
|
||||
int rbw=(int)(realbw*(lx-1.0)/2.0);
|
||||
for (int i=lx/2-rbw;i<(lx/2+rbw);i++) fl_line(ox+i,oy,ox+i,oy+ly-1);
|
||||
|
||||
fl_line_style(0);
|
||||
if (active) fl_color(200,200,200);
|
||||
else fl_color(160,160,160);
|
||||
for (int i=1;i<10;i++){
|
||||
int kx=(int)(lx/10.0*i);
|
||||
fl_line(ox+kx,oy,ox+kx,oy+ly-1);
|
||||
};
|
||||
for (int i=1;i<5;i++){
|
||||
int ky=(int)(ly/5.0*i);
|
||||
fl_line(ox,oy+ly-ky,ox+lx,oy+ly-ky-1);
|
||||
};
|
||||
|
||||
|
||||
fl_color(120,120,120);
|
||||
fl_line_style(FL_DOT);
|
||||
fl_line(ox+lx/2,oy,ox+lx/2,oy+ly);
|
||||
|
||||
//draw the graph
|
||||
fl_line_style(0);
|
||||
int old=0;
|
||||
for (int i=0;i<lx;i++){
|
||||
int val=(int) ((ly-2)*smps[i]);
|
||||
if (active) fl_color(180,210,240);
|
||||
else fl_color(150,150,155);
|
||||
fl_line(ox+i,oy+ly-1,ox+i,oy+ly-1-val);
|
||||
if (active) fl_color(0,0,100);
|
||||
else fl_color(150,150,150);
|
||||
if (i>0) fl_line(ox+i-1,oy+ly-2-old,ox+i,oy+ly-2-val);
|
||||
old=val;
|
||||
};
|
||||
|
||||
|
||||
fl_line_style(FL_DASH);
|
||||
if (active) fl_color(0,100,220);
|
||||
else fl_color(150,160,170);
|
||||
fl_line(ox+lx/2-rbw,oy,ox+lx/2-rbw,oy+ly-1);
|
||||
fl_line(ox+lx/2+rbw,oy,ox+lx/2+rbw,oy+ly-1);
|
||||
|
||||
fl_line_style(0);
|
||||
if (!visible()) return;
|
||||
REALTYPE smps[lx];
|
||||
|
||||
REALTYPE realbw=pars->getprofile(smps,lx);
|
||||
bool active=active_r();
|
||||
|
||||
//draw the equivalent bandwidth
|
||||
if (active) fl_color(220,220,220);
|
||||
else fl_color(160,165,165);
|
||||
fl_line_style(0);
|
||||
int rbw=(int)(realbw*(lx-1.0)/2.0);
|
||||
for (int i=lx/2-rbw;i<(lx/2+rbw);i++) fl_line(ox+i,oy,ox+i,oy+ly-1);
|
||||
|
||||
fl_line_style(0);
|
||||
if (active) fl_color(200,200,200);
|
||||
else fl_color(160,160,160);
|
||||
for (int i=1;i<10;i++){
|
||||
int kx=(int)(lx/10.0*i);
|
||||
fl_line(ox+kx,oy,ox+kx,oy+ly-1);
|
||||
};
|
||||
for (int i=1;i<5;i++){
|
||||
int ky=(int)(ly/5.0*i);
|
||||
fl_line(ox,oy+ly-ky,ox+lx,oy+ly-ky-1);
|
||||
};
|
||||
|
||||
|
||||
fl_color(120,120,120);
|
||||
fl_line_style(FL_DOT);
|
||||
fl_line(ox+lx/2,oy,ox+lx/2,oy+ly);
|
||||
|
||||
//draw the graph
|
||||
fl_line_style(0);
|
||||
int old=0;
|
||||
for (int i=0;i<lx;i++){
|
||||
int val=(int) ((ly-2)*smps[i]);
|
||||
if (active) fl_color(180,210,240);
|
||||
else fl_color(150,150,155);
|
||||
fl_line(ox+i,oy+ly-1,ox+i,oy+ly-1-val);
|
||||
if (active) fl_color(0,0,100);
|
||||
else fl_color(150,150,150);
|
||||
if (i>0) fl_line(ox+i-1,oy+ly-2-old,ox+i,oy+ly-2-val);
|
||||
old=val;
|
||||
};
|
||||
|
||||
|
||||
fl_line_style(FL_DASH);
|
||||
if (active) fl_color(0,100,220);
|
||||
else fl_color(150,160,170);
|
||||
fl_line(ox+lx/2-rbw,oy,ox+lx/2-rbw,oy+ly-1);
|
||||
fl_line(ox+lx/2+rbw,oy,ox+lx/2+rbw,oy+ly-1);
|
||||
|
||||
fl_line_style(0);
|
||||
}
|
||||
|
||||
PADnoteOvertonePosition::PADnoteOvertonePosition(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
|
||||
@@ -77,89 +77,89 @@ PADnoteOvertonePosition::PADnoteOvertonePosition(int x,int y, int w, int h, cons
|
||||
|
||||
void PADnoteOvertonePosition::init(PADnoteParameters *pars,Master *master_) {
|
||||
master=master_;
|
||||
this->pars=pars;
|
||||
this->pars=pars;
|
||||
}
|
||||
|
||||
void PADnoteOvertonePosition::draw() {
|
||||
if (!visible()) return;
|
||||
const int maxdb=60;
|
||||
|
||||
int ox=x(),oy=y(),lx=w(),ly=h();
|
||||
const int maxharmonic=64;
|
||||
|
||||
|
||||
for (int i=1;i<maxharmonic;i++){
|
||||
fl_color(200,200,200);
|
||||
fl_line_style(FL_DOT);
|
||||
if (i%5==0) fl_line_style(0);
|
||||
if (i%10==0) fl_color(160,160,160);
|
||||
int kx=(int)(lx/(REALTYPE)maxharmonic*i);
|
||||
fl_line(ox+kx,oy,ox+kx,oy+ly);
|
||||
};
|
||||
|
||||
|
||||
|
||||
int n=OSCIL_SIZE/2;
|
||||
REALTYPE spc[n];
|
||||
for (int i=0;i<n;i++) spc[i]=0.0;
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
pars->oscilgen->getspectrum(n,spc,0);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
|
||||
//normalize
|
||||
REALTYPE max=0;
|
||||
for (int i=0;i<n;i++){
|
||||
REALTYPE x=fabs(spc[i]);
|
||||
if (max<x) max=x;
|
||||
}
|
||||
if (max<0.000001) max=1.0;
|
||||
max=max*1.05;
|
||||
|
||||
REALTYPE spectrum[lx];
|
||||
for (int i=0;i<lx;i++) spectrum[i]=0;
|
||||
|
||||
|
||||
for (int i=1;i<n;i++){
|
||||
REALTYPE nhr=pars->getNhr(i);
|
||||
int kx=(int)(lx/(REALTYPE)maxharmonic*nhr);
|
||||
if ((kx<0)||(kx>lx)) continue;
|
||||
|
||||
spectrum[kx]=spc[i-1]/max+1e-9;
|
||||
|
||||
};
|
||||
|
||||
fl_color(180,0,0);
|
||||
fl_line_style(0);
|
||||
|
||||
if (pars->Pmode==2){
|
||||
int old=0;
|
||||
for (int i=1;i<lx;i++){
|
||||
if ((spectrum[i]>1e-10)||(i==(lx-1))){
|
||||
int delta=i-old;
|
||||
REALTYPE val1=spectrum[old];
|
||||
REALTYPE val2=spectrum[i];
|
||||
|
||||
REALTYPE idelta=1.0/delta;
|
||||
for (int j=0;j<delta;j++){
|
||||
REALTYPE x=idelta*j;
|
||||
spectrum[old+j]=val1*(1.0-x)+val2*x;
|
||||
};
|
||||
old=i;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
for (int i=0;i<lx;i++){
|
||||
REALTYPE x=spectrum[i];
|
||||
if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
|
||||
else continue;
|
||||
int yy=(int)(x*ly);
|
||||
fl_line(ox+i,oy+ly-1-yy,ox+i,oy+ly-1);
|
||||
|
||||
};
|
||||
const int maxdb=60;
|
||||
|
||||
int ox=x(),oy=y(),lx=w(),ly=h();
|
||||
const int maxharmonic=64;
|
||||
|
||||
|
||||
for (int i=1;i<maxharmonic;i++){
|
||||
fl_color(200,200,200);
|
||||
fl_line_style(FL_DOT);
|
||||
if (i%5==0) fl_line_style(0);
|
||||
if (i%10==0) fl_color(160,160,160);
|
||||
int kx=(int)(lx/(REALTYPE)maxharmonic*i);
|
||||
fl_line(ox+kx,oy,ox+kx,oy+ly);
|
||||
};
|
||||
|
||||
|
||||
|
||||
int n=OSCIL_SIZE/2;
|
||||
REALTYPE spc[n];
|
||||
for (int i=0;i<n;i++) spc[i]=0.0;
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
pars->oscilgen->getspectrum(n,spc,0);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
|
||||
|
||||
//normalize
|
||||
REALTYPE max=0;
|
||||
for (int i=0;i<n;i++){
|
||||
REALTYPE x=fabs(spc[i]);
|
||||
if (max<x) max=x;
|
||||
}
|
||||
if (max<0.000001) max=1.0;
|
||||
max=max*1.05;
|
||||
|
||||
REALTYPE spectrum[lx];
|
||||
for (int i=0;i<lx;i++) spectrum[i]=0;
|
||||
|
||||
|
||||
for (int i=1;i<n;i++){
|
||||
REALTYPE nhr=pars->getNhr(i);
|
||||
int kx=(int)(lx/(REALTYPE)maxharmonic*nhr);
|
||||
if ((kx<0)||(kx>lx)) continue;
|
||||
|
||||
spectrum[kx]=spc[i-1]/max+1e-9;
|
||||
|
||||
};
|
||||
|
||||
fl_color(180,0,0);
|
||||
fl_line_style(0);
|
||||
|
||||
if (pars->Pmode==2){
|
||||
int old=0;
|
||||
for (int i=1;i<lx;i++){
|
||||
if ((spectrum[i]>1e-10)||(i==(lx-1))){
|
||||
int delta=i-old;
|
||||
REALTYPE val1=spectrum[old];
|
||||
REALTYPE val2=spectrum[i];
|
||||
|
||||
REALTYPE idelta=1.0/delta;
|
||||
for (int j=0;j<delta;j++){
|
||||
REALTYPE x=idelta*j;
|
||||
spectrum[old+j]=val1*(1.0-x)+val2*x;
|
||||
};
|
||||
old=i;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
for (int i=0;i<lx;i++){
|
||||
REALTYPE x=spectrum[i];
|
||||
if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
|
||||
else continue;
|
||||
int yy=(int)(x*ly);
|
||||
fl_line(ox+i,oy+ly-1-yy,ox+i,oy+ly-1);
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
void PADnoteUI::cb__i(Fl_Tabs* o, void*) {
|
||||
@@ -690,10 +690,10 @@ void PADnoteUI::cb_export(Fl_Button* o, void* v) {
|
||||
|
||||
PADnoteUI::PADnoteUI(PADnoteParameters *parameters,Master *master_) {
|
||||
pars=parameters;
|
||||
master=master_;
|
||||
oscui=NULL;
|
||||
resui=new ResonanceUI(pars->resonance);
|
||||
make_window();
|
||||
master=master_;
|
||||
oscui=NULL;
|
||||
resui=new ResonanceUI(pars->resonance);
|
||||
make_window();
|
||||
}
|
||||
|
||||
Fl_Double_Window* PADnoteUI::make_window() {
|
||||
@@ -1403,102 +1403,102 @@ cy)");
|
||||
|
||||
void PADnoteUI::refresh() {
|
||||
volume->value(pars->PVolume);
|
||||
vsns->value(pars->PAmpVelocityScaleFunction);
|
||||
pan->value(pars->PPanning);
|
||||
|
||||
stereo->value(pars->PStereo);
|
||||
|
||||
|
||||
pstr->value(pars->PPunchStrength);
|
||||
pt->value(pars->PPunchTime);
|
||||
pstc->value(pars->PPunchStretch);
|
||||
pvel->value(pars->PPunchVelocitySensing);
|
||||
|
||||
detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
|
||||
detune->value(pars->PDetune-8192);
|
||||
|
||||
int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
|
||||
octave->value(k);
|
||||
|
||||
detunetype->value(pars->PDetuneType-1);
|
||||
k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
|
||||
coarsedet->value(k);
|
||||
|
||||
hz440->value(pars->Pfixedfreq);
|
||||
fixedfreqetdial->value(pars->PfixedfreqET);
|
||||
|
||||
amplfo->refresh();
|
||||
freqlfo->refresh();
|
||||
filterlfo->refresh();
|
||||
|
||||
ampenv->refresh();
|
||||
freqenv->refresh();
|
||||
filterenv->refresh();
|
||||
filterui->refresh();
|
||||
|
||||
|
||||
/* harmonic structure parametrs */
|
||||
|
||||
resui->refresh();
|
||||
if (oscui!=NULL) oscui->refresh();
|
||||
|
||||
hpbasetype->value(pars->Php.base.type);
|
||||
hpbasepar1->value(pars->Php.base.par1);
|
||||
hpfreqmult->value(pars->Php.freqmult);
|
||||
|
||||
hpmpar1->value(pars->Php.modulator.par1);
|
||||
hpmfreq->value(pars->Php.modulator.freq);
|
||||
hpwidth->value(pars->Php.width);
|
||||
|
||||
hponehalf->value(pars->Php.onehalf);
|
||||
hpamptype->value(pars->Php.amp.type);
|
||||
hpampmode->value(pars->Php.amp.mode);
|
||||
hpamppar1->value(pars->Php.amp.par1);
|
||||
hpamppar2->value(pars->Php.amp.par2);
|
||||
hpautoscale->value(pars->Php.autoscale);
|
||||
|
||||
bwdial->value(pars->Pbandwidth);
|
||||
if (pars->Pmode==0){
|
||||
bwprofilegroup->activate();
|
||||
bwdial->activate();
|
||||
bwcents->activate();
|
||||
hprofile->activate();
|
||||
hprofile->color(54);
|
||||
bwscale->activate();
|
||||
} else {
|
||||
bwprofilegroup->deactivate();
|
||||
bwdial->deactivate();
|
||||
bwcents->deactivate();
|
||||
hprofile->deactivate();
|
||||
hprofile->color(48);
|
||||
bwscale->activate();
|
||||
};
|
||||
|
||||
spectrummode->value(pars->Pmode);
|
||||
|
||||
qbasenote->value(pars->Pquality.basenote);
|
||||
qsmpoct->value(pars->Pquality.smpoct);
|
||||
qoct->value(pars->Pquality.oct);
|
||||
qsamplesize->value(pars->Pquality.samplesize);
|
||||
|
||||
hrpostype->value(pars->Phrpos.type);
|
||||
hrpospar1->value(pars->Phrpos.par1);
|
||||
hrpospar2->value(pars->Phrpos.par2);
|
||||
hrpospar3->value(pars->Phrpos.par3);
|
||||
|
||||
hprofile->redraw();
|
||||
overtonepos->redraw();
|
||||
|
||||
osc->redraw();
|
||||
pars->applyparameters(true);
|
||||
applybutton->color(FL_GRAY);
|
||||
applybutton->parent()->redraw();
|
||||
vsns->value(pars->PAmpVelocityScaleFunction);
|
||||
pan->value(pars->PPanning);
|
||||
|
||||
stereo->value(pars->PStereo);
|
||||
|
||||
|
||||
pstr->value(pars->PPunchStrength);
|
||||
pt->value(pars->PPunchTime);
|
||||
pstc->value(pars->PPunchStretch);
|
||||
pvel->value(pars->PPunchVelocitySensing);
|
||||
|
||||
detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
|
||||
detune->value(pars->PDetune-8192);
|
||||
|
||||
int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
|
||||
octave->value(k);
|
||||
|
||||
detunetype->value(pars->PDetuneType-1);
|
||||
k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
|
||||
coarsedet->value(k);
|
||||
|
||||
hz440->value(pars->Pfixedfreq);
|
||||
fixedfreqetdial->value(pars->PfixedfreqET);
|
||||
|
||||
amplfo->refresh();
|
||||
freqlfo->refresh();
|
||||
filterlfo->refresh();
|
||||
|
||||
ampenv->refresh();
|
||||
freqenv->refresh();
|
||||
filterenv->refresh();
|
||||
filterui->refresh();
|
||||
|
||||
|
||||
/* harmonic structure parametrs */
|
||||
|
||||
resui->refresh();
|
||||
if (oscui!=NULL) oscui->refresh();
|
||||
|
||||
hpbasetype->value(pars->Php.base.type);
|
||||
hpbasepar1->value(pars->Php.base.par1);
|
||||
hpfreqmult->value(pars->Php.freqmult);
|
||||
|
||||
hpmpar1->value(pars->Php.modulator.par1);
|
||||
hpmfreq->value(pars->Php.modulator.freq);
|
||||
hpwidth->value(pars->Php.width);
|
||||
|
||||
hponehalf->value(pars->Php.onehalf);
|
||||
hpamptype->value(pars->Php.amp.type);
|
||||
hpampmode->value(pars->Php.amp.mode);
|
||||
hpamppar1->value(pars->Php.amp.par1);
|
||||
hpamppar2->value(pars->Php.amp.par2);
|
||||
hpautoscale->value(pars->Php.autoscale);
|
||||
|
||||
bwdial->value(pars->Pbandwidth);
|
||||
if (pars->Pmode==0){
|
||||
bwprofilegroup->activate();
|
||||
bwdial->activate();
|
||||
bwcents->activate();
|
||||
hprofile->activate();
|
||||
hprofile->color(54);
|
||||
bwscale->activate();
|
||||
} else {
|
||||
bwprofilegroup->deactivate();
|
||||
bwdial->deactivate();
|
||||
bwcents->deactivate();
|
||||
hprofile->deactivate();
|
||||
hprofile->color(48);
|
||||
bwscale->activate();
|
||||
};
|
||||
|
||||
spectrummode->value(pars->Pmode);
|
||||
|
||||
qbasenote->value(pars->Pquality.basenote);
|
||||
qsmpoct->value(pars->Pquality.smpoct);
|
||||
qoct->value(pars->Pquality.oct);
|
||||
qsamplesize->value(pars->Pquality.samplesize);
|
||||
|
||||
hrpostype->value(pars->Phrpos.type);
|
||||
hrpospar1->value(pars->Phrpos.par1);
|
||||
hrpospar2->value(pars->Phrpos.par2);
|
||||
hrpospar3->value(pars->Phrpos.par3);
|
||||
|
||||
hprofile->redraw();
|
||||
overtonepos->redraw();
|
||||
|
||||
osc->redraw();
|
||||
pars->applyparameters(true);
|
||||
applybutton->color(FL_GRAY);
|
||||
applybutton->parent()->redraw();
|
||||
}
|
||||
|
||||
PADnoteUI::~PADnoteUI() {
|
||||
delete(oscui);
|
||||
delete(resui);
|
||||
|
||||
padnotewindow->hide();
|
||||
delete(padnotewindow);
|
||||
delete(resui);
|
||||
|
||||
padnotewindow->hide();
|
||||
delete(padnotewindow);
|
||||
}
|
||||
|
||||
@@ -47,22 +47,22 @@ Fl_Group* PartSysEffSend::make_window() {
|
||||
|
||||
PartSysEffSend::PartSysEffSend(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
|
||||
master=NULL;
|
||||
neff=0;
|
||||
npart=0;
|
||||
neff=0;
|
||||
npart=0;
|
||||
}
|
||||
|
||||
void PartSysEffSend::init(Master *master_,int npart_,int neff_) {
|
||||
npart=npart_;
|
||||
neff=neff_;
|
||||
master=master_;
|
||||
make_window();
|
||||
syseffsend->show();
|
||||
end();
|
||||
neff=neff_;
|
||||
master=master_;
|
||||
make_window();
|
||||
syseffsend->show();
|
||||
end();
|
||||
}
|
||||
|
||||
PartSysEffSend::~PartSysEffSend() {
|
||||
syseffsend->hide();
|
||||
//delete(syseffsend);
|
||||
//delete(syseffsend);
|
||||
}
|
||||
|
||||
void PartUI_::showparameters(int kititem,int engine) {
|
||||
@@ -344,42 +344,42 @@ Fl_Group* PartKitItem::make_window() {
|
||||
|
||||
PartKitItem::PartKitItem(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
|
||||
n=0;
|
||||
part=NULL;
|
||||
part=NULL;
|
||||
}
|
||||
|
||||
void PartKitItem::refresh() {
|
||||
enabledcheck->value(part->kit[n].Penabled);
|
||||
if (part->kit[n].Penabled==0) partkititemgroup->deactivate();
|
||||
else partkititemgroup->activate();
|
||||
|
||||
mutedcheck->value(part->kit[n].Pmuted);
|
||||
labelbutton->label((char *)part->kit[n].Pname);
|
||||
minkcounter->value(part->kit[n].Pminkey);
|
||||
maxkcounter->value(part->kit[n].Pmaxkey);
|
||||
adcheck->value(part->kit[n].Padenabled);
|
||||
adcheck->do_callback();
|
||||
subcheck->value(part->kit[n].Psubenabled);
|
||||
subcheck->do_callback();
|
||||
|
||||
sendtoeffect->value(part->kit[n].Psendtoparteffect+1);
|
||||
if (part->kit[n].Psendtoparteffect==127) sendtoeffect->value(0);
|
||||
|
||||
this->redraw();
|
||||
if (part->kit[n].Penabled==0) partkititemgroup->deactivate();
|
||||
else partkititemgroup->activate();
|
||||
|
||||
mutedcheck->value(part->kit[n].Pmuted);
|
||||
labelbutton->label((char *)part->kit[n].Pname);
|
||||
minkcounter->value(part->kit[n].Pminkey);
|
||||
maxkcounter->value(part->kit[n].Pmaxkey);
|
||||
adcheck->value(part->kit[n].Padenabled);
|
||||
adcheck->do_callback();
|
||||
subcheck->value(part->kit[n].Psubenabled);
|
||||
subcheck->do_callback();
|
||||
|
||||
sendtoeffect->value(part->kit[n].Psendtoparteffect+1);
|
||||
if (part->kit[n].Psendtoparteffect==127) sendtoeffect->value(0);
|
||||
|
||||
this->redraw();
|
||||
}
|
||||
|
||||
void PartKitItem::init(Part *part_,int n_,Master *master_,PartUI_ *partui_) {
|
||||
part=part_;
|
||||
n=n_;
|
||||
partui=partui_;
|
||||
master=master_;
|
||||
make_window();
|
||||
//partkititem->show();
|
||||
end();
|
||||
n=n_;
|
||||
partui=partui_;
|
||||
master=master_;
|
||||
make_window();
|
||||
//partkititem->show();
|
||||
end();
|
||||
}
|
||||
|
||||
PartKitItem::~PartKitItem() {
|
||||
partkititem->hide();
|
||||
//delete(partkititem);
|
||||
//delete(partkititem);
|
||||
}
|
||||
|
||||
void PartUI::cb_Pan_i(WidgetPDial* o, void*) {
|
||||
@@ -1784,97 +1784,97 @@ cents)");
|
||||
|
||||
PartUI::PartUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
|
||||
part=NULL;
|
||||
adnoteui=NULL;
|
||||
subnoteui=NULL;
|
||||
padnoteui=NULL;
|
||||
lastkititem=-1;
|
||||
adnoteui=NULL;
|
||||
subnoteui=NULL;
|
||||
padnoteui=NULL;
|
||||
lastkititem=-1;
|
||||
}
|
||||
|
||||
void PartUI::init(Part *part_,Master *master_,int npart_,BankUI *bankui_) {
|
||||
bankui=bankui_;
|
||||
part=part_;
|
||||
npart=npart_;
|
||||
master=master_;
|
||||
ninseff=0;
|
||||
|
||||
make_window();
|
||||
partgroup->position(this->parent()->x()+2,this->parent()->y()+2);
|
||||
partgroup->show();
|
||||
end();
|
||||
|
||||
|
||||
//if (config.ui.showinstrumentinfo!=0) instrumenteditwindow->show();
|
||||
|
||||
int klimits[]={1,2,3,4,5,6,7,8,9,10,15,20,30,50,100,0};
|
||||
|
||||
keylimitlist->add("OFF");
|
||||
int k=0;
|
||||
int val=-1;
|
||||
char tmp[10];
|
||||
while (klimits[k]!=0){
|
||||
sprintf(tmp,"%d",klimits[k]);
|
||||
keylimitlist->add(tmp);
|
||||
if ((val==-1)){
|
||||
if (klimits[k]>part->Pkeylimit) val=k;
|
||||
};
|
||||
k++;
|
||||
};
|
||||
|
||||
if (val==-1) val=k;
|
||||
keylimitlist->value(val);
|
||||
part=part_;
|
||||
npart=npart_;
|
||||
master=master_;
|
||||
ninseff=0;
|
||||
|
||||
make_window();
|
||||
partgroup->position(this->parent()->x()+2,this->parent()->y()+2);
|
||||
partgroup->show();
|
||||
end();
|
||||
|
||||
|
||||
//if (config.ui.showinstrumentinfo!=0) instrumenteditwindow->show();
|
||||
|
||||
int klimits[]={1,2,3,4,5,6,7,8,9,10,15,20,30,50,100,0};
|
||||
|
||||
keylimitlist->add("OFF");
|
||||
int k=0;
|
||||
int val=-1;
|
||||
char tmp[10];
|
||||
while (klimits[k]!=0){
|
||||
sprintf(tmp,"%d",klimits[k]);
|
||||
keylimitlist->add(tmp);
|
||||
if ((val==-1)){
|
||||
if (klimits[k]>part->Pkeylimit) val=k;
|
||||
};
|
||||
k++;
|
||||
};
|
||||
|
||||
if (val==-1) val=k;
|
||||
keylimitlist->value(val);
|
||||
}
|
||||
|
||||
void PartUI::showparameters(int kititem,int engine) {
|
||||
if (engine==-1){//this is used if I want to clear the engine from the part
|
||||
if (kititem==lastkititem) kititem=-1;
|
||||
else kititem=lastkititem;
|
||||
};
|
||||
|
||||
if (kititem!=lastkititem){
|
||||
if (adnoteui!=NULL) delete (adnoteui);
|
||||
if (subnoteui!=NULL) delete (subnoteui);
|
||||
if (padnoteui!=NULL) delete (padnoteui);
|
||||
adnoteui=NULL;subnoteui=NULL;padnoteui=NULL;
|
||||
lastkititem=kititem;
|
||||
|
||||
if (kititem>=NUM_KIT_ITEMS) return;//bad kit item
|
||||
if (kititem<0) return;
|
||||
|
||||
if (part->kit[kititem].adpars!=NULL)
|
||||
adnoteui=new ADnoteUI(part->kit[kititem].adpars,master);
|
||||
|
||||
if (part->kit[kititem].subpars!=NULL)
|
||||
subnoteui=new SUBnoteUI(part->kit[kititem].subpars);
|
||||
|
||||
if (part->kit[kititem].padpars!=NULL)
|
||||
padnoteui=new PADnoteUI(part->kit[kititem].padpars,master);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
if ((engine==0)&&(adnoteui!=NULL)) adnoteui->ADnoteGlobalParameters->show();
|
||||
if ((engine==1)&&(subnoteui!=NULL)) subnoteui->SUBparameters->show();
|
||||
if ((engine==2)&&(adnoteui!=NULL)) padnoteui->padnotewindow->show();
|
||||
if (kititem==lastkititem) kititem=-1;
|
||||
else kititem=lastkititem;
|
||||
};
|
||||
|
||||
if (kititem!=lastkititem){
|
||||
if (adnoteui!=NULL) delete (adnoteui);
|
||||
if (subnoteui!=NULL) delete (subnoteui);
|
||||
if (padnoteui!=NULL) delete (padnoteui);
|
||||
adnoteui=NULL;subnoteui=NULL;padnoteui=NULL;
|
||||
lastkititem=kititem;
|
||||
|
||||
if (kititem>=NUM_KIT_ITEMS) return;//bad kit item
|
||||
if (kititem<0) return;
|
||||
|
||||
if (part->kit[kititem].adpars!=NULL)
|
||||
adnoteui=new ADnoteUI(part->kit[kititem].adpars,master);
|
||||
|
||||
if (part->kit[kititem].subpars!=NULL)
|
||||
subnoteui=new SUBnoteUI(part->kit[kititem].subpars);
|
||||
|
||||
if (part->kit[kititem].padpars!=NULL)
|
||||
padnoteui=new PADnoteUI(part->kit[kititem].padpars,master);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
if ((engine==0)&&(adnoteui!=NULL)) adnoteui->ADnoteGlobalParameters->show();
|
||||
if ((engine==1)&&(subnoteui!=NULL)) subnoteui->SUBparameters->show();
|
||||
if ((engine==2)&&(adnoteui!=NULL)) padnoteui->padnotewindow->show();
|
||||
}
|
||||
|
||||
PartUI::~PartUI() {
|
||||
if (adnoteui!=NULL) delete (adnoteui);
|
||||
if (subnoteui!=NULL) delete (subnoteui);
|
||||
if (padnoteui!=NULL) delete (padnoteui);
|
||||
|
||||
partgroup->hide();
|
||||
//delete(partgroup);
|
||||
|
||||
ctlwindow->hide();
|
||||
delete(ctlwindow);
|
||||
|
||||
partfx->hide();
|
||||
delete(partfx);
|
||||
|
||||
instrumentkitlist->hide();
|
||||
delete(instrumentkitlist);
|
||||
|
||||
instrumenteditwindow->hide();
|
||||
delete(instrumenteditwindow);
|
||||
if (subnoteui!=NULL) delete (subnoteui);
|
||||
if (padnoteui!=NULL) delete (padnoteui);
|
||||
|
||||
partgroup->hide();
|
||||
//delete(partgroup);
|
||||
|
||||
ctlwindow->hide();
|
||||
delete(ctlwindow);
|
||||
|
||||
partfx->hide();
|
||||
delete(partfx);
|
||||
|
||||
instrumentkitlist->hide();
|
||||
delete(instrumentkitlist);
|
||||
|
||||
instrumenteditwindow->hide();
|
||||
delete(instrumenteditwindow);
|
||||
}
|
||||
|
||||
@@ -4,9 +4,11 @@
|
||||
#include "../Params/PresetsArray.h"
|
||||
|
||||
void PresetsUI_::refresh() {
|
||||
;
|
||||
}
|
||||
|
||||
PresetsUI_::~PresetsUI_() {
|
||||
;
|
||||
}
|
||||
|
||||
void PresetsUI::cb_copybrowse_i(Fl_Browser* o, void*) {
|
||||
@@ -113,12 +115,12 @@ void PresetsUI::cb_deletepbutton(Fl_Button* o, void* v) {
|
||||
|
||||
PresetsUI::PresetsUI() {
|
||||
p=NULL;
|
||||
make_window();
|
||||
make_window();
|
||||
}
|
||||
|
||||
PresetsUI::~PresetsUI() {
|
||||
copywin->hide();delete(copywin);
|
||||
pastewin->hide();delete(pastewin);
|
||||
pastewin->hide();delete(pastewin);
|
||||
}
|
||||
|
||||
Fl_Double_Window* PresetsUI::make_window() {
|
||||
@@ -207,66 +209,66 @@ Fl_Double_Window* PresetsUI::make_window() {
|
||||
|
||||
void PresetsUI::copy(Presets *p) {
|
||||
copybutton->activate();
|
||||
copypbutton->deactivate();
|
||||
|
||||
|
||||
this->p=p;
|
||||
this->pui=NULL;
|
||||
bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
|
||||
presetname->cut(0,presetname->maximum_size());
|
||||
|
||||
if (but) p->copy(NULL);
|
||||
else {
|
||||
rescan();
|
||||
copytypetext->label(&p->type[1]);
|
||||
copywin->show();
|
||||
};
|
||||
copypbutton->deactivate();
|
||||
|
||||
|
||||
this->p=p;
|
||||
this->pui=NULL;
|
||||
bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
|
||||
presetname->cut(0,presetname->maximum_size());
|
||||
|
||||
if (but) p->copy(NULL);
|
||||
else {
|
||||
rescan();
|
||||
copytypetext->label(&p->type[1]);
|
||||
copywin->show();
|
||||
};
|
||||
}
|
||||
|
||||
void PresetsUI::paste(Presets *p,PresetsUI_ *pui) {
|
||||
this->p=p;
|
||||
this->pui=pui;
|
||||
bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
|
||||
pastepbutton->deactivate();
|
||||
deletepbutton->deactivate();
|
||||
|
||||
if (but) {
|
||||
p->paste(0);
|
||||
pui->refresh();
|
||||
} else {
|
||||
rescan();
|
||||
pastetypetext->label(&p->type[1]);
|
||||
if (p->checkclipboardtype()) pastebutton->activate();
|
||||
else pastebutton->deactivate();
|
||||
pastewin->show();
|
||||
};
|
||||
this->pui=pui;
|
||||
bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
|
||||
pastepbutton->deactivate();
|
||||
deletepbutton->deactivate();
|
||||
|
||||
if (but) {
|
||||
p->paste(0);
|
||||
pui->refresh();
|
||||
} else {
|
||||
rescan();
|
||||
pastetypetext->label(&p->type[1]);
|
||||
if (p->checkclipboardtype()) pastebutton->activate();
|
||||
else pastebutton->deactivate();
|
||||
pastewin->show();
|
||||
};
|
||||
}
|
||||
|
||||
void PresetsUI::copy(Presets *p,int n) {
|
||||
PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
|
||||
if(pre)
|
||||
pre->setelement(n);
|
||||
copy(p);
|
||||
if(pre)
|
||||
pre->setelement(n);
|
||||
copy(p);
|
||||
}
|
||||
|
||||
void PresetsUI::paste(Presets *p,PresetsUI_ *pui,int n) {
|
||||
PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
|
||||
if(pre)
|
||||
pre->setelement(n);
|
||||
paste(p,pui);
|
||||
if(pre)
|
||||
pre->setelement(n);
|
||||
paste(p,pui);
|
||||
}
|
||||
|
||||
void PresetsUI::rescan() {
|
||||
copybrowse->clear();
|
||||
pastebrowse->clear();
|
||||
p->rescanforpresets();
|
||||
|
||||
for (int i=0;i<presetsstore.presets.size();i++){
|
||||
std::string name=presetsstore.presets[i].name;
|
||||
if(name.empty())
|
||||
continue;
|
||||
copybrowse->add(name.c_str());
|
||||
pastebrowse->add(name.c_str());
|
||||
};
|
||||
pastebrowse->clear();
|
||||
p->rescanforpresets();
|
||||
|
||||
for (int i=0;i<presetsstore.presets.size();i++){
|
||||
std::string name=presetsstore.presets[i].name;
|
||||
if(name.empty())
|
||||
continue;
|
||||
copybrowse->add(name.c_str());
|
||||
pastebrowse->add(name.c_str());
|
||||
};
|
||||
}
|
||||
PresetsUI *presetsui;
|
||||
|
||||
@@ -10,148 +10,148 @@
|
||||
|
||||
ResonanceGraph::ResonanceGraph(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
|
||||
respar=NULL;
|
||||
cbwidget=NULL;
|
||||
applybutton=NULL;
|
||||
cbwidget=NULL;
|
||||
applybutton=NULL;
|
||||
}
|
||||
|
||||
void ResonanceGraph::init(Resonance *respar_,Fl_Value_Output *khzvalue_,Fl_Value_Output *dbvalue_) {
|
||||
respar=respar_;
|
||||
khzvalue=khzvalue_;
|
||||
dbvalue=dbvalue_;
|
||||
oldx=-1;
|
||||
khzval=-1;
|
||||
khzvalue=khzvalue_;
|
||||
dbvalue=dbvalue_;
|
||||
oldx=-1;
|
||||
khzval=-1;
|
||||
}
|
||||
|
||||
void ResonanceGraph::draw_freq_line(REALTYPE freq,int type) {
|
||||
REALTYPE freqx=respar->getfreqpos(freq);
|
||||
switch(type){
|
||||
case 0:fl_line_style(FL_SOLID);break;
|
||||
case 1:fl_line_style(FL_DOT);break;
|
||||
case 2:fl_line_style(FL_DASH);break;
|
||||
};
|
||||
|
||||
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(x()+(int) (freqx*w()),y(),
|
||||
x()+(int) (freqx*w()),y()+h());
|
||||
switch(type){
|
||||
case 0:fl_line_style(FL_SOLID);break;
|
||||
case 1:fl_line_style(FL_DOT);break;
|
||||
case 2:fl_line_style(FL_DASH);break;
|
||||
};
|
||||
|
||||
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(x()+(int) (freqx*w()),y(),
|
||||
x()+(int) (freqx*w()),y()+h());
|
||||
}
|
||||
|
||||
void ResonanceGraph::draw() {
|
||||
int ox=x(),oy=y(),lx=w(),ly=h(),i,ix,iy,oiy;
|
||||
REALTYPE freqx;
|
||||
|
||||
fl_color(FL_BLACK);
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
|
||||
|
||||
//draw the lines
|
||||
fl_color(FL_GRAY);
|
||||
|
||||
fl_line_style(FL_SOLID);
|
||||
fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
|
||||
|
||||
freqx=respar->getfreqpos(1000.0);
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(ox+(int) (freqx*lx),oy,
|
||||
ox+(int) (freqx*lx),oy+ly);
|
||||
|
||||
for (i=1;i<10;i++){
|
||||
if(i==1){
|
||||
draw_freq_line(i*100.0,0);
|
||||
draw_freq_line(i*1000.0,0);
|
||||
}else
|
||||
if (i==5){
|
||||
draw_freq_line(i*100.0,2);
|
||||
draw_freq_line(i*1000.0,2);
|
||||
}else{
|
||||
draw_freq_line(i*100.0,1);
|
||||
draw_freq_line(i*1000.0,1);
|
||||
};
|
||||
};
|
||||
|
||||
draw_freq_line(10000.0,0);
|
||||
draw_freq_line(20000.0,1);
|
||||
|
||||
fl_line_style(FL_DOT);
|
||||
int GY=10;if (ly<GY*3) GY=-1;
|
||||
for (i=1;i<GY;i++){
|
||||
int tmp=(int)(ly/(REALTYPE)GY*i);
|
||||
fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
|
||||
};
|
||||
|
||||
|
||||
|
||||
//draw the data
|
||||
fl_color(FL_RED);
|
||||
fl_line_style(FL_SOLID);
|
||||
oiy=(int)(respar->Prespoints[0]/128.0*ly);
|
||||
for (i=1;i<N_RES_POINTS;i++){
|
||||
ix=(int)(i*1.0/N_RES_POINTS*lx);
|
||||
iy=(int)(respar->Prespoints[i]/128.0*ly);
|
||||
fl_line(ox+ix-1,oy+ly-oiy,ox+ix,oy+ly-iy);
|
||||
oiy=iy;
|
||||
};
|
||||
REALTYPE freqx;
|
||||
|
||||
fl_color(FL_BLACK);
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
|
||||
|
||||
//draw the lines
|
||||
fl_color(FL_GRAY);
|
||||
|
||||
fl_line_style(FL_SOLID);
|
||||
fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
|
||||
|
||||
freqx=respar->getfreqpos(1000.0);
|
||||
if ((freqx>0.0)&&(freqx<1.0))
|
||||
fl_line(ox+(int) (freqx*lx),oy,
|
||||
ox+(int) (freqx*lx),oy+ly);
|
||||
|
||||
for (i=1;i<10;i++){
|
||||
if(i==1){
|
||||
draw_freq_line(i*100.0,0);
|
||||
draw_freq_line(i*1000.0,0);
|
||||
}else
|
||||
if (i==5){
|
||||
draw_freq_line(i*100.0,2);
|
||||
draw_freq_line(i*1000.0,2);
|
||||
}else{
|
||||
draw_freq_line(i*100.0,1);
|
||||
draw_freq_line(i*1000.0,1);
|
||||
};
|
||||
};
|
||||
|
||||
draw_freq_line(10000.0,0);
|
||||
draw_freq_line(20000.0,1);
|
||||
|
||||
fl_line_style(FL_DOT);
|
||||
int GY=10;if (ly<GY*3) GY=-1;
|
||||
for (i=1;i<GY;i++){
|
||||
int tmp=(int)(ly/(REALTYPE)GY*i);
|
||||
fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
|
||||
};
|
||||
|
||||
|
||||
|
||||
//draw the data
|
||||
fl_color(FL_RED);
|
||||
fl_line_style(FL_SOLID);
|
||||
oiy=(int)(respar->Prespoints[0]/128.0*ly);
|
||||
for (i=1;i<N_RES_POINTS;i++){
|
||||
ix=(int)(i*1.0/N_RES_POINTS*lx);
|
||||
iy=(int)(respar->Prespoints[i]/128.0*ly);
|
||||
fl_line(ox+ix-1,oy+ly-oiy,ox+ix,oy+ly-iy);
|
||||
oiy=iy;
|
||||
};
|
||||
}
|
||||
|
||||
int ResonanceGraph::handle(int event) {
|
||||
int x_=Fl::event_x()-x();
|
||||
int y_=Fl::event_y()-y();
|
||||
if ( (x_>=0)&&(x_<w()) && (y_>=0)&&(y_<h())){
|
||||
khzvalue->value(respar->getfreqx(x_*1.0/w())/1000.0);
|
||||
dbvalue->value((1.0-y_*2.0/h())*respar->PmaxdB);
|
||||
};
|
||||
|
||||
if ((event==FL_PUSH)||(event==FL_DRAG)){
|
||||
int leftbutton=1;
|
||||
if (Fl::event_button()==FL_RIGHT_MOUSE) leftbutton=0;
|
||||
if (x_<0) x_=0;if (y_<0) y_=0;
|
||||
if (x_>=w()) x_=w();if (y_>=h()-1) y_=h()-1;
|
||||
|
||||
if ((oldx<0)||(oldx==x_)){
|
||||
int sn=(int)(x_*1.0/w()*N_RES_POINTS);
|
||||
int sp=127-(int)(y_*1.0/h()*127);
|
||||
if (leftbutton!=0) respar->setpoint(sn,sp);
|
||||
else respar->setpoint(sn,64);
|
||||
} else {
|
||||
int x1=oldx;
|
||||
int x2=x_;
|
||||
int y1=oldy;
|
||||
int y2=y_;
|
||||
if (oldx>x_){
|
||||
x1=x_;y1=y_;
|
||||
x2=oldx;y2=oldy;
|
||||
};
|
||||
for (int i=0;i<x2-x1;i++){
|
||||
int sn=(int)((i+x1)*1.0/w()*N_RES_POINTS);
|
||||
REALTYPE yy=(y2-y1)*1.0/(x2-x1)*i;
|
||||
int sp=127-(int)((y1+yy)/h()*127);
|
||||
if (leftbutton!=0) respar->setpoint(sn,sp);
|
||||
else respar->setpoint(sn,64);
|
||||
};
|
||||
int y_=Fl::event_y()-y();
|
||||
if ( (x_>=0)&&(x_<w()) && (y_>=0)&&(y_<h())){
|
||||
khzvalue->value(respar->getfreqx(x_*1.0/w())/1000.0);
|
||||
dbvalue->value((1.0-y_*2.0/h())*respar->PmaxdB);
|
||||
};
|
||||
|
||||
oldx=x_;oldy=y_;
|
||||
redraw();
|
||||
};
|
||||
|
||||
if (event==FL_RELEASE) {
|
||||
oldx=-1;
|
||||
if (cbwidget!=NULL) {
|
||||
cbwidget->do_callback();
|
||||
if (applybutton!=NULL) {
|
||||
applybutton->color(FL_RED);
|
||||
applybutton->redraw();
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
return(1);
|
||||
|
||||
if ((event==FL_PUSH)||(event==FL_DRAG)){
|
||||
int leftbutton=1;
|
||||
if (Fl::event_button()==FL_RIGHT_MOUSE) leftbutton=0;
|
||||
if (x_<0) x_=0;if (y_<0) y_=0;
|
||||
if (x_>=w()) x_=w();if (y_>=h()-1) y_=h()-1;
|
||||
|
||||
if ((oldx<0)||(oldx==x_)){
|
||||
int sn=(int)(x_*1.0/w()*N_RES_POINTS);
|
||||
int sp=127-(int)(y_*1.0/h()*127);
|
||||
if (leftbutton!=0) respar->setpoint(sn,sp);
|
||||
else respar->setpoint(sn,64);
|
||||
} else {
|
||||
int x1=oldx;
|
||||
int x2=x_;
|
||||
int y1=oldy;
|
||||
int y2=y_;
|
||||
if (oldx>x_){
|
||||
x1=x_;y1=y_;
|
||||
x2=oldx;y2=oldy;
|
||||
};
|
||||
for (int i=0;i<x2-x1;i++){
|
||||
int sn=(int)((i+x1)*1.0/w()*N_RES_POINTS);
|
||||
REALTYPE yy=(y2-y1)*1.0/(x2-x1)*i;
|
||||
int sp=127-(int)((y1+yy)/h()*127);
|
||||
if (leftbutton!=0) respar->setpoint(sn,sp);
|
||||
else respar->setpoint(sn,64);
|
||||
};
|
||||
};
|
||||
|
||||
oldx=x_;oldy=y_;
|
||||
redraw();
|
||||
};
|
||||
|
||||
if (event==FL_RELEASE) {
|
||||
oldx=-1;
|
||||
if (cbwidget!=NULL) {
|
||||
cbwidget->do_callback();
|
||||
if (applybutton!=NULL) {
|
||||
applybutton->color(FL_RED);
|
||||
applybutton->redraw();
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
void ResonanceGraph::setcbwidget(Fl_Widget *cbwidget,Fl_Widget *applybutton) {
|
||||
this->cbwidget=cbwidget;
|
||||
this->applybutton=applybutton;
|
||||
this->applybutton=applybutton;
|
||||
}
|
||||
|
||||
void ResonanceUI::cb_Close_i(Fl_Button*, void*) {
|
||||
@@ -508,10 +508,10 @@ Fl_Double_Window* ResonanceUI::make_window() {
|
||||
|
||||
ResonanceUI::ResonanceUI(Resonance *respar_) {
|
||||
respar=respar_;
|
||||
cbwidget=NULL;
|
||||
cbapplywidget=NULL;
|
||||
make_window();
|
||||
applybutton->hide();
|
||||
cbwidget=NULL;
|
||||
cbapplywidget=NULL;
|
||||
make_window();
|
||||
applybutton->hide();
|
||||
}
|
||||
|
||||
ResonanceUI::~ResonanceUI() {
|
||||
@@ -520,34 +520,34 @@ ResonanceUI::~ResonanceUI() {
|
||||
|
||||
void ResonanceUI::redrawPADnoteApply() {
|
||||
if (cbwidget!=NULL) {
|
||||
cbwidget->do_callback();
|
||||
applybutton->color(FL_RED);
|
||||
applybutton->redraw();
|
||||
};
|
||||
cbwidget->do_callback();
|
||||
applybutton->color(FL_RED);
|
||||
applybutton->redraw();
|
||||
};
|
||||
}
|
||||
|
||||
void ResonanceUI::setcbwidget(Fl_Widget *cbwidget,Fl_Widget *cbapplywidget) {
|
||||
this->cbwidget=cbwidget;
|
||||
this->cbapplywidget=cbapplywidget;
|
||||
rg->setcbwidget(cbwidget,applybutton);
|
||||
applybutton->show();
|
||||
this->cbapplywidget=cbapplywidget;
|
||||
rg->setcbwidget(cbwidget,applybutton);
|
||||
applybutton->show();
|
||||
}
|
||||
|
||||
void ResonanceUI::refresh() {
|
||||
redrawPADnoteApply();
|
||||
|
||||
enabled->value(respar->Penabled);
|
||||
|
||||
maxdb->value(respar->PmaxdB);
|
||||
maxdbvo->value(respar->PmaxdB);
|
||||
|
||||
centerfreqvo->value(respar->getcenterfreq()/1000.0);
|
||||
octavesfreqvo->value(respar->getoctavesfreq());
|
||||
|
||||
centerfreq->value(respar->Pcenterfreq);
|
||||
octavesfreq->value(respar->Poctavesfreq);
|
||||
|
||||
p1st->value(respar->Pprotectthefundamental);
|
||||
|
||||
rg->redraw();
|
||||
|
||||
enabled->value(respar->Penabled);
|
||||
|
||||
maxdb->value(respar->PmaxdB);
|
||||
maxdbvo->value(respar->PmaxdB);
|
||||
|
||||
centerfreqvo->value(respar->getcenterfreq()/1000.0);
|
||||
octavesfreqvo->value(respar->getoctavesfreq());
|
||||
|
||||
centerfreq->value(respar->Pcenterfreq);
|
||||
octavesfreq->value(respar->Poctavesfreq);
|
||||
|
||||
p1st->value(respar->Pprotectthefundamental);
|
||||
|
||||
rg->redraw();
|
||||
}
|
||||
|
||||
@@ -89,22 +89,22 @@ SUBnoteharmonic::SUBnoteharmonic(int x,int y, int w, int h, const char *label):F
|
||||
|
||||
void SUBnoteharmonic::init(SUBnoteParameters *pars_,int n_) {
|
||||
pars=pars_;
|
||||
n=n_;
|
||||
make_window();
|
||||
harmonic->show();
|
||||
end();
|
||||
n=n_;
|
||||
make_window();
|
||||
harmonic->show();
|
||||
end();
|
||||
}
|
||||
|
||||
void SUBnoteharmonic::refresh() {
|
||||
mag->value(127-pars->Phmag[n]);
|
||||
if (pars->Phmag[n]==0) mag->selection_color(0);
|
||||
bw->value(127-pars->Phrelbw[n]);
|
||||
if (pars->Phmag[n]==0) mag->selection_color(0);
|
||||
bw->value(127-pars->Phrelbw[n]);
|
||||
}
|
||||
|
||||
SUBnoteharmonic::~SUBnoteharmonic() {
|
||||
harmonic->hide();
|
||||
hide();
|
||||
//delete(harmonic);
|
||||
hide();
|
||||
//delete(harmonic);
|
||||
}
|
||||
|
||||
void SUBnoteUI::cb_Close_i(Fl_Button*, void*) {
|
||||
@@ -672,64 +672,64 @@ cy)");
|
||||
|
||||
void SUBnoteUI::refresh() {
|
||||
for (int i=0;i<MAX_SUB_HARMONICS;i++) h[i]->refresh();
|
||||
vol->value(pars->PVolume);
|
||||
vsns->value(pars->PAmpVelocityScaleFunction);
|
||||
pan->value(pars->PPanning);
|
||||
|
||||
|
||||
bandwidth->value(pars->Pbandwidth);
|
||||
bwidthscale->value(pars->Pbwscale-64);
|
||||
bwee->value(pars->PBandWidthEnvelopeEnabled);
|
||||
if (pars->PBandWidthEnvelopeEnabled==0) bandwidthenvelopegroup->deactivate();
|
||||
else bandwidthenvelopegroup->activate();
|
||||
bwee->show();
|
||||
bandwidthsettingsui->redraw();
|
||||
|
||||
detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
|
||||
freqee->value(pars->PFreqEnvelopeEnabled);
|
||||
if (pars->PFreqEnvelopeEnabled==0) freqenvelopegroup->deactivate();
|
||||
else freqenvelopegroup->activate();
|
||||
freqee->show();
|
||||
freqsettingsui->redraw();
|
||||
|
||||
detune->value(pars->PDetune-8192);
|
||||
hz440->value(pars->Pfixedfreq);
|
||||
|
||||
fixedfreqetdial->value(pars->PfixedfreqET);
|
||||
|
||||
int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
|
||||
octave->value(k);
|
||||
|
||||
detunetype->value(pars->PDetuneType-1);
|
||||
|
||||
k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
|
||||
coarsedet->value(k);
|
||||
|
||||
filtere->value(pars->PGlobalFilterEnabled);
|
||||
if (pars->PGlobalFilterEnabled==0) globalfiltergroup->deactivate();
|
||||
else globalfiltergroup->activate();
|
||||
filtere->show();
|
||||
globalfiltergroup->redraw();
|
||||
|
||||
stereo->value(pars->Pstereo);
|
||||
filterstages->value(pars->Pnumstages);
|
||||
magtype->value(pars->Phmagtype);
|
||||
start->value(pars->Pstart);
|
||||
|
||||
ampenv->refresh();
|
||||
bandwidthenvelopegroup->refresh();
|
||||
freqenvelopegroup->refresh();
|
||||
filterui->refresh();
|
||||
filterenv->refresh();
|
||||
vol->value(pars->PVolume);
|
||||
vsns->value(pars->PAmpVelocityScaleFunction);
|
||||
pan->value(pars->PPanning);
|
||||
|
||||
|
||||
bandwidth->value(pars->Pbandwidth);
|
||||
bwidthscale->value(pars->Pbwscale-64);
|
||||
bwee->value(pars->PBandWidthEnvelopeEnabled);
|
||||
if (pars->PBandWidthEnvelopeEnabled==0) bandwidthenvelopegroup->deactivate();
|
||||
else bandwidthenvelopegroup->activate();
|
||||
bwee->show();
|
||||
bandwidthsettingsui->redraw();
|
||||
|
||||
detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
|
||||
freqee->value(pars->PFreqEnvelopeEnabled);
|
||||
if (pars->PFreqEnvelopeEnabled==0) freqenvelopegroup->deactivate();
|
||||
else freqenvelopegroup->activate();
|
||||
freqee->show();
|
||||
freqsettingsui->redraw();
|
||||
|
||||
detune->value(pars->PDetune-8192);
|
||||
hz440->value(pars->Pfixedfreq);
|
||||
|
||||
fixedfreqetdial->value(pars->PfixedfreqET);
|
||||
|
||||
int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
|
||||
octave->value(k);
|
||||
|
||||
detunetype->value(pars->PDetuneType-1);
|
||||
|
||||
k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
|
||||
coarsedet->value(k);
|
||||
|
||||
filtere->value(pars->PGlobalFilterEnabled);
|
||||
if (pars->PGlobalFilterEnabled==0) globalfiltergroup->deactivate();
|
||||
else globalfiltergroup->activate();
|
||||
filtere->show();
|
||||
globalfiltergroup->redraw();
|
||||
|
||||
stereo->value(pars->Pstereo);
|
||||
filterstages->value(pars->Pnumstages);
|
||||
magtype->value(pars->Phmagtype);
|
||||
start->value(pars->Pstart);
|
||||
|
||||
ampenv->refresh();
|
||||
bandwidthenvelopegroup->refresh();
|
||||
freqenvelopegroup->refresh();
|
||||
filterui->refresh();
|
||||
filterenv->refresh();
|
||||
}
|
||||
|
||||
SUBnoteUI::SUBnoteUI(SUBnoteParameters *parameters) {
|
||||
pars=parameters;
|
||||
make_window();
|
||||
make_window();
|
||||
}
|
||||
|
||||
SUBnoteUI::~SUBnoteUI() {
|
||||
//for (int i=0;i<MAX_SUB_HARMONICS;i++) delete (h[i]);
|
||||
SUBparameters->hide();
|
||||
delete(SUBparameters);
|
||||
SUBparameters->hide();
|
||||
delete(SUBparameters);
|
||||
}
|
||||
|
||||
@@ -89,8 +89,8 @@ Fl_Double_Window* SeqUI::make_window() {
|
||||
|
||||
SeqUI::SeqUI(Master *master_) {
|
||||
master=master_;
|
||||
|
||||
make_window();
|
||||
|
||||
make_window();
|
||||
}
|
||||
|
||||
void SeqUI::show() {
|
||||
|
||||
@@ -19,175 +19,175 @@ VirKeys::VirKeys(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,la
|
||||
|
||||
void VirKeys::init(Master *master_) {
|
||||
master=master_;
|
||||
for (int i=0;i<N_OCT*12+1;i++) pressed[i]=0;
|
||||
midich=0;
|
||||
midivel=100;
|
||||
midioct=2;
|
||||
|
||||
keyoct1=3;
|
||||
keyoct2=2;
|
||||
rndvelocity=0;
|
||||
for (int i=0;i<N_OCT*12+1;i++) pressed[i]=0;
|
||||
midich=0;
|
||||
midivel=100;
|
||||
midioct=2;
|
||||
|
||||
keyoct1=3;
|
||||
keyoct2=2;
|
||||
rndvelocity=0;
|
||||
}
|
||||
|
||||
void VirKeys::draw() {
|
||||
int ox=x(),oy=y(),lx=w(),ly=h()-1,i;
|
||||
|
||||
if (damage()!=1){
|
||||
fl_color(250,240,230);
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
|
||||
fl_color(FL_BLACK);
|
||||
fl_line(ox,oy,ox+lx,oy);
|
||||
fl_line(ox,oy+ly,ox+lx,oy+ly);
|
||||
for (i=0;i<N_OCT*7+1;i++){
|
||||
fl_line(ox+i*SIZE_WHITE,oy,ox+i*SIZE_WHITE,oy+ly);
|
||||
int ik=i%7;
|
||||
if ((ik==1)||(ik==2)||(ik==4)||(ik==5)||(ik==6))
|
||||
fl_rectf(ox+i*SIZE_WHITE-SIZE_BLACK/2,oy,
|
||||
SIZE_BLACK+1,ly*3/5);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
for (i=0;i<N_OCT*12;i++){
|
||||
// if (pressed[i]==0) continue;
|
||||
|
||||
int noct=i/12;
|
||||
int kv=keyspos[i%12];
|
||||
|
||||
if (kv>=0){//white keys
|
||||
if (pressed[i]==0) fl_color(250,240,230);
|
||||
else fl_color(FL_BLUE);
|
||||
fl_rectf(ox+(kv+7*noct)*SIZE_WHITE+3,oy+ly*3/5+2,
|
||||
SIZE_WHITE-4,ly*2/5-3);
|
||||
} else {//black keys
|
||||
kv=keyspos[(i+1)%12];
|
||||
if (pressed[i]==0) fl_color(FL_BLACK);
|
||||
else fl_color(FL_BLUE);
|
||||
fl_rectf(ox+(kv+7*noct)*SIZE_WHITE-SIZE_BLACK/2+2,oy+2,
|
||||
SIZE_BLACK-3,ly*3/5-5);
|
||||
|
||||
if (damage()!=1){
|
||||
fl_color(250,240,230);
|
||||
fl_rectf(ox,oy,lx,ly);
|
||||
|
||||
fl_color(FL_BLACK);
|
||||
fl_line(ox,oy,ox+lx,oy);
|
||||
fl_line(ox,oy+ly,ox+lx,oy+ly);
|
||||
for (i=0;i<N_OCT*7+1;i++){
|
||||
fl_line(ox+i*SIZE_WHITE,oy,ox+i*SIZE_WHITE,oy+ly);
|
||||
int ik=i%7;
|
||||
if ((ik==1)||(ik==2)||(ik==4)||(ik==5)||(ik==6))
|
||||
fl_rectf(ox+i*SIZE_WHITE-SIZE_BLACK/2,oy,
|
||||
SIZE_BLACK+1,ly*3/5);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
for (i=0;i<N_OCT*12;i++){
|
||||
// if (pressed[i]==0) continue;
|
||||
|
||||
int noct=i/12;
|
||||
int kv=keyspos[i%12];
|
||||
|
||||
if (kv>=0){//white keys
|
||||
if (pressed[i]==0) fl_color(250,240,230);
|
||||
else fl_color(FL_BLUE);
|
||||
fl_rectf(ox+(kv+7*noct)*SIZE_WHITE+3,oy+ly*3/5+2,
|
||||
SIZE_WHITE-4,ly*2/5-3);
|
||||
} else {//black keys
|
||||
kv=keyspos[(i+1)%12];
|
||||
if (pressed[i]==0) fl_color(FL_BLACK);
|
||||
else fl_color(FL_BLUE);
|
||||
fl_rectf(ox+(kv+7*noct)*SIZE_WHITE-SIZE_BLACK/2+2,oy+2,
|
||||
SIZE_BLACK-3,ly*3/5-5);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
int VirKeys::handle(int event) {
|
||||
int i;
|
||||
int ly=h();
|
||||
int x_=Fl::event_x()-x();
|
||||
int y_=Fl::event_y()-y();
|
||||
if ( (x_<0)&&(x_>w()) && (y_<0)&&(y_>h())){
|
||||
return(0);
|
||||
};
|
||||
|
||||
|
||||
if ((event==FL_PUSH)||(event==FL_DRAG)||(event==FL_RELEASE)){
|
||||
int kpos=-1;
|
||||
int ly=h();
|
||||
int x_=Fl::event_x()-x();
|
||||
int y_=Fl::event_y()-y();
|
||||
if ( (x_<0)&&(x_>w()) && (y_<0)&&(y_>h())){
|
||||
return(0);
|
||||
};
|
||||
|
||||
if (y_>ly*3/5){//white keys
|
||||
int pos=x_/SIZE_WHITE;
|
||||
if (pos<0) return(1);
|
||||
for (i=0;i<12;i++) {
|
||||
if (pos%7==keyspos[i]) {
|
||||
kpos=pos/7*12+i;
|
||||
break;
|
||||
};
|
||||
};
|
||||
} else {//black keys
|
||||
int pos=(x_+SIZE_WHITE/2)/SIZE_WHITE;
|
||||
if (pos<0) return(1);
|
||||
for (i=1;i<12;i++) {
|
||||
if (pos%7==-keyspos[i]) {
|
||||
kpos=pos/7*12+i;
|
||||
break;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if ((kpos!=-1)&&((event==FL_PUSH)||(event==FL_DRAG))&&
|
||||
(Fl::event_shift()==0)) {
|
||||
presskey(kpos,1,1);
|
||||
};
|
||||
|
||||
if ((event==FL_PUSH)&&(Fl::event_shift()!=0)) {
|
||||
if (pressed[kpos]==0) presskey(kpos,0,1);
|
||||
else relasekey(kpos,1);
|
||||
};
|
||||
if ((event==FL_RELEASE)&&(Fl::event_shift()==0))
|
||||
relaseallkeys(1);
|
||||
take_focus();
|
||||
};
|
||||
|
||||
|
||||
const int *keysoct1=keysoct1qwerty;
|
||||
const int *keysoct2=keysoct2qwerty;
|
||||
|
||||
if (config.cfg.VirKeybLayout==2) {
|
||||
keysoct1=keysoct1dw;
|
||||
keysoct2=keysoct2dw;
|
||||
}else if (config.cfg.VirKeybLayout==3) {
|
||||
keysoct1=keysoct1qwertz;
|
||||
keysoct2=keysoct2qwertz;
|
||||
}else if (config.cfg.VirKeybLayout==4) {
|
||||
keysoct1=keysoct1az;
|
||||
keysoct2=keysoct2az;
|
||||
};
|
||||
|
||||
if ((event==FL_KEYDOWN)||(event==FL_KEYUP)){
|
||||
int key=Fl::event_key();
|
||||
int kpos=-1;
|
||||
for (i=0;keysoct1[i]!=0;i++) if (key==keysoct1[i]) kpos=i+12*keyoct1;
|
||||
for (i=0;keysoct2[i]!=0;i++) if (key==keysoct2[i]) kpos=i+12*keyoct2;
|
||||
|
||||
|
||||
|
||||
|
||||
if (kpos==-1) return(0);
|
||||
if ((event==FL_KEYUP) && (Fl::event_key(key)==0) && (Fl::get_key(key)!=0)) return(0);
|
||||
if (event==FL_KEYDOWN) presskey(kpos,0,2);
|
||||
else relasekey(kpos,2);
|
||||
};
|
||||
|
||||
return(1);
|
||||
|
||||
if ((event==FL_PUSH)||(event==FL_DRAG)||(event==FL_RELEASE)){
|
||||
int kpos=-1;
|
||||
|
||||
if (y_>ly*3/5){//white keys
|
||||
int pos=x_/SIZE_WHITE;
|
||||
if (pos<0) return(1);
|
||||
for (i=0;i<12;i++) {
|
||||
if (pos%7==keyspos[i]) {
|
||||
kpos=pos/7*12+i;
|
||||
break;
|
||||
};
|
||||
};
|
||||
} else {//black keys
|
||||
int pos=(x_+SIZE_WHITE/2)/SIZE_WHITE;
|
||||
if (pos<0) return(1);
|
||||
for (i=1;i<12;i++) {
|
||||
if (pos%7==-keyspos[i]) {
|
||||
kpos=pos/7*12+i;
|
||||
break;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if ((kpos!=-1)&&((event==FL_PUSH)||(event==FL_DRAG))&&
|
||||
(Fl::event_shift()==0)) {
|
||||
presskey(kpos,1,1);
|
||||
};
|
||||
|
||||
if ((event==FL_PUSH)&&(Fl::event_shift()!=0)) {
|
||||
if (pressed[kpos]==0) presskey(kpos,0,1);
|
||||
else relasekey(kpos,1);
|
||||
};
|
||||
if ((event==FL_RELEASE)&&(Fl::event_shift()==0))
|
||||
relaseallkeys(1);
|
||||
take_focus();
|
||||
};
|
||||
|
||||
|
||||
const int *keysoct1=keysoct1qwerty;
|
||||
const int *keysoct2=keysoct2qwerty;
|
||||
|
||||
if (config.cfg.VirKeybLayout==2) {
|
||||
keysoct1=keysoct1dw;
|
||||
keysoct2=keysoct2dw;
|
||||
}else if (config.cfg.VirKeybLayout==3) {
|
||||
keysoct1=keysoct1qwertz;
|
||||
keysoct2=keysoct2qwertz;
|
||||
}else if (config.cfg.VirKeybLayout==4) {
|
||||
keysoct1=keysoct1az;
|
||||
keysoct2=keysoct2az;
|
||||
};
|
||||
|
||||
if ((event==FL_KEYDOWN)||(event==FL_KEYUP)){
|
||||
int key=Fl::event_key();
|
||||
int kpos=-1;
|
||||
for (i=0;keysoct1[i]!=0;i++) if (key==keysoct1[i]) kpos=i+12*keyoct1;
|
||||
for (i=0;keysoct2[i]!=0;i++) if (key==keysoct2[i]) kpos=i+12*keyoct2;
|
||||
|
||||
|
||||
|
||||
|
||||
if (kpos==-1) return(0);
|
||||
if ((event==FL_KEYUP) && (Fl::event_key(key)==0) && (Fl::get_key(key)!=0)) return(0);
|
||||
if (event==FL_KEYDOWN) presskey(kpos,0,2);
|
||||
else relasekey(kpos,2);
|
||||
};
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
void VirKeys::presskey(int nk,int exclusive,int type) {
|
||||
//Exclusive means that multiple keys can be pressed at once
|
||||
//when the user uses the shift key
|
||||
if (nk>=N_OCT*12) return;
|
||||
if ((nk<0)&&(exclusive==0)) {
|
||||
relaseallkeys(type);
|
||||
return;
|
||||
};
|
||||
if (nk<0) return;
|
||||
if (pressed[nk]!=0) return;//the key is already pressed
|
||||
|
||||
if (exclusive!=0) relaseallkeys(type);
|
||||
pressed[nk]=type;
|
||||
|
||||
damage(1);
|
||||
float vel=midivel;
|
||||
if (rndvelocity!=0){
|
||||
vel=midivel*(127.0-rndvelocity)/127.0+RND*rndvelocity;
|
||||
};
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
master->NoteOn(midich,nk+midioct*12,(int)vel);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
//when the user uses the shift key
|
||||
if (nk>=N_OCT*12) return;
|
||||
if ((nk<0)&&(exclusive==0)) {
|
||||
relaseallkeys(type);
|
||||
return;
|
||||
};
|
||||
if (nk<0) return;
|
||||
if (pressed[nk]!=0) return;//the key is already pressed
|
||||
|
||||
if (exclusive!=0) relaseallkeys(type);
|
||||
pressed[nk]=type;
|
||||
|
||||
damage(1);
|
||||
float vel=midivel;
|
||||
if (rndvelocity!=0){
|
||||
vel=midivel*(127.0-rndvelocity)/127.0+RND*rndvelocity;
|
||||
};
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
master->NoteOn(midich,nk+midioct*12,(int)vel);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
}
|
||||
|
||||
void VirKeys::relasekey(int nk,int type) {
|
||||
if ((nk<0)||(nk>=N_OCT*12)) return;
|
||||
if (pressed[nk]==0) return;//the key is not pressed
|
||||
if ((type!=0)&&(pressed[nk]!=type)) return;
|
||||
|
||||
pressed[nk]=0;
|
||||
|
||||
|
||||
damage(1);
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
master->NoteOff(midich,nk+12*midioct);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
if (pressed[nk]==0) return;//the key is not pressed
|
||||
if ((type!=0)&&(pressed[nk]!=type)) return;
|
||||
|
||||
pressed[nk]=0;
|
||||
|
||||
|
||||
damage(1);
|
||||
|
||||
pthread_mutex_lock(&master->mutex);
|
||||
master->NoteOff(midich,nk+12*midioct);
|
||||
pthread_mutex_unlock(&master->mutex);
|
||||
}
|
||||
|
||||
void VirKeys::relaseallkeys(int type) {
|
||||
@@ -482,8 +482,8 @@ Fl_Double_Window* VirKeyboard::make_window() {
|
||||
|
||||
VirKeyboard::VirKeyboard(Master *master_) {
|
||||
master=master_;
|
||||
midictl=75;
|
||||
make_window();
|
||||
midictl=75;
|
||||
make_window();
|
||||
}
|
||||
|
||||
VirKeyboard::~VirKeyboard() {
|
||||
|
||||
@@ -6,65 +6,65 @@
|
||||
|
||||
TipWin::TipWin():Fl_Menu_Window(1,1) {
|
||||
strcpy(tip, "X.XX");
|
||||
set_override();
|
||||
end();
|
||||
set_override();
|
||||
end();
|
||||
}
|
||||
|
||||
void TipWin::draw() {
|
||||
draw_box(FL_BORDER_BOX, 0, 0, w(), h(), Fl_Color(175));
|
||||
fl_color(FL_BLACK);
|
||||
fl_font(labelfont(), labelsize());
|
||||
if(textmode)
|
||||
fl_draw(text, 3, 3, w()-6, h()-6, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP));
|
||||
else
|
||||
fl_draw(tip, 3, 3, w()-6, h()-6, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP));
|
||||
fl_color(FL_BLACK);
|
||||
fl_font(labelfont(), labelsize());
|
||||
if(textmode)
|
||||
fl_draw(text, 3, 3, w()-6, h()-6, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP));
|
||||
else
|
||||
fl_draw(tip, 3, 3, w()-6, h()-6, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP));
|
||||
}
|
||||
|
||||
void TipWin::value(float f) {
|
||||
sprintf(tip, "%.2f", f);
|
||||
textmode=false;
|
||||
// Recalc size of window
|
||||
fl_font(labelfont(), labelsize());
|
||||
int W = w(), H = h();
|
||||
fl_measure(tip, W, H, 0);
|
||||
W += 8;
|
||||
size(W, H);
|
||||
redraw();
|
||||
textmode=false;
|
||||
// Recalc size of window
|
||||
fl_font(labelfont(), labelsize());
|
||||
int W = w(), H = h();
|
||||
fl_measure(tip, W, H, 0);
|
||||
W += 8;
|
||||
size(W, H);
|
||||
redraw();
|
||||
}
|
||||
|
||||
void TipWin::setText(const char * c) {
|
||||
strncpy(text, c, max_tooltip_len-1);
|
||||
text[max_tooltip_len-1] = 0;
|
||||
textmode=true;
|
||||
// Recalc size of window
|
||||
fl_font(labelfont(), labelsize());
|
||||
int W = w(), H = h();
|
||||
fl_measure(text, W, H, 0);
|
||||
W += 8;
|
||||
size(W, H);
|
||||
redraw();
|
||||
text[max_tooltip_len-1] = 0;
|
||||
textmode=true;
|
||||
// Recalc size of window
|
||||
fl_font(labelfont(), labelsize());
|
||||
int W = w(), H = h();
|
||||
fl_measure(text, W, H, 0);
|
||||
W += 8;
|
||||
size(W, H);
|
||||
redraw();
|
||||
}
|
||||
|
||||
void TipWin::setTextmode() {
|
||||
textmode=true;
|
||||
// Recalc size of window
|
||||
fl_font(labelfont(), labelsize());
|
||||
int W = w(), H = h();
|
||||
fl_measure(text, W, H, 0);
|
||||
W += 8;
|
||||
size(W, H);
|
||||
redraw();
|
||||
// Recalc size of window
|
||||
fl_font(labelfont(), labelsize());
|
||||
int W = w(), H = h();
|
||||
fl_measure(text, W, H, 0);
|
||||
W += 8;
|
||||
size(W, H);
|
||||
redraw();
|
||||
}
|
||||
|
||||
WidgetPDial::WidgetPDial(int x,int y, int w, int h, const char *label):Fl_Dial(x,y,w,h,label) {
|
||||
callback(value_cb, (void*)this);
|
||||
Fl_Group *save = Fl_Group::current();
|
||||
tipwin = new TipWin();
|
||||
tipwin->hide();
|
||||
Fl_Group::current(save);
|
||||
oldvalue=0.0;
|
||||
pos=false;
|
||||
textset=false;
|
||||
Fl_Group *save = Fl_Group::current();
|
||||
tipwin = new TipWin();
|
||||
tipwin->hide();
|
||||
Fl_Group::current(save);
|
||||
oldvalue=0.0;
|
||||
pos=false;
|
||||
textset=false;
|
||||
}
|
||||
|
||||
WidgetPDial::~WidgetPDial() {
|
||||
@@ -73,131 +73,131 @@ WidgetPDial::~WidgetPDial() {
|
||||
|
||||
int WidgetPDial::handle(int event) {
|
||||
double dragsize,v,min=minimum(),max=maximum();
|
||||
int my;
|
||||
|
||||
switch (event){
|
||||
case FL_PUSH:
|
||||
oldvalue=value();
|
||||
case FL_DRAG:
|
||||
if(!pos){
|
||||
tipwin->position(Fl::event_x_root(), Fl::event_y_root()+20);
|
||||
pos=true;
|
||||
}
|
||||
tipwin->value(value());
|
||||
tipwin->show();
|
||||
my=-(Fl::event_y()-y()-h()/2);
|
||||
|
||||
dragsize=200.0;
|
||||
if (Fl::event_state(FL_BUTTON1)==0) dragsize*=10;
|
||||
v=oldvalue+my/dragsize*(max-min);
|
||||
if (v<min) v=min;
|
||||
else if (v>max) v=max;
|
||||
|
||||
//printf("%d %g %g\n",my,v,oldvalue);
|
||||
value(v);
|
||||
value_damage();
|
||||
if (this->when()!=0) do_callback();
|
||||
return(1);
|
||||
break;
|
||||
case FL_ENTER:
|
||||
if(textset){
|
||||
if(!pos){
|
||||
tipwin->position(Fl::event_x_root(), Fl::event_y_root()+20);
|
||||
pos=true;
|
||||
}
|
||||
tipwin->setTextmode();
|
||||
tipwin->show();
|
||||
return(1);}
|
||||
break;
|
||||
case FL_HIDE:
|
||||
case FL_LEAVE:
|
||||
tipwin->hide();
|
||||
pos=false;
|
||||
break;
|
||||
case FL_RELEASE:
|
||||
tipwin->hide();
|
||||
pos=false;
|
||||
if (this->when()==0) do_callback();
|
||||
return(1);
|
||||
break;
|
||||
};
|
||||
return(0);
|
||||
int my;
|
||||
|
||||
switch (event){
|
||||
case FL_PUSH:
|
||||
oldvalue=value();
|
||||
case FL_DRAG:
|
||||
if(!pos){
|
||||
tipwin->position(Fl::event_x_root(), Fl::event_y_root()+20);
|
||||
pos=true;
|
||||
}
|
||||
tipwin->value(value());
|
||||
tipwin->show();
|
||||
my=-(Fl::event_y()-y()-h()/2);
|
||||
|
||||
dragsize=200.0;
|
||||
if (Fl::event_state(FL_BUTTON1)==0) dragsize*=10;
|
||||
v=oldvalue+my/dragsize*(max-min);
|
||||
if (v<min) v=min;
|
||||
else if (v>max) v=max;
|
||||
|
||||
//printf("%d %g %g\n",my,v,oldvalue);
|
||||
value(v);
|
||||
value_damage();
|
||||
if (this->when()!=0) do_callback();
|
||||
return(1);
|
||||
break;
|
||||
case FL_ENTER:
|
||||
if(textset){
|
||||
if(!pos){
|
||||
tipwin->position(Fl::event_x_root(), Fl::event_y_root()+20);
|
||||
pos=true;
|
||||
}
|
||||
tipwin->setTextmode();
|
||||
tipwin->show();
|
||||
return(1);}
|
||||
break;
|
||||
case FL_HIDE:
|
||||
case FL_LEAVE:
|
||||
tipwin->hide();
|
||||
pos=false;
|
||||
break;
|
||||
case FL_RELEASE:
|
||||
tipwin->hide();
|
||||
pos=false;
|
||||
if (this->when()==0) do_callback();
|
||||
return(1);
|
||||
break;
|
||||
};
|
||||
return(0);
|
||||
}
|
||||
|
||||
void WidgetPDial::drawgradient(int cx,int cy,int sx,double m1,double m2) {
|
||||
for (int i=(int)(m1*sx);i<(int)(m2*sx);i++){
|
||||
double tmp=1.0-pow(i*1.0/sx,2.0);
|
||||
pdialcolor(140+(int) (tmp*90),140+(int)(tmp*90),140+(int) (tmp*100));
|
||||
fl_arc(cx+sx/2-i/2,cy+sx/2-i/2,i,i,0,360);
|
||||
};
|
||||
double tmp=1.0-pow(i*1.0/sx,2.0);
|
||||
pdialcolor(140+(int) (tmp*90),140+(int)(tmp*90),140+(int) (tmp*100));
|
||||
fl_arc(cx+sx/2-i/2,cy+sx/2-i/2,i,i,0,360);
|
||||
};
|
||||
}
|
||||
|
||||
void WidgetPDial::draw() {
|
||||
int cx=x(),cy=y(),sx=w(),sy=h();
|
||||
|
||||
|
||||
//clears the button face
|
||||
pdialcolor(190,190,200);
|
||||
fl_pie(cx-1,cy-1,sx+2,sy+2,0,360);
|
||||
|
||||
//Draws the button face (gradinet)
|
||||
drawgradient(cx,cy,sx,0.5,1.0);
|
||||
|
||||
double val=(value()-minimum())/(maximum()-minimum());
|
||||
|
||||
//draws the scale
|
||||
pdialcolor(220,220,250);
|
||||
double a1=angle1(),a2=angle2();
|
||||
for (int i=0;i<12;i++){
|
||||
double a=-i/12.0*360.0-val*(a2-a1)-a1;
|
||||
fl_pie(cx,cy,sx,sy,a+270-3,a+3+270);
|
||||
};
|
||||
|
||||
drawgradient(cx,cy,sx,0.0,0.75);
|
||||
|
||||
//draws the value
|
||||
double a=-(a2-a1)*val-a1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//draws the max and min points
|
||||
pdialcolor(0,100,200);
|
||||
int xp=(int)(cx+sx/2.0+sx/2.0*sin(angle1()/180.0*3.141592));
|
||||
int yp=(int)(cy+sy/2.0+sy/2.0*cos(angle1()/180.0*3.141592));
|
||||
fl_pie(xp-2,yp-2,4,4,0,360);
|
||||
|
||||
xp=(int)(cx+sx/2.0+sx/2.0*sin(angle2()/180.0*3.141592));
|
||||
yp=(int)(cy+sy/2.0+sy/2.0*cos(angle2()/180.0*3.141592));
|
||||
fl_pie(xp-2,yp-2,4,4,0,360);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
fl_push_matrix();
|
||||
|
||||
fl_translate(cx+sx/2,cy+sy/2);
|
||||
fl_rotate(a-90.0);
|
||||
|
||||
fl_translate(sx/2,0);
|
||||
|
||||
|
||||
fl_begin_polygon();
|
||||
pdialcolor(0,0,0);
|
||||
fl_vertex(-10,-4);
|
||||
fl_vertex(-10,4);
|
||||
fl_vertex(0,0);
|
||||
fl_end_polygon();
|
||||
|
||||
|
||||
fl_pop_matrix();
|
||||
|
||||
|
||||
//clears the button face
|
||||
pdialcolor(190,190,200);
|
||||
fl_pie(cx-1,cy-1,sx+2,sy+2,0,360);
|
||||
|
||||
//Draws the button face (gradinet)
|
||||
drawgradient(cx,cy,sx,0.5,1.0);
|
||||
|
||||
double val=(value()-minimum())/(maximum()-minimum());
|
||||
|
||||
//draws the scale
|
||||
pdialcolor(220,220,250);
|
||||
double a1=angle1(),a2=angle2();
|
||||
for (int i=0;i<12;i++){
|
||||
double a=-i/12.0*360.0-val*(a2-a1)-a1;
|
||||
fl_pie(cx,cy,sx,sy,a+270-3,a+3+270);
|
||||
};
|
||||
|
||||
drawgradient(cx,cy,sx,0.0,0.75);
|
||||
|
||||
//draws the value
|
||||
double a=-(a2-a1)*val-a1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//draws the max and min points
|
||||
pdialcolor(0,100,200);
|
||||
int xp=(int)(cx+sx/2.0+sx/2.0*sin(angle1()/180.0*3.141592));
|
||||
int yp=(int)(cy+sy/2.0+sy/2.0*cos(angle1()/180.0*3.141592));
|
||||
fl_pie(xp-2,yp-2,4,4,0,360);
|
||||
|
||||
xp=(int)(cx+sx/2.0+sx/2.0*sin(angle2()/180.0*3.141592));
|
||||
yp=(int)(cy+sy/2.0+sy/2.0*cos(angle2()/180.0*3.141592));
|
||||
fl_pie(xp-2,yp-2,4,4,0,360);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
fl_push_matrix();
|
||||
|
||||
fl_translate(cx+sx/2,cy+sy/2);
|
||||
fl_rotate(a-90.0);
|
||||
|
||||
fl_translate(sx/2,0);
|
||||
|
||||
|
||||
fl_begin_polygon();
|
||||
pdialcolor(0,0,0);
|
||||
fl_vertex(-10,-4);
|
||||
fl_vertex(-10,4);
|
||||
fl_vertex(0,0);
|
||||
fl_end_polygon();
|
||||
|
||||
|
||||
fl_pop_matrix();
|
||||
}
|
||||
|
||||
void WidgetPDial::pdialcolor(int r,int g,int b) {
|
||||
if (active_r()) fl_color(r,g,b);
|
||||
else fl_color(160-(160-r)/3,160-(160-b)/3,160-(160-b)/3);
|
||||
else fl_color(160-(160-r)/3,160-(160-b)/3,160-(160-b)/3);
|
||||
}
|
||||
|
||||
void WidgetPDial::value_cb2() {
|
||||
@@ -206,10 +206,10 @@ void WidgetPDial::value_cb2() {
|
||||
|
||||
void WidgetPDial::value_cb(Fl_Widget*, void*data) {
|
||||
WidgetPDial *val = (WidgetPDial*)data;
|
||||
val->value_cb2();
|
||||
val->value_cb2();
|
||||
}
|
||||
|
||||
void WidgetPDial::tooltip(const char * c) {
|
||||
tipwin->setText(c);
|
||||
textset=true;
|
||||
textset=true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user