0

For a project I've implemented a web speech api in a website/Progressive Web App which translates spoken voice to text. This all works fine, however, I would also like to use this without access to internet.

My initial thought was that I could save my recognition object to a indexeddb and process it later. However, when I try to do this I get the following error:

DOMException: Failed to execute 'put' on 'IDBObjectStore': SpeechRecognitionEvent object could not be cloned.

While I do understand why I get this error, I have no clue on any alternative way of doing this or how I can solve this error.

My object looks as following:

webkitSpeechRecognition object

When I try to serialize my object using JSON.stringify() I get the following: stringified webkitSpeechRecognition object

I lose all of my information.

My code looks as follows:

function attachRecognition() {
    recognition = new webkitSpeechRecognition();

    recognition.continuous = false;
    recognition.interimResults = false;
    recognition.maxAlternatives = 1;

    recognition.onstart = function(event) {
        recognitionStarted = true;
    };

    recognition.onend = function(event) {
            recognitionStarted = false;      
    };

    recognition.onresult = function(event) {
        var finalPhrase = '';
        var interimPhrase = '';
        var result;
        
        for(var i=0; i<event.results.length; ++i) {
            result = event.results[i];
            if( result.isFinal ) {
                finalPhrase = finalPhrase.trim() + ' ' + result[0].transcript;
            }
            else {
                interimPhrase = interimPhrase.trim() + ' ' + result[0].transcript;
            }
        }
        var input_field = $(related_input_field);


        if (connected) {
            input_field.val(input_field.val() + finalPhrase + ".");
        } 
        // This is where I would store my event data in case there's no connection.
        else {
            set(related_input_field.attr("id"), event)
            .then(() => {
            console.log(related_input_field.attr("id") + ' data cached');
            })
            .catch(console.warn);
        }
        
    }
}

How can I solve this?

0 Answers0