Spaces:
Running
on
A10G
Running
on
A10G
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Godot Export with Audio Recording</title> | |
</head> | |
<body> | |
<h1>Godot Export with Microphone Recording</h1> | |
<!-- Iframe for the Godot export --> | |
<iframe src="godot/index.html" width="800" height="600" frameborder="0"></iframe> | |
<script> | |
// URL of the server to send audio chunks | |
const serverUrl = "./api/process" | |
// Check if browser supports audio recording | |
if (!navigator.mediaDevices?.getUserMedia) { | |
console.error('Your browser does not support audio recording.') | |
alert('Your browser does not support audio recording. Please try using a modern browser like Chrome, Firefox, or Edge.') | |
throw new Error('Audio recording not supported') | |
} | |
// Set up audio recording | |
navigator.mediaDevices.getUserMedia({ audio: true }) | |
.then(stream => { | |
const audioContext = new (window.AudioContext || window.webkitAudioContext)() | |
const mediaRecorder = new MediaRecorder(stream) | |
const audioChunks = [] | |
mediaRecorder.ondataavailable = event => { | |
audioChunks.push(event.data) | |
} | |
mediaRecorder.onstop = () => { | |
const audioBlob = new Blob(audioChunks, { type: 'audio/webm' }) | |
audioChunks.length = 0 // Clear chunks after creating the Blob | |
// Send the audio chunk to the server | |
const formData = new FormData() | |
formData.append('audio', audioBlob) | |
fetch(serverUrl, { | |
method: 'POST', | |
body: formData | |
}).then(response => { | |
console.log('Audio chunk sent successfully') | |
}).catch(error => { | |
console.error('Error sending audio chunk:', error) | |
}) | |
} | |
// Start recording in intervals | |
const chunkInterval = 300 // Chunk duration in milliseconds | |
setInterval(() => { | |
if (mediaRecorder.state === 'recording') { | |
mediaRecorder.stop() | |
mediaRecorder.start() | |
} else { | |
mediaRecorder.start() | |
} | |
}, chunkInterval) | |
}) | |
.catch(error => { | |
console.error('Error accessing microphone:', error) | |
}); | |
</script> | |
</body> | |
</html> |