srinuksv's picture
Update static/voice.html
f924031 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f4f7fb;
margin: 0;
padding: 0;
}
#chat-container {
max-width: 500px;
margin: auto;
padding: 25px;
border-radius: 15px;
background-color: #fff;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
position: relative;
}
.btn-mic, .btn-send {
background-color: #007bff;
color: white;
border-radius: 8px;
padding: 10px 15px;
border: none;
cursor: pointer;
font-size: 1.1em;
transition: background-color 0.3s;
}
.btn-mic:hover, .btn-send:hover {
background-color: #0056b3;
}
</style>
<title>Voice-based ChatGPT</title>
</head>
<body>
<div id="chat-container">
<div class="input-group">
<button id="mic-button" class="btn-mic"><i class="fas fa-microphone"></i></button>
<button id="send-button" class="btn-send"><i class="fas fa-paper-plane"></i></button>
</div>
</div>
<script>
const synth = window.speechSynthesis;
// Speech-to-Text function
function startListening() {
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.lang = "en-US";
recognition.interimResults = false;
recognition.onresult = (event) => {
const transcript = event.results[0][0].transcript;
sendMessage(transcript);
};
recognition.onerror = (event) => {
console.error("Speech recognition error:", event.error);
speak("Sorry, I couldn't understand you.");
};
recognition.start();
}
// Send message to server
async function sendMessage(message) {
if (!message.trim()) return;
addMessage("User", message, "user-message");
try {
// Simulate bot typing
const botMessage = "Bot is typing...";
addMessage("Bot", botMessage, "bot-message");
// Simulate a server response (replace with actual server request)
const response = await new Promise(resolve => setTimeout(() => resolve({ response: "Hello! How can I assist you today?" }), 1000));
const botMessageContent = response.response;
addMessage("Bot", botMessageContent, "bot-message");
speak(botMessageContent);
} catch (error) {
console.error("Error:", error);
const errorMessage = "Sorry, something went wrong.";
addMessage("Bot", errorMessage, "bot-message");
speak(errorMessage);
}
}
// Text-to-Speech function
function speak(text) {
const utterance = new SpeechSynthesisUtterance(text);
utterance.lang = "en-US";
utterance.pitch = 1;
utterance.rate = 1;
synth.speak(utterance);
}
// Add message to chat history
function addMessage(sender, message, className) {
const chatHistory = document.getElementById("chat-container");
const messageElement = document.createElement("div");
messageElement.className = `message ${className}`;
messageElement.innerHTML = `<strong>${sender}:</strong> ${message}`;
chatHistory.appendChild(messageElement);
}
// Event Listeners
document.getElementById("send-button").addEventListener("click", startListening);
document.getElementById("mic-button").addEventListener("click", startListening);
</script>
</body>
</html>