«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как предотвратить обратную связь говорящего при транскрипции речи с помощью API веб-аудио

Как предотвратить обратную связь говорящего при транскрипции речи с помощью API веб-аудио

Опубликовано 21 августа 2024 г.
Просматривать:500

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

Еще одна вещь, которую мне недавно нужно было выяснить, чтобы подключить мой движок транскрипции Assembly.ai к громкому интерфейсу.

Вот что я пробовал:

  1. Запросить доступ к микрофону с эхоподавлением.
  2. Настройте цепочку обработки звука с помощью API веб-аудио.
  3. Интегрируйте эту настройку с распознаванием речи.
  4. Используйте DynamicsCompressorNode для дополнительной обработки звука.

Шаг 1. Запросите доступ к микрофону с эхоподавлением

Первый шаг — запросить доступ к микрофону с включенным эхоподавлением. Эта функция встроена в большинство современных браузеров и помогает уменьшить обратную связь от динамиков.

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

Объяснение

  • Ограничения: мы указываем ограничения звука, чтобы включить эхоподавление, подавление шума и автоматическое управление усилением.
  • Обработка ошибок: если пользователь отказывает в доступе или возникает другая проблема, мы фиксируем и регистрируем ошибку.

Шаг 2. Настройка узлов API веб-аудио

Далее мы настраиваем API веб-аудио для обработки аудиопотока. Это включает в себя создание AudioContext и подключение различных узлов, включая 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 };
}

Объяснение

  • Аудиоконтекст: представляет аудиосреду.
  • MediaStreamSource: соединяет поток микрофона с аудиоконтекстом.
  • DynamicsCompressorNode: уменьшает динамический диапазон аудиосигнала, помогая управлять фоновым шумом и обратной связью.

Шаг 3. Интеграция с распознаванием речи

Наконец, мы интегрируем нашу настройку обработки звука с API Web Speech для распознавания речи.

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

Объяснение

  • Настройка распознавания речи: мы настроили API веб-речи для непрерывного и промежуточного распознавания речи.
  • Обработка событий: мы обрабатываем события onresult и onerror для обработки результатов и ошибок распознавания.
  • Начать распознавание: мы запускаем процесс распознавания речи и проверяем, что аудиоконтекст не приостанавливается.

Надеюсь, это было вам полезно.

Удачного программирования!

Тим.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/fosteman/how-to-prevent-speaker-feedback-in-speech-transcription-using-web-audio-api-2da4?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163 .comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3