2012-11-10 11 views
9

मैं एक विंडोज फोन 8 एप्लिकेशन बनाने की कोशिश कर रहा हूं जिसमें वॉयस कमांड शामिल है। आवाज कमांड "कलाकार [कलाकार] के शीर्ष गीत क्या हैं" के आधार पर कुछ चला जाता है, और इसलिए मुझे "[कलाकार]" के लिए किसी प्रकार का वाइल्डकार्ड उपयोग करने की आवश्यकता है जो उपयोगकर्ता को किसी कलाकार को कहने की अनुमति देगा। एक वाक्यांश सूची में दुनिया के हर कलाकार को सूचीबद्ध किए बिना मैं यह कैसे कर सकता हूं?एक वाक्यांश सूची कैसे बनाएं जिसमें प्रत्येक शब्द (वाइल्डकार्ड) शामिल है?

+1

यह बेहद संभव है। यह ऐप, http: // www। windowsphone.com/en-us/store/app/wikipedia/fd40c569-2681-48df-9ff3-53ffd80aa9b5 ऐसा करता है। आप कह सकते हैं "विकिपीडिया, खोज हैलो दुनिया यह एक परीक्षा है" या कुछ और। और यह समुद्र होगा बस उस के लिए आरएच। – msbg

+0

एक उपहार प्राप्त किया। भयानक व्याकरण के लिए खेद है, मैं बकाया संदेश – msbg

+0

हाँ संपादित नहीं कर सकता, यह अब संभव है, WinRT और Silverlight 8.1 ऐप्स दोनों के लिए। –

उत्तर

3

यह निश्चित रूप से संभव है।

लघु उत्तर यह विंडोज फोन 8.1 में तथाकथित वाक्यांशों के साथ संभव है।

लंबा संस्करण

सबसे पहले आप ID_CAP_SPEECH_RECOGNITION और ID_CAP_MICROPHONE आवश्यकताओं की घोषणा करने की जरूरत है।

बाद में आप एक वीसीडी (वॉयस कमांड विवरण) फ़ाइल बनाते हैं। यह फ़ाइल मूल रूप से एक एक्सएमएल फ़ाइल है जो फ़ोन को "बताती है" के लिए क्या सुनती है। (नोट ए सुनो फॉर तत्व में वाइल्डकार्ड कार्यक्षमता को लागू करने के लिए घुंघराले ब्रेसिज़ की एक जोड़ी के अंदर एक तारांकन चरित्र शामिल हो सकता है। अधिक जानकारी के लिए, वॉइस कमांड तत्व और विशेषता संदर्भ (विंडोज फोन स्टोर ऐप्स) देखें।) (एमएसडीएन से लिया गया) आपके मामले में उदाहरण के लिए इस फ़ाइल को इस प्रकार दिखाई देगा:

using Windows.Phone.Speech.VoiceCommands; 


private async void Application_Launching(object sender, 
    LaunchingEventArgs e) 
{ 
    try 
    { 
    await VoiceCommandService.InstallCommandSetsFromFileAsync(
     new Uri("ms-appx:///SuperMusicFinderVCD.xml")); 
    } 
    catch (Exception ex) 
    { 
    // Handle exception 
    } 
} 

आवाज कमान संभाल करने के लिए बस निम्न कार्य करें::

<?xml version="1.0" encoding="utf-8"?> 
<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1"> 
    <CommandSet xml:lang="en-us" Name="SuperMusicFinder"> 
    <!-- Command set for all US English commands--> 
    <CommandPrefix>SuperMusicFinder</CommandPrefix> 
    <Example>Find Top 10 from Europe</Example> 

    <Command Name="findCharts"> 
     <Example>Find Europe Top 40</Example> 
     <ListenFor>Find [Europe Top40] {chartlist}</ListenFor> 
     <ListenFor>Get [US Top100] charts {chartlist}</ListenFor> 
     <Feedback>Looking up the charts for you-...</Feedback> 
     <Navigate /> 
     <!-- Navigation defaults to Main page --> 
    </Command> 

    <Command Name="topSongs"> 
     <Example>Show top songs by Pharrell Williams</Example> 
     <ListenFor>Show [number] {num} songs by [Pink]{artist} </ListenFor> 
     <ListenFor>Give me [number] {num} songs by [Beethoven]{artist}</ListenFor> 
     <ListenFor>Show [top songs] by [Pharell Williams]</ListenFor> 
     <Feedback>Okay, I got that. I will look up the songs you want!</Feedback> 
     <Navigate Target="/artistSong.xaml"/> 
    </Command> 

    <PhraseList Label="num"> 
     <Item> 1 </Item> 
     <Item> 2 </Item> 
     <Item> 3 </Item> 
    </PhraseList> 

    <PhraseTopic label="chartlist" Scenario="Chartlisting" /> 
    <PhraseTopic label="artist" Scenario="Artist" /> 

    </CommandSet> 
</VoiceCommands> 

