commit 1a0693fd91a0e1af2fbbf9dd42901da70eb44675
parent 2e241ede6674e52c62d83e37c2da24e5f403bde4
Author: Johannes Lorenz <[email protected]>
Date: Wed, 24 Sep 2014 14:37:31 +0200
Changed many rtosc-c-args to i-args.
Diffstat:
16 files changed, 105 insertions(+), 38 deletions(-)
diff --git a/src/Misc/Master.cpp b/src/Misc/Master.cpp
@@ -71,14 +71,14 @@ static Ports localports = {
d.reply("/free", "sb", "Part", sizeof(void*), &m->part[i]);
m->part[i] = p;
printf("part %d is now pointer %p\n", i, p);}},
- {"Pvolume::c", rDoc("Master Volume"), 0,
+ {"Pvolume::i", rDoc("Master Volume"), 0,
[](const char *m, rtosc::RtData &d) {
if(rtosc_narguments(m)==0) {
d.reply(d.loc, "c", ((Master*)d.obj)->Pvolume);
} else if(rtosc_narguments(m)==1 && rtosc_type(m,0)=='c') {
((Master*)d.obj)->setPvolume(limit<char>(rtosc_argument(m,0).i,0,127));
d.broadcast(d.loc, "c", ((Master*)d.obj)->Pvolume);}}},
- {"volume::c", rDoc("Master Volume"), 0,
+ {"volume::i", rDoc("Master Volume"), 0,
[](const char *m, rtosc::RtData &d) {
if(rtosc_narguments(m)==0) {
d.reply(d.loc, "c", ((Master*)d.obj)->Pvolume);
@@ -90,17 +90,17 @@ static Ports localports = {
printf("sets volume to value %d\n", ((Master*)d.obj)->Pvolume);
d.broadcast(d.loc, "c", ((Master*)d.obj)->Pvolume);}}},
- {"noteOn:ccc", rDoc("Noteon Event"), 0,
+ {"noteOn:iii", rDoc("Noteon Event"), 0,
[](const char *m,RtData &d){
Master *M = (Master*)d.obj;
M->noteOn(rtosc_argument(m,0).i,rtosc_argument(m,1).i,rtosc_argument(m,2).i);}},
- {"noteOff:cc", rDoc("Noteoff Event"), 0,
+ {"noteOff:ii", rDoc("Noteoff Event"), 0,
[](const char *m,RtData &d){
Master *M = (Master*)d.obj;
M->noteOff(rtosc_argument(m,0).i,rtosc_argument(m,1).i);}},
- {"setController:ccc", rDoc("MIDI CC Event"), 0,
+ {"setController:iii", rDoc("MIDI CC Event"), 0,
[](const char *m,RtData &d){
Master *M = (Master*)d.obj;
M->setController(rtosc_argument(m,0).i,rtosc_argument(m,1).i,rtosc_argument(m,2).i);}},
@@ -425,6 +425,57 @@ void Master::partonoff(int npart, int what)
}
}
+template <class T>
+struct def_skip
+{
+ static void skip(const char*& argptr) { argptr += sizeof(T); }
+};
+
+template <class T>
+struct str_skip
+{
+ static void skip(const char*& argptr) { while(argptr++); /*TODO: 4 padding */ }
+};
+
+template<class T, class Display = T, template<class T> class SkipsizeFunc = def_skip>
+void _dump_prim_arg(const char*& argptr, std::ostream& os)
+{
+ os << ' ' << (Display)*(const T*)argptr;
+ SkipsizeFunc<T>::skip(argptr);
+}
+
+void dump_msg(const char* ptr, std::ostream& os = std::cerr)
+{
+ assert(*ptr == '/');
+ os << ptr;
+
+ while(*++ptr) ; // skip address
+ while(!*++ptr) ; // skip 0s
+
+ assert(*ptr == ',');
+ os << ' ' << (ptr + 1);
+
+ const char* argptr = ptr;
+ while(*++argptr) ; // skip type string
+ while(!*++argptr) ; // skip 0s
+
+ char c;
+ while((c = *++ptr))
+ {
+ switch(c)
+ {
+ case 'i':
+ _dump_prim_arg<int32_t>(argptr, os); break;
+ case 'c':
+ _dump_prim_arg<int32_t, char>(argptr, os); break;
+ // case 's':
+ // _dump_prim_arg<char, const char*>(argptr, os); break;
+ default:
+ exit(1);
+ }
+ }
+
+}
/*
* Master audio out (the final sound)
@@ -457,11 +508,17 @@ void Master::AudioOut(float *outl, float *outr)
}
d.matches = 0;
//fprintf(stdout, "address '%s'\n", uToB->peak());
- ports.dispatch(msg+1, d);
+ ports.dispatch(msg+1, d);
events++;
if(!d.matches) {// && !ports.apropos(msg)) {
fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 1, 7 + 30, 0 + 40);
fprintf(stderr, "Unknown address '%s'\n", uToB->peak());
+ if(strstr(msg, "PFMVelocity"))
+ dump_msg(msg);
+ if(ports.apropos(msg))
+ fprintf(stderr, " -> best match: '%s'\n", ports.apropos(msg)->name);
+ if(ports.apropos(msg+1))
+ fprintf(stderr, " -> best match: '%s'\n", ports.apropos(msg+1)->name);
fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 7 + 30, 0 + 40);
}
}
diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp
@@ -90,7 +90,7 @@ void path_search(const char *m)
char buffer[1024*20];
size_t length = rtosc_amessage(buffer, sizeof(buffer), "/paths", types, args);
if(length) {
- lo_message msg = lo_message_deserialise((void*)buffer, length, NULL);
+ lo_message msg = lo_message_deserialise((void*)buffer, length, NULL);
lo_address addr = lo_address_new_from_url(last_url.c_str());
if(addr)
lo_send_message(addr, buffer, msg);
diff --git a/src/UI/ADnoteUI.fl b/src/UI/ADnoteUI.fl
@@ -285,7 +285,7 @@ o->redraw();}
Fl_Value_Slider {} {
label Vol
tooltip Volume xywh {540 80 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->init("PFMVolume", 'c');}
+ code0 {o->init("PFMVolume", 'i');}
class Fl_Osc_Slider
}
Fl_Value_Slider {} {
@@ -313,7 +313,7 @@ o->redraw();}
Fl_Value_Slider {} {
label {F.Damp}
tooltip {Modulator Damp at Higher frequency} xywh {540 120 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 minimum -64 maximum 63 step 1
- code0 {o->init("PFMVolumeDamp",'c');}
+ code0 {o->init("PFMVolumeDamp",'i');}
class Fl_Osc_Slider
}
}
@@ -350,7 +350,7 @@ oscedit=new OscilEditor(true, loc+"mod-oscil/", osc_i);}
callback {oscFM->phase=64-(int) o->value();
fmoscil->redraw();}
xywh {645 415 105 15} type {Horz Knob} box NO_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
- code0 {o->init("PFMoscilphase", 'c');}
+ code0 {o->init("PFMoscilphase", 'i');}
class Fl_Osc_Slider
}
Fl_Choice extFMoscil {
@@ -383,7 +383,7 @@ voiceFMparametersgroup->redraw();} open
xywh {635 40 85 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
code0 {o->add("OFF");}
code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtMod.%2d",i+1);o->add(tmp);};}
- code2 {o->init("PFMVoice",-1);}
+ code2 {o->init("PFMVoice", -1);}
code3 {if ((int) o->value() != 0) {modoscil->deactivate();modfrequency->deactivate();}}
class Fl_Osc_Choice
} {}
@@ -532,7 +532,7 @@ o->redraw();}
callback {osc->phase=64-(int) o->value();
voiceoscil->redraw();}
xywh {10 435 65 10} type {Horz Knob} box NO_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
- code0 {o->init("Poscilphase", 'c');}
+ code0 {o->init("Poscilphase", 'i');}
class Fl_Osc_Slider
}
Fl_Check_Button {} {
@@ -593,7 +593,7 @@ voiceonbutton->redraw();} open
label {Frequency Spread}
callback {//unisonspreadoutput->do_callback();}
tooltip {Frequency Spread of the Unison} xywh {95 562 125 13} type {Horz Knob} box NO_BOX labelsize 12 align 1 maximum 127 step 1 value 64
- code0 {o->init("Unison_frequency_spread", 'c');}
+ code0 {o->init("Unison_frequency_spread", 'i');}
class Fl_Osc_Slider
}
Fl_Value_Output unisonspreadoutput {
diff --git a/src/UI/FilterUI.fl b/src/UI/FilterUI.fl
@@ -389,13 +389,13 @@ formantfiltergraph->redraw();}
Fl_Slider cfknob {
callback {/*formantfiltergraph->redraw();*/}
xywh {551 167 84 15} type {Horz Knob} box FLAT_BOX maximum 127
- code0 {o->init("Pcenterfreq", 'c');}
+ code0 {o->init("Pcenterfreq", 'i');}
class Fl_Osc_Slider
}
Fl_Slider octknob {
callback {/*formantfiltergraph->redraw();*/}
xywh {551 185 84 15} type {Horz Knob} box FLAT_BOX maximum 127
- code0 {o->init("Poctavesfreq", 'c');}
+ code0 {o->init("Poctavesfreq", 'i');}
class Fl_Osc_Slider
}
Fl_Box formantfiltergraph {
diff --git a/src/UI/Fl_Osc_Check.cpp b/src/UI/Fl_Osc_Check.cpp
@@ -42,8 +42,11 @@ void Fl_Osc_Check::cb(void)
if(type == 'T')
oscWrite(ext, value() ? "T" : "F");
- else
- oscWrite(ext, "c", value());
+ else {
+ if(type=='c')
+ fprintf(stderr, "invalid `c' from checkbox %s%s, using `i'\n", loc.c_str(), ext.c_str());
+ oscWrite(ext, "i", value());
+ }
}
void Fl_Osc_Check::callback(Fl_Callback *cb, void *p)
diff --git a/src/UI/Fl_Osc_Choice.H b/src/UI/Fl_Osc_Choice.H
@@ -14,7 +14,7 @@ class Fl_Osc_Choice:public Fl_Choice, public Fl_Osc_Widget
//void OSC_value(float);
- void OSC_value(char);
+ void OSC_value(char);
//Refetch parameter information
void update(void);
diff --git a/src/UI/Fl_Osc_Choice.cpp b/src/UI/Fl_Osc_Choice.cpp
@@ -60,7 +60,7 @@ void Fl_Osc_Choice::OSC_value(char v)
void Fl_Osc_Choice::cb(void)
{
assert(osc);
- oscWrite(ext, "c", value()+min);
+ oscWrite(ext, "i", value()+min);
if(cb_data.first)
cb_data.first(this, cb_data.second);
}
diff --git a/src/UI/Fl_Osc_Counter.cpp b/src/UI/Fl_Osc_Counter.cpp
@@ -38,16 +38,18 @@ void Fl_Osc_Counter::OSC_value(char v)
{
value(v);
}
-
+
void Fl_Osc_Counter::cb(void)
{
assert(osc);
- if(cb_type == 'c')
- oscWrite(ext, "c", (char)(value()));
+ if(cb_type == 'c') {
+ fprintf(stderr, "invalid `c' from counter %s%s, using `i'\n", loc.c_str(), ext.c_str());
+ oscWrite(ext, "i", (int)(value()));
+ }
else
- oscWrite(ext, "i", (int)value());
-
+ oscWrite(ext, "i", (int)value());
+
if(cb_data.first)
cb_data.first(this, cb_data.second);
}
diff --git a/src/UI/Fl_Osc_Dial.cpp b/src/UI/Fl_Osc_Dial.cpp
@@ -78,9 +78,10 @@ void Fl_Osc_Dial::cb(void)
{
assert(osc);
- if((maximum()-minimum()) == 127 || (maximum()-minimum()) == 255)
- oscWrite(ext, "c", (char)(value()-minimum()));
- else
+/* if((maximum()-minimum()) == 127 || (maximum()-minimum()) == 255) {
+ oscWrite(ext, "i", (int)(value()-minimum()));
+ }
+ else*/
oscWrite(ext, "i", (int)(value()-minimum()));
if(cb_data.first)
diff --git a/src/UI/Fl_Osc_Roller.cpp b/src/UI/Fl_Osc_Roller.cpp
@@ -45,7 +45,7 @@ void Fl_Osc_Roller::update(void)
void Fl_Osc_Roller::cb(void)
{
- oscWrite(name, "c", (unsigned char)value());
+ oscWrite(name, "i", (int)value());
if(cb_data.first)
cb_data.first(this, cb_data.second);
diff --git a/src/UI/Fl_Osc_Slider.cpp b/src/UI/Fl_Osc_Slider.cpp
@@ -55,8 +55,10 @@ void Fl_Osc_Slider::cb(void)
oscWrite(ext, "f", val-min_);
else if(osc_type == 'i')
oscWrite(ext, "i", (int)(val-min_));
- else
- oscWrite(ext, "c", (char)(val-min_));
+ else {
+ fprintf(stderr, "invalid `c' from slider %s%s, using `i'\n", loc.c_str(), ext.c_str());
+ oscWrite(ext, "i", (int)(val-min_));
+ }
//OSC_value(val);
if(cb_data.first)
diff --git a/src/UI/Fl_Osc_VSlider.H b/src/UI/Fl_Osc_VSlider.H
@@ -12,7 +12,7 @@ class Fl_Osc_VSlider:public Fl_Value_Slider, public Fl_Osc_Widget
virtual ~Fl_Osc_VSlider(void);
void OSC_value(char);
void OSC_value(float);
- void init(std::string, char type = 'c');
+ void init(std::string, char type = 'i');
//Refetch parameter information
void update(void);
diff --git a/src/UI/Fl_Osc_VSlider.cpp b/src/UI/Fl_Osc_VSlider.cpp
@@ -41,8 +41,10 @@ void Fl_Osc_VSlider::cb(void)
oscWrite(ext, "f", val-minimum());
else if(osc_type == 'i')
oscWrite(ext, "i", (int)(val-minimum()));
- else
- oscWrite(ext, "c", (char)(val-minimum()));
+ else {
+ fprintf(stderr, "invalid `c' from vslider %s%s, using `i'\n", loc.c_str(), ext.c_str());
+ oscWrite(ext, "i", (int)(val-minimum()));
+ }
//OSC_value(val);
if(cb_data.first)
diff --git a/src/UI/MasterUI.fl b/src/UI/MasterUI.fl
@@ -142,7 +142,7 @@ bankui->show();}
}
Fl_Slider partvolume {
xywh {10 65 30 110} type {Vert Knob} box NO_BOX minimum 127 maximum 0 step 1 value 127
- code0 {o->init("Pvolume", 'c');}
+ code0 {o->init("Pvolume", 'i');}
class Fl_Osc_Slider
}
Fl_Dial partpanning {
@@ -1038,7 +1038,7 @@ bankui->show();}
Fl_Slider partpanning {
label Pan
xywh {185 95 145 15} type {Horz Knob} box NO_BOX labelsize 11 maximum 127 step 1 value 64
- code0 {o->init("Ppanning",'c');}
+ code0 {o->init("Ppanning",'i');}
class Fl_Osc_Slider
}
Fl_Choice partrcv {
diff --git a/src/UI/PADnoteUI.fl b/src/UI/PADnoteUI.fl
@@ -705,7 +705,7 @@ cbwidget->do_callback();}
Fl_Value_Slider volume {
label Vol
tooltip Volume xywh {10 50 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->init("PVolume", 'c');}
+ code0 {o->init("PVolume", 'i');}
class Fl_Osc_VSlider
}
Fl_Value_Slider vsns {
diff --git a/src/UI/VirKeyboard.fl b/src/UI/VirKeyboard.fl
@@ -280,7 +280,7 @@ if (rndvelocity!=0){
vel=midivel*(127.0-rndvelocity)/127.0+RND*rndvelocity;
};
-osc->write(loc+"noteOn", "ccc", midich,nk+midioct*12,(int)vel);} {}
+osc->write(loc+"noteOn", "iii", midich,nk+midioct*12,(int)vel);} {}
}
Function {relasekey(int nk,int type)} {} {
code {if ((nk<0)||(nk>=N_OCT*12)) return;
@@ -292,7 +292,7 @@ pressed[nk]=0;
damage(1);
-osc->write(loc+"noteOff", "cc", midich,nk+12*midioct);} {}
+osc->write(loc+"noteOff", "ii", midich,nk+12*midioct);} {}
}
Function {relaseallkeys(int type)} {} {
code {for (int i=0;i<N_OCT*12;i++) relasekey(i,type);} {}