Lub Dub Valves Jun 2026

<div class="valves-container"> <div class="valve lub" id="lubValve"> <div class="valve-icon">πŸ«€πŸšͺ</div> <div class="valve-title">LUB (S1)</div> <div class="valve-desc">Mitral + Tricuspid closure<br>AV valves snap shut</div> </div> <div class="valve dub" id="dubValve"> <div class="valve-icon">πŸ«€πŸŒŠ</div> <div class="valve-title">DUB (S2)</div> <div class="valve-desc">Aortic + Pulmonic closure<br>Semilunar valves close</div> </div> </div>

);

// visual cleanup on page window.addEventListener('beforeunload', () => if (autoInterval) clearInterval(autoInterval); if (audioCtx) audioCtx.close(); ); lub dub valves

| Component | Implementation | | -------------------- | --------------------------------------- | | Lub sound (S1) | 85Hz + 170Hz sine with exponential decay | | Dub sound (S2) | 210Hz + 430Hz, shorter decay | | Valve animation | CSS scaling + active class for 180ms | | Heart rate control | BPM slider β†’ dynamically updates interval | | Audio context safety | Auto-resume on first user interaction | | Manual override | Clicking individual stops auto cycle |

The "lub-dub" is more than just a background noise; it is real-time audio proof that the heart's complex plumbing is working correctly. It is the sound of containment and release, of pressure and relaxation. It is the mechanical symphony that keeps the orchestra of the body playing, one beat at a time. To stop this backward flow, the Pulmonic and

To stop this backward flow, the Pulmonic and Aortic valves snap shut. The vibration of these Semilunar valves closing creates the "dub."

const now = audioCtx.currentTime; const osc = audioCtx.createOscillator(); const gain = audioCtx.createGain(); osc.connect(gain); gain.connect(audioCtx.destination); To stop this backward flow

<div class="status" id="statusMsg">⚑ idle</div>

The "dub" is caused by the closure of the semilunar valves β€”the aortic and pulmonary valves.

osc.frequency.value = 210; // sharper gain.gain.value = 0.4; gain.gain.exponentialRampToValueAtTime(0.0001, now + 0.22); osc.start(); osc.stop(now + 0.22);

// ----- Auto Cycle (normal lub-dub rhythm) ----- let autoInterval = null; let isAuto = false; const bpmSlider = document.getElementById('bpmSlider'); const bpmValueSpan = document.getElementById('bpmValue');