Maison >interface Web >js tutoriel >Comment empêcher les commentaires du locuteur dans la transcription vocale à l'aide de l'API Web Audio

Comment empêcher les commentaires du locuteur dans la transcription vocale à l'aide de l'API Web Audio

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBoriginal
2024-07-18 00:09:311296parcourir

How to Prevent Speaker Feedback in Speech Transcription Using Web Audio API

Encore une autre chose que je devais comprendre récemment pour connecter mon moteur de transcription Assembly.ai à une interface bruyante.

Voici ce que j'ai essayé :

  1. Demander l'accès au microphone avec annulation d'écho.
  2. Mettre en place une chaîne de traitement audio à l'aide de l'API Web Audio.
  3. Intégrez cette configuration avec la reconnaissance vocale.
  4. Utilisez DynamicsCompressorNode pour un traitement audio supplémentaire.

Étape 1 : demander l'accès au microphone avec annulation d'écho

La première étape consiste à demander l'accès au microphone avec l'annulation d'écho activée. Cette fonctionnalité est intégrée à la plupart des navigateurs modernes et permet de réduire les retours de vos haut-parleurs.

async function getMicrophoneStream() {
    const constraints = {
        audio: {
            echoCancellation: true,
            noiseSuppression: true,
            autoGainControl: true
        }
    };

    try {
        const stream = await navigator.mediaDevices.getUserMedia(constraints);
        return stream;
    } catch (err) {
        console.error('Error accessing the microphone', err);
        return null;
    }
}

Explication

  • Contraintes : nous spécifions des contraintes audio pour activer l'annulation de l'écho, la suppression du bruit et le contrôle automatique du gain.
  • Gestion des erreurs : si l'utilisateur refuse l'accès ou s'il y a un autre problème, nous détectons et enregistrons l'erreur.

Étape 2 : configurer les nœuds de l'API Web Audio

Ensuite, nous configurons l'API Web Audio pour traiter le flux audio. Cela implique de créer un AudioContext et de connecter divers nœuds, y compris un DynamicsCompressorNode.

async function setupAudioProcessing(stream) {
    const audioContext = new AudioContext();
    const source = audioContext.createMediaStreamSource(stream);

    // Create a DynamicsCompressorNode for additional processing
    const compressor = audioContext.createDynamicsCompressor();
    compressor.threshold.setValueAtTime(-50, audioContext.currentTime); // Example settings
    compressor.knee.setValueAtTime(40, audioContext.currentTime);
    compressor.ratio.setValueAtTime(12, audioContext.currentTime);
    compressor.attack.setValueAtTime(0, audioContext.currentTime);
    compressor.release.setValueAtTime(0.25, audioContext.currentTime);

    // Connect nodes
    source.connect(compressor);
    compressor.connect(audioContext.destination);

    return { audioContext, source, compressor };
}

Explication

  • AudioContext : représente l'environnement audio.
  • MediaStreamSource : Connecte le flux du microphone au contexte audio.
  • DynamicsCompressorNode : Réduit la plage dynamique du signal audio, aidant ainsi à gérer le bruit de fond et le feedback.

Étape 3 : Intégrer la reconnaissance vocale

Enfin, nous intégrons notre configuration de traitement audio à l'API Web Speech pour effectuer la reconnaissance vocale.

async function startSpeechRecognition() {
    const stream = await getMicrophoneStream();
    if (!stream) return;

    const { audioContext, source, compressor } = await setupAudioProcessing(stream);

    const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
    recognition.continuous = true;
    recognition.interimResults = true;

    recognition.onresult = (event) => {
        for (let i = event.resultIndex; i < event.results.length; i++) {
            const transcript = event.results[i][0].transcript;
            console.log('Transcript:', transcript);
        }
    };

    recognition.onerror = (event) => {
        console.error('Speech recognition error', event.error);
    };

    recognition.start();

    // Handle audio context resume if needed
    if (audioContext.state === 'suspended') {
        audioContext.resume();
    }

    return recognition;
}

// Start the speech recognition process
startSpeechRecognition();

Explication

  • Configuration de la reconnaissance vocale : Nous avons configuré l'API Web Speech pour une reconnaissance vocale continue et intermédiaire.
  • Gestion des événements : Nous gérons les événements onresult et onerror pour traiter les résultats de reconnaissance et les erreurs.
  • Démarrer la reconnaissance : Nous démarrons le processus de reconnaissance vocale et veillons à ce que le contexte audio ne soit pas suspendu.

J'espère que vous avez trouvé cela utile.

Bon codage !

Tim.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn