changeset 50:d0f6c5293d6a

demo and exp finish the logs. half metronome thing
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Tue, 27 Jan 2015 13:43:18 +0000
parents a62e033117fa
children 028b56c22a82
files ExpMessageOrganiser.h ExpMessageOrganiser.mm IntroViewController.xib SequenceController.h SequenceController.mm TrainingMessageOrganiser.mm testApp.h testApp.mm
diffstat 8 files changed, 135 insertions(+), 57 deletions(-) [+]
line wrap: on
line diff
--- a/ExpMessageOrganiser.h	Mon Jan 12 18:40:00 2015 +0000
+++ b/ExpMessageOrganiser.h	Tue Jan 27 13:43:18 2015 +0000
@@ -21,7 +21,9 @@
 public:
     void init( PDSynthWrapper& cs, PDSynthWrapper& ts);
     void setup(controlPanelType whichInterfaceAreWeUsing);
-    
+    void setNextButton(Buttron *b){
+        nextButt = b;
+    };
     vector<int> getMappingIDsFromSynths();
     void showCurrentSlot();
     void loadPreset(string pname);
@@ -31,6 +33,7 @@
     void loadDefaultSound();
     int numParamsToUse;
     Preset neutralPreset;
+    Buttron* nextButt;
 };
 
 
--- a/ExpMessageOrganiser.mm	Mon Jan 12 18:40:00 2015 +0000
+++ b/ExpMessageOrganiser.mm	Tue Jan 27 13:43:18 2015 +0000
@@ -23,6 +23,7 @@
     instructionPanel->show();
     bottomPanel->show();
     bottomPanel->showAllElements();
+    nextButt->hide();
     controlPanel->show();
     controlPanel->showValueIndicators(true);
     if (whichInterfaceAreWeUsing == LEAP6DOF){
@@ -51,6 +52,7 @@
 
     if(expPresetManager.getCurrentPresetSlot() == NULL){
         // hide next button
+        nextButt->hide();
         return;
     }
     presetIconPanel->setTextAndImage(expPresetManager.getCurrentPresetSlot()->name, expPresetManager.getCurrentPresetSlot()->getImage(),expPresetManager.getCurrentPresetSlot()->isFilled);
@@ -58,13 +60,15 @@
     //controlPanel->setIndicatorTexture(expPresetManager.getCurrentPresetSlot()->getImage());
     
     if(expPresetManager.getCurrentPresetSlot()->isFilled){
-        // show this preset on sliders
+        // was already saved, show it
         loadPreset(expPresetManager.getCurrentPresetSlot()->name);
         controlPanel->setAndShowHint(expPresetManager.getCurrentPresetSlot()->getValues(), expPresetManager.getCurrentPresetSlot()->getImage());
         targetSynth.setAllParams(expPresetManager.getCurrentPresetSlot()->getValues());
+        nextButt->show();
     }else{
-        // show default slidervals
+        // nothing saved yet show default slidervals
         loadDefaultSound();
+        nextButt->hide();
         controlPanel->showHint(false);
     }
 }
@@ -115,7 +119,7 @@
         }else{
             showCurrentSlot();
         }
-        
+        nextButt->show();
         return;
     }
     
--- a/IntroViewController.xib	Mon Jan 12 18:40:00 2015 +0000
+++ b/IntroViewController.xib	Tue Jan 27 13:43:18 2015 +0000
@@ -29,7 +29,7 @@
                     </connections>
                 </button>
                 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="WDx-XU-GHx">
-                    <rect key="frame" x="337" y="529" width="142" height="61"/>
+                    <rect key="frame" x="548" y="529" width="142" height="61"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                     <state key="normal" title="TRAIN" backgroundImage="buttron.png">
                         <color key="titleColor" red="0.28581259669999998" green="0.80918817929999998" blue="0.7302696877" alpha="1" colorSpace="calibratedRGB"/>
@@ -41,7 +41,7 @@
                     </connections>
                 </button>
                 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="ngS-Bg-YOQ">
-                    <rect key="frame" x="543" y="529" width="152" height="61"/>
+                    <rect key="frame" x="338" y="529" width="152" height="61"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                     <state key="normal" title="DEMO" backgroundImage="buttron.png">
                         <color key="titleColor" red="0.28581259669999998" green="0.80918817929999998" blue="0.7302696877" alpha="1" colorSpace="calibratedRGB"/>
