Mercurial > hg > tweakathon2ios
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