A line of evenly spaced sounds does not yet tell us how to group them. Think of repeating footsteps: you might count “ONE two, ONE two,” or hear a longer cycle of “ONE two three.” The spacing can stay identical while the organization changes.
Meter is a recurring organization of beats into groups, often with stronger and weaker positions. This lesson gives you two listening tools: count a steady pulse, then notice which pulses feel like the beginning of a group. Allow about ten minutes and keep the device volume comfortable.
Make a prediction before playing
Both choices below contain twelve sounds. One emphasizes every second sound; the other every third sound. Which will have more group beginnings? Which will finish first?
Tap once for every sound, rather than tapping only the loud ones. Then count the groups aloud. Try to keep the spacing of your taps unchanged when switching versions.
Preparing the visual
One pulse, two ways to group it
Twelve onsets remain 0.6 seconds apart. Accents recur every two or three onsets; no onset moves and the tone stays fixed.
{"id":"music-meter-groups","title":"One pulse, two ways to group it","summary":"Twelve onsets remain 0.6 seconds apart. Accents recur every two or three onsets; no onset moves and the tone stays fixed.","height":760,"html":"<h2 data-i18n=\"heading\"></h2><p class=\"mf-intro\" data-i18n=\"intro\"></p>\n<div id=\"variants\" class=\"mf-options\" role=\"group\" data-i18n-label=\"choose\"></div>\n<p id=\"facts\" class=\"mf-facts\" aria-live=\"polite\"></p>\n<svg id=\"plot\" class=\"mf-plot\" viewBox=\"0 0 540 200\" aria-hidden=\"true\"></svg>\n<div class=\"mf-axis\"><span data-i18n=\"axis\"></span><span id=\"duration\"></span></div>\n<div id=\"groups\" class=\"mf-groups\"></div><p id=\"notation\" class=\"mf-notation\"></p><p class=\"mf-key\" data-i18n=\"key\"></p>\n<div id=\"envelope-panel\" hidden><svg id=\"envelope-plot\" class=\"mf-plot\" viewBox=\"0 0 540 120\" aria-hidden=\"true\"></svg><p class=\"mf-key\" data-i18n=\"envelope\"></p></div>\n<div class=\"mf-actions\"><button id=\"play\" data-i18n=\"play\"></button><button id=\"stop\" data-i18n=\"stop\" disabled></button></div>\n<div class=\"mf-progress\" aria-hidden=\"true\"><span id=\"progress\"></span></div><p id=\"status\" class=\"mf-status\" role=\"status\" data-i18n=\"idle\"></p>\n<div class=\"mf-volume\"><label for=\"volume\" data-i18n=\"volume\"></label><input id=\"volume\" type=\"range\" min=\"0\" max=\"100\" value=\"65\"></div>\n","css":"body{padding:24px}h2{font-size:22px;line-height:1.4}.mf-intro{color:var(--muted);margin:10px 0 18px;line-height:1.7}.mf-options{display:flex;gap:8px;flex-wrap:wrap}.mf-options button{flex:1 1 125px;min-height:46px;font-size:16px;white-space:normal;line-height:1.45;text-align:left;padding:10px 12px}.mf-options button[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.mf-facts{margin:16px 0;padding:14px;border-left:3px solid var(--accent);background:var(--surface);font-size:16px;line-height:1.75;min-height:4em}.mf-plot{width:100%;height:auto;display:block;margin:12px 0 0;background:var(--surface);border:1px solid var(--rule);border-radius:8px}.mf-axis{display:flex;justify-content:space-between;font-size:13px;color:var(--muted);gap:16px;margin:6px 0}.mf-notation{font-size:15px;line-height:1.8;overflow-wrap:anywhere;margin:10px 0;color:var(--ink)}.mf-groups{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}.mf-groups span{padding:6px 10px;border:1px solid var(--rule);border-radius:5px;font-size:15px;white-space:pre}.mf-actions{display:flex;gap:8px;margin:18px 0 12px}.mf-actions button{min-height:46px;font-size:16px;flex:1}.mf-progress{height:3px;background:var(--rule);overflow:hidden}.mf-progress span{display:block;height:100%;background:var(--accent);width:0}.mf-status{font-size:14px;line-height:1.7;margin:10px 0;min-height:3.4em;color:var(--muted)}.mf-volume{display:flex;gap:12px;align-items:center;margin-top:12px;border-top:1px solid var(--rule);padding-top:12px;font-size:14px}.mf-volume input{min-width:60px;max-width:180px}.mf-volume label{white-space:nowrap}.mf-key{color:var(--muted);font-size:14px;line-height:1.6;margin:12px 0}@media(max-width:420px){body{padding:20px 14px}h2{font-size:20px}.mf-options button{flex-basis:105px}.mf-facts{padding:12px}}\n\n.mf-groups span.is-current{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 -2px 0 var(--accent)}\n\n[hidden]{display:none!important}\n#blind-answers{flex-wrap:wrap}#blind-answers button{flex:1 1 100px;white-space:normal;line-height:1.5;min-width:0;padding:10px}\n","js":"const MODEL = {\"mode\":\"pulse\",\"blind\":false,\"variants\":[{\"score\":{\"bpm\":100,\"beats\":12,\"events\":[{\"midi\":79,\"hz\":783.990872,\"beat\":0,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":1,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":2,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":3,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":4,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":6,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":7,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":8,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":9,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":10,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":11,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"}]},\"notation\":\"100 BPM\",\"groups\":[\"1 2\",\"1 2\",\"1 2\",\"1 2\",\"1 2\",\"1 2\"]},{\"score\":{\"bpm\":100,\"beats\":12,\"events\":[{\"midi\":79,\"hz\":783.990872,\"beat\":0,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":1,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":2,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":3,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":4,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":6,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":7,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":8,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":9,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":10,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":11,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"}]},\"notation\":\"100 BPM\",\"groups\":[\"1 2 3\",\"1 2 3\",\"1 2 3\",\"1 2 3\"]}]};\nconst $ = s => document.querySelector(s);\nconst variants = MODEL.variants;\nlet selected = 0;\nlet quizRevealed = !MODEL.blind;\nfunction visibility(){for(const q of ['#facts','#plot','.mf-axis','#groups','#notation','.mf-key'])$(q).toggleAttribute('hidden',!quizRevealed);document.body.dataset.quizRevealed=String(quizRevealed);}\nconst svgNS = 'http://www.w3.org/2000/svg';\nfunction node(tag, attrs = {}) { const el = document.createElementNS(svgNS, tag); for (const [k,v] of Object.entries(attrs)) el.setAttribute(k,v); return el; }\nfunction draw() {\n const v = variants[selected], plot = $('#plot'); plot.replaceChildren();\n $('#facts').textContent = viz.t('fact'+selected);\n $('#duration').textContent = viz.t('clip') + ' ' + (v.score.beats * 60 / v.score.bpm).toFixed(1) + ' ' + viz.t('seconds');\n $('#notation').textContent = v.notation;\n if (MODEL.mode === 'partials') {\n const e=v.score.events[0], p=e.partials;\n $('#envelope-panel').hidden=false;\n const envelope=$('#envelope-plot');envelope.replaceChildren();\n const attack=Math.min(e.attack,e.duration/2),points=[[12,108],[12+516*attack/e.duration,12]];\n for(let i=1;i<=60;i++){const t=attack+(e.duration-attack)*i/60,amplitude=Math.pow(.0001/(.05*e.gain),(t-attack)/(e.duration-attack));points.push([12+516*t/e.duration,108-amplitude*96]);}\n points.push([528,108]);envelope.append(node('polyline',{points:points.map(p=>p.join(',')).join(' '),fill:'none',stroke:'var(--accent)','stroke-width':3}));\n for(let i=0;i<4;i++) {\n plot.append(node('rect',{x:40+i*125,y:160-(p[i]||0)*125,width:58,height:(p[i]||0)*125,fill:'var(--accent)'}));\n const t=node('text',{x:69+i*125,y:185,'text-anchor':'middle',fill:'var(--ink)','font-size':18}); t.textContent=(i+1)+'×';plot.append(t);\n }\n } else {\n const events=v.score.events, min=MODEL.min??Math.min(...events.map(e=>e.midi)), max=MODEL.max??Math.max(...events.map(e=>e.midi));\n for(let i=0;i<=v.score.beats;i++) plot.append(node('line',{x1:12+i/v.score.beats*516,x2:12+i/v.score.beats*516,y1:16,y2:170,stroke:'var(--rule)'}));\n for(const e of events){\n const x=12+e.beat/v.score.beats*516;\n if(MODEL.mode==='pulse') plot.append(node('rect',{x,y:166-e.gain*140,width:Math.max(4,516/v.score.beats*.38),height:e.gain*140,rx:3,fill:'var(--accent)'}));\n else { const y=160-(e.midi-min)/Math.max(1,max-min)*130; plot.append(node('rect',{x,y:y-4,width:Math.max(4,Math.min(528-x,e.duration*v.score.bpm/60/v.score.beats*516)),height:8,rx:3,fill:e.layer==='bass'?'var(--ink)':'var(--accent)',opacity:e.layer==='chord'?'.45':'1'})); }\n }\n }\n if(MODEL.mode!=='partials') plot.append(node('line',{id:'cursor',x1:12,x2:12,y1:10,y2:177,stroke:'var(--ink)','stroke-width':2,visibility:'hidden'}));\n const groups=$('#groups'); groups.replaceChildren();\n for (const label of v.groups || []) {const chip=document.createElement('span');chip.textContent=label;groups.append(chip);}\n if(MODEL.blind)visibility();\n [...$('#variants').children].forEach((b,i)=>b.setAttribute('aria-pressed',String(i===selected)));\n}\nconst player=viz.audio({onState(state){document.body.dataset.audioState=state;$('#play').disabled=state!=='idle';$('#stop').disabled=state==='idle';$('#status').textContent=viz.t(state==='idle'?'idle':state==='starting'?'starting':'playing');},onTick(beat){const fraction=beat<0?0:Math.min(1,beat/variants[selected].score.beats);$('#progress').style.width=(fraction*100)+'%';const cursor=$('#cursor');if(cursor){cursor.setAttribute('x1',12+fraction*516);cursor.setAttribute('x2',12+fraction*516);cursor.setAttribute('visibility',beat<0?'hidden':'visible');}const chips=[...$('#groups').children];chips.forEach((el,i)=>el.classList.toggle('is-current',beat>=0&&i===Math.min(chips.length-1,Math.floor(fraction*chips.length))));},onError(){$('#status').textContent=viz.t('error');}});\nvariants.forEach((v,i)=>{const b=document.createElement('button');b.type='button';b.dataset.variant=i;b.textContent=viz.t('option'+i);b.onclick=()=>{player.stop();selected=i;draw();};$('#variants').append(b);});\n$('#play').onclick=()=>player.play(variants[selected].score);\n$('#stop').onclick=()=>player.stop();\n$('#volume').oninput=e=>player.setVolume(Number(e.target.value)/100);\ndocument.body.dataset.audioState='idle';draw();\n\nif(MODEL.blind){\n const panel=document.createElement('div');panel.className='mf-actions';panel.id='blind-answers';\n const result=document.createElement('p');result.className='mf-facts';result.id='blind-feedback';result.setAttribute('role','status');result.textContent=viz.t('before');\n for(const [key,correct]of [['choose_p',true],['choose_q',false],['reveal',null]]){const b=document.createElement('button');b.type='button';b.textContent=viz.t(key);b.dataset.blindAnswer=key;b.onclick=()=>{player.stop();quizRevealed=true;visibility();result.textContent=(correct===null?'':viz.t(correct?'correct':'wrong')+' ')+viz.t('comparison_correct');};panel.append(b);}\n $('#variants').after(panel,result);\n}\n","audio":true,"strings":{"axis":"Time → · bar height = note gain","choose":"Choose a version","clip":"Clip:","envelope":"Amplitude over time → (1.4 seconds). The curve rises to a peak, then decays. Compare how much time the attack occupies.","error":"Audio could not start. Try again, or use the diagram and written explanation.","fact0":"Six groups of two pulses. The start of each group is louder.","fact1":"Four groups of three pulses, at exactly the same pulse speed.","heading":"One pulse, two ways to group it","idle":"Choose a version, then play. Editing stops playback; each clip ends automatically.","intro":"Tap every sound. Then count toward each stronger sound: ONE two, or ONE two three.","key":"Taller bars mark stronger programmed accents. The groups below show the counting pattern; bar heights are not perceived loudness measurements.","option0":"Groups of 2","option1":"Groups of 3","play":"Play this version","playing":"Playing. You can stop at any time.","seconds":"seconds","starting":"Preparing audio…","stop":"Stop","volume":"Volume"}}
Both clips finish after 7.2 seconds. The pulse is 100 BPM in each: one sound every 0.6 seconds. Groups of two produce six beginnings; groups of three produce four. Nothing needs to speed up to make that change.
The bars in this diagram represent relative note gains. They are a map of the programmed accents, not a measurement of perceived loudness. The grouped numbers below them give another way to follow the cycle without audio.
An accent can draw attention through loudness, length, register, articulation, or a change of harmony. Our first model changes only gain to make the grouping easy to isolate. Real performers do not have to strike the first beat of every bar loudly. Once a meter is established, a musical accent can even pull against it.
Beat, bar, and subdivision are different levels
Level
What you follow
In a simple three-beat bar
Subdivision
Smaller equal parts of a beat
“1 and 2 and 3 and”
Beat
The regular pulse chosen for counting
“1, 2, 3”
Bar or measure
One recurring group of beats
From one “1” to the next
A time signature is a notation for organizing these durations. In 3/4, the top number gives three quarter-note beats per bar, and the bottom number names the quarter-note unit. A quarter note is a duration value, not a fixed number of seconds: its real length depends on tempo.
Do not apply “top number equals number of felt beats” mechanically to every signature. In the usual compound-meter reading of 6/8, six eighth notes form two larger beats, each a dotted quarter note. Each of those beats divides into three. In 3/4, three quarter-note beats usually divide into two. Meter and time signatures
Six little steps do not imply the same meter
Count the first version as “ONE and TWO and THREE and.” Count the second as “ONE la li TWO la li.” The syllables are just counting aids. Listen for three larger beats in one bar versus two in the other.
Preparing the visual
Six subdivisions: 2+2+2 or 3+3?
At 0.3 seconds per subdivision, accents at 0, 2, 4 model three beats in 3/4; accents at 0, 3 model two beats in 6/8. Both two-bar clips last 3.6 seconds.
{"id":"music-meter-six","title":"Six subdivisions: 2+2+2 or 3+3?","summary":"At 0.3 seconds per subdivision, accents at 0, 2, 4 model three beats in 3/4; accents at 0, 3 model two beats in 6/8. Both two-bar clips last 3.6 seconds.","height":760,"html":"<h2 data-i18n=\"heading\"></h2><p class=\"mf-intro\" data-i18n=\"intro\"></p>\n<div id=\"variants\" class=\"mf-options\" role=\"group\" data-i18n-label=\"choose\"></div>\n<p id=\"facts\" class=\"mf-facts\" aria-live=\"polite\"></p>\n<svg id=\"plot\" class=\"mf-plot\" viewBox=\"0 0 540 200\" aria-hidden=\"true\"></svg>\n<div class=\"mf-axis\"><span data-i18n=\"axis\"></span><span id=\"duration\"></span></div>\n<div id=\"groups\" class=\"mf-groups\"></div><p id=\"notation\" class=\"mf-notation\"></p><p class=\"mf-key\" data-i18n=\"key\"></p>\n<div id=\"envelope-panel\" hidden><svg id=\"envelope-plot\" class=\"mf-plot\" viewBox=\"0 0 540 120\" aria-hidden=\"true\"></svg><p class=\"mf-key\" data-i18n=\"envelope\"></p></div>\n<div class=\"mf-actions\"><button id=\"play\" data-i18n=\"play\"></button><button id=\"stop\" data-i18n=\"stop\" disabled></button></div>\n<div class=\"mf-progress\" aria-hidden=\"true\"><span id=\"progress\"></span></div><p id=\"status\" class=\"mf-status\" role=\"status\" data-i18n=\"idle\"></p>\n<div class=\"mf-volume\"><label for=\"volume\" data-i18n=\"volume\"></label><input id=\"volume\" type=\"range\" min=\"0\" max=\"100\" value=\"65\"></div>\n","css":"body{padding:24px}h2{font-size:22px;line-height:1.4}.mf-intro{color:var(--muted);margin:10px 0 18px;line-height:1.7}.mf-options{display:flex;gap:8px;flex-wrap:wrap}.mf-options button{flex:1 1 125px;min-height:46px;font-size:16px;white-space:normal;line-height:1.45;text-align:left;padding:10px 12px}.mf-options button[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.mf-facts{margin:16px 0;padding:14px;border-left:3px solid var(--accent);background:var(--surface);font-size:16px;line-height:1.75;min-height:4em}.mf-plot{width:100%;height:auto;display:block;margin:12px 0 0;background:var(--surface);border:1px solid var(--rule);border-radius:8px}.mf-axis{display:flex;justify-content:space-between;font-size:13px;color:var(--muted);gap:16px;margin:6px 0}.mf-notation{font-size:15px;line-height:1.8;overflow-wrap:anywhere;margin:10px 0;color:var(--ink)}.mf-groups{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}.mf-groups span{padding:6px 10px;border:1px solid var(--rule);border-radius:5px;font-size:15px;white-space:pre}.mf-actions{display:flex;gap:8px;margin:18px 0 12px}.mf-actions button{min-height:46px;font-size:16px;flex:1}.mf-progress{height:3px;background:var(--rule);overflow:hidden}.mf-progress span{display:block;height:100%;background:var(--accent);width:0}.mf-status{font-size:14px;line-height:1.7;margin:10px 0;min-height:3.4em;color:var(--muted)}.mf-volume{display:flex;gap:12px;align-items:center;margin-top:12px;border-top:1px solid var(--rule);padding-top:12px;font-size:14px}.mf-volume input{min-width:60px;max-width:180px}.mf-volume label{white-space:nowrap}.mf-key{color:var(--muted);font-size:14px;line-height:1.6;margin:12px 0}@media(max-width:420px){body{padding:20px 14px}h2{font-size:20px}.mf-options button{flex-basis:105px}.mf-facts{padding:12px}}\n\n.mf-groups span.is-current{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 -2px 0 var(--accent)}\n\n[hidden]{display:none!important}\n#blind-answers{flex-wrap:wrap}#blind-answers button{flex:1 1 100px;white-space:normal;line-height:1.5;min-width:0;padding:10px}\n","js":"const MODEL = {\"mode\":\"pulse\",\"blind\":false,\"variants\":[{\"score\":{\"bpm\":100,\"beats\":6.0,\"events\":[{\"midi\":79,\"hz\":783.990872,\"beat\":0.0,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":0.5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":1.0,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":1.5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":2.0,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":2.5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":3.0,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":3.5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":4.0,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":4.5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":5.0,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":5.5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"}]},\"notation\":\"♩ = 100\",\"groups\":[\"1 &\",\"2 &\",\"3 &\",\"1 &\",\"2 &\",\"3 &\"]},{\"score\":{\"bpm\":100,\"beats\":6.0,\"events\":[{\"midi\":79,\"hz\":783.990872,\"beat\":0.0,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":0.5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":1.0,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":1.5,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":2.0,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":2.5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":3.0,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":3.5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":4.0,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":4.5,\"duration\":0.09,\"gain\":1,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":5.0,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"},{\"midi\":79,\"hz\":783.990872,\"beat\":5.5,\"duration\":0.09,\"gain\":0.32,\"wave\":\"sine\",\"layer\":\"pulse\"}]},\"notation\":\"♩. ≈ 66.7\",\"groups\":[\"1 la li\",\"2 la li\",\"1 la li\",\"2 la li\"]}]};\nconst $ = s => document.querySelector(s);\nconst variants = MODEL.variants;\nlet selected = 0;\nlet quizRevealed = !MODEL.blind;\nfunction visibility(){for(const q of ['#facts','#plot','.mf-axis','#groups','#notation','.mf-key'])$(q).toggleAttribute('hidden',!quizRevealed);document.body.dataset.quizRevealed=String(quizRevealed);}\nconst svgNS = 'http://www.w3.org/2000/svg';\nfunction node(tag, attrs = {}) { const el = document.createElementNS(svgNS, tag); for (const [k,v] of Object.entries(attrs)) el.setAttribute(k,v); return el; }\nfunction draw() {\n const v = variants[selected], plot = $('#plot'); plot.replaceChildren();\n $('#facts').textContent = viz.t('fact'+selected);\n $('#duration').textContent = viz.t('clip') + ' ' + (v.score.beats * 60 / v.score.bpm).toFixed(1) + ' ' + viz.t('seconds');\n $('#notation').textContent = v.notation;\n if (MODEL.mode === 'partials') {\n const e=v.score.events[0], p=e.partials;\n $('#envelope-panel').hidden=false;\n const envelope=$('#envelope-plot');envelope.replaceChildren();\n const attack=Math.min(e.attack,e.duration/2),points=[[12,108],[12+516*attack/e.duration,12]];\n for(let i=1;i<=60;i++){const t=attack+(e.duration-attack)*i/60,amplitude=Math.pow(.0001/(.05*e.gain),(t-attack)/(e.duration-attack));points.push([12+516*t/e.duration,108-amplitude*96]);}\n points.push([528,108]);envelope.append(node('polyline',{points:points.map(p=>p.join(',')).join(' '),fill:'none',stroke:'var(--accent)','stroke-width':3}));\n for(let i=0;i<4;i++) {\n plot.append(node('rect',{x:40+i*125,y:160-(p[i]||0)*125,width:58,height:(p[i]||0)*125,fill:'var(--accent)'}));\n const t=node('text',{x:69+i*125,y:185,'text-anchor':'middle',fill:'var(--ink)','font-size':18}); t.textContent=(i+1)+'×';plot.append(t);\n }\n } else {\n const events=v.score.events, min=MODEL.min??Math.min(...events.map(e=>e.midi)), max=MODEL.max??Math.max(...events.map(e=>e.midi));\n for(let i=0;i<=v.score.beats;i++) plot.append(node('line',{x1:12+i/v.score.beats*516,x2:12+i/v.score.beats*516,y1:16,y2:170,stroke:'var(--rule)'}));\n for(const e of events){\n const x=12+e.beat/v.score.beats*516;\n if(MODEL.mode==='pulse') plot.append(node('rect',{x,y:166-e.gain*140,width:Math.max(4,516/v.score.beats*.38),height:e.gain*140,rx:3,fill:'var(--accent)'}));\n else { const y=160-(e.midi-min)/Math.max(1,max-min)*130; plot.append(node('rect',{x,y:y-4,width:Math.max(4,Math.min(528-x,e.duration*v.score.bpm/60/v.score.beats*516)),height:8,rx:3,fill:e.layer==='bass'?'var(--ink)':'var(--accent)',opacity:e.layer==='chord'?'.45':'1'})); }\n }\n }\n if(MODEL.mode!=='partials') plot.append(node('line',{id:'cursor',x1:12,x2:12,y1:10,y2:177,stroke:'var(--ink)','stroke-width':2,visibility:'hidden'}));\n const groups=$('#groups'); groups.replaceChildren();\n for (const label of v.groups || []) {const chip=document.createElement('span');chip.textContent=label;groups.append(chip);}\n if(MODEL.blind)visibility();\n [...$('#variants').children].forEach((b,i)=>b.setAttribute('aria-pressed',String(i===selected)));\n}\nconst player=viz.audio({onState(state){document.body.dataset.audioState=state;$('#play').disabled=state!=='idle';$('#stop').disabled=state==='idle';$('#status').textContent=viz.t(state==='idle'?'idle':state==='starting'?'starting':'playing');},onTick(beat){const fraction=beat<0?0:Math.min(1,beat/variants[selected].score.beats);$('#progress').style.width=(fraction*100)+'%';const cursor=$('#cursor');if(cursor){cursor.setAttribute('x1',12+fraction*516);cursor.setAttribute('x2',12+fraction*516);cursor.setAttribute('visibility',beat<0?'hidden':'visible');}const chips=[...$('#groups').children];chips.forEach((el,i)=>el.classList.toggle('is-current',beat>=0&&i===Math.min(chips.length-1,Math.floor(fraction*chips.length))));},onError(){$('#status').textContent=viz.t('error');}});\nvariants.forEach((v,i)=>{const b=document.createElement('button');b.type='button';b.dataset.variant=i;b.textContent=viz.t('option'+i);b.onclick=()=>{player.stop();selected=i;draw();};$('#variants').append(b);});\n$('#play').onclick=()=>player.play(variants[selected].score);\n$('#stop').onclick=()=>player.stop();\n$('#volume').oninput=e=>player.setVolume(Number(e.target.value)/100);\ndocument.body.dataset.audioState='idle';draw();\n\nif(MODEL.blind){\n const panel=document.createElement('div');panel.className='mf-actions';panel.id='blind-answers';\n const result=document.createElement('p');result.className='mf-facts';result.id='blind-feedback';result.setAttribute('role','status');result.textContent=viz.t('before');\n for(const [key,correct]of [['choose_p',true],['choose_q',false],['reveal',null]]){const b=document.createElement('button');b.type='button';b.textContent=viz.t(key);b.dataset.blindAnswer=key;b.onclick=()=>{player.stop();quizRevealed=true;visibility();result.textContent=(correct===null?'':viz.t(correct?'correct':'wrong')+' ')+viz.t('comparison_correct');};panel.append(b);}\n $('#variants').after(panel,result);\n}\n","audio":true,"strings":{"axis":"Time → · bar height = note gain","choose":"Choose a version","clip":"Clip:","envelope":"Amplitude over time → (1.4 seconds). The curve rises to a peak, then decays. Compare how much time the attack occupies.","error":"Audio could not start. Try again, or use the diagram and written explanation.","fact0":"Three quarter-note beats per bar, each split into two eighth notes. Quarter note = 100 BPM.","fact1":"Two dotted-quarter beats per bar, each split into three eighth notes. Dotted quarter ≈ 66.7 BPM.","heading":"Six subdivisions: 2+2+2 or 3+3?","idle":"Choose a version, then play. Editing stops playback; each clip ends automatically.","intro":"Listen for the larger beats. Both clips use the same six-part grid twice.","key":"Taller bars mark stronger programmed accents. The groups below show the counting pattern; bar heights are not perceived loudness measurements.","option0":"3/4 · 2+2+2","option1":"6/8 · 3+3","play":"Play this version","playing":"Playing. You can stop at any time.","seconds":"seconds","starting":"Preparing audio…","stop":"Stop","volume":"Volume"}}
We hold the eighth-note subdivision at 0.3 seconds in both examples. That gives quarter-note beats at 100 BPM in 3/4, but dotted-quarter beats at about 66.7 BPM in 6/8. Both bars last 1.8 seconds. The small steps stay equally fast; the larger beat units differ.
This is why a bare BPM number can mislead: you also need to know which note value is being counted. If both quarter and dotted-quarter beats were instead set to 100 BPM, a three-beat 3/4 bar would last 1.8 seconds and a two-beat 6/8 bar 1.2 seconds. That is a different comparison from our experiment.
Check your grouping on a new grid
Imagine twelve equally spaced eighth-note sounds. A louder sound occurs at positions 1, 4, 7, and 10. Each six-sound span is one bar. Is each bar grouped 2+2+2 or 3+3? How many larger beats are there in the two bars?
Read the answer, including the counting trap
The accents start groups of three subdivisions: 3+3 in each bar. There are two larger beats per bar, four across the two bars. Count “ONE la li TWO la li” twice.
There are still twelve sounding events. Calling all twelve “beats” would use a different counting level and would hide the distinction this exercise is testing. State the unit whenever a count might be ambiguous.
Can I identify a song’s time signature from one accent pattern?
Not reliably. A phrase can accent unexpected subdivisions, omit obvious downbeats, or create a temporary cross-rhythm. Slow 6/8 can also invite counting all six eighth notes. Listen across several bars and compare the melody, bass, and harmonic changes before making a claim about meter. Our examples supply the grouping explicitly so you can learn the distinction.
In a familiar song, first find a comfortable pulse. Then ask when a longer cycle seems to restart. Count two, three, or four for several cycles and see which fits the repeated musical events. If more than one reading works, record the evidence for each. The useful skill is explaining the grouping you hear, not guessing a printed signature from a few seconds.