Tần số Luân xa
Tần số khác
Dạng sóng
Sine — Hình sin
Triangle — Tam giác
Square — Vuông
Sawtooth — Răng cưa
▶ B Ắ T Đ Ầ U
■
— Đã tắt —
Tần Số Chữa Lành (Solfeggio)
1. Âm Thanh Là Năng Lượng
Mọi vật chất trong vũ trụ đều ở trạng thái rung động. Các tần số Solfeggio là một chuỗi các âm thanh cổ xưa được tin là có khả năng tác động sâu sắc đến tâm trí và cơ thể, giúp tái lập sự cân bằng tự nhiên và thúc đẩy quá trình chữa lành.
2. Ý Nghĩa Các Tần Số Chính
396 Hz: Giải phóng nỗi sợ hãi và tội lỗi.
417 Hz: Xóa tan các tình huống tiêu cực và thúc đẩy sự thay đổi.
528 Hz: Tần số của tình yêu, sự biến đổi và sửa chữa DNA.
639 Hz: Kết nối và cân bằng các mối quan hệ.
741 Hz: Giải độc và làm sạch tế bào.
852 Hz: Đánh thức trực giác và trật tự tâm linh.
3. Cách Trải Nghiệm Hiệu Quả
Để đạt hiệu quả tốt nhất, bạn nên sử dụng tai nghe chất lượng trong không gian yên tĩnh. Hãy thả lỏng cơ thể, tập trung vào hơi thở và để âm thanh bao trùm lấy tâm trí bạn. Bạn có thể sử dụng các tần số này khi thiền định, trước khi ngủ hoặc khi đang làm việc sáng tạo.
"Nếu bạn muốn tìm ra những bí mật của vũ trụ, hãy nghĩ đến năng lượng, tần số và rung động." — Nikola Tesla
// ── Data ──────────────────────────────────────────────────────────────────
const CHAKRAS = [
{ hz: 396, name: 'Muladhara', desc: 'Root · Giải phóng', color: '#e05252', dot: '#e05252' },
{ hz: 417, name: 'Svadhisthana', desc: 'Sacral · Thay đổi', color: '#f0873a', dot: '#f0873a' },
{ hz: 528, name: 'Manipura', desc: 'Solar · Chuyển hóa', color: '#e8d44d', dot: '#d4b800' },
{ hz: 639, name: 'Anahata', desc: 'Heart · Kết nối', color: '#4caf7d', dot: '#4caf7d' },
{ hz: 741, name: 'Vishuddha', desc: 'Throat · Biểu đạt', color: '#4fc3f7', dot: '#4fc3f7' },
{ hz: 852, name: 'Ajna', desc: 'Third Eye · Trực giác', color: '#5c8ce8', dot: '#5c8ce8' },
{ hz: 963, name: 'Sahasrara', desc: 'Crown · Thức tỉnh', color: '#b07ee8', dot: '#b07ee8' },
];
const NEUTRALS = [
{ hz: 174, label: 'Giảm đau' },
{ hz: 285, label: 'Chữa lành mô' },
{ hz: 432, label: 'Thiên nhiên' },
];
// ── Build UI ──────────────────────────────────────────────────────────────
const chakraGrid = document.getElementById('chakraGrid');
CHAKRAS.forEach(c => {
const btn = document.createElement('button');
btn.className = 'chakra-btn';
btn.dataset.hz = c.hz;
btn.innerHTML = `
${c.hz} Hz
`;
btn.style.setProperty('--chakra-color', c.color);
btn.addEventListener('click', () => setFreq(c.hz, c.name, btn));
chakraGrid.appendChild(btn);
});
const neutralGrid = document.getElementById('neutralGrid');
NEUTRALS.forEach(n => {
const btn = document.createElement('button');
btn.className = 'neutral-btn';
btn.dataset.hz = n.hz;
btn.innerHTML = `${n.hz}
${n.label} `;
btn.addEventListener('click', () => setFreq(n.hz, n.label + ' · ' + n.hz + ' Hz', btn));
neutralGrid.appendChild(btn);
});
// ── State ─────────────────────────────────────────────────────────────────
let audioCtx = null, oscillator = null, gainNode = null;
let currentBtn = null;
let isPlaying = false;
// ── Freq select ───────────────────────────────────────────────────────────
function setFreq(hz, name, btn) {
document.getElementById('freqInput').value = hz;
document.getElementById('freqVal').textContent = hz + ' Hz';
// Animate number
const disp = document.getElementById('freqDisplay');
disp.textContent = hz;
disp.classList.remove('pulse');
void disp.offsetWidth;
disp.classList.add('pulse');
// Name
document.getElementById('freqName').textContent = name || '—';
// Active button
document.querySelectorAll('.chakra-btn, .neutral-btn').forEach(b => b.classList.remove('active'));
if (btn) btn.classList.add('active');
currentBtn = btn;
// Live update if playing
if (oscillator && audioCtx) {
oscillator.frequency.setValueAtTime(hz, audioCtx.currentTime);
}
}
// ── Audio ─────────────────────────────────────────────────────────────────
function toggleTone() {
if (isPlaying) stopTone(); else startTone();
}
function startTone() {
if (isPlaying) return;
audioCtx = new (window.AudioContext || window.webkitAudioContext)();
oscillator = audioCtx.createOscillator();
gainNode = audioCtx.createGain();
const analyser = audioCtx.createAnalyser();
analyser.fftSize = 256;
waveData = new Uint8Array(analyser.frequencyBinCount);
window._analyser = analyser;
oscillator.type = document.getElementById('waveType').value;
oscillator.frequency.setValueAtTime(+document.getElementById('freqInput').value, audioCtx.currentTime);
gainNode.gain.value = +document.getElementById('volume').value;
oscillator.connect(gainNode);
gainNode.connect(analyser);
analyser.connect(audioCtx.destination);
oscillator.start();
isPlaying = true;
document.getElementById('btnPlay').textContent = '⏸ T Ạ M D Ừ N G';
document.getElementById('btnPlay').classList.add('playing');
document.getElementById('freqRing').classList.add('active');
document.getElementById('status').textContent = '— Đang phát —';
document.getElementById('status').classList.add('on');
}
function stopTone() {
if (!isPlaying) return;
oscillator.stop();
audioCtx.close();
oscillator = null; audioCtx = null; gainNode = null;
window._analyser = null;
isPlaying = false;
document.getElementById('btnPlay').innerHTML = '▶ B Ắ T Đ Ầ U';
document.getElementById('btnPlay').classList.remove('playing');
document.getElementById('freqRing').classList.remove('active');
document.getElementById('status').textContent = '— Đã tắt —';
document.getElementById('status').classList.remove('on');
}
// ── Live control updates ──────────────────────────────────────────────────
document.getElementById('volume').addEventListener('input', function() {
document.getElementById('volVal').textContent = Math.round(this.value * 100) + '%';
if (gainNode && audioCtx) gainNode.gain.setValueAtTime(+this.value, audioCtx.currentTime);
});
document.getElementById('freqInput').addEventListener('input', function() {
document.getElementById('freqVal').textContent = this.value + ' Hz';
document.getElementById('freqDisplay').textContent = this.value;
document.getElementById('freqName').textContent = '—';
document.querySelectorAll('.chakra-btn, .neutral-btn').forEach(b => b.classList.remove('active'));
if (oscillator && audioCtx) oscillator.frequency.setValueAtTime(+this.value, audioCtx.currentTime);
});
document.getElementById('waveType').addEventListener('change', function() {
if (oscillator) oscillator.type = this.value;
});
// ── Canvas visualizer ─────────────────────────────────────────────────────
const canvas = document.getElementById('visualizer');
const ctx2 = canvas.getContext('2d');
let waveData = null;
function resizeCanvas() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
}
resizeCanvas();
window.addEventListener('resize', resizeCanvas);
function drawVis() {
requestAnimationFrame(drawVis);
ctx2.clearRect(0, 0, canvas.width, canvas.height);
const analyser = window._analyser;
if (!analyser) return;
analyser.getByteFrequencyData(waveData);
const cx = canvas.width / 2, cy = canvas.height / 2;
const bars = waveData.length;
const radius = Math.min(cx, cy) * 0.55;
ctx2.save();
ctx2.translate(cx, cy);
for (let i = 0; i < bars; i++) {
const val = waveData[i] / 255;
const angle = (i / bars) * Math.PI * 2 - Math.PI / 2;
const inner = radius;
const outer = radius + val * 90;
const hue = 240 + i * 0.6;
ctx2.beginPath();
ctx2.moveTo(Math.cos(angle) * inner, Math.sin(angle) * inner);
ctx2.lineTo(Math.cos(angle) * outer, Math.sin(angle) * outer);
ctx2.strokeStyle = `hsla(${hue},80%,75%,${0.3 + val * 0.7})`;
ctx2.lineWidth = 2;
ctx2.stroke();
}
ctx2.restore();
}
drawVis();