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 );
}
예제 #2
0
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 );
}
예제 #4
0
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;
}