annotate TrainingMessageOrganiser.h @ 10:e25d2b1b185e

Sequence manager generates sequences of target sounds. psudocode for onTick()
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Fri, 17 Oct 2014 19:23:30 +0100
parents d5e928887f51
children 91c3fba6e5b9
rev   line source
rt300@8 1 //
rt300@8 2 // TrainingMessageOrganiser.h
rt300@8 3 // riftathon
rt300@8 4 //
rt300@8 5 // Created by Robert Tubb on 17/10/2014.
rt300@8 6 //
rt300@8 7 //
rt300@8 8
rt300@8 9 #ifndef __riftathon__TrainingMessageOrganiser__
rt300@8 10 #define __riftathon__TrainingMessageOrganiser__
rt300@8 11
rt300@8 12 #include <iostream>
rt300@9 13 #include "trainingTestController.h"
rt300@9 14 #include "MessageOrganiser.h"
rt300@10 15 #include "SequenceController.h"
rt300@10 16
rt300@10 17 extern ExplorePresetManager expPresetManager;
rt300@10 18
rt300@9 19 class TrainingMessageOrganiser : public MessageOrganiser {
rt300@9 20 public:
rt300@9 21 void init( PDSynthWrapper& cs, PDSynthWrapper& ts){
rt300@9 22
rt300@9 23 trainingTestController = new TrainingTestController;
rt300@9 24
rt300@9 25 MessageOrganiser::init(cs,ts);
rt300@8 26
rt300@9 27 }
rt300@8 28
rt300@9 29 void setupDefaultMapping(){
rt300@9 30 vector<int> mappingIDsForChangeableParams = getMappingIDsFromSynths();
rt300@9 31
rt300@9 32 controlPanelType cpt = REVISITABLE;
rt300@9 33 vector<controllerType> elemList;
rt300@9 34 for(int i = 0; i < 8; i++){
rt300@9 35 elemList.push_back(SLIDER);
rt300@9 36 }
rt300@9 37
rt300@9 38 vector<UIElement*> UIElemHandles = panel->generateControls(elemList, cpt);
rt300@9 39
rt300@9 40 mapSlidersToParams(UIElemHandles, mappingIDsForChangeableParams);
rt300@9 41
rt300@9 42 bottomPanel->show();
rt300@9 43 }
rt300@9 44
rt300@9 45 vector<int> getMappingIDsFromSynths(){
rt300@9 46 vector<int> index;
rt300@9 47 for(int i = 0; i < 8; i++){
rt300@9 48 index.push_back(i);
rt300@9 49 }
rt300@9 50 vector<int> mids = candidateSynth.getMappingIDForIndices(index);
rt300@9 51
rt300@9 52 return mids;
rt300@9 53 }
rt300@9 54
rt300@9 55 void setupNewTest(){
rt300@9 56
rt300@9 57
rt300@9 58 };
rt300@10 59
rt300@10 60 void onNextTick(int tickNumber){
rt300@10 61 if ( tickNumber % 2){
rt300@10 62 // load next target preset
rt300@10 63 int i = sequenceController.getNextPresetIndex();
rt300@10 64
rt300@10 65 currentTargetPreset = expPresetManager.getPreset(i);
rt300@10 66
rt300@10 67 if (sequencePreview){
rt300@10 68 // show next target preset
rt300@10 69
rt300@10 70 // show image
rt300@10 71 // show name
rt300@10 72 // show controllersettings
rt300@10 73
rt300@10 74
rt300@10 75 }else{ // the user is matching it
rt300@10 76 // show image
rt300@10 77 // show name
rt300@10 78
rt300@10 79 // if guided
rt300@10 80 // show controller guide
rt300@10 81 }
rt300@10 82
rt300@10 83
rt300@10 84 }else{ // we're plying the sound
rt300@10 85
rt300@10 86 //
rt300@10 87 if (sequencePreview){
rt300@10 88 // send target values again
rt300@10 89 targetSynth.setAllParams(currentTargetPreset->getValues());
rt300@10 90 targetSynth.trigger();
rt300@10 91
rt300@10 92 // flash the interface?
rt300@10 93 }else{
rt300@10 94 // else the user should be hitting the play button
rt300@10 95
rt300@10 96 }
rt300@10 97 }
rt300@10 98 }
rt300@10 99
rt300@9 100
rt300@9 101 protected:
rt300@10 102
rt300@10 103 void loadPreset(string pname){
rt300@10 104
rt300@10 105 vector<int> values = expPresetManager.recallPreset(pname);
rt300@10 106 if (values.size()){
rt300@10 107 candidateSynth.setAllParams(values);
rt300@10 108 setAllSlidersToValues(values);
rt300@10 109 }else{
rt300@10 110 cout << "ERROR, no preset found" << endl;
rt300@10 111 }
rt300@10 112 }
rt300@10 113
rt300@10 114
rt300@10 115 void showATargetPresetWithGuide(Preset * p){ // this is when demoing the sequence to the user
rt300@10 116 // p.show icon
rt300@10 117 vector<int> values = p->getValues();
rt300@10 118 if (values.size()){
rt300@10 119 candidateSynth.setAllParams(values);
rt300@10 120 setAllSlidersToValues(values);
rt300@10 121 }else{
rt300@10 122 cout << "WARNING, preset to show had no values" << endl;
rt300@10 123 }
rt300@10 124 }
rt300@10 125
rt300@9 126 void mapSlidersToParams(vector<UIElement*> elems, vector<int> mids){
rt300@9 127
rt300@9 128 vector<UIElement*>::iterator elit;
rt300@9 129 vector<int> typeListLog;
rt300@9 130 int i = 0;
rt300@9 131 for(elit=elems.begin(); elit<elems.end();elit++){
rt300@9 132 if ( (*elit)->getType() == SLIDER){
rt300@9 133 if(i >= mids.size()){
rt300@9 134
rt300@9 135 cout << "ERROR ERROR: too many controls for mapping IDs: " << mids.size() << endl;
rt300@9 136 }
rt300@9 137
rt300@9 138 ButtronSlider* theSlider = (ButtronSlider*)(*elit);
rt300@9 139 mapControlToParam((*elit), mids[i]);
rt300@9 140 theSlider->setValueAndScale(candidateSynth.getParamValueForID(mids[i]));
rt300@9 141 cout << "Hint Value " << targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])) << endl;
rt300@9 142 theSlider->setHintValue(targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])));
rt300@9 143 i++;
rt300@9 144 typeListLog.push_back(int(SLIDER));
rt300@9 145
rt300@9 146 }else{
rt300@9 147 cout << "ERROR ERROR: ui type not handled my mapping function !" << endl;
rt300@9 148 }
rt300@9 149 }
rt300@9 150
rt300@9 151 eventLogger.logEvent(CONTROL_LIST,typeListLog);
rt300@9 152 };
rt300@9 153
rt300@9 154 void buttonPressCallback(int mappingID, int value){
rt300@9 155 if(mappingID == VOLUME_CHANGE_ID){
rt300@9 156 targetSynth.sendVolume(value);
rt300@9 157 candidateSynth.sendVolume(value);
rt300@10 158 return;
rt300@9 159 }
rt300@9 160
rt300@9 161 if (mappingID == TRIGGER_CANDIDATE_ID){
rt300@9 162 triggerCandidateSound();
rt300@10 163 // compare to target
rt300@10 164 return;
rt300@10 165 }
rt300@10 166 if(mappingID == SAVE_PRESET_HIT){
rt300@10 167 expPresetManager.savePreset("blah", candidateSynth.getAllParamValues());
rt300@10 168 return;
rt300@10 169 }
rt300@10 170 if(mappingID == RECALL_PRESET_HIT){
rt300@10 171
rt300@10 172 loadPreset("blah");
rt300@9 173 return;
rt300@9 174 }
rt300@9 175 }
rt300@10 176 SequenceController sequenceController;
rt300@9 177 TrainingTestController* trainingTestController;
rt300@10 178 bool sequencePreview;
rt300@10 179 Preset * currentTargetPreset;
rt300@8 180 };
rt300@8 181 #endif /* defined(__riftathon__TrainingMessageOrganiser__) */