Example #1
0
void DeviceTestApp::keyDown( KeyEvent event )
{
    TextInput *currentSelected = TextInput::getCurrentSelected();
    if( ! currentSelected )
        return;

    if( event.getCode() == KeyEvent::KEY_RETURN ) {
#if defined( CINDER_COCOA_TOUCH )
        hideKeyboard();
#endif

        try {
            if( currentSelected == &mSamplerateInput ) {
                int sr = currentSelected->getValue();
                CI_LOG_V( "updating samplerate from: " << mOutputDeviceNode->getSampleRate() << " to: " << sr );
                mOutputDeviceNode->getDevice()->updateFormat( audio::Device::Format().sampleRate( sr ) );
            }
            else if( currentSelected == &mFramesPerBlockInput ) {
                int frames = currentSelected->getValue();
                CI_LOG_V( "updating frames per block from: " << mOutputDeviceNode->getFramesPerBlock() << " to: " << frames );
                mOutputDeviceNode->getDevice()->updateFormat( audio::Device::Format().framesPerBlock( frames ) );
            }
            else if( currentSelected == &mNumInChannelsInput ) {
                int numChannels = currentSelected->getValue();
                CI_LOG_V( "updating nnm input channels from: " << mInputDeviceNode->getNumChannels() << " to: " << numChannels );
                setInputDevice( mInputDeviceNode->getDevice(), numChannels );
            }
            else if( currentSelected == &mNumOutChannelsInput ) {
                int numChannels = currentSelected->getValue();
                CI_LOG_V( "updating nnm output channels from: " << mOutputDeviceNode->getNumChannels() << " to: " << numChannels );
                setOutputDevice( mOutputDeviceNode->getDevice(), numChannels );
            }
            else if( currentSelected == &mSendChannelInput ) {
                if( mTestSelector.currentSection() == "send" || mTestSelector.currentSection() == "send stereo" )
                    setupTest( mTestSelector.currentSection() );
            }
            else
                CI_LOG_E( "unhandled return for string: " << currentSelected->mInputString );
        }
        catch( audio::AudioDeviceExc &exc ) {
            CI_LOG_E( "AudioDeviceExc caught, what: " << exc.what() );
            auto ctx = audio::master();
            mSamplerateInput.setValue( ctx->getSampleRate() );
            mFramesPerBlockInput.setValue( ctx->getFramesPerBlock() );
            return;
        }
    }
    else {
        if( event.getCode() == KeyEvent::KEY_BACKSPACE )
            currentSelected->processBackspace();
        else {
            currentSelected->processChar( event.getChar() );
        }
    }
}
Example #2
0
void DeviceTestApp::processTap( ivec2 pos )
{
//	TextInput *selectedInput = false;
    if( mPlayButton.hitTest( pos ) )
        audio::master()->setEnabled( ! audio::master()->isEnabled() );
    else if( mRecordButton.hitTest( pos ) )
        startRecording();
    else if( mSamplerateInput.hitTest( pos ) ) {
    }
    else if( mFramesPerBlockInput.hitTest( pos ) ) {
    }
    else if( mNumInChannelsInput.hitTest( pos ) ) {
    }
    else if( mNumOutChannelsInput.hitTest( pos ) ) {
    }
    else if( mSendChannelInput.hitTest( pos ) ) {
    }

#if defined( CINDER_COCOA_TOUCH )
    TextInput *currentSelected = TextInput::getCurrentSelected();
    if( currentSelected )
        showKeyboard( KeyboardOptions().type( KeyboardType::NUMERICAL ).initialString( currentSelected->mInputString ) );
#endif

    size_t currentTestIndex = mTestSelector.mCurrentSectionIndex;
    if( mTestSelector.hitTest( pos ) && currentTestIndex != mTestSelector.mCurrentSectionIndex ) {
        string currentTest = mTestSelector.currentSection();
        CI_LOG_V( "selected: " << currentTest );

        setupTest( currentTest );
        return;
    }

    size_t currentOutputIndex = mOutputSelector.mCurrentSectionIndex;
    if( mOutputSelector.hitTest( pos ) && currentOutputIndex != mOutputSelector.mCurrentSectionIndex ) {
        auto dev = audio::Device::findDeviceByName( mOutputSelector.mSegments[mOutputSelector.mCurrentSectionIndex] );
        CI_LOG_V( "selected output device named: " << dev->getName() << ", key: " << dev->getKey() );

        setOutputDevice( dev );
        return;
    }

    size_t currentInputIndex = mInputSelector.mCurrentSectionIndex;
    if( mInputSelector.hitTest( pos ) && currentInputIndex != mInputSelector.mCurrentSectionIndex ) {
        auto dev = audio::Device::findDeviceByName( mInputSelector.mSegments[mInputSelector.mCurrentSectionIndex] );
        CI_LOG_V( "selected input named: " << dev->getName() << ", key: " << dev->getKey() );

        setInputDevice( dev );
        return;
    }
}
Example #3
0
void VoiceTestApp::processTap( Vec2i pos )
{
	if( mPlayButton.hitTest( pos ) )
		mVoice->start();

	size_t currentIndex = mTestSelector.mCurrentSectionIndex;
	if( mTestSelector.hitTest( pos ) && currentIndex != mTestSelector.mCurrentSectionIndex ) {
		string currentTest = mTestSelector.currentSection();
		CI_LOG_V( "selected: " << currentTest );

		if( currentTest == "basic" )
			setupBasic();
		if( currentTest == "basic stereo" )
			setupBasicStereo();
		else if( currentTest == "scope" )
			setupScope();
		else if( currentTest == "file 2" )
			setupDifferentFile();

		PRINT_GRAPH( audio::master() );
	}
}
Example #4
0
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();
	}
}
Example #5
0
void DeviceTestApp::setInputDevice( const audio::DeviceRef &device, size_t numChannels  )
{
    audio::ScopedEnableNode enableNodeScope( mInputDeviceNode, false );

    if( mInputDeviceNode )
        mInputDeviceNode->disconnectAllOutputs();

    auto format = audio::Node::Format().autoEnable();
    if( numChannels )
        format.channels( numChannels );

    mInputDeviceNode = audio::master()->createInputDeviceNode( device, format );

    setupTest( mTestSelector.currentSection() );

    CI_LOG_V( "InputDeviceNode device properties: " );
    printDeviceDetails( device );
}
Example #6
0
void SamplePlayerNodeTestApp::update()
{
	// light up rects if an xrun was detected
	const float xrunFadeTime = 1.3f;
	auto filePlayer = dynamic_pointer_cast<audio::FilePlayerNode>( mSamplePlayerNode );
	if( filePlayer ) {
		if( filePlayer->getLastUnderrun() )
			timeline().apply( &mUnderrunFade, 1.0f, 0.0f, xrunFadeTime );
		if( filePlayer->getLastOverrun() )
			timeline().apply( &mOverrunFade, 1.0f, 0.0f, xrunFadeTime );
	}

	// print SamplePlayerNode start / stop times
	if( mSamplePlayerNodeEnabledState != mSamplePlayerNode->isEnabled() ) {
		mSamplePlayerNodeEnabledState = mSamplePlayerNode->isEnabled();
		string stateStr = mSamplePlayerNodeEnabledState ? "started" : "stopped";
		CI_LOG_V( "mSamplePlayerNode " << stateStr << " at " << to_string( getElapsedSeconds() ) << ", isEof: " << boolalpha << mSamplePlayerNode->isEof() << dec );
	}

	bool testIsRecorder = ( mTestSelector.currentSection() == "recorder" );
	mRecordButton.mHidden = mWriteButton.mHidden = mAutoResizeButton.mHidden = ! testIsRecorder;

	// test auto resizing the Recorder's buffer depending on how full it is
	if( testIsRecorder && mAutoResizeButton.mEnabled ) {
		CI_ASSERT( mRecorder );

		size_t writePos = mRecorder->getWritePosition();
		size_t numFrames = mRecorder->getNumFrames();

		if( writePos + mRecorder->getSampleRate() / 2 > numFrames ) {
			size_t resizeFrames = numFrames + mRecorder->getSampleRate();
			CI_LOG_V( "writePos: " << writePos << ", numFrames: " << numFrames << ", resizing frames to: " << resizeFrames );
			mRecorder->setNumFrames( resizeFrames );
		}

		if( mRecorder->getLastOverrun() )
			timeline().apply( &mRecorderOverrunFade, 1.0f, 0.0f, xrunFadeTime );
	}

}
Example #7
0
void SamplePlayerNodeTestApp::draw()
{
	gl::clear();

	if( mTestSelector.currentSection() == "recorder" ) {
		audio::BufferRef recordedBuffer = mRecorder->getRecordedCopy();
		drawAudioBuffer( *recordedBuffer, getWindowBounds() );
	}
	else {
		auto bufferPlayer = dynamic_pointer_cast<audio::BufferPlayerNode>( mSamplePlayerNode );
		if( bufferPlayer )
			mWaveformPlot.draw();
		else if( mMonitor && mMonitor->isInitialized() )
			drawAudioBuffer( mMonitor->getBuffer(), getWindowBounds() );

		float readPos = (float)getWindowWidth() * mSamplePlayerNode->getReadPosition() / mSamplePlayerNode->getNumFrames();
		gl::color( ColorA( 0, 1, 0, 0.7f ) );
		gl::drawSolidRoundedRect( Rectf( readPos - 2, 0, readPos + 2, (float)getWindowHeight() ), 2 );
	}

	if( mUnderrunFade > 0.0001f ) {
		gl::color( ColorA( 1, 0.5f, 0, mUnderrunFade ) );
		gl::drawSolidRect( mUnderrunRect );
		gl::drawStringCentered( "play underrun", mUnderrunRect.getCenter(), Color::black() );
	}
	if( mOverrunFade > 0.0001f ) {
		gl::color( ColorA( 1, 0.5f, 0, mOverrunFade ) );
		gl::drawSolidRect( mOverrunRect );
		gl::drawStringCentered( "play overrun", mOverrunRect.getCenter(), Color::black() );
	}

	if( mRecorderOverrunFade > 0.0001f ) {
		gl::color( ColorA( 1, 0.5f, 0, mRecorderOverrunFade ) );
		gl::drawSolidRect( mRecorderOverrunRect );
		gl::drawStringCentered( "rec overrun", mRecorderOverrunRect.getCenter(), Color::black() );
	}

	drawWidgets( mWidgets );
}