等間隔に音が並んでいても、それだけではまとめ方は決まりません。続く足音を「1、2、1、2」と数えることも、「1、2、3、1、2、3」と数えることもできます。間隔は同じで、組織が違うのです。
拍子は、拍を周期的なまとまりとして組織する仕組みで、強い位置と弱い位置の関係を含みます。 今回は一定のパルスを追い、次にまとまりの始まりを探します。約十分を目安に、快適な音量で進めてください。
再生する前に予想する
二つの版には、どちらも十二の音があります。一方は二音ごと、他方は三音ごとに強調します。まとまりの始まりが多いのはどちらでしょう。先に終わるのはどちらでしょうか。
大きい音だけでなく、すべての音に合わせて一回ずつ拍を刻みます。その後、まとまりを声に出して数えましょう。版を切り替えても、手を動かす間隔は変えないようにします。
図を準備しています
同じパルスを二通りにまとめる十二の発音間隔はすべて 0.6 秒。二音ごと、または三音ごとに強くします。タイミングと音色は同じです。
{"id":"music-meter-groups","title":"同じパルスを二通りにまとめる","summary":"十二の発音間隔はすべて 0.6 秒。二音ごと、または三音ごとに強くします。タイミングと音色は同じです。","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":"時間 →・棒の高さはゲイン","choose":"版を選ぶ","clip":"全長:","envelope":"時間に対する振幅 →(1.4 秒)。ピークまで上がり、その後減衰します。立ち上がりに使う時間を比べましょう。","error":"音声を開始できませんでした。再試行するか、図と文章で確認してください。","fact0":"二拍のまとまりが六つ。各まとまりの最初を強くします。","fact1":"三拍のまとまりが四つ。パルスの速さは変わりません。","heading":"同じパルスを二通りにまとめる","idle":"版を選んで再生します。変更すると停止し、各クリップは最後で自動停止します。","intro":"すべての音に合わせて拍を刻み、強い音を起点に「1、2」または「1、2、3」と数えます。","key":"高い棒は設定した強いアクセントです。下のまとまりは数え方を示します。知覚される音量の測定値ではありません。","option0":"2 拍ずつ","option1":"3 拍ずつ","play":"この版を再生","playing":"再生中。いつでも停止できます。","seconds":"秒","starting":"音声を準備中…","stop":"停止","volume":"音量"}}
どちらも 7.2 秒で終わります。パルスはともに 100 BPM、つまり 0.6 秒ごとです。二拍ずつなら始まりが六つ、三拍ずつなら四つ。まとまりを変えるために速くする必要はありません。
棒の高さは設定した音のゲインを示し、アクセントを図にしたものです。知覚される音量の測定値ではありません。下の数字のまとまりでも、音を出さずに確認できます。
アクセントは音量だけでなく、長さ、音域、奏法、和声の変化でも生まれます。最初のモデルではゲインだけを変えて比較を明確にしています。実際の演奏で毎小節の第一拍を強く叩く必要はありません。拍子が定まると、実際のアクセントがその枠に逆らうこともあります。
細分、拍、小節は別の階層
| 階層 | 何を追うか | 単純な三拍の小節の例 |
| 細分 | 拍をさらに等しく分けた単位 | 1 and 2 and 3 and |
| 拍 | 数える基準に選んだ規則的なパルス | 1、2、3 |
| 小節 | 繰り返される拍のまとまり | 一つの「1」から次の「1」まで |
拍子記号は、こうした音価を組織するための記譜です。3/4 では、上の数字が一小節に四分音符の拍を三つ含むことを、下の数字が四分音符の単位を示します。四分音符は音価であって固定の秒数ではなく、実際の長さはテンポによります。
ただし「上の数字が感じる拍の数」と、すべての記号に機械的に当てはめてはいけません。6/8 を通常の複合拍子として読むと、六つの八分音符が二つの大きな拍を作ります。一拍は付点四分音符で、三つに分かれます。3/4 は通常、一拍を二つに分けます。拍子と拍子記号
小さな六歩が同じでも、拍子は違う
最初の版を「ONE and TWO and THREE and」、次を「ONE la li TWO la li」と数えてみます。音節は数えるための補助です。一小節に大きな拍が三つあるか、二つあるかを聴いてください。
図を準備しています
六つの細分:2+2+2 と 3+3細分一つは 0.3 秒。0、2、4 番目を強調すると 3/4 の三拍、0、3 番目なら 6/8 の二拍を表せます。どちらも二小節で 3.6 秒です。
{"id":"music-meter-six","title":"六つの細分:2+2+2 と 3+3","summary":"細分一つは 0.3 秒。0、2、4 番目を強調すると 3/4 の三拍、0、3 番目なら 6/8 の二拍を表せます。どちらも二小節で 3.6 秒です。","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":"時間 →・棒の高さはゲイン","choose":"版を選ぶ","clip":"全長:","envelope":"時間に対する振幅 →(1.4 秒)。ピークまで上がり、その後減衰します。立ち上がりに使う時間を比べましょう。","error":"音声を開始できませんでした。再試行するか、図と文章で確認してください。","fact0":"一小節に四分音符の拍が三つ。各拍を八分音符二つに分けます。四分音符 = 100 BPM。","fact1":"一小節に付点四分音符の拍が二つ。各拍を八分音符三つに分けます。付点四分音符 ≈ 66.7 BPM。","heading":"六つの細分:2+2+2 と 3+3","idle":"版を選んで再生します。変更すると停止し、各クリップは最後で自動停止します。","intro":"大きな拍のまとまりに注目。同じ六分割の枠を二回繰り返します。","key":"高い棒は設定した強いアクセントです。下のまとまりは数え方を示します。知覚される音量の測定値ではありません。","option0":"3/4 · 2+2+2","option1":"6/8 · 3+3","play":"この版を再生","playing":"再生中。いつでも停止できます。","seconds":"秒","starting":"音声を準備中…","stop":"停止","volume":"音量"}}
固定しているのは八分音符の細分速度で、一つ 0.3 秒です。したがって 3/4 の四分音符の拍は 100 BPM、6/8 の付点四分音符の拍は約 66.7 BPM。どちらの小節も 1.8 秒です。小さい歩幅の速さは同じでも、大きな拍の単位が違います。
BPM の数字だけでは比較を誤ることがあるのは、このためです。どの音価を数えているかも必要です。四分音符と付点四分音符を両方とも 100 BPM にすれば、三拍の 3/4 小節は 1.8 秒、二拍の 6/8 小節は 1.2 秒になります。それは今回とは別の条件です。
新しい並びで確認する
等間隔の八分音符が十二あり、1、4、7、10 番目を強く鳴らすとします。六音ずつを一小節とすると、各小節は 2+2+2 と 3+3 のどちらでしょう。二小節で大きな拍はいくつありますか。
答えと、数え方の落とし穴を見る
三つの細分ごとにアクセントが来るので、各小節は 3+3 です。一小節に二拍、二小節で四拍。「ONE la li TWO la li」を二回数えます。
発音の数は依然として十二です。十二音をすべて「拍」と呼ぶと、数える階層が変わり、今回の区別が見えにくくなります。曖昧になりそうなら、何を一単位として数えたかを明示しましょう。
一つのアクセント型だけで、曲の拍子記号を当てられる?
確実にはできません。意外な細分を強調したり、明瞭な小節頭を省いたり、一時的に別の周期を重ねたりする音楽があります。遅い 6/8 なら、六つの八分音符を一つずつ数えたくなることもあります。数小節を通して旋律、低音、和声変化を比べて判断します。本実験では区別を学べるよう、まとまりを明示しています。
聞き慣れた曲で、まず心地よく追えるパルスを見つけます。次に、より長い周期がどこで始まり直すかを探しましょう。二、三、四と数えて数周期試し、反復する出来事に合うか確認します。複数の読み方が成り立つなら、それぞれの根拠を残してください。数秒で記号を当てるより、聴こえた組織を説明する力が大切です。