@@ -53,9 +53,9 @@
                     </connections>
                 </button>
                 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="Lu7-vf-MBo">
-                    <rect key="frame" x="754" y="529" width="152" height="61"/>
+                    <rect key="frame" x="747" y="529" width="152" height="61"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                    <state key="normal" title="PERFORM" backgroundImage="buttron.png">
+                    <state key="normal" title="MEMORY" backgroundImage="buttron.png">
                         <color key="titleColor" red="0.28581259669999998" green="0.80918817929999998" blue="0.7302696877" alpha="1" colorSpace="calibratedRGB"/>
                         <color key="titleShadowColor" red="0.0" green="0.79530400820000002" blue="0.776555734" alpha="1" colorSpace="calibratedRGB"/>
                     </state>
@@ -64,13 +64,6 @@
                         <action selector="hide:" destination="-1" eventType="touchUpInside" id="hEY-Hb-kXd"/>
                     </connections>
                 </button>
-                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Welcome to the 6 parameter challenge. Please select an interface type and experiment stage. " textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="39" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="14">
-                    <rect key="frame" x="126" y="-139" width="773" height="735"/>
-                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                    <color key="textColor" red="0.43737351462381929" green="0.85799400252525249" blue="0.7533196695497848" alpha="1" colorSpace="calibratedRGB"/>
-                    <nil key="highlightedColor"/>
-                </label>
                 <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="6 PARAMETER CHALLENGE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="50">
                     <rect key="frame" x="384" y="76" width="256" height="24"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
@@ -89,6 +82,13 @@
                         <action selector="oninterfaceSelect:" destination="-1" eventType="valueChanged" id="CA1-3J-YuB"/>
                     </connections>
                 </segmentedControl>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Welcome to the 6 parameter challenge. Please select an interface type and experiment stage. " textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="39" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="14">
+                    <rect key="frame" x="126" y="114" width="773" height="248"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                    <color key="textColor" red="0.43737351462381929" green="0.85799400252525249" blue="0.7533196695497848" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
             </subviews>
             <color key="backgroundColor" cocoaTouchSystemColor="darkTextColor"/>
             <nil key="simulatedStatusBarMetrics"/>
--- a/SequenceController.h	Mon Jan 12 18:40:00 2015 +0000
+++ b/SequenceController.h	Tue Jan 27 13:43:18 2015 +0000
@@ -146,6 +146,7 @@
     void skipRun();
 private:
     void generateSteps();
+    void generateSteps12();
     void generateTestSequence(int run);
     void generateCountIn(int countInLength, int runNumber);
     void generateRun(int run, int numInSequence);// use this now
