semabox-mms / static /js /chatgpt.js
Tri4's picture
Create chatgpt.js
279d46c verified
const recordButton = document.getElementById('recordButton');
const audioPlayback = document.getElementById('audioPlayback');
const transcribeButton = document.getElementById('transcribeButton');
const transcriptionResult = document.getElementById('transcriptionResult');
let mediaRecorder;
let audioChunks = [];
let audioBlob;
let audioUrl;
const startRecording = async () => {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ondataavailable = event => audioChunks.push(event.data);
mediaRecorder.onstop = () => {
audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
audioUrl = URL.createObjectURL(audioBlob);
audioPlayback.src = audioUrl;
audioPlayback.style.display = 'block';
transcribeButton.style.display = 'inline-block';
};
mediaRecorder.start();
recordButton.classList.add('pulsing');
recordButton.textContent = 'Stop Recording';
};
const stopRecording = () => {
mediaRecorder.stop();
recordButton.classList.remove('pulsing');
recordButton.textContent = 'Start Recording';
};
const transcribeAudio = async () => {
if (!audioBlob) return;
const formData = new FormData();
formData.append('audio', audioBlob, 'recording.wav');
try {
const response = await fetch('https://jikoni-semabox.hf.space/transcribe', {
method: 'POST',
body: formData
});
if (response.ok) {
const result = await response.json();
transcriptionResult.textContent = result.transcription || 'No transcription available.';
} else {
transcriptionResult.textContent = `Error: ${response.status}`;
}
} catch (error) {
transcriptionResult.textContent = `Request failed: ${error.message}`;
}
};
recordButton.addEventListener('click', () => {
if (mediaRecorder && mediaRecorder.state === 'recording') {
stopRecording();
} else {
startRecording();
}
});
transcribeButton.addEventListener('click', transcribeAudio);