/
smkay7
/
algorhythm
Обзор
Документация
Войти
/
smkay7
/
algorhythm
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
script.js
267 строк
9 KB
smkay7
upload files
26 янв 2026, 09:53
Верифицирован
26 янв 2026, 09:53
929370c
Код
Авторство
О чём код?
// Основные переменные системы let heartRate = 72; let hrv = 56; let stressLevel = 42; let emotionalState = "Норма"; let sessionActive = false; let intervalId = null; let vizBars = []; // Инициализация визуализатора function initVisualizer() { const visualizer = document.getElementById('visualizer'); visualizer.innerHTML = ''; vizBars = []; // Создаем 40 столбцов for(let i = 0; i < 40; i++) { const bar = document.createElement('div'); bar.className = 'viz-bar'; bar.style.left = (i * 25) + 'px'; bar.style.height = '30px'; visualizer.appendChild(bar); vizBars.push(bar); } } // Обновление визуализатора function updateVisualizer() { vizBars.forEach((bar, index) => { // Базовые колебания const baseVariation = Math.sin(Date.now() / 500 + index * 0.3) * 40; // Влияние пульса const heartEffect = (heartRate - 60) * 0.5; // Влияние стресса const stressEffect = (stressLevel - 40) * 0.3; let height = 30 + baseVariation + heartEffect + stressEffect; // Ограничение высоты height = Math.max(10, Math.min(150, height)); bar.style.height = height + 'px'; // Цвет в зависимости от состояния if (emotionalState === "Спокойствие") { bar.style.background = 'linear-gradient(to top, #00b894, #00cec9)'; } else if (emotionalState === "Стресс") { bar.style.background = 'linear-gradient(to top, #ff7675, #fd79a8)'; } else { bar.style.background = 'linear-gradient(to top, #667eea, #764ba2)'; } }); } // Определение эмоционального состояния function determineEmotionalState() { if (heartRate < 65 && stressLevel < 40) { return { state: "Спокойствие", description: "Расслабленное состояние", color: "#00b894" }; } else if (heartRate > 85 || stressLevel > 70) { return { state: "Стресс", description: "Повышенное напряжение", color: "#ff7675" }; } else { return { state: "Норма", description: "Сбалансированное состояние", color: "#667eea" }; } } // Адаптация музыкальных параметров function adaptMusicParameters() { const stateData = determineEmotionalState(); emotionalState = stateData.state; let tempo = 80; let key = "C мажор"; let intensity = "Средняя"; let musicType = "Балансирующая"; switch(emotionalState) { case "Спокойствие": tempo = Math.floor(60 + Math.random() * 10); key = Math.random() > 0.5 ? "C мажор" : "A минор"; intensity = "Низкая"; musicType = "Расслабляющая"; break; case "Стресс": tempo = Math.floor(90 + Math.random() * 20); key = "D минор"; intensity = "Высокая"; musicType = "Энергичная"; break; case "Норма": tempo = Math.floor(75 + Math.random() * 10); key = "G мажор"; intensity = "Средняя"; musicType = "Балансирующая"; break; } // Обновление интерфейса updateUI(stateData, tempo, key, intensity, musicType); } // Обновление интерфейса function updateUI(stateData, tempo, key, intensity, musicType) { // Биометрические показатели document.getElementById('heartRate').textContent = heartRate; document.getElementById('hrvValue').textContent = hrv; document.getElementById('stressLevel').textContent = stressLevel; // Эмоциональное состояние document.getElementById('emotionalState').textContent = stateData.state; document.getElementById('stateDetail').textContent = stateData.description; // Статус системы document.getElementById('statusText').textContent = sessionActive ? "Сессия активна" : "Готово к работе"; // Музыкальные параметры document.getElementById('tempoValue').textContent = tempo + " BPM"; document.getElementById('keyValue').textContent = key; document.getElementById('musicIntensity').textContent = intensity; document.getElementById('musicTitle').textContent = musicType + " композиция"; document.getElementById('musicDesc').textContent = "Тональность: " + key + ", Темп: " + tempo + " BPM"; // Статус карта const statusCard = document.getElementById('statusCard'); statusCard.style.borderLeft = `5px solid ${stateData.color}`; // Пульс document.querySelector('.pulse-value').textContent = heartRate; } // Симуляция изменения состояния function simulateStateChanges() { if (!sessionActive) return; // Случайные изменения показателей const hrChange = (Math.random() - 0.5) * 8; const hrvChange = (Math.random() - 0.5) * 10; const stressChange = (Math.random() - 0.5) * 12; // Целевое состояние из настроек const targetState = document.getElementById('targetState').value; const intensity = parseInt(document.getElementById('intensity').value) / 100; // Коррекция к целевому состоянию if (targetState === "calm") { heartRate += hrChange - (3 * intensity); stressLevel += stressChange - (5 * intensity); hrv += hrvChange + (2 * intensity); } else if (targetState === "active") { heartRate += hrChange + (3 * intensity); stressLevel += stressChange + (5 * intensity); hrv += hrvChange - (2 * intensity); } else { heartRate += hrChange; hrv += hrvChange; stressLevel += stressChange; } // Ограничение значений heartRate = Math.max(50, Math.min(120, Math.round(heartRate))); hrv = Math.max(30, Math.min(100, Math.round(hrv))); stressLevel = Math.max(0, Math.min(100, Math.round(stressLevel))); // Адаптация музыки adaptMusicParameters(); // Обновление визуализатора updateVisualizer(); } // Управление системой function startSession() { if (sessionActive) { stopSession(); return; } sessionActive = true; document.querySelector('.btn-primary').innerHTML = '<i class="fas fa-stop"></i> Остановить сессию'; // Запуск симуляции intervalId = setInterval(simulateStateChanges, 2000); // Первое обновление simulateStateChanges(); } function stopSession() { sessionActive = false; document.querySelector('.btn-primary').innerHTML = '<i class="fas fa-play"></i> Начать сессию'; clearInterval(intervalId); } function setCalmState() { heartRate = 60; hrv = 75; stressLevel = 25; document.getElementById('targetState').value = "calm"; updateTargetState(); adaptMusicParameters(); } function setStressState() { heartRate = 95; hrv = 40; stressLevel = 80; document.getElementById('targetState').value = "active"; updateTargetState(); adaptMusicParameters(); } function resetSystem() { stopSession(); heartRate = 72; hrv = 56; stressLevel = 42; document.getElementById('targetState').value = "normal"; document.getElementById('intensity').value = 50; document.getElementById('intensityValue').textContent = "50%"; updateTargetState(); adaptMusicParameters(); } // Обновление настроек function updateTargetState() { const intensity = document.getElementById('intensity'); const intensityValue = document.getElementById('intensityValue'); intensityValue.textContent = intensity.value + "%"; } // Инициализация при загрузке window.onload = function() { // Инициализация визуализатора initVisualizer(); // Настройка обработчиков document.getElementById('intensity').addEventListener('input', updateTargetState); // Установка ссылки на проект const projectLink = window.location.href; document.getElementById('projectLink').textContent = projectLink; document.getElementById('projectLink').href = projectLink; // Начальная адаптация adaptMusicParameters(); // Запуск анимации визуализатора setInterval(updateVisualizer, 100); // Логирование для отладки console.log("Система AlgoRhythm инициализирована"); console.log("Текущее состояние:", emotionalState); console.log("Пульс:", heartRate); console.log("HRV:", hrv); console.log("Уровень стресса:", stressLevel); };