Spaces:
Running
on
T4
Running
on
T4
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; | |
} | |
} | |
} | |