तो फिर तुम App.xaml.cs फ़ाइल में अपने वीसीडी initalize की जरूरत यदि आप उदाहरण के लिए कहते हैं: "सुपरम्यूजिकफाइंडर पी द्वारा शीर्ष गीत दिखाता है हैरेल विलियम्स "इस अनुरोध के लिए क्वेरी इस तरह की तरह दिखती है: " /artistSong.xaml?voiceCommandName = topSongs & द्वारा = Pharell% 20Williams & Reco = दिखाने% 20top% 20songs% Pharell% 20Williams "

private void artistSong_Loaded(object sender, RoutedEventArgs e) 
{ 
    if (this.NavigationContext.QueryString != null 
    && this.NavigationContext.QueryString.ContainsKey("voiceCommandName")) 
    { 
    // Page was launched by Voice Command 
    string commandName = 
     NavigationContext.QueryString["voiceCommandName"]; 
    string spokenNumber = ""; 
    if (commandName == "topSongs" && 
     this.NavigationContext.QueryString.TryGetValue("by", 
     out artist)) 
    { 
    //do whatever you want to do 
     } 
    } 
    } 
} 

आप अधिक जानकारी के here पा सकते हैं - नोट: सभी कोड के टुकड़े है कि नमूने से लिया और संपादित किया गया फिट करने के लिए यह प्रश्न, 100% सुनिश्चित नहीं है कि यह काम करता है, तो आप एक नमूना कोड प्राप्त कर सकते हैं जो 8.1 पर "उन्नत" आदेशों के साथ काम करता है या 8.0 पर सरल आदेश here

+0

यह सबसे अच्छा जवाब है, इसे चिह्नित करते हुए (जब तक कि कोई असहमत न हो?) – MatthewSot

+0

@ डैनियल स्टीनर - क्या होगा यदि मैं इस वाक्यांश में "25% $ 25.56" या "18 डॉलर 25 सेंट पर 18 प्रतिशत" की संख्या को पहचानना चाहता हूं? – devcoder

+0

यह एक ईश्वरीय प्रश्न है, मुझे सच में यकीन नहीं है लेकिन मैं देख सकता हूं कि मुझे उस पर कुछ मिल सकता है या नहीं। –

-1

क्या "{*}" काम के शीर्ष गीत क्या हैं? कम से कम प्रलेखन कॉन्फ़िगरेशन में सुनिफोर तत्व के लिए इसका उल्लेख करता है। Voice command element and attribute reference for Windows Phone 8

+0

मैंने कोशिश की, लेकिन जब मैंने अपने कोड से वॉइस कमांड तक पहुंचने का प्रयास किया तो यह "शीर्ष गीत क्या हैं ..." लौटा। – MatthewSot

2

नहीं, WP8 वॉयस कमांड वाक्यांश सूची में वाइल्डकार्ड का समर्थन नहीं करते हैं। समस्या यह है कि, WP8 एक निश्चित वाक्यांश सूची के बिना ऑडियो पर स्थानीय भाषण मान्यता निष्पादित करने में सक्षम नहीं होगा। वाइल्डकार्ड वाक्यांशों के लिए WP8 को क्लाउड में भाषण-से-टेक्स्ट करना होगा जब भी उपयोगकर्ता ने WP8 के वॉइस कमांड का उपयोग किया था और यह एक अच्छा यूएक्स नहीं है।

अभी वॉयस कमांड में समर्थित वाक्यांशों की अधिकतम संख्या 2,000 phrases है। यह एक ही ऐप के लिए सभी आदेशों में है। और यह सीमा असंबद्धता को आसान बनाने और उपभोक्ताओं को अधिक सटीक परिणामों के साथ प्रदान करने के लिए है। कुल मिलाकर, असंबद्धता को और सटीक बनाने के लिए जितना संभव हो उतना वाक्यांशों का उपयोग करना सबसे अच्छा है।

एक उचित उपयोगकेस के लिए एक अनुशंसित कामकाज है जिसके लिए ध्वनि आदेशों में वाइल्डकार्ड वाक्यांशों की आवश्यकता है। चरण एक, एक "*" आवाज कमांड है जो सही वाक्यविन्यास के लिए ऐप लॉन्च करता है। एक बार ऐप खुलने के बाद, उपयोगकर्ता को अपने विशिष्ट कमांड को दोहराए जाने के बाद ऐप में भाषण-टू-टेक्स्ट का उपयोग करें (SpeechRecognizer का उपयोग करके) और क्लाउड में भाषण-टू-टेक्स्ट ट्रिगर करेगा।

+1

हम्म, मैंने सोचा कि यह सच था, लेकिन फिर मैंने रुडी हुइन द्वारा विकिपीडिया ऐप देखा। वह ऐप आपको स्पीच रिकग्निशन से इच्छित किसी भी शब्द की खोज करने देता है। यकीन नहीं है कि वह ऐसा कैसे करता है लेकिन यह संभव दिखता है। – msbg