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.
This commit is contained in:
Tobias Doerffel
2011-06-16 00:09:38 +02:00
parent c2c315e11f
commit 13d1e38f4b
18 changed files with 2688 additions and 2684 deletions

View File

@@ -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();
}

View File

@@ -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();
}

View File

@@ -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() {

View File

@@ -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() {

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -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());
}

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -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();
};
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -89,8 +89,8 @@ Fl_Double_Window* SeqUI::make_window() {
SeqUI::SeqUI(Master *master_) {
master=master_;
make_window();
make_window();
}
void SeqUI::show() {

View File

@@ -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() {

View File

@@ -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;
}