「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Web Audio APIを使用した音声文字起こしで話者のフィードバックを防ぐ方法

Web Audio APIを使用した音声文字起こしで話者のフィードバックを防ぐ方法

2024 年 8 月 21 日に公開
ブラウズ:214

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

Assembly.ai 文字起こしエンジンをフロントエンドの騒音の大きいフロントエンドに接続するために、最近理解する必要があったことがもう 1 つありました。

私が試したことは次のとおりです:

  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-フィードバック-in-speech-transcription-using-web-audio-api-2da4?1 侵害がある場合は、 Study_golang@163 .comdelete に連絡してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3