{"id":979,"date":"2026-11-13T14:03:23","date_gmt":"2026-11-13T05:03:23","guid":{"rendered":"https:\/\/guitarschool.in\/?page_id=979"},"modified":"2026-11-14T00:35:13","modified_gmt":"2026-11-13T15:35:13","slug":"metronome","status":"publish","type":"page","link":"https:\/\/guitarschool.in\/?page_id=979","title":{"rendered":"\u30e1\u30c8\u30ed\u30ce\u30fc\u30e0"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"979\" class=\"elementor elementor-979\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-cdbab14 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"cdbab14\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9e846fa\" data-id=\"9e846fa\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9de65ae elementor-widget elementor-widget-html\" data-id=\"9de65ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>.lt-nav{max-width:760px;margin:0 auto;padding:4px 16px;font-family:\"Hiragino Sans\",\"Noto Sans JP\",\"Yu Gothic\",sans-serif;font-size:14px;display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center}.lt-nav a{color:#b5532a;font-weight:700;text-decoration:none}.lt-nav a:hover{text-decoration:underline}.lt-nav .lt-sub{color:#7a6e64}.lt-nav .lt-back{display:inline-block;padding:6px 14px;border:1px solid #e3d9cc;border-radius:999px;background:#fff}<\/style><nav class=\"lt-nav\" aria-label=\"\u5b66\u7fd2\u30fb\u8cc7\u6599\u5ba4\"><a class=\"lt-back\" href=\"\/?page_id=907\">\u2190 \u5b66\u7fd2\u30fb\u8cc7\u6599\u5ba4\u306b\u623b\u308b<\/a><\/nav>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-66cdb92 elementor-widget elementor-widget-html\" data-id=\"66cdb92\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- \u30e1\u30c8\u30ed\u30ce\u30fc\u30e0(Elementor \u306e HTML \u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u306b\u3053\u306e\u307e\u307e\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044) -->\n<div id=\"mtr-app\">\n<style>\n#mtr-app{--mtr-bg:#fbf8f3;--mtr-ink:#2b2420;--mtr-sub:#7a6e64;--mtr-accent:#b5532a;--mtr-line:#e3d9cc;\n  max-width:760px;margin:0 auto;padding:16px;background:var(--mtr-bg);color:var(--mtr-ink);border-radius:14px;\n  font-family:\"Hiragino Sans\",\"Noto Sans JP\",\"Yu Gothic\",sans-serif;line-height:1.5;box-sizing:border-box}\n#mtr-app *{box-sizing:border-box}\n#mtr-app .mtr-title{font-size:20px;font-weight:700;margin:0;color:var(--mtr-ink)}\n#mtr-app button{all:unset;box-sizing:border-box;cursor:pointer;font-family:inherit;text-align:center;-webkit-tap-highlight-color:transparent;user-select:none;-webkit-user-select:none}\n#mtr-app button:focus-visible{outline:2px solid var(--mtr-accent);outline-offset:2px}\n#mtr-app .mtr-main{margin-top:12px;background:#fff;border:1px solid var(--mtr-line);border-radius:14px;padding:18px 14px;text-align:center}\n#mtr-app .mtr-bpmrow{display:flex;align-items:center;justify-content:center;gap:10px}\n#mtr-app .mtr-step{width:48px;height:48px;border-radius:50%;border:1px solid var(--mtr-line);background:var(--mtr-bg);font-size:22px;font-weight:700;line-height:46px;color:var(--mtr-ink)}\n#mtr-app .mtr-step:active{transform:scale(.95)}\n#mtr-app .mtr-bpm{min-width:150px}\n#mtr-app .mtr-num{font-size:64px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}\n#mtr-app .mtr-unit{font-size:13px;color:var(--mtr-sub)}\n#mtr-app .mtr-term{font-family:Georgia,\"Times New Roman\",serif;font-style:italic;font-size:17px;color:var(--mtr-accent);min-height:1.5em;margin-top:2px}\n#mtr-app .mtr-mezu{font-family:\"Hiragino Sans\",\"Noto Sans JP\",\"Yu Gothic\",sans-serif;font-style:normal;font-size:11px;color:var(--mtr-sub);margin-left:4px}\n#mtr-app input[type=range]{width:100%;margin:14px 0 4px;accent-color:var(--mtr-accent)}\n#mtr-app .mtr-beats{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin:14px 0 4px;min-height:26px}\n#mtr-app .mtr-dot{width:22px;height:22px;border-radius:50%;background:var(--mtr-line);transition:background .05s,transform .05s}\n#mtr-app .mtr-dot.is-acc{border:2px solid var(--mtr-accent);background:transparent}\n#mtr-app .mtr-dot.is-on{background:var(--mtr-ink);transform:scale(1.15)}\n#mtr-app .mtr-dot.is-acc.is-on{background:var(--mtr-accent)}\n#mtr-app .mtr-ctrl{display:flex;justify-content:center;gap:10px;margin-top:14px;flex-wrap:wrap}\n#mtr-app .mtr-play{min-width:150px;padding:13px 24px;border-radius:999px;background:var(--mtr-accent);color:#fff;font-size:17px;font-weight:700}\n#mtr-app .mtr-play.is-on{background:var(--mtr-ink)}\n#mtr-app .mtr-tap{padding:13px 22px;border-radius:999px;border:1px solid var(--mtr-line);background:#fff;font-size:15px;font-weight:700;color:var(--mtr-ink)}\n#mtr-app .mtr-tap:active{background:var(--mtr-bg)}\n#mtr-app .mtr-status{font-size:13px;color:var(--mtr-sub);margin-top:10px;min-height:1.4em}\n#mtr-app .mtr-panel{margin-top:12px;background:#fff;border:1px solid var(--mtr-line);border-radius:12px;padding:12px 14px}\n#mtr-app .mtr-grid{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px 12px;align-items:center;font-size:14px}\n#mtr-app .mtr-k{color:var(--mtr-sub);white-space:nowrap}\n#mtr-app select,#mtr-app input[type=number]{font:inherit;font-size:14px;padding:4px 8px;border:1px solid var(--mtr-line);border-radius:6px;background:#fff;color:var(--mtr-ink);max-width:100%}\n#mtr-app input[type=number]{width:72px}\n#mtr-app .mtr-row{display:flex;gap:8px 12px;flex-wrap:wrap;align-items:center}\n#mtr-app .mtr-row label{display:inline-flex;align-items:center;gap:4px;cursor:pointer;white-space:nowrap}\n#mtr-app input[type=checkbox]{accent-color:var(--mtr-accent);width:16px;height:16px;margin:0}\n#mtr-app .mtr-sec{font-size:13px;font-weight:700;color:var(--mtr-sub);margin:0 0 8px}\n#mtr-app .mtr-vol{width:140px;margin:0}\n#mtr-app .mtr-note{font-size:12px;color:var(--mtr-sub);margin:10px 0 0;text-align:center}\n#mtr-app .mtr-fromlog{display:none;align-items:center;gap:10px;flex-wrap:wrap;background:#fdf1e8;border:1px solid #f0d6c4;border-radius:10px;padding:8px 12px;margin-bottom:12px;font-size:13px}\n#mtr-app .mtr-fromlog.is-on{display:flex}\n#mtr-app .mtr-fromlog button{all:unset;cursor:pointer;background:#b5532a;color:#fff;font-weight:700;border-radius:999px;padding:6px 14px;font-size:14px;-webkit-tap-highlight-color:transparent}\n#mtr-app .mtr-fromlog span{color:#7a6e64}\n<\/style>\n<div class=\"mtr-fromlog\" id=\"mtr-fromlog\"><button type=\"button\" id=\"mtr-back\">\u2190 \u7df4\u7fd2\u8a18\u9332\u306b\u623b\u308b<\/button><span id=\"mtr-backnote\"><\/span><\/div>\n\n<h3 class=\"mtr-title\">\u30e1\u30c8\u30ed\u30ce\u30fc\u30e0<\/h3>\n\n<div class=\"mtr-main\">\n  <div class=\"mtr-bpmrow\">\n    <button type=\"button\" class=\"mtr-step\" id=\"mtr-minus\" aria-label=\"\u30c6\u30f3\u30dd\u3092\u4e0b\u3052\u308b\">\u2212<\/button>\n    <div class=\"mtr-bpm\">\n      <div class=\"mtr-num\" id=\"mtr-num\">80<\/div>\n      <div class=\"mtr-unit\">\u2669 = BPM<\/div>\n    <\/div>\n    <button type=\"button\" class=\"mtr-step\" id=\"mtr-plus\" aria-label=\"\u30c6\u30f3\u30dd\u3092\u4e0a\u3052\u308b\">+<\/button>\n  <\/div>\n  <div class=\"mtr-term\" id=\"mtr-term\"><\/div>\n  <input type=\"range\" id=\"mtr-range\" min=\"30\" max=\"250\" step=\"1\" value=\"80\" aria-label=\"\u30c6\u30f3\u30dd\">\n  <div class=\"mtr-beats\" id=\"mtr-beats\"><\/div>\n  <div class=\"mtr-ctrl\">\n    <button type=\"button\" class=\"mtr-play\" id=\"mtr-play\">\u25b6 \u30b9\u30bf\u30fc\u30c8<\/button>\n    <button type=\"button\" class=\"mtr-tap\" id=\"mtr-tap\">\u30bf\u30c3\u30d7<\/button>\n  <\/div>\n  <div class=\"mtr-status\" id=\"mtr-status\"><\/div>\n<\/div>\n\n<div class=\"mtr-panel\">\n  <div class=\"mtr-grid\">\n    <span class=\"mtr-k\">\u62cd\u5b50<\/span>\n    <div class=\"mtr-row\">\n      <select id=\"mtr-beatsel\" aria-label=\"1\u5c0f\u7bc0\u306e\u62cd\u6570\">\n        <option value=\"1\">1\u62cd(\u30a2\u30af\u30bb\u30f3\u30c8\u306a\u3057)<\/option>\n        <option value=\"2\">2\u62cd\u5b50<\/option>\n        <option value=\"3\">3\u62cd\u5b50<\/option>\n        <option value=\"4\" selected>4\u62cd\u5b50<\/option>\n        <option value=\"5\">5\u62cd\u5b50<\/option>\n        <option value=\"6\">6\u62cd\u5b50<\/option>\n        <option value=\"7\">7\u62cd\u5b50<\/option>\n      <\/select>\n    <\/div>\n    <span class=\"mtr-k\">\u7d30\u304b\u304f\u523b\u3080<\/span>\n    <select id=\"mtr-sub\" aria-label=\"1\u62cd\u306e\u523b\u307f\">\n      <option value=\"1\">\u306a\u3057(4\u5206\u97f3\u7b26)<\/option>\n      <option value=\"2\">8\u5206\u97f3\u7b26<\/option>\n      <option value=\"3\">3\u9023\u7b26<\/option>\n      <option value=\"4\">16\u5206\u97f3\u7b26<\/option>\n    <\/select>\n    <span class=\"mtr-k\">\u97f3<\/span>\n    <div class=\"mtr-row\">\n      <select id=\"mtr-sound\" aria-label=\"\u97f3\u8272\">\n        <option value=\"soft\">\u3084\u308f\u3089\u304b\u3044\u97f3<\/option>\n        <option value=\"marimba\">\u30de\u30ea\u30f3\u30d0\u98a8<\/option>\n        <option value=\"click\">\u30af\u30ea\u30c3\u30af(\u5927\u304d\u3081)<\/option>\n        <option value=\"wood\">\u30a6\u30c3\u30c9\u30d6\u30ed\u30c3\u30af<\/option>\n        <option value=\"beep\">\u96fb\u5b50\u97f3(\u3044\u3061\u3070\u3093\u5927\u304d\u3044)<\/option>\n      <\/select>\n      <label>\u97f3\u91cf <input type=\"range\" class=\"mtr-vol\" id=\"mtr-vol\" min=\"0\" max=\"1\" step=\"0.05\" value=\"0.8\" aria-label=\"\u97f3\u91cf\"><\/label>\n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"mtr-panel\">\n  <p class=\"mtr-sec\">\u30c6\u30f3\u30dd\u30a2\u30c3\u30d7\u7df4\u7fd2<\/p>\n  <div class=\"mtr-grid\">\n    <span class=\"mtr-k\">\u4f7f\u3046<\/span>\n    <div class=\"mtr-row\"><label><input type=\"checkbox\" id=\"mtr-up\">\u5c11\u3057\u305a\u3064\u30c6\u30f3\u30dd\u3092\u4e0a\u3052\u308b<\/label><\/div>\n    <span class=\"mtr-k\">\u4e0a\u3052\u65b9<\/span>\n    <div class=\"mtr-row\"><input type=\"number\" id=\"mtr-upn\" min=\"1\" max=\"32\" value=\"4\">\u5c0f\u7bc0\u3054\u3068\u306b<input type=\"number\" id=\"mtr-upd\" min=\"1\" max=\"20\" value=\"2\">\u305a\u3064<\/div>\n    <span class=\"mtr-k\">\u76ee\u6a19<\/span>\n    <div class=\"mtr-row\"><input type=\"number\" id=\"mtr-upt\" min=\"31\" max=\"250\" value=\"120\">\u307e\u3067<\/div>\n  <\/div>\n<\/div>\n<p class=\"mtr-note\">\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u30b9\u30da\u30fc\u30b9\u30ad\u30fc\u3067\u3082\u30b9\u30bf\u30fc\u30c8\/\u30b9\u30c8\u30c3\u30d7\u3067\u304d\u307e\u3059\u3002iPhone\u306f\u30de\u30ca\u30fc\u30e2\u30fc\u30c9\u3060\u3068\u97f3\u304c\u51fa\u306a\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n<script>\n(function(){ \/\/ \u7df4\u7fd2\u8a18\u9332\u304b\u3089\u958b\u3044\u305f\u3068\u304d\u3060\u3051\u300c\u623b\u308b\u300d\u30dc\u30bf\u30f3\u3092\u51fa\u3059(\u5225\u30bf\u30d6\u3067\u958b\u304f\u306e\u3067\u3001\u30bf\u30d6\u3092\u9589\u3058\u308c\u3070\u7df4\u7fd2\u8a18\u9332\u306b\u623b\u308b)\n  if(!\/[?&]from=log(&|$)\/.test(location.search)) return;\n  var bar=document.getElementById('mtr-fromlog'); if(!bar) return; bar.classList.add('is-on');\n  document.getElementById('mtr-back').addEventListener('click',function(){\n    try{ window.close(); }catch(e){}\n    setTimeout(function(){ document.getElementById('mtr-backnote').textContent='\u3053\u306e\u30bf\u30d6(\u753b\u9762)\u3092\u9589\u3058\u308b\u3068\u3001\u7df4\u7fd2\u8a18\u9332\u306b\u623b\u308a\u307e\u3059\u3002'; },300);\n  });\n})();\n<\/script>\n<script>\n(function(){\n  var root=document.getElementById('mtr-app'); if(!root) return;\n  var $=function(s){return root.querySelector(s);};\n  var TERMS=[[40,'Grave'],[60,'Largo'],[66,'Larghetto'],[76,'Adagio'],[108,'Andante'],[120,'Moderato'],[156,'Allegro'],[176,'Vivace'],[200,'Presto'],[999,'Prestissimo']];\n  var st={bpm:80,beats:4,sub:1,sound:'soft',vol:0.8,playing:false,next:0,beat:0,tick:0,bar:0,timer:null,queue:[],raf:null,taps:[],startBpm:80};\n  var ac=null, master=null;\n\n  function load(){ try{ var s=JSON.parse(localStorage.getItem('mtr-state')||'null'); if(s){ st.bpm=s.bpm||80; st.beats=s.beats||4; st.sub=s.sub||1; st.sound=s.sound||'click'; st.vol=(s.vol!=null)?s.vol:0.8; } }catch(e){} }\n  function save(){ try{ localStorage.setItem('mtr-state',JSON.stringify({bpm:st.bpm,beats:st.beats,sub:st.sub,sound:st.sound,vol:st.vol})); }catch(e){} }\n  function clamp(v){ return Math.max(30,Math.min(250,Math.round(v))); }\n  function term(b){ for(var i=0;i<TERMS.length;i++) if(b<TERMS[i][0]) return TERMS[i][1]; return ''; }\n\n  function setBpm(v,keepSave){\n    st.bpm=clamp(v);\n    $('#mtr-num').textContent=st.bpm; $('#mtr-range').value=st.bpm;\n    var tEl=$('#mtr-term'); tEl.textContent=term(st.bpm);\n    var sm=document.createElement('small'); sm.className='mtr-mezu'; sm.textContent='(\u901f\u5ea6\u306e\u76ee\u5b89)'; tEl.appendChild(sm);\n    if(!keepSave) save();\n  }\n  function buildDots(){\n    var box=$('#mtr-beats'); box.innerHTML='';\n    for(var i=0;i<st.beats;i++){ var d=document.createElement('span'); d.className='mtr-dot'+(i===0&&st.beats>1?' is-acc':''); box.appendChild(d); }\n  }\n\n  \/* ---------- \u97f3 ---------- *\/\n  var noise=null, shaper=null;\n  function gainFor(v){ return v*(1.5+v*6); } \/\/ \u97f3\u91cf\u3064\u307e\u307f \u2192 \u5b9f\u969b\u306e\u5927\u304d\u3055(\u6700\u5f8c\u306b\u97f3\u5272\u308c\u9632\u6b62\u306e\u98fd\u548c\u3092\u304b\u3051\u308b)\n  function ensureAudio(){\n    if(!ac){\n      ac=new (window.AudioContext||window.webkitAudioContext)();\n      \/\/ \u6700\u5f8c\u306b\u300c\u306a\u3081\u3089\u304b\u306b\u982d\u6253\u3061\u306b\u3059\u308b\u300d\u56de\u8def\u3092\u901a\u3057\u3001\u5272\u308c\u305a\u306b\u6700\u5927\u9650\u306e\u97f3\u91cf\u3092\u51fa\u3059\n      shaper=ac.createWaveShaper();\n      var n=2048, curve=new Float32Array(n); for(var i=0;i<n;i++){ var x=i\/(n-1)*2-1; curve[i]=Math.tanh(x*3)\/Math.tanh(3); }\n      shaper.curve=curve; shaper.oversample='4x';\n      var pre=ac.createGain(); pre.gain.value=1\/3; \/\/ shaper \u306e\u5165\u529b\u7bc4\u56f2(-1\u301c1)\u306b\u5408\u308f\u305b\u308b\n      var out=ac.createGain(); out.gain.value=0.82;\n      master=ac.createGain(); master.connect(pre); pre.connect(shaper); shaper.connect(out); out.connect(ac.destination);\n      \/\/ \u30af\u30ea\u30c3\u30af\u97f3\u306e\u300c\u30ab\u30c3\u300d\u3068\u3044\u3046\u6210\u5206\u306b\u4f7f\u3046\u77ed\u3044\u30ce\u30a4\u30ba\n      noise=ac.createBuffer(1,Math.floor(ac.sampleRate*0.05),ac.sampleRate);\n      var d=noise.getChannelData(0); for(var j=0;j<d.length;j++) d[j]=Math.random()*2-1;\n    }\n    if(ac.state==='suspended') ac.resume();\n    master.gain.value=gainFor(st.vol);\n  }\n  function tone(type,f,t,peak,hold,dur,drop){\n    var o=ac.createOscillator(), g=ac.createGain();\n    o.type=type; o.frequency.setValueAtTime(f,t); if(drop) o.frequency.exponentialRampToValueAtTime(f*drop,t+dur);\n    g.gain.setValueAtTime(0.0001,t); g.gain.exponentialRampToValueAtTime(peak,t+0.002);\n    g.gain.setValueAtTime(peak,t+hold); g.gain.exponentialRampToValueAtTime(0.0001,t+dur);\n    o.connect(g); g.connect(master); o.start(t); o.stop(t+dur+0.02);\n  }\n  \/\/ \u6b63\u5f26\u6ce2\u3092\u300c\u3075\u308f\u3063\u300d\u3068\u7acb\u3061\u4e0a\u3052\u3066\u81ea\u7136\u306b\u6e1b\u8870\u3055\u305b\u308b\n  function soft(f,t,peak,att,dur){\n    var o=ac.createOscillator(), g=ac.createGain();\n    o.type='sine'; o.frequency.setValueAtTime(f,t);\n    g.gain.setValueAtTime(0,t); g.gain.linearRampToValueAtTime(peak,t+att);\n    g.gain.setTargetAtTime(0,t+att,dur\/4);\n    o.connect(g); g.connect(master); o.start(t); o.stop(t+att+dur+0.05);\n  }\n  function burst(t,f,amp,len){\n    var src=ac.createBufferSource(), bp=ac.createBiquadFilter(), ng=ac.createGain();\n    src.buffer=noise; bp.type='bandpass'; bp.frequency.value=f; bp.Q.value=1;\n    ng.gain.setValueAtTime(0.0001,t); ng.gain.exponentialRampToValueAtTime(amp,t+0.001); ng.gain.exponentialRampToValueAtTime(0.0001,t+len);\n    src.connect(bp); bp.connect(ng); ng.connect(master); src.start(t); src.stop(t+len+0.01);\n  }\n  \/\/ \u30b9\u30de\u30db\u306e\u30b9\u30d4\u30fc\u30ab\u30fc\u3068\u8033\u304c\u3044\u3061\u3070\u3093\u654f\u611f\u306a 2.5\u301c3.5kHz \u4ed8\u8fd1\u3092\u4e2d\u5fc3\u306b\u3001\u3057\u3063\u304b\u308a\u9577\u3081\u306b\u9cf4\u3089\u3059\n  function click(t,level){ \/\/ level: 2=\u5c0f\u7bc0\u306e\u982d, 1=\u62cd, 0=\u7d30\u304b\u3044\u523b\u307f\n    var k=level===0?0.5:1, L=level===0?0.7:1; \/\/ \u7d30\u304b\u3044\u523b\u307f\u306f\u5c11\u3057\u5c0f\u3055\u304f\u77ed\u304f\n    if(st.sound==='soft'){ \/\/ \u3084\u308f\u3089\u304b\u3044\u97f3:\u307b\u307c\u7d14\u97f3\u3067\u3001\u7acb\u3061\u4e0a\u304c\u308a\u3092\u306a\u3060\u3089\u304b\u306b(\u8033\u306b\u523a\u3055\u308b\u500d\u97f3\u3092\u51fa\u3055\u306a\u3044)\n      var fs=level===2?1568:level===1?1319:1175;\n      soft(fs,t,0.26*k,0.006,0.18*L);\n    }else if(st.sound==='marimba'){ \/\/ \u30de\u30ea\u30f3\u30d0\u98a8:\u6728\u7434\u306e\u3088\u3046\u306a\u4e38\u3044\u97f3\n      var fm=level===2?1397:level===1?1175:1047;\n      soft(fm,t,0.25*k,0.003,0.22*L); soft(fm*4,t,0.04*k,0.002,0.03*L);\n    }else if(st.sound==='wood'){ \/\/ \u30a6\u30c3\u30c9\u30d6\u30ed\u30c3\u30af\u98a8\n      var f=level===2?2000:level===1?1600:1400;\n      tone('sine',f,t,1*k,0.03*L,0.12*L,0.9); tone('triangle',f*2.5,t,0.6*k,0.012,0.06*L);\n      burst(t,3200,1*k,0.025);\n    }else if(st.sound==='beep'){ \/\/ \u96fb\u5b50\u97f3\n      var f2=level===2?3136:level===1?2637:2349;\n      tone('square',f2,t,1*k,0.07*L,0.13*L); tone('square',f2*1.5,t,0.45*k,0.05*L,0.1*L);\n    }else{ \/\/ \u30af\u30ea\u30c3\u30af\n      var f3=level===2?3200:level===1?2600:2200;\n      tone('square',f3,t,1*k,0.035*L,0.1*L); tone('square',f3*1.26,t,0.5*k,0.02*L,0.07*L); burst(t,f3*1.3,1*k,0.03);\n    }\n  }\n\n  \/* ---------- \u30b9\u30b1\u30b8\u30e5\u30fc\u30e9(\u5148\u8aad\u307f\u3057\u3066\u6b63\u78ba\u306b\u9cf4\u3089\u3059) ---------- *\/\n  function schedule(){\n    while(st.next < ac.currentTime+0.12){\n      var level = st.tick>0 ? 0 : (st.beat===0 && st.beats>1 ? 2 : 1);\n      click(st.next,level);\n      if(st.tick===0) st.queue.push({t:st.next,beat:st.beat});\n      \/\/ \u6b21\u306e\u523b\u307f\u3078\n      st.next += 60\/st.bpm\/st.sub;\n      st.tick++;\n      if(st.tick>=st.sub){\n        st.tick=0; st.beat++;\n        if(st.beat>=st.beats){ st.beat=0; st.bar++; barDone(); }\n      }\n    }\n  }\n  function barDone(){\n    if(!$('#mtr-up').checked) return;\n    var n=Math.max(1,+$('#mtr-upn').value||4), d=Math.max(1,+$('#mtr-upd').value||2), target=clamp(+$('#mtr-upt').value||120);\n    if(st.bar>0 && st.bar%n===0 && st.bpm<target){ setBpm(Math.min(target,st.bpm+d),true); status(); }\n  }\n  function draw(){\n    var now=ac.currentTime, cur=null;\n    while(st.queue.length && st.queue[0].t<=now){ cur=st.queue.shift(); }\n    if(cur){\n      var dots=root.querySelectorAll('.mtr-dot');\n      dots.forEach(function(d,i){ d.classList.toggle('is-on',i===cur.beat); });\n    }\n    if(st.playing) st.raf=requestAnimationFrame(draw);\n  }\n  function status(){\n    var up=$('#mtr-up').checked;\n    $('#mtr-status').textContent= st.playing ? (up ? (st.bar+1)+'\u5c0f\u7bc0\u76ee\u30fb\u76ee\u6a19 \u2669='+clamp(+$('#mtr-upt').value||120) : (st.bar+1)+'\u5c0f\u7bc0\u76ee') : '';\n  }\n  function start(){\n    ensureAudio();\n    st.playing=true; st.beat=0; st.tick=0; st.bar=0; st.queue=[]; st.startBpm=st.bpm;\n    st.next=ac.currentTime+0.06;\n    schedule(); st.timer=setInterval(function(){ schedule(); status(); },25);\n    st.raf=requestAnimationFrame(draw);\n    $('#mtr-play').textContent='\u25a0 \u30b9\u30c8\u30c3\u30d7'; $('#mtr-play').classList.add('is-on'); status();\n  }\n  function stop(){\n    st.playing=false; clearInterval(st.timer); cancelAnimationFrame(st.raf);\n    root.querySelectorAll('.mtr-dot').forEach(function(d){ d.classList.remove('is-on'); });\n    $('#mtr-play').textContent='\u25b6 \u30b9\u30bf\u30fc\u30c8'; $('#mtr-play').classList.remove('is-on'); status();\n    if($('#mtr-up').checked && st.bpm!==st.startBpm){ $('#mtr-status').textContent='\u2669='+st.startBpm+' \u2192 '+st.bpm+' \u307e\u3067\u4e0a\u3052\u307e\u3057\u305f'; save(); }\n  }\n  function toggle(){ if(st.playing) stop(); else start(); }\n\n  \/* ---------- \u30bf\u30c3\u30d7\u30c6\u30f3\u30dd ---------- *\/\n  function tap(){\n    var t=performance.now();\n    if(st.taps.length && t-st.taps[st.taps.length-1]>2000) st.taps=[];\n    st.taps.push(t); if(st.taps.length>6) st.taps.shift();\n    if(st.taps.length>=2){\n      var sum=0; for(var i=1;i<st.taps.length;i++) sum+=st.taps[i]-st.taps[i-1];\n      setBpm(60000\/(sum\/(st.taps.length-1)));\n    }\n  }\n\n  \/* ---------- \u9577\u62bc\u3057\u3067\u9023\u7d9a\u5909\u66f4 ---------- *\/\n  function hold(btn,delta){\n    var tm=null, iv=null;\n    function stopHold(){ clearTimeout(tm); clearInterval(iv); }\n    btn.addEventListener('pointerdown',function(e){ e.preventDefault(); setBpm(st.bpm+delta); tm=setTimeout(function(){ iv=setInterval(function(){ setBpm(st.bpm+delta); },70); },400); });\n    ['pointerup','pointerleave','pointercancel'].forEach(function(ev){ btn.addEventListener(ev,stopHold); });\n    btn.addEventListener('keydown',function(e){ if(e.key==='Enter'||e.key===' '){ e.preventDefault(); setBpm(st.bpm+delta); } });\n  }\n\n  load();\n  $('#mtr-beatsel').value=String(st.beats); $('#mtr-sub').value=String(st.sub); $('#mtr-sound').value=st.sound; $('#mtr-vol').value=st.vol;\n  setBpm(st.bpm,true); buildDots();\n  hold($('#mtr-minus'),-1); hold($('#mtr-plus'),1);\n  $('#mtr-range').addEventListener('input',function(){ setBpm(+this.value); });\n  $('#mtr-play').addEventListener('click',toggle);\n  $('#mtr-tap').addEventListener('pointerdown',function(e){ e.preventDefault(); tap(); });\n  $('#mtr-tap').addEventListener('keydown',function(e){ if(e.key==='Enter'){ e.preventDefault(); tap(); } });\n  $('#mtr-beatsel').addEventListener('change',function(){ st.beats=+this.value; st.beat=0; buildDots(); save(); });\n  $('#mtr-sub').addEventListener('change',function(){ st.sub=+this.value; st.tick=0; save(); });\n  $('#mtr-sound').addEventListener('change',function(){ st.sound=this.value; save(); if(!st.playing){ ensureAudio(); click(ac.currentTime+0.02,2); } });\n  $('#mtr-vol').addEventListener('input',function(){ st.vol=+this.value; if(master) master.gain.value=gainFor(st.vol); save(); });\n  document.addEventListener('keydown',function(e){\n    if(e.code!=='Space') return;\n    var tg=(e.target&&e.target.tagName)||''; if(\/INPUT|SELECT|TEXTAREA|BUTTON\/.test(tg)) return;\n    var r=root.getBoundingClientRect(); if(r.bottom<0||r.top>window.innerHeight) return;\n    e.preventDefault(); toggle();\n  });\n  document.addEventListener('visibilitychange',function(){ if(document.hidden && st.playing) stop(); });\n})();\n<\/script>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35f8df0 elementor-widget elementor-widget-html\" data-id=\"35f8df0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>.lt-nav{max-width:760px;margin:0 auto;padding:4px 16px;font-family:\"Hiragino Sans\",\"Noto Sans JP\",\"Yu Gothic\",sans-serif;font-size:14px;display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center}.lt-nav a{color:#b5532a;font-weight:700;text-decoration:none}.lt-nav a:hover{text-decoration:underline}.lt-nav .lt-sub{color:#7a6e64}.lt-nav .lt-back{display:inline-block;padding:6px 14px;border:1px solid #e3d9cc;border-radius:999px;background:#fff}<\/style><nav class=\"lt-nav\" aria-label=\"\u5b66\u7fd2\u30fb\u8cc7\u6599\u5ba4\"><a class=\"lt-back\" href=\"\/?page_id=907\">\u2190 \u5b66\u7fd2\u30fb\u8cc7\u6599\u5ba4\u306b\u623b\u308b<\/a><span class=\"lt-sub\">\u3042\u308f\u305b\u3066\u4f7f\u3046:<a href=\"\/?page_id=980\">\u30c1\u30e5\u30fc\u30ca\u30fc<\/a> \u30fb <a href=\"\/?page_id=938\">\u97f3\u697d\u7528\u8a9e\u8f9e\u5178(\u901f\u5ea6\u8a18\u53f7)<\/a><\/span><\/nav>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u2190 \u5b66\u7fd2\u30fb\u8cc7\u6599\u5ba4\u306b\u623b\u308b \u2190 \u7df4\u7fd2\u8a18\u9332\u306b\u623b\u308b \u30e1\u30c8\u30ed\u30ce\u30fc\u30e0 \u2212 80 \u2669 = BPM + \u25b6 \u30b9\u30bf\u30fc\u30c8 \u30bf\u30c3\u30d7 \u62cd\u5b50 1\u62cd(\u30a2\u30af\u30bb\u30f3\u30c8\u306a\u3057)2\u62cd\u5b503\u62cd\u5b504\u62cd\u5b505\u62cd\u5b506\u62cd\u5b507\u62cd\u5b50 \u7d30\u304b\u304f\u523b\u3080 \u306a\u3057(4\u5206\u97f3\u7b26)8\u5206\u97f3\u7b263\u9023\u7b261 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":907,"menu_order":7,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-979","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/guitarschool.in\/index.php?rest_route=\/wp\/v2\/pages\/979","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/guitarschool.in\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/guitarschool.in\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/guitarschool.in\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/guitarschool.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=979"}],"version-history":[{"count":21,"href":"https:\/\/guitarschool.in\/index.php?rest_route=\/wp\/v2\/pages\/979\/revisions"}],"predecessor-version":[{"id":1065,"href":"https:\/\/guitarschool.in\/index.php?rest_route=\/wp\/v2\/pages\/979\/revisions\/1065"}],"up":[{"embeddable":true,"href":"https:\/\/guitarschool.in\/index.php?rest_route=\/wp\/v2\/pages\/907"}],"wp:attachment":[{"href":"https:\/\/guitarschool.in\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=979"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}