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 ); }
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; }
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; }
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(); }
void VoiceTestApp::setup() { mVolumeSlider.set( DEFAULT_VOLUME ); setupBasic(); PRINT_GRAPH( audio::master() ); setupUI(); }
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 ); }
float Group::get_phase() const { return phase_slider.get_cur_value() / 100.0 - PI; }
float Group::get_frequency() const { return freq_slider.get_cur_value(); }
void DeviceTestApp::processDrag( ivec2 pos ) { if( mGainSlider.hitTest( pos ) ) mGain->getParam()->applyRamp( mGainSlider.mValueScaled, 0.025f ); }
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(); }
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(); }
void VoiceTestApp::processDrag( Vec2i pos ) { if( mVolumeSlider.hitTest( pos ) ) mVoice->setVolume( mVolumeSlider.mValueScaled ); }