File size: 2,524 Bytes
64745dd
 
 
35c66c7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64745dd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35c66c7
6f89e0d
35c66c7
 
 
 
 
 
 
 
64745dd
6f89e0d
64745dd
6f89e0d
64745dd
 
 
 
 
35c66c7
64745dd
 
 
 
 
 
 
 
35c66c7
64745dd
6f89e0d
64745dd
 
 
 
 
 
 
 
 
35c66c7
 
 
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
68
69
70
71
72
73
74
75
76
77
78
79
let mediaRecorder;
let audioChunks = [];
let recording = false;
let transcriber;

// Function to load the model
async function loadModel() {
    document.getElementById("modelStatus").innerText = "⏳ Loading Whisper model...";
    
    transcriber = await window.Transformers.pipeline(
        'automatic-speech-recognition',
        'Xenova/whisper-tiny.en'
    );

    document.getElementById("modelStatus").innerText = "βœ… Model loaded!";
    document.getElementById("recordButton").innerText = "🎀 Start Recording";
    document.getElementById("recordButton").disabled = false;
    document.getElementById("status").innerText = "Press the button to record.";
}

// Function to start recording
async function startRecording() {
    let stream = await navigator.mediaDevices.getUserMedia({ audio: true });
    mediaRecorder = new MediaRecorder(stream);

    mediaRecorder.ondataavailable = (event) => {
        audioChunks.push(event.data);
    };

    mediaRecorder.onstop = async () => {
        let audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
        let reader = new FileReader();

        reader.onloadend = async () => {
            let audioURL = reader.result;
            document.getElementById("status").innerText = "⏳ Transcribing...";

            try {
                let output = await transcriber(audioURL);
                document.getElementById("output").innerText = output.text;
                document.getElementById("status").innerText = "βœ… Done!";
            } catch (error) {
                document.getElementById("status").innerText = "❌ Error during transcription.";
                console.error(error);
            }
        };

        reader.readAsDataURL(audioBlob);
    };

    mediaRecorder.start();
    audioChunks = [];
    recording = true;
    document.getElementById("recordButton").innerText = "⏹ Stop Recording";
    document.getElementById("status").innerText = "πŸŽ™οΈ Recording...";
}

// Function to stop recording
function stopRecording() {
    if (mediaRecorder && recording) {
        mediaRecorder.stop();
        recording = false;
        document.getElementById("recordButton").innerText = "🎀 Start Recording";
        document.getElementById("status").innerText = "⏳ Processing audio...";
    }
}

// Toggle recording
document.getElementById("recordButton").addEventListener("click", () => {
    if (!recording) {
        startRecording();
    } else {
        stopRecording();
    }
});

// Load the model on page load
loadModel();