Spaces:
Running
on
T4
Running
on
T4
File size: 1,797 Bytes
426a708 |
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 |
import { HUGGINGFACE_API_KEY } from "../api.js";
export class SpeechToTextClient {
constructor() {
this.apiKey = HUGGINGFACE_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;
}
}
}
|