TFeedbackView::TFeedbackView( ParamList *inParamList ) : TPresView( inParamList ), upScale( NULL ), downScale( NULL ), scaleLength( 0 ), gmFBInterval( 0.0 ), xChannel( 0 ), yChannel( 0 ), bChannel( 0 ), visFBMode( 0 ), audFBMode( 0 ), fbAlwaysOn( 0 ), midiPlayer( NULL ), lastNote( 0 ), lastMidiNote( 0 ) #ifdef USE_WAVE_SYNTH , waveSynth( NULL ) #endif // USE_WAVE_SYNTH { artifact.AttachOptionalState( "Artifact", 0 ); PARAM_ENABLE( inParamList, PRVisFBMode ); PARAM_ENABLE( inParamList, PRAudFBMode ); PARAM_ENABLE( inParamList, PRFBAlwaysOn ); }
TScoreView::TScoreView( ParamList *inParamList ) : TPresView( inParamList ), scoreViewMode( 0 ) { artifact.AttachOptionalState( "Artifact", 0 ); PARAM_ENABLE( inParamList, PRScoreViewMode ); PARAM_ENABLE( inParamList, PRScoreRect ); PARAM_ENABLE( inParamList, PRScoreFont ); }
TStimulusView::TStimulusView( ParamList *inParamList ) : TPresView( inParamList ), visStimDuration( 0 ), wavePlayer( NULL ) { PARAM_ENABLE( inParamList, PRVisStimDuration ); }
TTargetView::TTargetView( ParamList *inParamList, int inTargetCode ) : TPresView( inParamList ), TGUITargetView( inTargetCode == 0 ? nullTargetViewZ : targetViewZ ), targetCode( inTargetCode ), visTaskMode( 0 ), visResultMode( 0 ), visGoal( false ), audTaskMode( 0 ), audResultMode( 0 ), continuousAudResult( 0 ), taskMidiPlayer( NULL ), resultMidiPlayer( NULL ), taskWavePlayer( NULL ), resultWavePlayer( NULL ), contResultWavePlayer( NULL ) { PARAM_ENABLE( inParamList, PRContinuousAudResult ); if( targetCode == 0 ) { // Defaults are different for a target code of 0. PARAM_ENABLE( inParamList, PRVisTaskMode0 ); PARAM_ENABLE( inParamList, PRVisResultMode0 ); PARAM_ENABLE( inParamList, PRAudTaskMode0 ); PARAM_ENABLE( inParamList, PRAudResultMode0 ); } else { PARAM_ENABLE_SUFFIX( inParamList, PRVisTaskMode, targetCode ); PARAM_ENABLE_SUFFIX( inParamList, PRVisResultMode, targetCode ); PARAM_ENABLE_SUFFIX( inParamList, PRAudTaskMode, targetCode ); PARAM_ENABLE_SUFFIX( inParamList, PRAudResultMode, targetCode ); } PARAM_ENABLE_SUFFIX( inParamList, PRTargetFont, targetCode ); }
TPresError TFeedbackView::Initialize( ParamList *inParamList, const TGUIRect &inRect ) { viewRect = inRect; TGUIView::Resized(); PARAM_GET_NUM_BY_INDEX( inParamList, PRFBCoordChannels, 0, xChannel ); PARAM_GET_NUM_BY_INDEX( inParamList, PRFBCoordChannels, 1, yChannel ); PARAM_GET_NUM( inParamList, PRFBBrightnessChannel, bChannel ); PARAM_GET_NUM( inParamList, PRVisFBMode, visFBMode ); TPresError err; const char* fbCursorImg = NULL; switch( visFBMode ) { case 0: // none break; case 1: // cursor from file PARAM_ENABLE( inParamList, PRFBCursorImg ); PARAM_GET_STRING( inParamList, PRFBCursorImg, fbCursorImg ); // fallthrough case 2: // ball cursor err = TGUIFeedbackView::InitCursor( fbCursorImg ); if( err != presNoError ) return err; break; #ifdef PERUVIAN_BRIGHTNESS_HACK case 3: // brightness err = TGUIFeedbackView::InitCursor( PERUVIAN_CURSOR ); if( err != presNoError ) return err; break; #endif // PERUVIAN_BRIGHTNESS_HACK default: assert( false ); } PARAM_GET_NUM( inParamList, PRAudFBMode, audFBMode ); switch( audFBMode ) { case 0: // none break; case 1: // MIDI { int gmFBScale, gmFBInstrument, gmFBVolume; PARAM_ENABLE( inParamList, PRGMFBInterval ); PARAM_ENABLE( inParamList, PRGMFBScale ); PARAM_ENABLE( inParamList, PRGMFBInstrument ); PARAM_ENABLE( inParamList, PRGMFBVolume ); PARAM_ENABLE( inParamList, PRGMFBCenterNote ); PARAM_GET_NUM( inParamList, PRGMFBInterval, gmFBInterval ); PARAM_GET_NUM( inParamList, PRGMFBScale, gmFBScale ); switch( gmFBScale ) { case 0: // null scale upScale = downScale = nullScale; scaleLength = nullScaleLength; break; case 1: // chromatic upScale = downScale = chromaticScale; scaleLength = chromaticScaleLength; break; case 2: // major upScale = downScale = majorScale; scaleLength = majorScaleLength; break; case 3: // melodic minor upScale = melodicMinorUpScale; downScale = melodicMinorDownScale; scaleLength = minorScaleLength; break; case 4: // harmonic minor upScale = downScale = harmonicMinorScale; scaleLength = minorScaleLength; break; case 5: // pentatonic upScale = downScale = pentatonicScale; scaleLength = pentatonicScaleLength; break; case 6: // diatonic upScale = downScale = diatonicScale; scaleLength = diatonicScaleLength; break; default: return presParamOutOfRangeError; } PARAM_GET_NUM( inParamList, PRGMFBInstrument, gmFBInstrument ); PARAM_GET_NUM( inParamList, PRGMFBVolume, gmFBVolume ); PARAM_GET_NUM( inParamList, PRGMFBCenterNote, gmFBCenterNote ); midiPlayer = new MidiPlayer( gmFBInstrument, gmFBVolume ); } break; #ifdef USE_WAVE_SYNTH case 2: // continuous synth { int gmFBVolume; PARAM_ENABLE( inParamList, PRGMFBInterval ); PARAM_ENABLE( inParamList, PRGMFBVolume ); PARAM_ENABLE( inParamList, PRGMFBCenterNote ); PARAM_GET_NUM( inParamList, PRGMFBInterval, gmFBInterval ); PARAM_GET_NUM( inParamList, PRGMFBVolume, gmFBVolume ); PARAM_GET_NUM( inParamList, PRGMFBCenterNote, gmFBCenterNote ); waveSynth = new TWaveSynth; waveSynth->SetVolume( gmFBVolume / 128.0 ); float samplingRate, sampleBlockSize; PARAM_GET_NUM( inParamList, SamplingRate, samplingRate ); PARAM_GET_NUM( inParamList, SampleBlockSize, sampleBlockSize ); waveSynth->SetTimeConstant( 10 * sampleBlockSize / samplingRate ); } break; #endif // USE_WAVE_SYNTH default: assert( false ); } PARAM_GET_NUM( inParamList, PRFBAlwaysOn, fbAlwaysOn ); return presNoError; }