--- a/SequenceController.mm	Mon Jan 12 18:40:00 2015 +0000
+++ b/SequenceController.mm	Tue Jan 27 13:43:18 2015 +0000
@@ -192,7 +192,7 @@
     timeInc = (MAX_TIME - MIN_TIME) / NUM_TEMPO_STEPS;
     
     if (!demoMode){
-        generateSteps();
+        generateSteps12();
     }else{
         generateTestSequence(1);
         generateTestSequence(2);
@@ -232,6 +232,7 @@
 void SequenceController::skipRun(){
     // loop thru steps until next run reached
     if ( (*currentStep).isLastOfAll || (*currentStep).runNumber >= totNumRuns){
+        setToStart();
         return;
     }
     currentStep++; // IGNORE CURRENT STEP (LAST OF OLD RUN)
@@ -241,6 +242,7 @@
     while (!nextRunReached){
         currentStep++;
         if ( (*currentStep).isLastOfAll){
+            setToStart();
             return;
         }
         if ((*currentStep).runNumber != currentRunNumber && (*currentStep).runNumber != 0){
@@ -291,11 +293,33 @@
     totNumRuns = run-1;
     steps.back().isLastOfAll = true;
 };
+//-------------------------------------------------------------------
+void SequenceController::generateSteps12(){
+    srand (time(NULL));
+    
+    int run = 1;
+    
+    for(int rep = 0; rep < 4; rep++){
+    
+    for(int numInSequence = 1; numInSequence <= 3; numInSequence++){
+
+            generateCountIn(1,run);
+
+            generateRun(run, numInSequence);
+
+            steps.back().isLastOfRun = true;
+            run++;
+            cout << "-generate run finished-" << endl;
+        }
+    }
+    totNumRuns = run-1;
+    steps.back().isLastOfAll = true;
+};
 
 //-------------------------------------------------------------------
 void SequenceController::generateTestSequence(int run){
     // just make something simple to check sanity
-    generateCountIn(2,run);
+    generateCountIn(1,run);
     
     vector<int> seq = randomSequence(run);
     
@@ -334,7 +358,7 @@
     
     makeMatchingSequence(seq, 0, nextStep);
     makeMatchingSequence(seq, 0, nextStep);
-    nextStep.type = AnimStep::MATCHING_NEUTRAL_COUNT;
+    nextStep.type = AnimStep::MATCHING_LAST;
     steps.push_back(nextStep);
     
     totNumRuns = run;
--- a/TrainingMessageOrganiser.mm	Mon Jan 12 18:40:00 2015 +0000
+++ b/TrainingMessageOrganiser.mm	Tue Jan 27 13:43:18 2015 +0000
@@ -152,13 +152,23 @@
     stringstream s;
     
     s << "FINISHED RUN " << which << " OF " << sequenceController->getTotNumRuns() << endl;
+    
+    if ((which % 3) == 0){
+        s << "sequence will be 1 sound long";
+    }
+    if ((which % 3) == 1){
+        s << "sequence will be 2 sounds long";
+    }
+    if ((which % 3) == 2){
+        s << "sequence will be 3 sounds long";
+    }
     controlPanel->hide();
     controlPanel->setColor(ofColor::black);
     middlePanel->setText(s.str());
     middlePanel->show();
     //playCandidateButton->setLabel("NEXT");
     s.str("");
-    s << ">> " << which+1;
+    s << "skp" << which+1;
     skipButton->setLabel(s.str());
     
     bottomPanel->show();
@@ -176,10 +186,11 @@
     controlPanel->setColor(ofColor::black);
     middlePanel->setText("CONGRATULATIONS.\n FINISHED BLOCK!");
     middlePanel->show();
-    bottomPanel->showOnlyElementNamed("MENU");
+    //bottomPanel->showOnlyElementNamed("MENU");
     bottomPanel->show();
     seqNumPanel->hide();
     forgotButton->hide();
+    eventLogger.logEvent(FINISHED_RUN);
     eventLogger.saveSessionToFile();
 }
 
@@ -203,17 +214,32 @@
     static vector<int> lastPosition = zeros<int>(TOTAL_NUM_PARAMS);
     
     //cout << "TICK " << tickNumber << endl;
-    downCounter = 4 - tickNumber % 4;
     
-    updateCountdown(downCounter);
-    // only first beat in bar is active one (at the moment)
-    //  send next target values 1 step before them play
-    if ( tickNumber % 4  != 0) {
-        if (tickNumber % 4  == 3){
-            targetSynth.sendAllParams();
-        }
-        return;
-    };
+    // HALF METRO
+    bool halfMetro = false;
+    
+    if ( halfMetro){
+        downCounter = 2 - tickNumber % 2;
+        
+        if ( tickNumber % 2  != 0) {
+            if (tickNumber % 2  == 1){
+                targetSynth.sendAllParams();
+            }
+            return;
+        };
+    }else{
+        downCounter = 4 - tickNumber % 4;
+        
+        updateCountdown(downCounter);
+        // only first beat in bar is active one (at the moment)
+        //  send next target values 1 step before them play
+        if ( tickNumber % 4  != 0) {
+            if (tickNumber % 4  == 3){
+                targetSynth.sendAllParams();
+            }
+            return;
+        };
+    }
     
     
     Preset* previousTargetPreset;
@@ -251,8 +277,11 @@
         lastOfRun(newStep.runNumber);
         return;
     }
-    
-    candidateSynth.setMetroTime(newStep.getTimeBetweenTicks());
+    if(halfMetro){
+        candidateSynth.setMetroTime(newStep.getTimeBetweenTicks()*2);
+    }else{
+        candidateSynth.setMetroTime(newStep.getTimeBetweenTicks());
+    }
     Preset * currentTargetPreset;
     if(newStep.presetIndex == -1){
         currentTargetPreset =  expPresetManager.getNeutralPreset();
@@ -261,10 +290,10 @@
         
         currentTargetPreset =  expPresetManager.getPresetAtIndex(newStep.presetIndex);
         if (currentTargetPreset == NULL){
-            displayInstructions("No stored preset!\n please go back to menu and choose EXP");
+            displayInstructions("No stored preset!\n please restert and choose EXP");
             
             bottomPanel->show();
-            bottomPanel->showOnlyElementNamed("MENU");
+            //bottomPanel->showOnlyElementNamed("MENU");
             candidateSynth.stopMetronome();
             return;
         }
@@ -332,7 +361,7 @@
     targetSynth.setAllParams(newTargetValues);
     //candidateSynth.setAllParams(newTargetValues);
     
-    displayInstructions("Get ready for preview");
+    displayInstructions("Prepare for next \n sequence preview");
     seqNumPanel->hide();
 
     controlPanel->setColor(ofColor::black);
@@ -569,7 +598,7 @@
 //-----------------------------------------------------------------------------
 
 void TrainingMessageOrganiser::reset(){
-    
+    // DONT CALL THIS!
     // tell testapp to start again?
     candidateSynth.stopMetronome();
     controlPanel->hide();
@@ -577,7 +606,7 @@
     sequenceController->clearAll();
     trainingScoreManager.reset();
     seqNumPanel->hide();
-    eventLogger.saveSessionToFile(); //?
+    //eventLogger.saveSessionToFile(); //?
     
 }
 //-----------------------------------------------------------------------------
--- a/testApp.h	Mon Jan 12 18:40:00 2015 +0000
+++ b/testApp.h	Tue Jan 27 13:43:18 2015 +0000
@@ -182,6 +182,8 @@
 
     controlPanelType whichInterfaceAreWeUsing;
     int screenWidth, screenHeight;
+    
+    string midiPorts;
 };
 
 // should be off split into
--- a/testApp.mm	Mon Jan 12 18:40:00 2015 +0000
+++ b/testApp.mm	Tue Jan 27 13:43:18 2015 +0000
@@ -124,7 +124,8 @@
     nextPresetButton->setLabel("NEXT");
     expMessageOrganiser.mapButtonToAction(nextPresetButton, NEXT_PRESET_HIT);
     bottomButtonPanel->addButton(nextPresetButton);
-    
+    expMessageOrganiser.setNextButton(nextPresetButton);
+    nextPresetButton->hide();
     
     Buttron * menuButton = new Buttron(props->buttonWidth*1.4,680, *props);
     menuButton->setLabel("MENU");
@@ -162,19 +163,19 @@
     forgotButton->setXPosition(40);
     forgotButton->hide();
     
-    Buttron * playCandidateButton = new Buttron(props->buttonWidth*1.4,680, *props);
-    playCandidateButton->setLabel("START RUN");
+    Buttron * playCandidateButton = new Buttron(props->buttonWidth*1.4,680, props->buttonWidth*1.4,props->buttonHeight ,*props);
+    playCandidateButton->setLabel("START NEXT RUN");
     trainingMessageOrganiser.mapButtonToAction(playCandidateButton, START_TRAINING_SEQUENCE_ID);
     bottomButtonPanel->addButton(playCandidateButton);
     
-    Buttron * menuButton = new Buttron(props->buttonWidth*1.4,680, *props);
-    menuButton->setLabel("TO MENU");
-    mapButtonToAction(menuButton, TO_MENU_ID);
-    //trainingMessageOrganiser.mapButtonToAction(menuButton, TO_MENU_ID);
-    bottomButtonPanel->addButton(menuButton);
+//    Buttron * menuButton = new Buttron(props->buttonWidth*1.4,680, *props);
+//    menuButton->setLabel("TO MENU");
+//    mapButtonToAction(menuButton, TO_MENU_ID);
+//    //trainingMessageOrganiser.mapButtonToAction(menuButton, TO_MENU_ID);
+//    bottomButtonPanel->addButton(menuButton);
     
-    Buttron * skipButton = new Buttron(props->buttonWidth*0.5,680, *props);
-    skipButton->setLabel("SKIP RUN");
+    Buttron * skipButton = new Buttron(props->buttonWidth*0.5,680, props->buttonHeight*1.4,props->buttonHeight , *props);
+    skipButton->setLabel(">> 2");
     trainingMessageOrganiser.mapButtonToAction(skipButton, SKIP_RUN_ID);
     trainingMessageOrganiser.setSkipButton(skipButton);
     //trainingMessageOrganiser.mapButtonToAction(menuButton, TO_MENU_ID);
@@ -194,8 +195,6 @@
     trainingMessageOrganiser.setInstructionPanel(instructionPanel);
     instructionPanel->hide();
     
-
-    
     
 }
 //--------------------------------------------------------------
@@ -324,7 +323,7 @@
     UIElements.push_back(scoreNumPanel);
     scoreNumPanel->show();
     
-    TextPanel * middlePanel = new TextPanel("Middle panel", 300, 400, 400,400,(*props));
+    TextPanel * middlePanel = new TextPanel("Middle panel", 250, 400, 400,400,(*props));
     
     middlePanel->setFontSize(LARGEFONT);
     UIElements.push_back(middlePanel);
@@ -523,14 +522,15 @@
     
 }
 void testApp::backToMainMenu(){
-    expMessageOrganiser.reset();
+    //expMessageOrganiser.reset();
     expMessageOrganiser.hideMyPanels();
-    trainingMessageOrganiser.reset();
+    //trainingMessageOrganiser.reset();
     trainingMessageOrganiser.hideMyPanels();
-    searchMessageOrganiser.reset();
+    //searchMessageOrganiser.reset();
     searchMessageOrganiser.hideMyPanels();
     [introViewController show:(__bridge id)this];
     eventLogger.logEvent(RUN_SKIPPED);
+    eventLogger.saveSessionToFile();
 }
 //-------------------------------
 void testApp::interfaceSelected(int interfaceSelection){
@@ -691,6 +691,7 @@
     
     
     drawUIElements();
+
     
     //ofSetColor(234, 234, 234);
     //ofLine(0,150,1024,150);
@@ -700,6 +701,13 @@
         searchMessageOrganiser.drawScore();
     
     //image.draw(10,10,200,200);
+    
+    stringstream s;
+    s << " MIDI " << endl;
+    for (int i = 0; i < outputs.size(); i++){
+        s << inputs[i]->getName() << endl;;
+    }
+    props->smallFont.drawString(s.str(), 10, 10);
 
 }
 //------------------------------------------------------------------------
