annotate TestController.mm @ 2:851833072cf1

panel has 8 sliders if needed. sliders should get set by midi input.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Fri, 10 Oct 2014 18:13:24 +0100
parents a223551fdc1f
children 8124f46eda65
rev   line source
rt300@0 1 //
rt300@0 2 // TestController.mm
rt300@0 3 // tweakathlon
rt300@0 4 //
rt300@0 5 // Created by Robert Tubb on 16/01/2014.
rt300@0 6 //
rt300@0 7 //
rt300@0 8
rt300@0 9 #include "TestController.h"
rt300@0 10 const int TestController::numDifferentTests = 80;
rt300@0 11 const int TestController::totalNumTests = 80;
rt300@0 12
rt300@0 13
rt300@0 14 template <typename T>
rt300@2 15 vector<T> makeVector(T a1, T a2,T a3,T a4,T a5,T a6, T a7, T a8){
rt300@0 16
rt300@0 17 vector<T> vec;
rt300@0 18 vec.push_back(a1);
rt300@0 19 vec.push_back(a2);
rt300@0 20 vec.push_back(a3);
rt300@0 21 vec.push_back(a4);
rt300@0 22 vec.push_back(a5);
rt300@0 23 vec.push_back(a6);
rt300@2 24 vec.push_back(a7);
rt300@2 25 vec.push_back(a8);
rt300@0 26 return vec;
rt300@0 27 }
rt300@0 28
rt300@0 29 void randomise(int& n){
rt300@0 30 n = ofRandom(0,127);
rt300@0 31
rt300@0 32 }
rt300@0 33
rt300@0 34 vector<vector <bool> > makeCombinations(){
rt300@0 35 // make all unordered pairs
rt300@0 36 int N = TOTAL_NUM_PARAMS;
rt300@0 37
rt300@0 38 vector<vector <bool> > table;
rt300@0 39 for(int n=0; n < N-1; n++){
rt300@0 40
rt300@0 41 vector<bool> c(6, false);
rt300@0 42 for(int m=n+1; m<N; m++){
rt300@0 43
rt300@0 44 // reset all to false
rt300@0 45 for(int i=0; i<N; i++){
rt300@0 46 c[i] = false;
rt300@0 47 }
rt300@0 48
rt300@0 49 c[n] = true;
rt300@0 50 c[m] = true;
rt300@0 51
rt300@0 52 table.push_back(c);
rt300@0 53
rt300@0 54 }
rt300@0 55
rt300@0 56 }
rt300@0 57 return table;
rt300@0 58 }
rt300@0 59 //----------------------------------------------------------------------------------------
rt300@0 60
rt300@0 61 void TestController::generate2DRandomTests(){
rt300@0 62
rt300@0 63 controlPanelType panelType;
rt300@0 64 int numDimensions = 2;
rt300@0 65
rt300@0 66 vector<vector <bool> > ap = makeCombinations();
rt300@0 67 // 4 tests for each
rt300@0 68 int testsPerSpace = 2;
rt300@0 69 int numTests = 2 * testsPerSpace * ap.size();
rt300@0 70 int testNum = testList.size();
rt300@0 71 panelType = REVISITABLE;
rt300@0 72 for(int i=0;i<numTests/2; i++){
rt300@0 73 char letter = char(testNum+65);
rt300@0 74
rt300@0 75 testList.push_back(Test(letter,20, panelType, numDimensions, ap[floor(i/testsPerSpace)]));
rt300@0 76 testNum++;
rt300@0 77 }
rt300@0 78 panelType = SIMULTANEOUS;
rt300@0 79 for(int i=numTests/2+1;i<numTests; i++){
rt300@0 80 char letter = char(i+65);
rt300@0 81
rt300@0 82 testList.push_back(Test(letter,20, panelType, numDimensions, ap[floor((i-numTests/2)/testsPerSpace)]));
rt300@0 83
rt300@0 84 }
rt300@0 85 };
rt300@0 86 //------------------------------------------
rt300@0 87 // much better contruction!
rt300@0 88 void TestController::generateSomeTests(int howManyTests,
rt300@0 89 int numDimensions,
rt300@0 90 controlPanelType panelType,
rt300@0 91 int whichSpace,
rt300@0 92 bool scored,
rt300@0 93 bool aHint,
rt300@0 94 bool aMemoryTest){
rt300@0 95 int testNum = testList.size();
rt300@0 96
rt300@2 97 vector<bool> adjustables = makeVector(false, false, false, false, false, false, false, false);
rt300@2 98 vector<int> target = makeVector(40,64, 10, 74, 21, 80,45 ,45 ); // the default target
rt300@0 99
rt300@0 100 // big if - good spaces for each num of dimensions
rt300@0 101 if(numDimensions == 1){
rt300@0 102 // def 64,64, 30, 55, 42, 43;
rt300@0 103
rt300@0 104 adjustables[whichSpace-1] = true;
rt300@0 105
rt300@0 106 }else if(numDimensions == 2){
rt300@0 107
rt300@0 108 if (whichSpace == 1){
rt300@2 109 target = makeVector(64,64, 30, 55, 40, 43, 0, 0);
rt300@0 110 adjustables[0] = true; // pitch
rt300@0 111 adjustables[3] = true; // decay
rt300@0 112 }else if(whichSpace == 2){
rt300@0 113
rt300@0 114
rt300@2 115 target = makeVector(64,64, 0, 90, 20, 127, 0, 0);
rt300@0 116 adjustables[3] = true; // decay
rt300@0 117 adjustables[5] = true; // cutoff
rt300@0 118 }else if(whichSpace == 3){
rt300@2 119 target = makeVector(56,64, 20, 64, 10, 90, 0, 0);
rt300@0 120
rt300@0 121 adjustables[1] = true; // pulse
rt300@0 122 adjustables[2] = true; // attack
rt300@0 123 }else if(whichSpace == 4){
rt300@2 124 target = makeVector(64,64, 0, 55, 40, 43, 0, 0);
rt300@0 125 adjustables[1] = true; // pulse
rt300@0 126 adjustables[4] = true; // ftype
rt300@0 127 }
rt300@0 128 }else if(numDimensions == 3){
rt300@0 129 if(whichSpace == 1){
rt300@2 130 target = makeVector(64,64, 10, 64, 41, 43, 0, 0);
rt300@0 131 adjustables[0] = true; // pitch
rt300@0 132 adjustables[3] = true; // decay
rt300@0 133 adjustables[5] = true; // cutoff
rt300@0 134 }else if(whichSpace == 2){
rt300@2 135 target = makeVector(12,64, 10, 67, 41, 64, 0, 0);
rt300@0 136 adjustables[1] = true; // pulse
rt300@0 137 adjustables[2] = true; // attack
rt300@0 138 adjustables[4] = true; // ftype
rt300@0 139 }
rt300@2 140 }else {
rt300@2 141 for (int i = 0; i < numDimensions; i++){
rt300@2 142 adjustables[i] = true; // pitch
rt300@2 143 }
rt300@0 144 }
rt300@2 145
rt300@2 146
rt300@0 147
rt300@0 148 for(int i=0; i < howManyTests; i++){
rt300@0 149 char letter = char(testNum+65);
rt300@0 150 testList.push_back(Test(letter,20, panelType, numDimensions, adjustables, target, scored, aHint, aMemoryTest));
rt300@0 151 }
rt300@0 152 }
rt300@0 153
rt300@0 154
rt300@0 155 //-------------------------------------------
rt300@0 156 void TestController::generate4DTests(){
rt300@0 157 // 4d seq - learnable??
rt300@0 158 }