Пример #1
0
void NodeBasic::draw()
{
	gl::clear( Color( 0, mGain->getValue(), 0.2f ) );
}
Пример #2
0
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();
}
Пример #3
0
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();
}