rodio icon indicating copy to clipboard operation
rodio copied to clipboard

skip_duration is unusably slow

Open ivakam opened this issue 3 years ago • 4 comments

Calling skip_duration on a source seems to block the thread for a completely unacceptable amount of time (several seconds, often double-digit). My guess is that this is due to how skipping is implemented where the source is manually stepped forward frame-by-frame until the offset is reached. Is is possible that the source could instead be indexed to reach the correct offset directly? I feel this should be possible, at least with sources that are constant in sample rate (or rather, sources that already use do_skip_duration_unchecked).

ivakam avatar Sep 18 '22 18:09 ivakam

I suspect that because the skip_duration effect sits on top of what is essentially an iterator of audio samples it cannot directly jump forwards to where it needs to be...

callum-hopkins-dev avatar Apr 27 '23 07:04 callum-hopkins-dev

It should be possible to implement fast duration skipping at least with lewton: decoding is a choice for the users.

est31 avatar Apr 27 '23 12:04 est31

Absolutely, I think though that the Source trait would need to expose some sort of explicit skip frame function, so that the underlying file readers can safely jump through the audio file without attempting to decode the audio along the way...

callum-hopkins-dev avatar Apr 27 '23 12:04 callum-hopkins-dev

My solution to this was making my own Source impl that used seek on the Symphonia reader to skip forward, which was pretty much instantaneous.

dag-h avatar Apr 27 '23 12:04 dag-h