كيفية استخدام دفق إدخال الصوت

توفر حزمة تطوير البرامج (SDK) الخاصة بالكلام طريقة لدفق الصوت إلى أداة التعرف كبديل لإدخال الميكروفون أو الملف.

الخطوات التالية مطلوبة عند استخدام تدفقات إدخال الصوت:

  • تحديد تنسيق دفق الصوت. يجب أن يكون التنسيق مدعوما بواسطة Speech SDK وخدمة Azure Cognitive Services Speech. حاليا، يتم دعم التكوين التالي فقط:

    عينات الصوت هي:

    • تنسيق PCM
    • قناة واحدة
    • 16 بت لكل عينة، 8000 أو 16000 عينة في الثانية (16000 بايت أو 32000 بايت في الثانية)
    • محاذاة كتلتين (16 بت بما في ذلك الحشو لعينة)

    تبدو التعليمة البرمجية المقابلة في SDK لإنشاء تنسيق الصوت مثل هذا المثال:

    byte channels = 1;
    byte bitsPerSample = 16;
    int samplesPerSecond = 16000; // or 8000
    var audioFormat = AudioStreamFormat.GetWaveFormatPCM(samplesPerSecond, bitsPerSample, channels);
    
  • تأكد من أن التعليمات البرمجية توفر بيانات صوت RAW وفقا لهذه المواصفات. تأكد أيضا من وصول عينات 16 بت بتنسيق قليل النهاية. يتم دعم العينات الموقعة أيضا. إذا كانت بيانات مصدر الصوت لا تتطابق مع التنسيقات المدعومة، فيجب تحويل ترميز الصوت إلى التنسيق المطلوب.

  • قم بإنشاء فئة دفق إدخال الصوت الخاصة بك المشتقة من PullAudioInputStreamCallback. تنفيذ Read() والأعضاء Close() . يعتمد توقيع الدالة الدقيق على اللغة، ولكن تبدو التعليمة البرمجية مشابهة لعينة التعليمات البرمجية هذه:

    public class ContosoAudioStream : PullAudioInputStreamCallback {
        ContosoConfig config;
    
        public ContosoAudioStream(const ContosoConfig& config) {
            this.config = config;
        }
    
        public int Read(byte[] buffer, uint size) {
            // Returns audio data to the caller.
            // E.g., return read(config.YYY, buffer, size);
        }
    
        public void Close() {
            // Close and clean up resources.
        }
    };
    
  • أنشئ تكوينا صوتيا استنادا إلى تنسيق الصوت ودفق الإدخال. مرر كل من تكوين الكلام العادي وتكوين إدخال الصوت عند إنشاء أداة التعرف الخاصة بك. على سبيل المثال:

    var audioConfig = AudioConfig.FromStreamInput(new ContosoAudioStream(config), audioFormat);
    
    var speechConfig = SpeechConfig.FromSubscription(...);
    var recognizer = new SpeechRecognizer(speechConfig, audioConfig);
    
    // Run stream through recognizer.
    var result = await recognizer.RecognizeOnceAsync();
    
    var text = result.GetText();
    

الخطوات التالية