annotate MessageOrganiser.mm @ 27:27cdf475aa4b

more fiddling
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Wed, 29 Oct 2014 15:38:38 +0000
parents 8eb530e0601b
children 953db6518738
rev   line source
rt300@18 1
rt300@18 2 #include "MessageOrganiser.h"
rt300@18 3
rt300@18 4 void MessageOrganiser::init(PDSynthWrapper& cs, PDSynthWrapper& ts){
rt300@18 5 candidateSynth = cs;
rt300@18 6 targetSynth = ts;
rt300@18 7
rt300@18 8 onlyChangeCandidateOnTrigger = true;
rt300@18 9 }
rt300@27 10
rt300@27 11
rt300@27 12 void MessageOrganiser::setupDefaultMapping(controlPanelType whichInterfaceAreWeUsing){
rt300@27 13 vector<int> mappingIDsForChangeableParams = getMappingIDsFromSynths();
rt300@27 14 vector<controllerType> elemList;
rt300@27 15
rt300@27 16 if (whichInterfaceAreWeUsing == ALL_SLIDERS){
rt300@27 17
rt300@27 18 for(int i = 0; i < TOTAL_NUM_PARAMS; i++){
rt300@27 19 elemList.push_back(SLIDER);
rt300@27 20
rt300@27 21 }
rt300@27 22 }else if (whichInterfaceAreWeUsing == LEAP6DOF){
rt300@27 23 elemList.push_back(LEAP6D);
rt300@27 24 }
rt300@27 25 vector<UIElement*> UIElemHandles = controlPanel->generateControls(elemList, whichInterfaceAreWeUsing);
rt300@27 26
rt300@27 27 mapSlidersToParams(UIElemHandles, mappingIDsForChangeableParams);
rt300@27 28
rt300@27 29 }
rt300@27 30
rt300@27 31
rt300@27 32 //----------------------------------------------------------------------------------------
rt300@27 33 vector<int> MessageOrganiser::getMappingIDsFromSynths(){
rt300@27 34 vector<int> index;
rt300@27 35 for(int i = 0; i < TOTAL_NUM_PARAMS; i++){
rt300@27 36 index.push_back(i);
rt300@27 37 }
rt300@27 38 vector<int> mids = candidateSynth.getMappingIDForIndices(index);
rt300@27 39
rt300@27 40 return mids;
rt300@27 41 }
rt300@18 42 // could template for ui element type??
rt300@18 43 void MessageOrganiser::mapButtonToAction(UIElement* control, int mappingID){
rt300@18 44 UICallbackFunction callbackF;
rt300@18 45 callbackF = boost::bind(&MessageOrganiser::buttonPressCallback, this, _1,_2);
rt300@18 46 control->addHandler(callbackF, mappingID);
rt300@18 47 currentMapping.insert(std::pair<int,UIElement*>(mappingID,control));
rt300@18 48 }
rt300@18 49
rt300@18 50
rt300@18 51 void MessageOrganiser::setControlPanel(SliderPanel* p){ // a bit specific??
rt300@27 52 controlPanel = p;
rt300@18 53
rt300@18 54 };
rt300@18 55 void MessageOrganiser::setBottomPanel(ButtonPanel * ntb){
rt300@18 56 bottomPanel = ntb;
rt300@18 57 };
rt300@18 58
rt300@18 59
rt300@18 60 void MessageOrganiser::setIconPanel(IconPanel * ip){
rt300@18 61 presetIconPanel = ip;
rt300@18 62 }
rt300@27 63
rt300@18 64 void MessageOrganiser::setInstructionPanel(TextPanel * ip){
rt300@18 65 instructionPanel = ip;
rt300@18 66 instructionPanel->show();
rt300@18 67 }
rt300@18 68
rt300@18 69
rt300@18 70 //-----------------------------------------------------------------------------
rt300@18 71 void MessageOrganiser::hideMyPanels(){
rt300@18 72 presetIconPanel->hide();
rt300@18 73 instructionPanel->hide();
rt300@18 74 bottomPanel->hide();
rt300@27 75 controlPanel->hide();
rt300@18 76 }
rt300@18 77 void MessageOrganiser::showMyPanels(){
rt300@18 78 presetIconPanel->show();
rt300@18 79 instructionPanel->show();
rt300@18 80 bottomPanel->show();
rt300@27 81 controlPanel->show();
rt300@18 82 }
rt300@18 83
rt300@18 84 void MessageOrganiser::triggerCandidateSound(){
rt300@18 85 // log event
rt300@18 86 sendSynthValuesAgain();
rt300@18 87 candidateSynth.trigger();
rt300@18 88 eventLogger.logEvent(CANDIDATE_PLAYED);
rt300@18 89 // flash panel?
rt300@27 90 controlPanel->flash();
rt300@18 91 }
rt300@18 92
rt300@18 93 void MessageOrganiser::paramChangeCallback(int mappingID, int value){
rt300@18 94
rt300@18 95 if(onlyChangeCandidateOnTrigger){
rt300@18 96 candidateSynth.paramChangeCallback(mappingID, value, false);
rt300@18 97 }else{
rt300@18 98 candidateSynth.paramChangeCallback(mappingID, value, true);
rt300@18 99 }
rt300@18 100
rt300@18 101 vector<int> evtData;
rt300@18 102 evtData.push_back(mappingID); // or just index?
rt300@18 103 evtData.push_back(value);
rt300@18 104
rt300@18 105 eventLogger.logEvent(CANDIDATE_PARAM_ADJUSTED, evtData);
rt300@18 106 };
rt300@18 107
rt300@18 108 void MessageOrganiser::sendSynthValuesAgain(){
rt300@18 109 candidateSynth.sendAllParams();
rt300@18 110 targetSynth.sendAllParams();
rt300@18 111 };
rt300@18 112
rt300@18 113
rt300@18 114 void MessageOrganiser::setAllSlidersToValues(vector<int> values){
rt300@18 115 for(int i = 0; i < values.size(); i++){
rt300@18 116 setUIToParam(i, values[i]);
rt300@18 117 }
rt300@18 118 }
rt300@18 119 // we want to set UI object
rt300@18 120 void MessageOrganiser::setUIToParam(int index, int value){ // e.g. from MIDI incoming, will handle both box and sliders...
rt300@18 121 // theXY->setValueAndScale(candidateSynth.getParamValueForID(mids[i]), candidateSynth.getParamValueForID(mids[i+1]));
rt300@18 122 UIElement* elem;
rt300@18 123 // get the element
rt300@27 124 if(controlPanel->subElements.size() <= index){
rt300@18 125 cout << "ERROR: index out of range for num sliders" << endl;
rt300@18 126 return;
rt300@18 127 }
rt300@27 128 elem = controlPanel->subElements[index];
rt300@18 129 if ( elem->getType() == SLIDER){
rt300@18 130 ButtronSlider* theSlider = (ButtronSlider*)elem;
rt300@18 131 theSlider->setValueAndScale(value);
rt300@18 132
rt300@27 133 }else if ( elem->getType() == LEAP6D){
rt300@27 134 Leap6DBox* theBox = (Leap6DBox*)elem;
rt300@27 135 theBox->setValueAndScale(index, value);
rt300@18 136 }
rt300@27 137
rt300@18 138 };
rt300@18 139
rt300@18 140
rt300@18 141 void MessageOrganiser::mapControlToParam(UIElement* control, int mappingID){
rt300@18 142
rt300@18 143 UICallbackFunction callbackF;
rt300@18 144 callbackF = boost::bind(&MessageOrganiser::paramChangeCallback, this, _1,_2);
rt300@18 145 control->addHandler(callbackF, mappingID);
rt300@18 146 // put in our map so we can send param values to gui
rt300@18 147 currentMapping.insert(std::pair<int,UIElement*>(mappingID,control));
rt300@18 148 cout << " Mapped control to ID: " << mappingID << "Name: " << candidateSynth.getNameForMappingID(mappingID) << endl;
rt300@18 149 control->setLabel(candidateSynth.getNameForMappingID(mappingID));
rt300@18 150 };
rt300@18 151
rt300@18 152 //-----------------------------------------------------------------------------
rt300@18 153
rt300@18 154 void MessageOrganiser::mapSlidersToParams(vector<UIElement*> elems, vector<int> mids){
rt300@18 155
rt300@18 156 vector<UIElement*>::iterator elit;
rt300@18 157 vector<int> typeListLog;
rt300@18 158 int i = 0;
rt300@18 159 for(elit=elems.begin(); elit<elems.end();elit++){
rt300@18 160 if ( (*elit)->getType() == SLIDER){
rt300@18 161 if(i >= mids.size()){
rt300@18 162
rt300@18 163 cout << "ERROR ERROR: too many controls for mapping IDs: " << mids.size() << endl;
rt300@18 164 }
rt300@18 165
rt300@18 166 ButtronSlider* theSlider = (ButtronSlider*)(*elit);
rt300@18 167 mapControlToParam((*elit), mids[i]);
rt300@18 168 theSlider->setValueAndScale(candidateSynth.getParamValueForID(mids[i]));
rt300@18 169 cout << "Hint Value " << targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])) << endl;
rt300@18 170 theSlider->setHintValue(targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])));
rt300@18 171 i++;
rt300@18 172 typeListLog.push_back(int(SLIDER));
rt300@18 173
rt300@18 174 }else{
rt300@18 175 cout << "ERROR ERROR: ui type not handled my mapping function !" << endl;
rt300@18 176 }
rt300@18 177 }
rt300@18 178
rt300@18 179 eventLogger.logEvent(CONTROL_LIST,typeListLog);
rt300@18 180 };
rt300@18 181
rt300@18 182 void MessageOrganiser::mapXYToParams(ButtronXY* control, int mappingIDX, int mappingIDY){
rt300@18 183 UICallbackFunction callback;
rt300@18 184
rt300@18 185 callback = boost::bind(&MessageOrganiser::paramChangeCallback, this, _1,_2);
rt300@18 186
rt300@18 187 control->addHandler(callback, mappingIDX, mappingIDY);
rt300@18 188
rt300@18 189 // put in our map so we can send param values to gui
rt300@18 190 //currentMapping.insert(std::pair<int,UIElement*>(mappingID,control));
rt300@18 191
rt300@18 192
rt300@18 193 cout << " Mapped control to XID: " << mappingIDX << "Name: " << candidateSynth.getNameForMappingID(mappingIDX) << endl;
rt300@18 194 cout << " Mapped control to YID: " << mappingIDY << "Name: " << candidateSynth.getNameForMappingID(mappingIDY) << endl;
rt300@18 195 control->setLabel(candidateSynth.getNameForMappingID(mappingIDX), candidateSynth.getNameForMappingID(mappingIDY));
rt300@18 196
rt300@18 197 };
rt300@18 198
rt300@18 199
rt300@18 200 void MessageOrganiser::mapControlToParam(UIElement* control, string paramName){
rt300@18 201 // get mapping ID from synth
rt300@18 202 int mappingID = candidateSynth.getMappingIDForName(paramName);
rt300@18 203 mapControlToParam(control, mappingID);
rt300@18 204 control->setLabel(paramName);
rt300@18 205 };
rt300@18 206
rt300@18 207 void MessageOrganiser::buttonPressCallback(int mappingID, int value){
rt300@18 208
rt300@18 209 };
rt300@18 210
rt300@18 211
rt300@18 212 void MessageOrganiser::setSlidersToTarget(){
rt300@18 213 // this will actually show sliders with target vals - for "memorisation" purposes mwa heh heh
rt300@18 214 // get target values
rt300@18 215 // set ui
rt300@18 216 vector<int> vals = targetSynth.getAllParamValues();
rt300@18 217 for(int i=1; i < vals.size(); i++){
rt300@18 218 setUIToParam(i, vals[i]);
rt300@18 219 }
rt300@18 220 }
rt300@21 221 void MessageOrganiser::showTargetAsHints(){
rt300@21 222 // int i = 0;
rt300@21 223 // vector<int> vals = targetSynth.getAllParamValues();
rt300@21 224 // for(auto elit=elems.begin(); elit<elems.end();elit++){
rt300@21 225 // ButtronSlider* theSlider = (ButtronSlider*)(*elit);
rt300@21 226 // theSlider->setHintValue(vals[i]);
rt300@21 227 // i++;
rt300@21 228 // }
rt300@21 229 }
rt300@18 230 void MessageOrganiser::setSlidersToDefault(){
rt300@22 231 for(int i=1; i < candidateSynth.getNumParams(); i++){
rt300@18 232 setUIToParam(i, 0);
rt300@22 233
rt300@18 234 }
rt300@22 235 }
rt300@22 236 void MessageOrganiser::setCandidateAndSlidersToRandom(){
rt300@22 237 vector<int> rands;
rt300@22 238 for(int i = 0; i < candidateSynth.getNumParams(); i++){
rt300@22 239
rt300@22 240 rands.push_back(rand() % 127);
rt300@22 241 }
rt300@22 242
rt300@22 243 setAllSlidersToValues(rands);
rt300@22 244 candidateSynth.setAllParams(rands);
rt300@22 245
rt300@18 246 }