Spaces:
Sleeping
Sleeping
let isRecording = false; | |
let mediaRecorder; | |
let recordedChunks = []; | |
// Handles the recording button click event | |
document.getElementById('recordButton').addEventListener('click', function () { | |
if (!isRecording) { | |
startRecording(); | |
} else { | |
stopRecording(); | |
} | |
}); | |
function startRecording() { | |
navigator.mediaDevices.getUserMedia({ audio: true }) | |
.then(function (stream) { | |
mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm' }); | |
mediaRecorder.ondataavailable = function (e) { | |
if (e.data.size > 0) { | |
recordedChunks.push(e.data); | |
} | |
}; | |
mediaRecorder.start(); | |
console.log("Recording started"); | |
// Update button text and style | |
document.getElementById('recordButton').textContent = 'Stop'; | |
document.getElementById('recordButton').classList.add('recording'); | |
document.getElementById('recordStatus').textContent = 'Recording...'; | |
document.getElementById('transcribeContainer').style.display = 'none'; // Hide Transcribe button initially | |
isRecording = true; | |
}) | |
.catch(function (err) { | |
console.error('Error accessing media devices: ', err); | |
}); | |
} | |
function stopRecording() { | |
mediaRecorder.stop(); | |
console.log("Recording stopped"); | |
mediaRecorder.onstop = function () { | |
const blob = new Blob(recordedChunks, { type: 'audio/webm' }); | |
recordedChunks = []; | |
const audioURL = window.URL.createObjectURL(blob); | |
console.log(`Blob size: ${blob.size} bytes`); // Debugging statement | |
console.log(`Audio URL: ${audioURL}`); // Debugging statement | |
// Optionally, add a debug audio player to check if recording is valid | |
const debugAudio = document.createElement('audio'); | |
debugAudio.controls = true; | |
debugAudio.src = audioURL; | |
document.body.appendChild(debugAudio); | |
// Update button text and style | |
document.getElementById('recordButton').textContent = 'Start'; | |
document.getElementById('recordButton').classList.remove('recording'); | |
document.getElementById('recordStatus').textContent = 'Tap to Record'; | |
document.getElementById('transcribeContainer').style.display = 'block'; // Show Transcribe button | |
// Set up the Transcribe button click event | |
document.getElementById('transcribeButton').addEventListener('click', function () { | |
transcribeAudio(blob); | |
}); | |
isRecording = false; | |
}; | |
} | |
function transcribeAudio(blob) { | |
const formData = new FormData(); | |
formData.append('audio', blob, 'audio.webm'); | |
// Log FormData entries for debugging | |
for (const [key, value] of formData.entries()) { | |
console.log(`${key}: ${value}`); | |
} | |
fetch('https://jikoni-semabox.hf.space/transcribe', { | |
method: 'POST', | |
body: formData | |
}) | |
.then(response => response.json()) | |
.then(data => { | |
console.log(data); // Debugging statement | |
document.getElementById('output').textContent = data.transcription || 'No transcription available'; | |
}) | |
.catch(error => { | |
console.error('Error during transcription:', error); | |
}); | |
} | |