Dynamic speed and skip silence - #301
Conversation
Add a podcast-only Smart-Skip toggle to the speed sheet while keeping the configured playback multiplier independent. The compact speed display and playback state now show the effective speed when Smart-Skip is active, and the sheet layout is scroll-controlled so the toggle stays reachable without overflow. Persist the Smart-Skip preference per account and include it in backup/restore. Enabling Smart-Skip on iOS queues a podcast episode download when local audio is required, then re-applies Smart-Skip after the completed download hot-swaps the current stream to local files. Use just_audio/ExoPlayer skip-silence for Android and add an iOS AVAssetReader-based silence analyzer plus native seek jumps for detected silent ranges. Track effective speed over the whole active play session so skipped silence increases the displayed virtual rate and local time-saved accounting uses that effective speed. Remove the old visible Equalizer skip-silence playback control path and add Dart unit coverage for the Smart-Skip effective-speed tracker, including skipped jumps, session averaging, reset behavior, and clamping.
Derive Smart-Skip visibility from the active podcast playback session instead of requiring the speed sheet's source item ID to match. Absorbing entries can carry a composite progress identity, which previously hid the toggle even while that episode was playing.\n\nListen for Chromecast changes in the sheet and keep Smart-Skip disabled when the active podcast episode is being cast.
Compare the effective Smart-Skip speed with the last value actually sent to the UI rather than the immediately preceding position sample. Whole-session averaging produces small per-sample changes, so the old 0.03 delta gate could suppress updates indefinitely even while the accumulated effective speed changed substantially.\n\nRefresh when the rendered two-decimal value changes, retain the one-second notification throttle, and cover gradual session savings plus display-value comparison in the tracker tests.
Preserve native iOS Smart-Skip jump boundaries through the Dart audio abstraction and log each exact jump with its skipped duration, cumulative session savings, base speed, and six-decimal effective speed.\n\nFor Android, where ExoPlayer does not expose individual silence ranges, derive cumulative saved time from content progress versus expected progress at the configured base speed and emit clearly labelled estimated skip logs. Reset all diagnostic counters with the existing Smart-Skip session tracker and extend unit coverage for jump duration, estimated savings, and reset behavior.
Apply the persisted podcast Smart-Skip preference synchronously before each new audio source is loaded and re-apply it after a successful source replacement so platform player recreation cannot leave the visible toggle out of sync with playback behavior.\n\nWhen Smart-Skip remains enabled for a newly played iOS episode, automatically ensure its local download is queued. The existing completion hot-swap then reapplies Smart-Skip and starts native silence analysis without requiring the user to toggle the setting off and on again. Add concise apply-state diagnostics for restart verification.
Add an iOS-only Playback settings section for tuning the silence threshold, minimum silence duration, retained edge padding, and merge gap. Persist the values per account, include them in backup and restore, and pass updates through the Flutter bridge to the native analyzer. Active analyses are cancelled and restarted when settings change. Use less conservative Android-inspired defaults of -38 dBFS, 250 ms minimum silence, 120 ms merge gap, and 40 ms edge guards. Cover normalization and synthetic silence detection with Dart and XCTest tests.
Measure position sample intervals with microsecond precision and accept equal timestamps from back-to-back native Smart-Skip events. This prevents the effective speed tracker from falling back to the base speed after a successful iOS silence jump. Add a regression test for the native pre-seek and destination events sharing the same timestamp.
Podcast recordings often contain long pauses or silent sections that unnecessarily increase listening time. Playback speed alone cannot remove these gaps without also affecting spoken audio. Smart Skip automatically skips detected silence while preserving the configured playback speed. It also reports the effective playback speed, including the time saved by skipped silence. What Added an optional Smart Skip toggle to the podcast playback-speed sheet. Kept Smart Skip independent from the regular playback-speed multiplier. Added native silence skipping:Android uses ExoPlayer’s skip-silence support. iOS analyzes downloaded audio and seeks across detected silent ranges. Automatically downloads the current podcast episode when Smart Skip is enabled on iOS. Automatically activates Smart Skip once the required download completes. Restores the saved Smart Skip preference across app restarts and new playback sessions. Added an iOS-only configuration section under Settings → Playback for:Silence threshold Minimum silence duration Retained audio at silence boundaries Maximum gap used to merge adjacent silent ranges Updated the iOS defaults to be closer to Android’s behavior while remaining slightly more conservative. Added a session-based effective playback-speed calculation that includes skipped time. Reset the effective-speed session only on pause, stop, manual seek, track change, or playback-speed change. Added detailed debug output for individual jumps, total session time saved, and effective playback speed. Kept server progress based on the original episode position and real listening time. Added persistence and backup/restore support for Smart Skip settings. Disabled Smart Skip while casting. Added Dart and iOS regression tests for silence detection, settings normalization, effective-speed tracking, and back-to-back native jump events.
|
This may not be the right place to comment, but the app already has a Skip Silence toggle. It's present for books and podcasts rather than being exclusive to podcasts. Reading some of the notes on how you're implementing this feature, are you intending to not bring the updated functionality to the audiobooks library? |
I was only using absorb with my podcast library on audiobookshelf. I do not have any books in there - thus this is a mistake and not intentional. It should also be possible for books to use a silence-skip. You are saying it's already available on absorb? Seriously, where? I am on iOS and I did not find this option anywhere. |
|
looks like it was included in the 1.8.90 release, and it was marked as android only. |


Why
Podcast recordings often contain long pauses or silent sections that unnecessarily increase listening time. Playback speed alone cannot remove these gaps without also affecting spoken audio.
Smart Skip automatically skips detected silence while preserving the configured playback speed. It also reports the effective playback speed, including the time saved by skipped silence.
What