예제 #1
0
void SamplePlayerNodeTestApp::processDrag( Vec2i pos )
{
	if( mGainSlider.hitTest( pos ) )
		mGain->setValue( mGainSlider.mValueScaled );
	else if( mPanSlider.hitTest( pos ) )
		mPan->setPos( mPanSlider.mValueScaled );
	else if( mLoopBeginSlider.hitTest( pos ) )
		mSamplePlayerNode->setLoopBeginTime( mLoopBeginSlider.mValueScaled );
	else if( mLoopEndSlider.hitTest( pos ) )
		mSamplePlayerNode->setLoopEndTime( mLoopEndSlider.mValueScaled );
	else if( pos.y > getWindowCenter().y )
		seek( pos.x );
}
예제 #2
0
bool Group::get_pan_if_changed(float *pan)
{
   *pan = pan_slider.get_cur_value() / 100.0 - 1.0;
   bool changed = (last_pan != *pan);
   last_pan = *pan;
   return changed;
}
예제 #3
0
bool Group::get_gain_if_changed(float *gain)
{
   *gain = gain_slider.get_cur_value() / 100.0;
   bool changed = (last_gain != *gain);
   last_gain = *gain;
   return changed;
}
예제 #4
0
void VoiceTestApp::setupUI()
{
	mPlayButton = Button( false, "start" );
	mPlayButton.mBounds = Rectf( 0, 0, 200, 60 );
	mWidgets.push_back( &mPlayButton );

	mTestSelector.mSegments.push_back( "basic" );
	mTestSelector.mSegments.push_back( "basic stereo" );
	mTestSelector.mSegments.push_back( "file 2" );
	mTestSelector.mSegments.push_back( "scope" );
	mWidgets.push_back( &mTestSelector );

	mVolumeSlider.mTitle = "Volume";
	mVolumeSlider.mMax = 1;
	mVolumeSlider.set( mVoice->getVolume() );
	mWidgets.push_back( &mVolumeSlider );

//	mEnableSineButton.mIsToggle = true;
//	mEnableSineButton.mTitleNormal = "sine disabled";
//	mEnableSineButton.mTitleEnabled = "sine enabled";
//	mEnableSineButton.mBounds = Rectf( 0, 70, 200, 120 );
//	mWidgets.push_back( &mEnableSineButton );


	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();
}
예제 #5
0
void VoiceTestApp::setup()
{
	mVolumeSlider.set( DEFAULT_VOLUME );

	setupBasic();

	PRINT_GRAPH( audio::master() );

	setupUI();
}
예제 #6
0
void SamplePlayerNodeTestApp::processDrag( ivec2 pos )
{
	if( mGainSlider.hitTest( pos ) )
		mGain->setValue( mGainSlider.mValueScaled );
	else if( mPanSlider.hitTest( pos ) ) {
#if TEST_STEREO_INPUT_PANNING
		mPan->getParamPos()->applyRamp( mPanSlider.mValueScaled, 0.6f );
#else
		mPan->setPos( mPanSlider.mValueScaled );
#endif
	}
	else if( mLoopBeginSlider.hitTest( pos ) )
		mSamplePlayerNode->setLoopBeginTime( mLoopBeginSlider.mValueScaled );
	else if( mLoopEndSlider.hitTest( pos ) )
		mSamplePlayerNode->setLoopEndTime( mLoopEndSlider.mValueScaled );
	else if( mTriggerDelaySlider.hitTest( pos ) ) {
	}
	else if( pos.y > getWindowCenter().y )
		seek( pos.x );
}
예제 #7
0
float Group::get_phase() const
{
   return phase_slider.get_cur_value() / 100.0 - PI;
}
예제 #8
0
float Group::get_frequency() const
{
   return freq_slider.get_cur_value();
}
예제 #9
0
void DeviceTestApp::processDrag( ivec2 pos )
{
    if( mGainSlider.hitTest( pos ) )
        mGain->getParam()->applyRamp( mGainSlider.mValueScaled, 0.025f );
}
예제 #10
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();
}
예제 #11
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();
}
EditorImportTextureOptions::EditorImportTextureOptions() {


	updating=false;
	format = memnew( OptionButton );

	format->add_item("Uncompressed",EditorTextureImportPlugin::IMAGE_FORMAT_UNCOMPRESSED);
	format->add_item("Compress Lossless (PNG)",EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSLESS);
	format->add_item("Compress Lossy (WebP)",EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSY);
	format->add_item("Compress (VRAM)",EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_RAM);


	add_margin_child("Texture Format",format);

	quality_vb = memnew( VBoxContainer );

	HBoxContainer *quality_hb = memnew(HBoxContainer);
	HSlider *hs = memnew( HSlider );
	hs->set_h_size_flags(SIZE_EXPAND_FILL);
	hs->set_stretch_ratio(0.8);
	quality_hb->add_child(hs);
	quality_hb->set_h_size_flags(SIZE_EXPAND_FILL);
	SpinBox *sb = memnew( SpinBox );
	sb->set_h_size_flags(SIZE_EXPAND_FILL);
	sb->set_stretch_ratio(0.2);
	quality_hb->add_child(sb);
	sb->share(hs);
	hs->set_min(0);
	hs->set_max(1.0);
	hs->set_step(0.01);
	hs->set_val(0.7);
	quality=hs;
	quality_vb->add_margin_child("Texture Compression Quality (WebP):",quality_hb);

	add_child(quality_vb);

	flags = memnew( Tree );
	flags->set_hide_root(true);
	TreeItem *root = flags->create_item();



	const char ** fname=flag_names;

	while( *fname ) {

		TreeItem*ti = flags->create_item(root);
		ti->set_cell_mode(0,TreeItem::CELL_MODE_CHECK);
		ti->set_text(0,*fname);
		ti->set_editable(0,true);
		items.push_back(ti);
		fname++;
	}

	add_margin_child("Texture Options",flags,true);

	notice_for_2d = memnew( Label );
	notice_for_2d->set_text("NOTICE: You are not forced to import textures for 2D projects. Just copy your .jpg or .png files to your project, and change export options later. Atlases can be generated on export too.");
	notice_for_2d->set_custom_minimum_size(Size2(0,50));
	notice_for_2d->set_autowrap(true);
	add_child(notice_for_2d);
	notice_for_2d->hide();

}
예제 #13
0
void VoiceTestApp::processDrag( Vec2i pos )
{
	if( mVolumeSlider.hitTest( pos ) )
		mVoice->setVolume( mVolumeSlider.mValueScaled );
}