Changeset 4fbe2c1 in Klonkt for src/assets/js/audio-player.js
- Timestamp:
- 08/22/2026 10:35:33 AM (3 weeks ago)
- Branches:
- main
- Children:
- c0e463b
- Parents:
- 8bb3b09
- File:
-
- 1 edited
-
src/assets/js/audio-player.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/audio-player.js
r8bb3b09 r4fbe2c1 279 279 function preloadNext() { 280 280 if (queue.length < 2) return; 281 if (tapeMode && currentIndex >= queue.length - 1) return; // einde band 281 282 const ni = (currentIndex + 1) % queue.length; 282 283 const t = queue[ni]; … … 361 362 const start = chain.length ? chain[chain.length - 1].end : (buffered.length ? buffered.start(0) : 0); 362 363 chain.push({ qIndex, start, end: chainEnd }); 363 if (queue.length === 1 && ms && ms.readyState === 'open') { 364 // DE STREAM MOET DICHT ALS ER NIETS MEER KOMT, anders vuurt `ended` nooit. 365 // Bij een wachtrij van een was dat al zo. Een BANDJE heeft nu hetzelfde 366 // nodig: sinds hij niet meer rondloopt haakt de keten na het laatste nummer 367 // niets meer aan, en dan bleef de band aan het eind hangen -- de teller 368 // stilstaand op de laatste seconde, isPlaying() waar, en de spoelen 369 // draaiend. Gemeten op dev (22-8): 125,6 van 125,7 en daar bleef hij. 370 const laatsteVanDeBand = tapeMode && qIndex >= queue.length - 1; 371 if ((queue.length === 1 || laatsteVanDeBand) && ms && ms.readyState === 'open') { 364 372 // Single-track queue: close the stream so `ended` fires (which replays 365 // it, matching the old engine's behaviour). 373 // it, matching the old engine's behaviour). Bij een bandje stopt `ended` 374 // hem juist, want next() pauzeert daar aan het eind. 366 375 try { ms.endOfStream(); } catch (e) {} 367 376 } … … 374 383 const seg = currentSegment(); 375 384 if (!seg || chain.length - 1 - chain.indexOf(seg) >= 1) return; // already one ahead 376 const nextIdx = (chain[chain.length - 1].qIndex + 1) % queue.length; 385 // EEN BANDJE LOOPT NIET ROND (Robins eis, 22-8). Deze modulo is precies wat 386 // een cassette eindeloos maakte: na het laatste nummer hing hij nummer een 387 // er weer achter, en omdat het een doorlopende keten is merk je dat niet 388 // eens als een trackwissel -- de band gaat gewoon door. 389 const volgendeInRij = chain[chain.length - 1].qIndex + 1; 390 if (tapeMode && volgendeInRij > queue.length - 1) return; // einde band 391 const nextIdx = volgendeInRij % queue.length; 377 392 const t = queue[nextIdx]; 378 393 if (!t || !t.url) return; … … 642 657 function next() { 643 658 if (!queue.length) return; 659 // Aan het eind van een bandje: stoppen. `ended` roept deze functie aan, dus 660 // zonder deze tak begint de band na het laatste nummer weer vooraan. 661 if (tapeMode && currentIndex >= queue.length - 1) { pause(); return; } 644 662 loadTrack((currentIndex + 1) % queue.length, true); 645 663 } 646 664 function prev() { 647 665 if (!queue.length) return; 666 // En aan het begin ook niet omlopen. Terugspoelen voorbij het begin levert 667 // de kop van de band op, niet het laatste nummer. 668 if (tapeMode && currentIndex === 0) { 669 try { audio.currentTime = 0; } catch (e) { /* nog niets geladen */ } 670 return; 671 } 648 672 loadTrack(currentIndex === 0 ? queue.length - 1 : currentIndex - 1, true); 649 673 } … … 1157 1181 const duur = audio.duration || 0; 1158 1182 const nu = audio.currentTime || 0; 1159 if (duur && nu + d >= duur) { next(); return; } 1160 if (nu + d < 0) { prev(); return; } 1183 if (duur && nu + d >= duur) { 1184 // Vooruit voorbij het eind. In bandmodus stopt next() aan het eind van de 1185 // band; daarbuiten loopt hij door naar het volgende nummer. 1186 next(); 1187 return; 1188 } 1189 if (nu + d < 0) { 1190 // TERUGSPOELEN VOORBIJ HET BEGIN moet in het vorige nummer landen aan het 1191 // EIND, niet aan het begin -- dat is wat terugspoelen doet. Zonder dit 1192 // sprong je bij elke druk naar de kop van het vorige nummer en kwam je 1193 // nooit ergens in het midden uit. 1194 if (!(tapeMode && currentIndex === 0)) pendingSeek = Number.MAX_SAFE_INTEGER; 1195 prev(); 1196 return; 1197 } 1161 1198 try { audio.currentTime = Math.max(0, nu + d); } catch (e) {} 1162 1199 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)