首頁 > web前端 > js教程 > 主體

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

WBOY
發布: 2024-07-18 00:09:31
原創
1106 人瀏覽過

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 < 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();
登入後複製

解釋

  • 語音辨識設定:我們設定了 Web Speech API 以進行連續和暫時語音辨識。
  • 事件處理:我們處理onresult和onerror事件來處理辨識結果和錯誤。
  • 開始辨識:我們開始語音辨識過程並確保音訊上下文不會暫停。

希望您發現這很有用。

編碼愉快!

提姆。

以上是如何使用 Web 音訊 API 防止語音轉錄中的說話者回饋的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!