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(); }
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); }
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); }
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; }
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; }
int RageSoundReader_Preload::GetLength() const { return int(float(GetTotalFrames()) * 1000.f / m_iSampleRate); }