2009-02-12 10 views
10

के बीच क्या अंतर है भाषण एपीआई या SAPI का उपयोग कर सी # में इन दो तरीकों के बीच क्या अंतर है?एसपीवीइस और स्पीच सिंथेसाइज़र

using SpeechLib; 
SpVoice speech = new SpVoice(); 
speech.Speak(text, SpeechVoiceSpeakFlags.SVSFlagsAsync); 

Apacela voices देता है, और

SpeechSynthesizer ss = new SpeechSynthesizer(); 
ss.SpeakAsync ("Hello, world"); 

Apacela voices साथ काम नहीं करता।

पहला व्यक्ति सभी आवाज़ें लौटाता है लेकिन दूसरा वाला केवल कुछ आवाज़ें लौटाता है। क्या यह एसएपीआई 5.1 और एसएपीआई 5.3 से संबंधित है?

व्यवहार Vista और XP पर समान है, दोनों SPVoice Apacela आवाज का पता लगाने में सक्षम थे लेकिन SpeechSynthesizer का उपयोग करके, आवाजें XP और Vista दोनों पर नहीं मिलीं।

मुझे लगता है कि एक्सपी एसएपीआई 5.1 का उपयोग करता है, और Vista एसएपीआई 5.3 का उपयोग करता है तो फिर सभी ओएस पर एक ही व्यवहार क्यों है, लेकिन एपीआई के साथ अलग व्यवहार?

यह भी कौन सा एपीआई अधिक शक्तिशाली है और दो तरीकों/एपीआई के बीच क्या अंतर है?

+0

2017 सारांश यहां: https://www.webbie.org.uk/blog/microsoft-speech/ –

उत्तर

3

स्पीचलिब एक इंटरऑप डीएलएल है और इसलिए स्पीचलिब के जो भी संस्करण के लिए बनाया गया था, उसके लिए नक्शा बनाया गया था (आप इसकी गुणों को देख सकते हैं)।

सिस्टम। स्पीच। * .NET ढांचे में भाषण के लिए "आधिकारिक" समर्थन है। SpeechSynthesizer चुनता है कि किस स्पीच लाइब्रेरी को रनटाइम पर उपयोग करना है (सिस्टम की तरह। वेब। मेल क्लास की तरह)।

मुझे यकीन नहीं है कि वे अलग-अलग आवाज क्यों लौटते हैं लेकिन यह एसएपीआई संस्करण से संबंधित होने की संभावना है।

+0

ने अधिक विवरण के साथ प्रश्न संपादित किया, मुझे आशा है कि आप अधिक जानकारी साझा करना चाहेंगे, क्योंकि समस्या से संबंधित नहीं है रनटाइम, लेकिन एपीआई मतभेद। –

+0

मेरा अनुमान है कि एपेसेला आवाज एसएपीआई 5.3 में नए एपीआई का समर्थन नहीं करती है, इसलिए सिस्टम स्पीच (Vista पर उपयोग 5.3 के साथ) इसका उपयोग नहीं कर सकता है। जाहिर है 5।3 दर्शाता है कि माइक्रोसॉफ्ट आगे बढ़ने का समर्थन करेगा, लेकिन अगर आपको उस आवाज़ की ज़रूरत है तो आपको स्पीचलिब का उपयोग करना चाहिए। –

+0

जैसा कि मैंने लिखा था कि XP ​​एसएपीआई 5.1 का उपयोग करता है और वहां भी यह आवाज का पता लगाने में सक्षम नहीं है। –

6

स्पीचलिब एक इंटरऑप डीएलएल है जो कवर के तहत क्लासिक COM-आधारित SAPI का उपयोग करता है। सिस्टम। स्पीच को माइक्रोसॉफ्ट द्वारा टेक्स्ट-टू-स्पीच (और वॉयस रिकॉग्नाइजेशन) के साथ सीधे प्रबंधित कोड से बातचीत करने के लिए विकसित किया गया था।

सामान्य रूप से, जब आप एक प्रबंधित अनुप्रयोग लिख रहे हों तो प्रबंधित लाइब्रेरी (System.Speech) के साथ चिपकने वाला क्लीनर है।

यह निश्चित रूप से एसएपीआई संस्करण से संबंधित नहीं है - यहां सबसे संभावित समस्या यह है कि एक आवाज विक्रेता (इस मामले में अकापेला) को कुछ सिस्टम के लिए स्पष्ट रूप से समर्थन लागू करना है। स्टेच फीचर्स। यह संभव है कि Acapela आवाजें जो आपने आवश्यक सब कुछ का समर्थन किया है, लेकिन यह भी संभव है कि वे नहीं करते हैं। आपकी सबसे अच्छी शर्त ask the Acapela Group directly होगी।

वॉयस HKLM \ सॉफ़्टवेयर \ माइक्रोसॉफ्ट \ स्पीच \ टोकन्स में पंजीकृत हैं, और आपको विंडोज़ अंतर्निहित आवाजों के साथ-साथ Acapela आवाजों को भी सूचीबद्ध करना चाहिए जिन्हें आपने वहां सूचीबद्ध किया है। यदि आप पंजीकृत हैं, तो आप किसी भी स्पष्ट अंतर को देखते हैं, तो आप Acapela आवाजों को अपना पंजीकरण मैच बनाकर काम कर सकते हैं, उदाहरण के लिए, एमएस-अन्ना।

लेकिन मैं कहूंगा कि सबसे संभावित संभावना यह है कि Acapela आवाजों को System.Speech द्वारा आवश्यक सभी इंटरफेस का समर्थन करने के लिए अद्यतन नहीं किया गया है।

+0

पर एक नज़र डालने दें, उत्तर के लिए धन्यवाद, Acapela समर्थन जंक है और मैंने उन प्रश्नों का उत्तर नहीं दिया जिन्हें मैंने 10 दिनों से अधिक समय से पूछा था। मुझे जो जवाब मिला वह है: यह .NET 3.5 के साथ एक ज्ञात मुद्दा है जो हमारे उत्पाद से जुड़ा नहीं है। हम माइक्रोसॉफ्ट से अपडेट के लिए इंतजार कर रहे हैं (टोकनएनम्स से जुड़ा बग समर्थित नहीं है) –

+0

रजिस्ट्री को बदलना आवाजों का पता लगाता है लेकिन उस आवाज का चयन करते समय क्रैश का कारण बनता है। इसलिए, मुझे लगता है कि यह केवल एक विक्रेता बग है या तो माइक्रोसॉफ्ट या अकापेला (सबसे अधिक संभावना है)। –

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