@@ -846,7 +854,11 @@
 
 //--------------------------------------------------------------
 void testApp::newMidiMessage(ofxMidiMessage& msg) {
-    
+    static int n = 0;
+    n++;
+    stringstream s;
+    s << n;
+    midiPorts = s.str();
     // looks out for: 30 31 32... on channel 8
     if(msg.channel == midiChannel && msg.status == MIDI_CONTROL_CHANGE){
         int ctl_num = msg.control - 30;
@@ -858,7 +870,7 @@
             searchMessageOrganiser.midiFromLeap(ctl_num, ctl_val);
         if (currentStage == EXPRESS)
             expMessageOrganiser.midiFromLeap(ctl_num, ctl_val);
-        if (currentStage == TRAINING)
+        if (currentStage == TRAINING || currentStage == DEMO)
             trainingMessageOrganiser.midiFromLeap(ctl_num, ctl_val);
         
     }
@@ -878,7 +890,7 @@
 	msg << "ofxMidi: input added: " << name << " network: " << isNetwork;
     cout << msg.str();
 	addMessage(msg.str());
-	
+    midiPorts = msg.str();
 	// create and open a new input port
 	ofxMidiIn * newInput = new ofxMidiIn;
 	newInput->openPort(name);
@@ -909,9 +921,12 @@
 
 //--------------------------------------------------------------
 void testApp::midiOutputAdded(string name, bool isNetwork) {
+    static int howmany = 0;
+    howmany++;
 	stringstream msg;
-	msg << "ofxMidi: output added: " << name << " network: " << isNetwork << endl;
+	msg << "Midi out add: " << howmany << " \n" << name << " network: " << isNetwork << endl;
     cout << msg.str();
+    
 	addMessage(msg.str());
 	
 	// create and open new output port