コード例 #1
0
SInt64 MonkeysAudioDecoder::SeekToFrame(SInt64 frame)
{
	if(!IsOpen() || 0 > frame || frame >= GetTotalFrames())
		return -1;
	
	if(ERROR_SUCCESS != mDecompressor->Seek(static_cast<int>(frame)))
		return -1;

	return this->GetCurrentFrame();
}
コード例 #2
0
SInt64 WavPackDecoder::SeekToFrame(SInt64 frame)
{
	if(!IsOpen() || 0 > frame || frame >= GetTotalFrames())
		return -1;
	
	int result = WavpackSeekSample(mWPC, static_cast<uint32_t>(frame));
	if(result)
		mCurrentFrame = frame;
	
	return (result ? mCurrentFrame : -1);
}
コード例 #3
0
SInt64 SFB::Audio::Decoder::SeekToFrame(SInt64 frame)
{
	if(!IsOpen()) {
		LOGGER_INFO("org.sbooth.AudioEngine.Decoder", "SeekToFrame() called on a Decoder that hasn't been opened");
		return -1;
	}

	if(0 > frame || frame >= GetTotalFrames()) {
		LOGGER_WARNING("org.sbooth.AudioEngine.Decoder", "SeekToFrame() called with invalid parameters");
		return -1;
	}

	return _SeekToFrame(frame);
}
コード例 #4
0
SInt64 MODDecoder::SeekToFrame(SInt64 frame)
{
	if(!IsOpen() || 0 > frame || frame >= GetTotalFrames())
		return -1;

	// DUMB cannot seek backwards, so the decoder must be reset
	if(frame < mCurrentFrame) {
		if(!Close(NULL) || !GetInputSource()->SeekToOffset(0) || !Open(NULL)) {
			log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("org.sbooth.AudioEngine.AudioDecoder.MOD");
			LOG4CXX_ERROR(logger, "Error reseting DUMB decoder");
			return -1;
		}

		mCurrentFrame = 0;
	}

	long framesToSkip = frame - mCurrentFrame;
	duh_sigrenderer_generate_samples(dsr, 1, static_cast<float>(65536 / DUMB_SAMPLE_RATE), framesToSkip, NULL);
	mCurrentFrame += framesToSkip;
	
	return mCurrentFrame;
}
コード例 #5
0
SInt64 TrueAudioDecoder::SeekToFrame(SInt64 frame)
{
	if(!IsOpen() || 0 > frame || frame >= GetTotalFrames())
		return -1;

	TTAuint32 seconds = static_cast<TTAuint32>(frame / mSourceFormat.mSampleRate);
	TTAuint32 frame_start = 0;

	try {
		mDecoder->set_position(seconds, &frame_start);
	}
	catch(tta::tta_exception e) {
		LOGGER_WARNING("org.sbooth.AudioEngine.AudioDecoder.TrueAudio", "True Audio seek error: " << e.code());
		return -1;
	}

	mCurrentFrame = frame;

	// We need to skip some samples from start of the frame if required
	mFramesToSkip = UInt32((seconds - frame_start) * mSourceFormat.mSampleRate + 0.5);

	return mCurrentFrame;
}
コード例 #6
0
int RageSoundReader_Preload::GetLength() const
{
	return int(float(GetTotalFrames()) * 1000.f / m_iSampleRate);
}