void SamplePlayerNodeTestApp::processTap( ivec2 pos ) { if( mEnableSamplePlayerNodeButton.hitTest( pos ) ) mSamplePlayerNode->setEnabled( ! mSamplePlayerNode->isEnabled() ); else if( mStartPlaybackButton.hitTest( pos ) ) triggerStartStop( true ); else if( mStopPlaybackButton.hitTest( pos ) ) triggerStartStop( false ); else if( mLoopButton.hitTest( pos ) ) mSamplePlayerNode->setLoopEnabled( ! mSamplePlayerNode->isLoopEnabled() ); else if( mRecordButton.hitTest( pos ) ) { if( mRecordButton.mEnabled ) mRecorder->start(); else mRecorder->disable(); } else if( mWriteButton.hitTest( pos ) ) writeRecordedToFile(); else if( mAutoResizeButton.hitTest( pos ) ) ; else if( mAsyncButton.hitTest( pos ) ) ; else if( pos.y > getWindowCenter().y ) seek( pos.x ); size_t currentIndex = mTestSelector.mCurrentSectionIndex; if( mTestSelector.hitTest( pos ) && currentIndex != mTestSelector.mCurrentSectionIndex ) { string currentTest = mTestSelector.currentSection(); CI_LOG_V( "selected: " << currentTest ); if( currentTest == "BufferPlayerNode" ) setupBufferPlayerNode(); if( currentTest == "FilePlayerNode" ) setupFilePlayerNode(); if( currentTest == "recorder" ) setupBufferRecorderNode(); } }
void SamplePlayerNodeTestApp::setupUI() { const float padding = 10.0f; auto buttonRect = Rectf( padding, padding, 200, 60 ); mEnableSamplePlayerNodeButton.mIsToggle = true; mEnableSamplePlayerNodeButton.mTitleNormal = "player off"; mEnableSamplePlayerNodeButton.mTitleEnabled = "player on"; mEnableSamplePlayerNodeButton.mBounds = buttonRect; mWidgets.push_back( &mEnableSamplePlayerNodeButton ); buttonRect += Vec2f( buttonRect.getWidth() + padding, 0 ); mStartPlaybackButton.mIsToggle = false; mStartPlaybackButton.mTitleNormal = "start"; mStartPlaybackButton.mBounds = buttonRect; mWidgets.push_back( &mStartPlaybackButton ); buttonRect += Vec2f( buttonRect.getWidth() + padding, 0 ); buttonRect.x2 -= 30; mLoopButton.mIsToggle = true; mLoopButton.mTitleNormal = "loop off"; mLoopButton.mTitleEnabled = "loop on"; mLoopButton.setEnabled( mSamplePlayerNode->isLoopEnabled() ); mLoopButton.mBounds = buttonRect; mWidgets.push_back( &mLoopButton ); buttonRect += Vec2f( buttonRect.getWidth() + padding, 0 ); mAsyncButton.mIsToggle = true; mAsyncButton.mTitleNormal = "async off"; mAsyncButton.mTitleEnabled = "async on"; mAsyncButton.mBounds = buttonRect; mWidgets.push_back( &mAsyncButton ); buttonRect = Rectf( padding, buttonRect.y2 + padding, padding + buttonRect.getWidth(), buttonRect.y2 + buttonRect.getHeight() + padding ); mRecordButton.mIsToggle = true; mRecordButton.mTitleNormal = "record off"; mRecordButton.mTitleEnabled = "record on"; mRecordButton.mBounds = buttonRect; mWidgets.push_back( &mRecordButton ); buttonRect += Vec2f( buttonRect.getWidth() + padding, 0 ); mWriteButton.mIsToggle = false; mWriteButton.mTitleNormal = "write to file"; mWriteButton.mBounds = buttonRect; mWidgets.push_back( &mWriteButton ); buttonRect += Vec2f( buttonRect.getWidth() + padding, 0 ); mAutoResizeButton.mIsToggle = true; mAutoResizeButton.mTitleNormal = "auto resize off"; mAutoResizeButton.mTitleEnabled = "auto resize on"; mAutoResizeButton.mBounds = buttonRect; mWidgets.push_back( &mAutoResizeButton ); Vec2f sliderSize( 200, 30 ); Rectf selectorRect( getWindowWidth() - sliderSize.x - padding, padding, getWindowWidth() - padding, sliderSize.y * 3 + padding ); mTestSelector.mSegments.push_back( "BufferPlayerNode" ); mTestSelector.mSegments.push_back( "FilePlayerNode" ); mTestSelector.mSegments.push_back( "recorder" ); mTestSelector.mBounds = selectorRect; mWidgets.push_back( &mTestSelector ); Rectf sliderRect( selectorRect.x1, selectorRect.y2 + padding, selectorRect.x2, selectorRect.y2 + padding + sliderSize.y ); // Rectf sliderRect( getWindowWidth() - 200.0f, kPadding, getWindowWidth(), 50.0f ); mGainSlider.mBounds = sliderRect; mGainSlider.mTitle = "GainNode"; mGainSlider.set( mGain->getValue() ); mWidgets.push_back( &mGainSlider ); sliderRect += Vec2f( 0, sliderRect.getHeight() + padding ); mPanSlider.mBounds = sliderRect; mPanSlider.mTitle = "Pan"; mPanSlider.set( mPan->getPos() ); mWidgets.push_back( &mPanSlider ); sliderRect += Vec2f( 0, sliderRect.getHeight() + padding ); mLoopBeginSlider.mBounds = sliderRect; mLoopBeginSlider.mTitle = "Loop Begin"; mLoopBeginSlider.mMax = (float)mSamplePlayerNode->getNumSeconds(); mLoopBeginSlider.set( (float)mSamplePlayerNode->getLoopBeginTime() ); mWidgets.push_back( &mLoopBeginSlider ); sliderRect += Vec2f( 0, sliderRect.getHeight() + padding ); mLoopEndSlider.mBounds = sliderRect; mLoopEndSlider.mTitle = "Loop End"; mLoopEndSlider.mMax = (float)mSamplePlayerNode->getNumSeconds(); mLoopEndSlider.set( (float)mSamplePlayerNode->getLoopEndTime() ); mWidgets.push_back( &mLoopEndSlider ); Vec2f xrunSize( 80, 26 ); mUnderrunRect = Rectf( padding, getWindowHeight() - xrunSize.y - padding, xrunSize.x + padding, getWindowHeight() - padding ); mOverrunRect = mUnderrunRect + Vec2f( xrunSize.x + padding, 0 ); mRecorderOverrunRect = mOverrunRect + Vec2f( xrunSize.x + padding, 0 ); getWindow()->getSignalMouseDown().connect( [this] ( MouseEvent &event ) { processTap( event.getPos() ); } ); getWindow()->getSignalMouseDrag().connect( [this] ( MouseEvent &event ) { processDrag( event.getPos() ); } ); getWindow()->getSignalTouchesBegan().connect( [this] ( TouchEvent &event ) { processTap( event.getTouches().front().getPos() ); } ); getWindow()->getSignalTouchesMoved().connect( [this] ( TouchEvent &event ) { for( const TouchEvent::Touch &touch : getActiveTouches() ) processDrag( touch.getPos() ); } ); gl::enableAlphaBlending(); }