Cara Mencegah Maklum Balas Pembesar Suara dalam Transkripsi Pertuturan Menggunakan API Audio Web

WBOY
Lepaskan: 2024-07-18 00:09:31
asal
1107 orang telah melayarinya

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

Satu lagi perkara yang perlu saya fikirkan baru-baru ini untuk menyambungkan enjin transription Assembly.ai saya ke bahagian hadapan yang kuat.

Inilah yang saya cuba:

  1. Minta akses mikrofon dengan pembatalan gema.
  2. Sediakan rantai pemprosesan audio menggunakan API Audio Web.
  3. Sepadukan persediaan ini dengan pengecaman pertuturan.
  4. Gunakan DynamicsCompressorNode untuk pemprosesan audio tambahan.

Langkah 1: Minta Akses Mikrofon dengan Pembatalan Gema

Langkah pertama ialah meminta akses kepada mikrofon dengan pembatalan gema didayakan. Ciri ini terbina dalam kebanyakan penyemak imbas moden dan membantu mengurangkan maklum balas daripada pembesar suara anda.

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;
    }
}
Salin selepas log masuk

Penjelasan

  • Kekangan: Kami menetapkan kekangan audio untuk mendayakan pembatalan gema, penindasan hingar dan kawalan autogain.
  • Pengendalian Ralat: Jika pengguna menafikan akses atau jika terdapat sebarang isu lain, kami menangkap dan mencatat ralat itu.

Langkah 2: Sediakan Nod API Audio Web

Seterusnya, kami menyediakan API Audio Web untuk memproses strim audio. Ini melibatkan mencipta Konteks Audio dan menyambungkan pelbagai nod, termasuk 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 };
}
Salin selepas log masuk

Penjelasan

  • Konteks Audio: Mewakili persekitaran audio.
  • MediaStreamSource: Menyambungkan strim mikrofon ke konteks audio.
  • DynamicsCompressorNode: Mengurangkan julat dinamik isyarat audio, membantu mengurus bunyi latar belakang dan maklum balas.

Langkah 3: Sepadukan dengan Pengecaman Pertuturan

Akhir sekali, kami menyepadukan persediaan pemprosesan audio kami dengan Web Speech API untuk melaksanakan pengecaman pertuturan.

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();
Salin selepas log masuk

Penjelasan

  • Persediaan Pengecaman Pertuturan: Kami menyediakan API Pertuturan Web untuk pengecaman pertuturan berterusan dan sementara.
  • Pengendalian Acara: Kami mengendalikan peristiwa onresult dan kesalahan untuk memproses keputusan dan ralat pengecaman.
  • Mulakan Pengecaman: Kami memulakan proses pengecaman pertuturan dan memastikan konteks audio tidak digantung.

Semoga anda mendapati ini berguna.

Selamat mengekod!

Tim.

Atas ialah kandungan terperinci Cara Mencegah Maklum Balas Pembesar Suara dalam Transkripsi Pertuturan Menggunakan API Audio Web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!