2012-09-10 12 views
5

से मेमोरीस्ट्रीम का उपयोग करके मैं स्काइप से आने वाले ऑडियो पर लगातार भाषण मान्यता करने के लिए एसएपीआई 5.4 (एमएस स्पीच प्लेटफार्म एसडीके v11) प्राप्त करने की कोशिश कर रहा हूं कहते हैं।एसएपीआई 5.4 या एमएस स्पीच एसडीके v11 के साथ सी # में स्पीच रिकग्निशन स्काइप कॉल

मैं स्काइप से आने वाले ऑडियो को पकड़ने के लिए SKYPE4COMLib का उपयोग कर सकता हूं और इसे एक अल्टर कॉल निर्देश जारी करके एक टीसीपी पोर्ट पर धक्का दे सकता हूं। आप स्काइप ऑडियो को फ़ाइल या टीसीपी सॉकेट पर निर्देशित कर सकते हैं। फ़ाइल ठीक काम करती है, लेकिन मैं इसे मान्यता लाइव चलाने के लिए चाहता हूं तो टीसीपी सॉकेट का उपयोग करें।

मैंने आने वाले डेटा (ऑडियो कच्चे प्रारूप) को इकट्ठा करने के लिए एक टीसीपी श्रोता बनाया और एसएपीआई को मेमोरीस्ट्रीम के रूप में बाइट सरणी पास कर दिया। मैंने 16 बिट, 16khz, मोनो, पीसीएम के प्रारूप में कच्चे ऑडियो की अपेक्षा करने के लिए एसएपीआई स्थापित किया है। हालांकि एक मान्यता घटना कभी नहीं होती है ?!

मैंने उस कच्चे ऑडियो को डिस्क पर सहेजने की कोशिश की है, और उसके बाद इसे एसएपीआई में पढ़ा है और यह ठीक काम करता है ... इसलिए डेटा स्वयं ठीक है और स्काइप ऑडियो पर सही ढंग से भेज रहा है। हालांकि यह मुझे लगातार निरंतर मान्यता देने की अनुमति नहीं देता है।

एसएपीआई मान्यता कोड WAV फ़ाइल, या डिस्क से लोड की गई कच्ची फ़ाइल या माइक्रोफ़ोन का उपयोग करके ठीक काम करता है। मैं इसे मेमोरीस्ट्रीम से काम नहीं कर सकता।

मुझे यह वही लेख मिला, मेरे लिए कोई सुझाव नहीं है, और चर्चा शांत हो गई है।

Streaming input to System.Speech.Recognition.SpeechRecognitionEngine

किसी को भी कैसे सफलतापूर्वक SAPI लगातार कच्चे ऑडियो सी # में एक MemoryStream के रूप में भेजा से भाषण पहचान करने के लिए प्राप्त करने के लिए पर कोई भी मार्गदर्शन है?

+0

का उपयोग करना चाहिए आप निरंतर मान्यता करना चाहते हैं, तो आपको क्यों एक 'MemoryStream' उपयोग कर रहे हैं ऐसा करने से बफ़र के लिए? आपको सीधे 'नेटवर्कस्ट्रीम' को एसएपीआई को देना चाहिए, वैकल्पिक रूप से इसके सामने बुफर्डस्ट्रीम के साथ। 'Seek' को ओवरराइड करने के लिए आपको 'नेटवर्कस्ट्रीम' से प्राप्त करने की आवश्यकता हो सकती है। –

+0

मैंने इस कोशिश में उस लिंक पर सुझाव दिया था, लेकिन मैं इसे काम नहीं कर सका। क्या आप यह भी सुझाव दे रहे हैं? नेटवर्कस्ट्रीम नेटस्ट्रीम = नया नेटवर्कस्ट्रीम (सॉकेट, सत्य); बुफर्डस्ट्रीम buffStream = नया बुफर्डस्ट्रीम (नेटस्ट्रीम, 8000 * 16 * 1); appRecognizer.SetInputToAudioStream (buffStream, formatInfo); – timemirror

+0

जैसा कि आपने उल्लेख किया है, आपको धारा से निकलने की आवश्यकता है और खोज को ओवरराइड करना है। –

उत्तर

0

आप स्ट्रीमिंग ऑडियो का उपयोग कर रहे हैं, मुझे लगता है कि आप recognizer.RecognizeAsync

+0

हाय पटेल.NET - धन्यवाद, यार मैं पहचानकर्ता का उपयोग कर रहा हूं। पहचानें (पहचानें .Mode.Multiple)। मुद्दा यह था कि जब आप डेटा स्ट्रीम करते हैं तो यह पहचान घटना को कभी नहीं बढ़ाता है, इसलिए आपको स्ट्रीम क्लास को ओवरराइड करना होगा। – timemirror

संबंधित मुद्दे