"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como evitar feedback do alto-falante na transcrição de fala usando API de áudio da Web

Como evitar feedback do alto-falante na transcrição de fala usando API de áudio da Web

Publicado em 2024-08-21
Navegar:330

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

Mais outra coisa que eu precisava descobrir recentemente para conectar meu mecanismo de transcrição Assembly.ai a um frontend que era barulhento.

Aqui está o que eu tentei:

  1. Solicite acesso ao microfone com cancelamento de eco.
  2. Configure uma cadeia de processamento de áudio usando a API Web Audio.
  3. Integre esta configuração com reconhecimento de fala.
  4. Utilize o DynamicsCompressorNode para processamento de áudio adicional.

Etapa 1: solicitar acesso ao microfone com cancelamento de eco

O primeiro passo é solicitar acesso ao microfone com cancelamento de eco habilitado. Esse recurso está integrado na maioria dos navegadores modernos e ajuda a reduzir o feedback dos alto-falantes.

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;
    }
}

Explicação

  • Restrições: Especificamos restrições de áudio para permitir cancelamento de eco, supressão de ruído e controle de ganho automático.
  • Tratamento de erros: Se o usuário negar acesso ou se houver qualquer outro problema, detectamos e registramos o erro.

Etapa 2: configurar nós da API de áudio da Web

Em seguida, configuramos a API Web Audio para processar o stream de áudio. Isso envolve a criação de um AudioContext e a conexão de vários nós, incluindo um 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 };
}

Explicação

  • AudioContext: Representa o ambiente de áudio.
  • MediaStreamSource: conecta o fluxo do microfone ao contexto de áudio.
  • DynamicsCompressorNode: Reduz a faixa dinâmica do sinal de áudio, ajudando a gerenciar o ruído de fundo e o feedback.

Etapa 3: Integrar com reconhecimento de fala

Finalmente, integramos nossa configuração de processamento de áudio com a Web Speech API para realizar o reconhecimento de fala.

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  {
        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();

Explicação

  • Configuração de reconhecimento de fala: configuramos a Web Speech API para reconhecimento de fala contínuo e provisório.
  • Manipulação de eventos: Lidamos com os eventos onresult e onerror para processar resultados e erros de reconhecimento.
  • Iniciar reconhecimento: iniciamos o processo de reconhecimento de fala e garantimos que o contexto de áudio não seja suspenso.

Esperamos que você tenha achado isso útil.

Boa codificação!

Tim.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/fosteman/how-to-prevent-speaker-feedback-in-speech-transcription-using-web-audio-api-2da4?1 Se houver alguma violação, por favor entre em contato com study_golang@163 .comdelete
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3