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

WBOY
Libérer: 2024-07-18 00:09:31
original
1172 Les gens l'ont consulté

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;
    }
}
Copier après la connexion

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 };
}
Copier après la connexion

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();
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal