void NodeBasic::draw() { gl::clear( Color( 0, mGain->getValue(), 0.2f ) ); }
void DeviceTestApp::setupUI() { mInputDeviceNodeUnderrunFade = mInputDeviceNodeOverrunFade = mOutputDeviceNodeClipFade = 0; mViewYOffset = 0; mPlayButton = Button( true, "stopped", "playing" ); mWidgets.push_back( &mPlayButton ); mRecordButton = Button( false, "record" ); mWidgets.push_back( &mRecordButton ); mTestSelector.mSegments.push_back( "sinewave" ); mTestSelector.mSegments.push_back( "noise" ); mTestSelector.mSegments.push_back( "input (pulled)" ); mTestSelector.mSegments.push_back( "I/O (clean)" ); mTestSelector.mSegments.push_back( "I/O (processed)" ); mTestSelector.mSegments.push_back( "I/O and sine" ); mTestSelector.mSegments.push_back( "send" ); mTestSelector.mSegments.push_back( "send stereo" ); mWidgets.push_back( &mTestSelector ); #if defined( CINDER_COCOA_TOUCH ) mPlayButton.mBounds = Rectf( 0, 0, 120, 60 ); mRecordButton.mBounds = Rectf( 130, 0, 190, 34 ); mTestSelector.mBounds = Rectf( getWindowWidth() - 190, 0, getWindowWidth(), 180 ); #else mPlayButton.mBounds = Rectf( 0, 0, 200, 60 ); mRecordButton.mBounds = Rectf( 210, 0, 310, 40 ); mTestSelector.mBounds = Rectf( getWindowCenter().x + 110, 0, (float)getWindowWidth(), 180 ); #endif mGainSlider.mBounds = Rectf( mTestSelector.mBounds.x1, mTestSelector.mBounds.y2 + 10, mTestSelector.mBounds.x2, mTestSelector.mBounds.y2 + 50 ); mGainSlider.mTitle = "GainNode"; mGainSlider.set( mGain->getValue() ); mWidgets.push_back( &mGainSlider ); mOutputSelector.mTitle = "Output Devices"; mOutputSelector.mBounds = Rectf( mTestSelector.mBounds.x1, getWindowCenter().y + 40, (float)getWindowWidth(), (float)getWindowHeight() ); if( mOutputDeviceNode ) { for( const auto &dev : audio::Device::getOutputDevices() ) { if( dev == mOutputDeviceNode->getDevice() ) mOutputSelector.mCurrentSectionIndex = mOutputSelector.mSegments.size(); mOutputSelector.mSegments.push_back( dev->getName() ); } } mWidgets.push_back( &mOutputSelector ); mInputSelector.mTitle = "Input Devices"; mInputSelector.mBounds = mOutputSelector.mBounds - vec2( mOutputSelector.mBounds.getWidth() + 10, 0 ); if( mOutputDeviceNode ) { for( const auto &dev : audio::Device::getInputDevices() ) { if( dev == mInputDeviceNode->getDevice() ) mInputSelector.mCurrentSectionIndex = mInputSelector.mSegments.size(); mInputSelector.mSegments.push_back( dev->getName() ); } } mWidgets.push_back( &mInputSelector ); Rectf textInputBounds( 0, getWindowCenter().y + 40, 200, getWindowCenter().y + 70 ); mSamplerateInput.mBounds = textInputBounds; mSamplerateInput.mTitle = "samplerate"; mSamplerateInput.setValue( audio::master()->getSampleRate() ); mWidgets.push_back( &mSamplerateInput ); textInputBounds += vec2( 0, textInputBounds.getHeight() + 24 ); mFramesPerBlockInput.mBounds = textInputBounds; mFramesPerBlockInput.mTitle = "frames per block"; mFramesPerBlockInput.setValue( audio::master()->getFramesPerBlock() ); mWidgets.push_back( &mFramesPerBlockInput ); textInputBounds += vec2( 0, textInputBounds.getHeight() + 24 ); mNumInChannelsInput.mBounds = textInputBounds; mNumInChannelsInput.mTitle = "num inputs"; if( mInputDeviceNode ) mNumInChannelsInput.setValue( mInputDeviceNode->getNumChannels() ); mWidgets.push_back( &mNumInChannelsInput ); textInputBounds += vec2( 0, textInputBounds.getHeight() + 24 ); mNumOutChannelsInput.mBounds = textInputBounds; mNumOutChannelsInput.mTitle = "num outputs"; if( mOutputDeviceNode ) mNumOutChannelsInput.setValue( mOutputDeviceNode->getNumChannels() ); mWidgets.push_back( &mNumOutChannelsInput ); textInputBounds += vec2( 0, textInputBounds.getHeight() + 24 ); mSendChannelInput.mBounds = textInputBounds; mSendChannelInput.mTitle = "send channel"; mSendChannelInput.setValue( 2 ); mWidgets.push_back( &mSendChannelInput ); vec2 xrunSize( 80, 26 ); mUnderrunRect = Rectf( 0, mPlayButton.mBounds.y2 + 10, xrunSize.x, mPlayButton.mBounds.y2 + xrunSize.y + 10 ); mOverrunRect = mUnderrunRect + vec2( xrunSize.x + 10, 0 ); mClipRect = mOverrunRect + vec2( xrunSize.x + 10, 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() ); } ); #if defined( CINDER_COCOA_TOUCH ) getSignalKeyboardWillShow().connect( [this] { timeline().apply( &mViewYOffset, -100.0f, 0.3f, EaseInOutCubic() ); } ); getSignalKeyboardWillHide().connect( [this] { timeline().apply( &mViewYOffset, 0.0f, 0.3f, EaseInOutCubic() ); } ); #endif gl::enableAlphaBlending(); }
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(); }