Commit e0e1097
committed
fix(audio): refill sink on loop end instead of repeat_infinite
rodio 0.17's `repeat_infinite()` wraps the source in `Buffered`, which
retains every decoded sample in RAM so the loop can replay from cache.
For long file-backed tracks (e.g. a multi-hour archived YouTube video)
this grows unbounded — observed ~7 GB RSS on a ~6-hour video.
For `PlaybackInput::File` repeating tracks, skip `repeat_infinite()` and
add `AudioPlayer::try_refill_loop()`: when the sink drains, reopen the
file, decode fresh, and append to the sink. `play_loop` polls this on
each tick and bumps the real loop counter when a refill happens.
Non-file repeating sources (SoundCloud / HypeM stream-first) still go
through `repeat_infinite()` since a consumed network stream can't be
cheaply re-opened, and keep their existing wall-clock loop estimate as
a fallback branch.1 parent f941341 commit e0e1097
2 files changed
Lines changed: 36 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
85 | 85 | | |
86 | 86 | | |
87 | 87 | | |
| 88 | + | |
| 89 | + | |
88 | 90 | | |
89 | 91 | | |
90 | 92 | | |
| |||
103 | 105 | | |
104 | 106 | | |
105 | 107 | | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
106 | 114 | | |
107 | | - | |
| 115 | + | |
108 | 116 | | |
109 | 117 | | |
110 | 118 | | |
| |||
127 | 135 | | |
128 | 136 | | |
129 | 137 | | |
| 138 | + | |
| 139 | + | |
130 | 140 | | |
131 | 141 | | |
132 | 142 | | |
| |||
141 | 151 | | |
142 | 152 | | |
143 | 153 | | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
144 | 171 | | |
145 | 172 | | |
146 | 173 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
346 | 346 | | |
347 | 347 | | |
348 | 348 | | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
349 | 353 | | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
350 | 358 | | |
351 | 359 | | |
352 | 360 | | |
| |||
0 commit comments