"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية منع ردود فعل المتحدث في نسخ الكلام باستخدام Web Audio API

كيفية منع ردود فعل المتحدث في نسخ الكلام باستخدام Web Audio API

تم النشر بتاريخ 2024-08-21
تصفح:733

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 Audio API

بعد ذلك، قمنا بإعداد Web Audio API لمعالجة البث الصوتي. يتضمن ذلك إنشاء سياق صوتي وتوصيل العقد المختلفة، بما في ذلك 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 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3