」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用 Web 音訊 API 防止語音轉錄中的說話者回饋

如何使用 Web 音訊 API 防止語音轉錄中的說話者回饋

發佈於2024-08-21
瀏覽:801

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

最近我需要弄清楚另一件事,將我的 Assembly.ai 轉錄引擎連接到聲音很大的前端。

這是我嘗試過的:

  1. 請求使用迴聲消除功能的麥克風存取權限。
  2. 使用 Web Audio 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 步:設定 Web 音訊 API 節點

接下來,我們設定 Web Audio 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 };
}

解釋

  • AudioContext:表示音訊環境。
  • MediaStreamSource:將麥克風流連接到音訊上下文。
  • DynamicsCompressorNode:降低音訊訊號的動態範圍,有助於管理背景雜訊和回饋。

第 3 步:與語音辨識集成

最後,我們將音訊處理設定與 Web Speech API 整合以執行語音辨識。

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

解釋

  • 語音辨識設定:我們設定了用於連續和暫時語音辨識的 Web Speech API。
  • 事件處理:我們處理onresult和onerror事件來處理識別結果和錯誤。
  • 開始辨識:我們啟動語音辨識流程並確保音訊情境不會暫停。

希望您發現這很有用。

編碼愉快!

提姆。

版本聲明 本文轉載於:https://dev.to/fosteman/how-to-prevent-speaker-feedback-in-speech-transcription-using-web-audio-api-2da4?1如有侵犯,請聯絡study_golang@163 .com刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3