Spaces:
Running
on
T4
Running
on
T4
File size: 2,165 Bytes
eae3d7c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
export class SpeechToTextClient {
constructor() {
// this.apiKey = "HF_API_KEY";
this.isRecording = false;
this.mediaRecorder = null;
this.audioChunks = [];
}
async startRecording() {
try {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
this.mediaRecorder = new MediaRecorder(stream);
this.audioChunks = [];
this.mediaRecorder.ondataavailable = (event) => {
this.audioChunks.push(event.data);
};
this.mediaRecorder.start();
this.isRecording = true;
} catch (error) {
console.error("Error starting recording:", error);
throw error;
}
}
async stopRecording() {
return new Promise((resolve, reject) => {
this.mediaRecorder.onstop = async () => {
try {
const audioBlob = new Blob(this.audioChunks, { type: 'audio/webm' });
const result = await this.transcribeAudio(audioBlob);
resolve(result);
} catch (error) {
reject(error);
}
};
this.mediaRecorder.stop();
this.isRecording = false;
this.mediaRecorder.stream.getTracks().forEach(track => track.stop());
});
}
async transcribeAudio(audioBlob) {
try {
const response = await fetch(
"https://q86j6jmwc3jujazp.us-east-1.aws.endpoints.huggingface.cloud",
{
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${this.apiKey}`,
"Content-Type": "audio/webm"
},
method: "POST",
body: audioBlob,
}
);
const result = await response.json();
return result;
} catch (error) {
console.error("Error transcribing audio:", error);
throw error;
}
}
}
|