diplom / static /script.js
Arghet6's picture
Upload 9 files
9b6a9d7 verified
document.addEventListener("DOMContentLoaded", () => {
// Объявляем переменные для записи аудио
let mediaRecorder;
let audioChunks = [];
let audioStream;
// Элементы интерфейса
const recordBtn = document.getElementById("record-btn");
const stopBtn = document.getElementById("stop-btn");
const sendBtn = document.getElementById("send-btn");
const uploadBtn = document.getElementById("upload-btn");
const userInput = document.getElementById("user-input");
const chatBox = document.getElementById("chat-box");
const audioFileInput = document.getElementById("audio-file");
// ===== 1. Отправка текста =====
sendBtn.addEventListener("click", async () => {
const text = userInput.value.trim();
if (!text) return;
appendMessage("user", text);
userInput.value = "";
try {
const response = await fetch("/analyze", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text })
});
if (!response.ok) throw new Error("Ошибка сервера");
const data = await response.json();
appendMessage("bot", `Эмоция: ${data.emotion} (${(data.confidence * 100).toFixed(1)}%)`);
} catch (error) {
console.error("Ошибка:", error);
appendMessage("bot", `❌ Ошибка: ${error.message}`);
}
});
// ===== 2. Загрузка аудиофайла =====
uploadBtn.addEventListener("click", async () => {
const file = audioFileInput.files[0];
if (!file) return;
appendMessage("user", "Загружен аудиофайл...");
try {
const formData = new FormData();
formData.append("audio", file);
const response = await fetch("/analyze_audio", {
method: "POST",
body: formData
});
if (!response.ok) throw new Error("Ошибка сервера");
const data = await response.json();
appendMessage("bot", `Эмоция: ${data.emotion} (${(data.confidence * 100).toFixed(1)}%)`);
} catch (error) {
console.error("Ошибка:", error);
appendMessage("bot", `❌ Ошибка: ${error.message}`);
}
});
// ===== 3. Запись аудио =====
recordBtn.addEventListener("click", async () => {
try {
// Запрашиваем доступ к микрофону
audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });
// Настраиваем запись
mediaRecorder = new MediaRecorder(audioStream);
audioChunks = [];
// Обработчики событий
mediaRecorder.ondataavailable = (e) => audioChunks.push(e.data);
mediaRecorder.onstop = async () => {
try {
const audioBlob = new Blob(audioChunks, { type: "audio/wav" });
appendMessage("user", "Отправлено голосовое сообщение...");
const formData = new FormData();
formData.append("audio", audioBlob, "recording.wav");
const response = await fetch("/analyze_audio", {
method: "POST",
body: formData
});
if (!response.ok) throw new Error("Ошибка сервера");
const data = await response.json();
appendMessage("bot", `Эмоция: ${data.emotion} (${(data.confidence * 100).toFixed(1)}%)`);
} catch (error) {
console.error("Ошибка:", error);
appendMessage("bot", `❌ Ошибка: ${error.message}`);
} finally {
// Освобождаем ресурсы
audioStream.getTracks().forEach(track => track.stop());
}
};
mediaRecorder.start();
recordBtn.disabled = true;
stopBtn.disabled = false;
} catch (error) {
console.error("Ошибка записи:", error);
appendMessage("bot", "❌ Не удалось получить доступ к микрофону");
}
});
// Остановка записи
stopBtn.addEventListener("click", () => {
if (mediaRecorder && mediaRecorder.state === "recording") {
mediaRecorder.stop();
recordBtn.disabled = false;
stopBtn.disabled = true;
}
});
// ===== Вспомогательные функции =====
function appendMessage(sender, text) {
const message = document.createElement("div");
message.classList.add("message", sender === "user" ? "user-message" : "bot-message");
message.innerHTML = text; // Используем innerHTML для поддержки эмодзи
chatBox.appendChild(message);
chatBox.scrollTop = chatBox.scrollHeight;
}
});