TEST( BaseAudioEvent, PositionInSeconds ) { BaseAudioEvent* audioEvent = new BaseAudioEvent(); float startPosition = randomFloat( 0, 10 ); float endPosition = startPosition + randomFloat( 0, 10 ); int SAMPLE_RATE = 44100; float expectedDuration = endPosition - startPosition; int expectedSampleStart = BufferUtility::secondsToBuffer( startPosition, SAMPLE_RATE ); int expectedSampleEnd = BufferUtility::secondsToBuffer( endPosition, SAMPLE_RATE ); int expectedSampleLength = ( expectedSampleEnd - expectedSampleStart ) - 1; audioEvent->setStartPosition( startPosition ); EXPECT_FLOAT_EQ( startPosition, audioEvent->getStartPosition() ); EXPECT_FLOAT_EQ( startPosition, audioEvent->getEndPosition() ) << "expected end position to equal start position (hasn't been explicitly set yet)"; EXPECT_FLOAT_EQ( 0, audioEvent->getDuration()) << "expected zero duration (duration nor end haven't been explicitly set yet)"; EXPECT_EQ( 0, audioEvent->getSampleLength()) << "expected zero sample length (duration nor end haven't been explicitly set yet)"; EXPECT_EQ( expectedSampleStart, audioEvent->getSampleStart() ) << "expected sample start to have been updated after setting start position"; audioEvent->setEndPosition( endPosition ); EXPECT_FLOAT_EQ( startPosition, audioEvent->getStartPosition() ); EXPECT_FLOAT_EQ( endPosition, audioEvent->getEndPosition() ); EXPECT_FLOAT_EQ( expectedDuration, audioEvent->getDuration() ); EXPECT_EQ( expectedSampleEnd, audioEvent->getSampleEnd()) << "expected sample end to have been updated after setting end position"; EXPECT_EQ( expectedSampleLength, audioEvent->getSampleLength()) << "expected sample length to have been updated after setting end position"; expectedDuration /= 2; float expectedEndPosition = startPosition + expectedDuration; audioEvent->setDuration( expectedDuration ); EXPECT_FLOAT_EQ( expectedDuration, audioEvent->getDuration() ); EXPECT_FLOAT_EQ( expectedEndPosition, audioEvent->getEndPosition()) << "expected end position to have corrected after updating of duration"; deleteAudioEvent( audioEvent ); }
TEST( BaseAudioEvent, PositionInSamples ) { BaseAudioEvent* audioEvent = new BaseAudioEvent(); int sampleLength = randomInt( 512, 8192 ); int sampleStart = randomInt( 0, sampleLength / 2 ); int expectedEnd = sampleStart + ( sampleLength - 1 ); audioEvent->setSampleStart ( sampleStart ); audioEvent->setSampleLength( sampleLength ); EXPECT_EQ( sampleStart, audioEvent->getSampleStart() ); EXPECT_EQ( expectedEnd, audioEvent->getSampleEnd() ); EXPECT_EQ( sampleLength, audioEvent->getSampleLength() ); // test whether values in seconds have updated accordingly int SAMPLE_RATE = 44100; float expectedStartPosition = BufferUtility::bufferToSeconds( sampleStart, SAMPLE_RATE ); float expectedEndPosition = BufferUtility::bufferToSeconds( expectedEnd, SAMPLE_RATE ); float expectedDuration = expectedEndPosition - expectedStartPosition; EXPECT_FLOAT_EQ( expectedStartPosition, audioEvent->getStartPosition() ); EXPECT_FLOAT_EQ( expectedEndPosition, audioEvent->getEndPosition() ); EXPECT_FLOAT_EQ( expectedDuration, audioEvent->getDuration() ); // test auto sanitation of properties audioEvent->setSampleEnd( expectedEnd * 2 ); EXPECT_EQ( expectedEnd, audioEvent->getSampleEnd() ) << "expected sample end not to exceed the range set by the sample start and length properties"; sampleLength /= 2; audioEvent->setSampleLength( sampleLength ); expectedEnd = sampleStart + ( sampleLength - 1 ); EXPECT_EQ( expectedEnd, audioEvent->getSampleEnd() ) << "expected sample end not to exceed the range set by the sample start and updated length properties"; // test non sanitation of properties for loopeable events audioEvent->setLoopeable( true ); expectedEnd *= 2; audioEvent->setSampleEnd( expectedEnd ); EXPECT_EQ( expectedEnd, audioEvent->getSampleEnd() ) << "expected sample end to exceed the range set by the sample start and length properties for loopeable event"; sampleLength /= 2; audioEvent->setSampleLength( sampleLength ); EXPECT_EQ( expectedEnd, audioEvent->getSampleEnd() ) << "expected sample end to exceed the range set by the sample start and updated length properties for loopeable event"; deleteAudioEvent( audioEvent ); }