Changeset 4fbe2c1 in Klonkt for src/assets/js/mod/tape.js


Ignore:
Timestamp:
08/22/2026 10:35:33 AM (3 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
c0e463b
Parents:
8bb3b09
Message:

Een bandje loopt niet rond: het stopt aan het eind, en aan het begin

Robins eis (22-8). Drie omlopen zaten in de weg, en de stilste was de keten:
na het laatste nummer hing die nummer een er weer achter, en omdat de wachtrij
EEN doorlopende tijdlijn is merk je dat niet eens als een trackwissel -- de
band gaat gewoon door alsof er meer op stond.

  • De keten haakt in bandmodus niets meer aan voorbij het laatste nummer.
  • next() pauzeert daar in plaats van om te lopen. ended roept next() aan, dus dit is wat de band echt laat stoppen.
  • prev() loopt aan het begin niet naar achteren om: terugspoelen voorbij de kop levert de kop op, niet het laatste nummer.
  • Vooruit prefetchen stopt ook aan het eind.

De drie modulo's blijven staan voor een gewone wachtrij; die hoort wel te
blijven rondlopen. Daar staat een test op, anders sneuvelt dat gedrag stil.

TERUGSPOELEN IS NU ECHT SPOELEN, ook over de nummergrenzen. Op de MSE-motor
ging dat al vanzelf (de band is een tijdlijn). Op de blob-motor landde het in
de KOP van het vorige nummer, en dan kom je nooit ergens in het midden uit; nu
zet hij pendingSeek zodat je aan het EIND van dat nummer uitkomt.

EN EEN FOUT DIE IK ER ZELF MEE INTRODUCEERDE, gevonden door het te draaien en
niet door te lezen: bij een MediaSource vuurt ended pas als de stream dicht
is, en die ging alleen dicht bij een wachtrij van een. Sinds de keten aan het
eind niets meer aanhaakt bleef de band dus hangen op de laatste seconde --
teller stil, isPlaying() waar, spoelen draaiend. Gemeten: 125,6 van 125,7.
De stream sluit nu ook aan het eind van een bandje.

Spoelen stopt vanzelf bij de kop en de staart: beweegt de teller twee rondes
niet, dan is er geen band meer. Anders bleven de spoelen draaien terwijl er
niets gebeurde.

Nagemeten op dev: band loopt af -> laatste nummer, gestopt, teller op 125,7 van
125,7, spoelen stil, knop terug op Afspelen. next() op het laatste nummer
blijft staan; prev() op het eerste spoelt naar de kop.

audio-player v37, MOD_V 54.

Co-Authored-By: Claude Opus 5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/assets/js/mod/tape.js

    r8bb3b09 r4fbe2c1  
    109109  stopWinden(tape);
    110110  let snelheid = START_SNELHEID;
     111  let vorigePositie = null;
     112  let stil = 0;
    111113  tape.classList.add('is-winding');
    112114  if (richting < 0) tape.classList.add('is-winding-back');
     
    115117    p.seekBy(richting * snelheid * (STAP_MS / 1000));
    116118    tekenBand(tape);
     119    // AAN HET EIND VAN DE BAND STOPPEN MET SPOELEN. De speler klemt de positie
     120    // af, dus daar gebeurt niets meer -- maar de spoelen bleven wel doordraaien
     121    // en de knop bleef oplichten, alsof er nog band was. Beweegt de teller twee
     122    // rondes niet, dan zijn we bij de kop of de staart.
     123    const nu = p.tapeTijden ? p.tapeTijden().cur : null;
     124    if (nu !== null && vorigePositie !== null && Math.abs(nu - vorigePositie) < 0.05) {
     125      if (++stil >= 2) { stopWinden(tape); return; }
     126    } else stil = 0;
     127    vorigePositie = nu;
    117128  }, STAP_MS);
    118129  winder = { timer, tape };
Note: See TracChangeset for help on using the changeset viewer.