Tempo Lock · Voer voor de geest
Nadat de klik wegvalt
Het spel begint met een klik die het tempo aangeeft, dan valt die klik stil, en de speler moet hetzelfde tempo door de stille maten heen blijven tikken.
In het Engels geschreven en geredigeerd. Deze Nederlandse versie is met machinevertaling gemaakt; waar precisie ertoe doet, is het Engelse origineel leidend. Lees het origineel in het Engels →
De opbouw van een ronde
Een ronde in Tempo Lock wordt opgebouwd uit een doel dat vier dingen vastlegt: een waarde in slagen per minuut voor het tempo, een aantal maten waarin de klik klinkt, een aantal stille maten dat daarop volgt, en de waarde voor slagen per maat, de teller van de maatsoort. De engine gebruikt deze velden om de hele ronde te construeren, van de eerste hoorbare slag tot en met de laatste stille slag. Het tempo bepaalt de gang van de klik, de hoorbare maten bepalen hoe lang de speler de metronoom hoort, en de stille maten vormen de opgave om dat tempo zonder klik vast te houden. De waarde voor slagen per maat bepaalt hoeveel slagen er in elke maat vallen, en het spel zet die in elke ronde op 4, de vierkwartsmaat. 3
De engine berekent uit het doel een aantal afgeleide waarden die het scoresysteem voeden. Ze berekent de slaglengte als zestigduizend gedeeld door het tempo, wat de duur van één slag in milliseconden geeft. Ze berekent het totale aantal slagen als de som van de hoorbare en de stille maten vermenigvuldigd met het aantal slagen per maat, wat het totale aantal slagen geeft dat de speler moet doortikken. Ze berekent het begin van de stilte als het aantal hoorbare maten vermenigvuldigd met het aantal slagen per maat, wat precies de slagindex aanwijst waar de klik ophoudt. Deze afgeleide waarden vormen de wiskundige grondslag voor de hele ronde. 3
De klik en de stilte
De klik is het hoorbare signaal dat het tempo voor de ronde vastlegt. Hij klinkt op het doeltempo zolang de hoorbare maten duren en markeert elke slag met een kort geluid. Die klik werkt als een metronoom, die met een gelijkmatig interval een hoorbaar geluid voortbrengt, al wordt het interval hier bepaald door het doel van de ronde en niet door de speler. Eerst klinkt een aftelmaat van vier slagen, en de eerste slag van elke maat krijgt een hoger klinkende klik. Musici gebruiken een metronoom om in de maat te spelen of te studeren en zo een gelijkmatig tempo en een regelmatige puls te houden. De klik in het spel vervult dezelfde functie tijdens de hoorbare fase: hij geeft de speler een ijkpunt om zijn tikken op af te stemmen. 2
Als de hoorbare maten voorbij zijn, valt de klik volledig weg. De speler hoort de metronoom niet meer en moet in hetzelfde tempo door de stille maten heen blijven tikken. Die stilte vormt de kern van de opgave, want de speler moet het tempo in zijn hoofd vasthouden zonder externe houvast. De stilte is niet leeg; ze is gevuld met de herinnering aan het tempo en met de poging van de speler om het vast te houden. De score meet later hoe goed de speler dat tempo tijdens de stilte heeft aangehouden. 3
Ruwe tijdstempels en determinisme
De engine werkt volledig met ruwe tijdstempels van de tikken, gemeten in milliseconden. Elke tik wordt vastgelegd als een absolute tijdwaarde, en alle berekeningen volgen uit die tijdstempels samen met het doel. Dezelfde reeks tiktijdstempels levert altijd hetzelfde resultaat op, wat de engine deterministisch en testbaar maakt zonder klok. Deze aanpak haalt elke dubbelzinnigheid uit de tijdsberekeningen en zorgt ervoor dat de score bij dezelfde invoer consistent is over verschillende doorlopen. 3
De scorefuncties in de engine nemen ruwe tiktijdstempels in milliseconden samen met het doel als invoer. Door dat ontwerp kan de engine worden getest met vooraf bepaalde reeksen tijdstempels, en kan de uitvoer worden geverifieerd zonder het spel in werkelijke tijd te draaien. Het determinisme strekt zich uit tot de geseede generator van willekeurige getallen die het doeltempo voor elke ronde kiest. Een gegeven seed en moeilijkheidsgraad leggen elke keer hetzelfde doel vast, en vanaf dat punt is elke regel testbaar. 3
Het tempo uit de tikken terughalen
De engine haalt een temposchatting uit het gemiddelde interval tussen opeenvolgende tikken. Ze berekent de intervallen tussen de tikken, dat wil zeggen de tijdverschillen tussen elke tik en de tik ervoor, en berekent daarvan het gemiddelde, waarbij elk interval dat nul of negatief is wordt overgeslagen; bij minder dan twee tikken meldt ze helemaal geen tempo. De waarde in slagen per minuut wordt uit dat gemiddelde interval afgeleid en geeft een maat voor het tempo dat de speler tijdens de getikte reeks heeft aangehouden. Deze functie werkt los van het doeltempo en levert een objectieve meting van de werkelijke prestatie van de speler. 3
Het teruggerekende tempo verschijnt op het resultaatscherm als “Your tempo” (jouw tempo), naast het doel, zodat de speler ziet hoe dicht hij de bedoelde gang benaderde. De berekening werkt uitsluitend met de ruwe tijdstempels, over alle vastgelegde tikken heen, hoorbaar en stil. Ze wordt alleen ter informatie gegeven: de score zelf wordt berekend uit de afwijking, niet uit het teruggerekende tempo. 3
De afwijking van het raster meten
Het scoresysteem beloont de speler ervoor dat hij zijn tikken tijdens de stille fase dicht bij het ideale metronoomraster houdt. Dat ideale raster bestaat uit de slagposities die zouden ontstaan als een metronoom bij de eerste tik van de speler begon en op het doeltempo doorliep. Elke tik wordt gekoppeld aan de dichtstbijzijnde ideale slagpositie, en het verschil daartussen is de afwijking voor die tik. Alleen tikken waarvan de dichtstbijzijnde slag in de stille fase valt tellen mee, en omdat elke tik aan zijn dichtstbijzijnde slag wordt gekoppeld, kan geen enkele tik meer dan een halve slag afwijken. Elke slag in de stille fase die zonder tik blijft, wordt als een misser van een halve slag aangerekend, het slechtst denkbare geval, en in hetzelfde gemiddelde meegenomen, zodat slagen overslaan de gemiddelde afwijking omhoog duwt en de score omlaag, en een speler die in de stilte niets tikt nul scoort. 3
Deze op afwijking gebaseerde aanpak maakt van het vasthouden van een tempo een meetbare grootheid. De engine kijkt niet simpelweg of tikken binnen een of ander venster vallen; ze meet de precieze afwijking ten opzichte van de ideale posities. Een perfecte greep, met een gemiddelde afwijking van nul, levert 1000 punten op, en de score loopt rechtlijnig terug naar 0 bij een gemiddelde afwijking van een kwart slag, zodat een kleinere afwijking altijd een hogere score geeft. De schaal wordt in slagen gemeten en niet in milliseconden, zodat ze bij elk tempo hetzelfde betekent: bij 120 slagen per minuut is een kwart slag 125 milliseconden, bij 80 is dat 187,5. Een kwart slag is bovendien wat willekeurig tikken gemiddeld oplevert, dus lukraak tikken levert vrijwel niets op. Het resultaatscherm meldt de gemiddelde afwijking nog wel in milliseconden, en zet de score om in een oordeel: “Locked in!” (vastgeklikt) bij 850 of meer, “Tight.” (strak) bij 650 of meer, “Wobbly.” (wiebelig) bij 350 of meer, en “Lost the beat.” (de maat kwijt) daaronder. Zo ontstaat een doorlopende prestatieschaal in plaats van een binaire uitkomst van geslaagd of niet, wat een fijnmazige beoordeling van de timingnauwkeurigheid mogelijk maakt. 3
Vaste moeilijkheidsgraden
Het spel biedt drie vaste moeilijkheidsgraden, “Easy”, “Medium” en “Hard” (makkelijk, gemiddeld en moeilijk), die het tempobereik en het aantal stille maten variëren. Elke graad geeft vier hoorbare maten. Easy trekt een tempo tussen 70 en 100 slagen per minuut en vraagt om vier stille maten; Medium trekt tussen 90 en 130 en vraagt om zes; Hard trekt tussen 110 en 170 en vraagt om acht. Deze graden geven spelers een keuze aan uitdaging, van rustige tempo's met korte stille stukken tot snelle tempo's met lange stille passages. 3
De moeilijkheidsgraden werken binnen hetzelfde deterministische raamwerk als de rest van de engine. Elke graad legt een doel met bepaalde veldwaarden vast, en de engine verwerkt dat doel precies zoals ze elk ander doel zou verwerken. De moeilijkheid schuilt in de combinatie van tempo en aantal stille maten, die bepaalt hoe snel de slagen komen en hoe lang de speler ze zonder klik moet vasthouden. Het scoresysteem blijft over alle graden gelijk en meet de afwijking van het ideale raster ongeacht de gekozen moeilijkheid, en omdat de schaal in breuken van een slag is vastgelegd, staat eenzelfde score voor dezelfde relatieve precisie bij een snel Hard-tempo als bij een traag Easy-tempo. 3
Het tempo achter het spel
In de muziek is tempo de snelheid of gang van een bepaalde compositie, gemeten in slagen per minuut. Een tempo van 60 slagen per minuut betekent één slag per seconde, terwijl een tempo van 120 slagen per minuut twee keer zo snel is en dus twee slagen per seconde betekent. De notenwaarde van elke slag is doorgaans die welke door de noemer van de maatsoort wordt aangegeven. Tempo kan worden aangeduid met Italiaanse aanwijzingen, van trage zoals largo en andante tot snelle zoals allegro en presto, of met een metronoomaanduiding die een bepaald aantal bpm geeft. Tempoaanduidingen kunnen net zo goed een stemming als een snelheid overbrengen, en een tempo hoeft niet vast te liggen: een componist kan binnen een stuk een accelerando voorschrijven om te versnellen of een ritardando om te vertragen 1. Het spel gebruikt dit begrip tempo als een vaste waarde in slagen per minuut, waarbij de doel-bpm de gang voor de hele ronde bepaalt.
Het tempo in het spel is de waarde in slagen per minuut die de klik speelt en die de speler moet vasthouden. Het is één getal dat de snelheid van de ronde vastlegt, en het staat in het doel naast de aantallen maten. De speler tikt op dat tempo, en de engine meet hoe goed hij het aanhoudt. Het tempo verandert niet tijdens de ronde; het is het constante ijkpunt waaraan de prestatie van de speler wordt afgemeten. 3
Het apparaat metronoom
Een metronoom is een apparaat dat met een gelijkmatig interval een hoorbare klik of ander geluid voortbrengt, doorgaans in te stellen door de gebruiker in slagen per minuut. Instrumentalisten en zangers oefenen ertegen om een gelijkmatig tempo en een egale puls vast te houden. Een klassieke mechanische metronoom werkt met een verzwaarde slinger: schuif het gewicht omhoog langs de staaf en het tempo vertraagt, schuif het omlaag en het versnelt, en het mechaniek geeft bij elke zwaai een klik. Johann Maelzel patenteerde in 1815 een mechanische metronoom en bracht die vanaf 1816 in massaproductie; hij bouwde daarbij voort op een eerder ontwerp met een veeraandrijving en een omgekeerde slinger van Dietrich Nikolaus Winkel, en voegde er een numerieke temposchaal aan toe. Moderne metronomen bestaan ook als elektronische kwartsapparaten en als software 2.
De klik in het spel werkt tijdens de hoorbare fase als een metronoom en speelt het doeltempo gedurende de hoorbare maten. Hij levert het gelijkmatige interval dat de speler met zijn tikken moet treffen. Wanneer de klik wegvalt, moet de speler hetzelfde tempo zonder het apparaat aanhouden, wat zijn vermogen toetst om het tempo innerlijk vast te houden. De rol van de metronoom in het spel is het tempo neer te zetten en zich dan terug te trekken, zodat de speler het alleen verder moet dragen. 3
Het doel en zijn velden
Het doel is de centrale gegevensstructuur die elke ronde vastlegt. Het bevat vier velden: het tempo in slagen per minuut; het aantal hoorbare maten waarin de klik speelt; het aantal stille maten dat volgt; en het aantal slagen per maat, de teller van de maatsoort, dat 4 is voor de vierkwartsmaat. Samen bepalen deze velden de opbouw van de ronde, van het aantal slagen in de hoorbare fase tot het aantal in de stille fase. 3
De engine gebruikt het doel om alle afgeleide waarden te berekenen die de ronde sturen. Uit het tempo leidt ze de duur van elke slag in milliseconden af. Uit de aantallen maten en het aantal slagen per maat leidt ze het totale aantal slagen af en de slag waarop de stilte begint. Het doel ligt voor de ronde vast, wat betekent dat het tempo en de aantallen maten de hele ronde door constant blijven. De speler kan alleen op het doel reageren door in het juiste tempo te tikken en zijn tikken op het ideale raster af te stemmen. 3
Van tijdstempels naar score
De weg van tiktijdstempels naar de eindscore volgt een heldere reeks berekeningen. Eerst legt het spel elke tik vast als een tijdstempel in milliseconden, waarbij tikken die meer dan een halve slag vóór het einde van de aftelmaat van vier slagen vallen worden genegeerd. Tijdens de hoorbare fase tikt de speler mee met de klik en bouwt zo zijn gevoel voor het tempo op. Wanneer de klik wegvalt, tikt de speler door de stille maten heen verder. De engine meet vervolgens voor elke tik in de stille fase de afwijking van het ideale metronoomraster dat op de eerste tik is verankerd, middelt die afwijkingen en rekent daarbij elke ongetikte stille slag als een misser van een halve slag, en zet dat gemiddelde, genomen als breuk van de slag, om in een score van 0 tot 1000. Naast de score meldt ze het tempo dat uit het gemiddelde interval tussen de tikken is teruggerekend, en het aantal tikken in de stille fase. 3
Deze verwerkingsketen is volledig deterministisch. Bij dezelfde seed en moeilijkheidsgraad wordt hetzelfde doel gegenereerd. Bij hetzelfde doel en dezelfde tiktijdstempels wordt dezelfde score berekend. De engine hangt niet af van de kloktijd of van enige externe referentie; ze hangt alleen af van de tijdstempels en het doel. Dat maakt het systeem zowel betrouwbaar als testbaar, omdat elke stap met vooraf bepaalde invoer en verwachte uitvoer te verifiëren is. 3
De stille fase als meting
In de stille fase vindt de meting plaats. Tijdens de hoorbare fase geeft de klik houvast en kan de speler zijn tikken daarop bijstellen. Tijdens de stille fase bestaat dat houvast niet, en laten de tikken van de speler zien hoe goed hij het tempo zich eigen heeft gemaakt. De engine meet die verinnerlijking door elke tik te vergelijken met de ideale slagpositie die vanaf de eerste tik van de speler op het doeltempo is doorgetrokken. Het verschil tussen de tik en de ideale positie is de afwijking voor die tik. 3
In de stille fase komt ook het ontwerp van het spel het duidelijkst naar voren. De klik speelt het doeltempo gedurende de hoorbare maten, valt dan weg, en de speler moet hetzelfde tempo door de stille maten heen blijven tikken. De duur van de stille fase, bepaald door het aantal stille maten en het aantal slagen per maat, legt de lengte van de meetperiode vast. Langere stille fases vergen dat de speler het tempo over meer slagen vasthoudt, waardoor de kans groeit dat de afwijking zich opstapelt. Het scoresysteem meet de afwijking voor elke tik in de stille fase, rekent elke stille slag aan die zonder tik blijft, en middelt het geheel tot een eindscore, zodat een kleine tempofout die over een lange greep aangroeit de gemiddelde afwijking omhoog duwt en de score omlaag. 3
Geseed determinisme
Het hele systeem is deterministisch en vertrekt vanuit een geseede generator van willekeurige getallen. Een gegeven seed legt elke keer hetzelfde doel vast, en vanaf dat punt is elke regel testbaar. De seed bepaalt het tempo, dat als een geheel getal uit het bereik van de gekozen moeilijkheidsgraad wordt getrokken; de aantallen maten komen uit de moeilijkheidsgraad zelf. Omdat de seed en de moeilijkheidsgraad het doel volledig vastleggen, leveren ze altijd dezelfde rondeopbouw op. Die eigenschap geldt ook voor de score, aangezien dezelfde tiktijdstempels tegen hetzelfde doel altijd dezelfde score opleveren. 3
Geseed determinisme dient zowel de speler als de ontwikkelaar. Voor de speler betekent het dat rondes consistent en eerlijk zijn; dezelfde reeks tikken geeft altijd hetzelfde resultaat. De dagelijkse modus leidt zijn seed af uit de datum in UTC, zodat iedereen die op die dag op een gegeven moeilijkheidsgraad speelt hetzelfde doel krijgt, terwijl de oefenmodus voor elke ronde een nieuwe willekeurige seed trekt. Voor de ontwikkelaar betekent het dat de engine grondig te testen is met vooraf bepaalde seeds en tikreeksen. Het determinisme is geen beperking; het is een eigenschap die het timingsysteem van het spel doorzichtig en betrouwbaar maakt. 3
Sources & notes
- "Tempo," Wikipedia, in music, tempo is the speed or pace of a given composition, measured in beats per minute (BPM): a tempo of 60 beats per minute signifies one beat per second, while a tempo of 120 beats per minute is twice as rapid, signifying two beats every second. The note value of each beat is typically the one indicated by the denominator of the time signature. Tempo may be indicated by Italian markings, from slow ones such as largo and andante (at a walking pace) to fast ones such as allegro and presto, or by a metronome mark giving a specific BPM. Tempo markings can convey mood as well as speed, and a tempo need not be fixed: a composer may write an accelerando to speed up or a ritardando to slow down within a piece. en.wikipedia.org/wiki/Tempo.
- "Metronome," Wikipedia, a device that produces an audible click or other sound at a uniform interval that can be set by the user, typically in beats per minute. Musicians use a metronome to play or practise in time, keeping a steady tempo and a regular beat. A traditional mechanical metronome uses a weighted pendulum: sliding the weight up the rod slows the tempo and sliding it down speeds it up, and the mechanism produces a click with each swing. Johann Maelzel patented a mechanical metronome in 1815 and mass-produced it from 1816, building on an earlier spring-powered, inverted-pendulum design by Dietrich Nikolaus Winkel and adding a numerical tempo scale; modern metronomes also come as quartz electronic devices and software. en.wikipedia.org/wiki/Metronome.
- Tempo Lock game engine: a pure, deterministic timing engine with no audio and no DOM. A target sets a tempo in beats per minute, a number of audible bars while a click plays, a number of silent bars to hold after it stops, and a beats-per-bar time-signature numerator (4 for 4/4). The click plays the target tempo for the audible bars, then cuts out, and the player must keep tapping the same tempo through the silent bars. The beat length in milliseconds is sixty thousand divided by the tempo; the total beat count is the audible plus silent bars times the beats per bar; and the silent phase starts at the audible bars times the beats per bar. The scoring functions take raw tap timestamps in milliseconds together with the target, so the same inputs always give the same result and the engine is testable without a clock. The tempo is recovered from the average interval between taps. Drift is the average distance of silent-phase taps from the nearest beat of an ideal grid anchored on the first tap and stepped at the target tempo; each silent-phase beat without a tap counts as a miss of half a beat, and with fewer than two taps the drift is half a beat. The score is 1000 at zero drift, falling linearly to 0 at a quarter of a beat, so the scale is relative to the tempo; the result grades are “Locked in!” at 850 or more, “Tight.” at 650 or more, “Wobbly.” at 350 or more, and “Lost the beat.” below that. Difficulty presets: Easy 70–100 BPM with 4 audible and 4 silent bars, Medium 90–130 with 4 and 6, Hard 110–170 with 4 and 8. The tempo is drawn from a seeded random number generator; Daily mode seeds it from the UTC date, Practice from a random number. Read from the game’s own source.
- Further reading on Metronome, Re-examining Czerny’s and Moscheles’s Metronome Marks for Beethoven’s Piano Sonatas. doi.org.
- Further reading on Metronome, Turn the Beat On: An Evidenced-Based Practice Journey Implementing Metronome Use in Emergency Department Cardiac Arrest . pubmed.ncbi.nlm.nih.gov.