Beyond Cortana & Siri: Using Speech Recognition & Speech Synthesis for the Next Generation of Mobile...

Post on 14-Jan-2015

3.769 views 2 download

Tags:

description

Our society has a problem. Individuals are hooked on apps, phones, tablets and social networking. We created these devices and these apps that have become a core part of our lives but we stopped short. We failed to recognize some of the problematic situations where our apps are used. People are texting, emailing and chatting while driving. Pedestrians walk into busy intersections and into sidewalk hazards because they refuse to put their phone down. We cannot entirely blame them. We created a mobile revolution, and now we just can’t simply ask them to put it on hold when it’s not convenient. It’s almost an addiction and too often it has led to fatal results. Furthermore, mobile applications are not always easy to work with due to the small screen and on-screen keyboard. Other people struggle to use traditional computing devices due to handicaps. Using our voice is a natural form of communication amongst humans. Ever since 2001: A Space Odyssey, we’ve been dreaming of computers who can converse with us like HAL9000 or the Star Trek computers. Or maybe you’re part of the new generation of geeks dreaming of Halo’s Cortana? Thanks to the new advances and SDKs for speech recognition and synthesis (aka text-to-speech), we are now several steps closer to this reality. Siri is not the end game, she’s the beginning. This session explores the design models and development techniques you can use to add voice recognition to your mobile applications, including in-app commands, standard & custom grammars, and voice commands usable outside your app. We’ll also see how your apps can respond to the user via speech synthesis, opening-up a new world of hands-free scenarios. This reality is here, you’ll see actual live cross-platform demos with speech and you can now learn how to do it. Speech support is not just cool or a convenience, it should be a necessity in many apps.

Transcript of Beyond Cortana & Siri: Using Speech Recognition & Speech Synthesis for the Next Generation of Mobile...

www.AgeofMobility.com

http://www.bigbaldapps.com

www.AgeofMobility.com

@ActiveNick 2005-2014

Computer Speech is the Dream

Mobile Speech is a Responsibility

AccessibilityMedical

Conditions

Hands &

Eyes Free

Driving Apps

& Games

Learning &

Therapy

Travel Apps

with

Translation

Speech SDK

Features for DevsWindows Phone Windows Store

iOS

(iPhone/iPad)

Android

(Phone/Tablet)

Built-in Personal

Assistant with

Speech

Cortana* N/A Siri* Google Now

Launcher*

Personal Assistant

Extensions in third-

party apps using

Voice Commands

Yes N/A No

(first-party apps

only)

No

(first-party apps

only)

Speech Synthesis

SDK for Devs

(Text-to-Speech)

Yes Yes Yes Yes

In-app Speech

Recognition SDK

for Devs

Yes Yes* No* Yes

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

<CommandPrefix>MSDN</CommandPrefix>

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

<Example>How do I add Voice Commands to my application</Example>

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

/Command>

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

<Example>Find Install Voice Command Sets</Example>

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

<ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor>

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

<Feedback>Search on MSDN</Feedback>

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

<Navigate Target="MainPage.xaml" />

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>Find Voice Commands</Example>

<Command Name="FindText"><Example>Find Windows Phone</Example><ListenFor>Search</ListenFor><ListenFor>Search {*}</ListenFor><ListenFor>Search for {listSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {*}</ListenFor><ListenFor>Find {listSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseList Label="listSearchTerms" Disambiguate="false"><Item>Voice Commands</Item><Item>Windows Phone</Item>

</PhraseList>

</CommandSet>

</VoiceCommands>

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

Windows Phone 8.0 Windows Phone 8.1

Simple Scenarios, Limited Accuracy More Powerful, Easier, More Accurate

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>Find Voice Commands</Example>

<Command Name="FindText"><Example>Find Windows Phone</Example><ListenFor>Search</ListenFor><ListenFor>Search {*}</ListenFor><ListenFor>Search for {listSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {*}</ListenFor><ListenFor>Find {listSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseList Label="listSearchTerms" Disambiguate="false"><Item>Voice Commands</Item><Item>Windows Phone</Item>

</PhraseList>

</CommandSet>

</VoiceCommands>

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

Windows Phone 8.0 Windows Phone 8.1

Simple Scenarios, Limited Accuracy … and enables Natural Language

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">

<CommandSet xml:lang="en-us" Name="englishCommands">

<CommandPrefix>MSDN</CommandPrefix><Example>How do I add Voice Commands to my application</Example>

<Command Name="FindText"><Example>Find Install Voice Command Sets</Example><ListenFor>Search</ListenFor><ListenFor>Search for {dictatedSearchTerms}</ListenFor><ListenFor>Find</ListenFor><ListenFor>Find {dictatedSearchTerms}</ListenFor><Feedback>Search on MSDN</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<Command Name="nlpCommand"><Example>How do I add Voice Commands to my application</Example><ListenFor>{dictatedVoiceCommandText}</ListenFor><Feedback>Starting MSDN...</Feedback><Navigate Target="MainPage.xaml" />

</Command>

<PhraseTopic Label="dictatedVoiceCommandText" Scenario="Dictation"><Subject>MSDN</Subject>

</PhraseTopic>

<PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject>MSDN</Subject>

</PhraseTopic>

</CommandSet>

</VoiceCommands>

private async void

// SHOULD BE PERFORMED UNDER TRY/CATCH

Uri new ms-appx:///vcd.xml UriKind.Absolute

await

Windows Phone Silverlight Apps on Windows Phone 8.1

Windows Runtime Apps on Windows Phone 8.1

private async void

// SHOULD BE PERFORMED UNDER TRY/CATCH

Uri uriVoiceCommands = new Uri("ms-appx:///vcd.xml", UriKind.Absolute);

StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(uriVoiceCommands);

await VoiceCommandManager.InstallCommandSetsFromStorageFileAsync(file);

// Windows Phone Silverlight App, in MainPage.xaml.cs

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{

base.OnNavigatedTo(e);

if (e.NavigationMode == System.Windows.Navigation.NavigationMode.New)

{

string recoText = null; // What did the user say? e.g. MSDN, "Find Windows Phone Voice Commands"

NavigationContext.QueryString.TryGetValue("reco", out recoText);

string voiceCommandName = null; // Which command was recognized in the VCD.XML file? e.g. "FindText"

NavigationContext.QueryString.TryGetValue("voiceCommandName", out voiceCommandName);

string searchTerms = null; // What did the user say, for named phrase topic or list "slots"? e.g. "Windows Phone Voice Commands"

NavigationContext.QueryString.TryGetValue("dictatedSearchTerms", out searchTerms);

switch (voiceCommandName) // What command launched the app?

{

case "FindText":

HandleFindText(searchTerms);

break;

case "nlpCommand":

HandleNlpCommand(recoText);

break;

}

}

}

// Windows Phone Silverlight App, in MainPage.xaml.cs

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{

base.OnNavigatedTo(e);

if (e.NavigationMode == System.Windows.Navigation.NavigationMode.New)

{

string recoText = null; // What did the user say? e.g. MSDN, "Find Windows Phone Voice Commands"

NavigationContext.QueryString.TryGetValue("reco", out recoText);

string voiceCommandName = null; // Which command was recognized in the VCD.XML file? e.g. "FindText"

NavigationContext.QueryString.TryGetValue("voiceCommandName", out voiceCommandName);

string searchTerms = null; // What did the user say, for named phrase topic or list "slots"? e.g. "Windows Phone Voice Commands"

NavigationContext.QueryString.TryGetValue("dictatedSearchTerms", out searchTerms);

switch (voiceCommandName) // What command launched the app?

{

case "FindText":

HandleFindText(searchTerms);

break;

case "nlpCommand":

HandleNlpCommand(recoText);

break;

}

}

}

// Windows Phone Silverlight App, in MainPage.xaml.cs

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

// Windows Phone Silverlight App, in MainPage.xaml.cs

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{

base.OnNavigatedTo(e);

if (e.NavigationMode == System.Windows.Navigation.NavigationMode.New)

{

string recoText = null; // What did the user say? e.g. MSDN, "Find Windows Phone Voice Commands"

NavigationContext.QueryString.TryGetValue("reco", out recoText);

string voiceCommandName = null; // Which command was recognized in the VCD.XML file? e.g. "FindText"

NavigationContext.QueryString.TryGetValue("voiceCommandName", out voiceCommandName);

string searchTerms = null; // What did the user say, for named phrase topic or list "slots"? e.g. "Windows Phone Voice Commands"

NavigationContext.QueryString.TryGetValue("dictatedSearchTerms", out searchTerms);

switch (voiceCommandName) // What command launched the app?

{

case "FindText":

HandleFindText(searchTerms);

break;

case "nlpCommand":

HandleNlpCommand(recoText);

break;

}

}

}

// What did the user say? e.g. MSDN, "Find Windows Phone Voice Commands"string recoText = null;NavigationContext.QueryString.TryGetValue("reco", out recoText);

// Which command was recognized in the VCD.XML file? e.g. "FindText"string voiceCommandName = null; NavigationContext.QueryString.TryGetValue("voiceCommandName", out voiceCommandName);

// What did the user say, for named phrase topic or list "slots"? e.g. "Windows Phone Voice Commands"string searchTerms = null;NavigationContext.QueryString.TryGetValue("dictatedSearchTerms", out searchTerms);

// Windows Phone Silverlight App, in MainPage.xaml.cs

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{

base.OnNavigatedTo(e);

if (e.NavigationMode == System.Windows.Navigation.NavigationMode.New)

{

string recoText = null; // What did the user say? e.g. MSDN, "Find Windows Phone Voice Commands"

NavigationContext.QueryString.TryGetValue("reco", out recoText);

string voiceCommandName = null; // Which command was recognized in the VCD.XML file? e.g. "FindText"

NavigationContext.QueryString.TryGetValue("voiceCommandName", out voiceCommandName);

string searchTerms = null; // What did the user say, for named phrase topic or list "slots"? e.g. "Windows Phone Voice Commands"

NavigationContext.QueryString.TryGetValue("dictatedSearchTerms", out searchTerms);

switch (voiceCommandName) // What command launched the app?

{

case "FindText":

HandleFindText(searchTerms);

break;

case "nlpCommand":

HandleNlpCommand(recoText);

break;

}

}

}

switch (voiceCommandName) // What command launched the app?{

case "FindText":HandleFindText(searchTerms);break;

case "nlpCommand":HandleNlpCommand(recoText);break;

}

// Windows Runtime App on Windows Phone 8.1, inside OnActivated override in App class

if (args.Kind == ActivationKind.VoiceCommand)

{

VoiceCommandActivatedEventArgs vcArgs = (VoiceCommandActivatedEventArgs)args;

string voiceCommandName = vcArgs.Result.RulePath.First(); // What command launched the app?

switch (voiceCommandName) // Navigate to right page for the voice command

{

case "FindText": // User said "find" or "search"

rootFrame.Navigate(typeof(MSDN.FindText), vcArgs.Result);

break;

case "nlpCommand": // User said something else

rootFrame.Navigate(typeof(MSDN.NlpCommand), vcArgs.Result);

break;

}

}

// Windows Runtime App on Windows Phone 8.1, inside OnActivated override in App class

if (args.Kind == ActivationKind.VoiceCommand)

{

VoiceCommandActivatedEventArgs vcArgs = (VoiceCommandActivatedEventArgs)args;

string voiceCommandName = vcArgs.Result.RulePath.First(); // What command launched the app?

switch (voiceCommandName) // Navigate to right page for the voice command

{

case "FindText": // User said "find" or "search"

rootFrame.Navigate(typeof(MSDN.FindText), vcArgs.Result);

break;

case "nlpCommand": // User said something else

rootFrame.Navigate(typeof(MSDN.NlpCommand), vcArgs.Result);

break;

}

}

// Windows Runtime App on Windows Phone 8.1, inside OnActivated override// in App class

if (args.Kind == ActivationKind.VoiceCommand)

// Windows Runtime App on Windows Phone 8.1, inside OnActivated override in App class

if (args.Kind == ActivationKind.VoiceCommand)

{

VoiceCommandActivatedEventArgs vcArgs = (VoiceCommandActivatedEventArgs)args;

string voiceCommandName = vcArgs.Result.RulePath.First(); // What command launched the app?

switch (voiceCommandName) // Navigate to right page for the voice command

{

case "FindText": // User said "find" or "search"

rootFrame.Navigate(typeof(MSDN.FindText), vcArgs.Result);

break;

case "nlpCommand": // User said something else

rootFrame.Navigate(typeof(MSDN.NlpCommand), vcArgs.Result);

break;

}

}

VoiceCommandActivatedEventArgs vcArgs = (VoiceCommandActivatedEventArgs)args;

// What command launched the app?string voiceCommandName = vcArgs.Result.RulePath.First();

// Navigate to right page for the voice command switch (voiceCommandName)

// Windows Runtime App on Windows Phone 8.1, inside OnActivated override in App class

if (args.Kind == ActivationKind.VoiceCommand)

{

VoiceCommandActivatedEventArgs vcArgs = (VoiceCommandActivatedEventArgs)args;

string voiceCommandName = vcArgs.Result.RulePath.First(); // What command launched the app?

switch (voiceCommandName) // Navigate to right page for the voice command

{

case "FindText": // User said "find" or "search"

rootFrame.Navigate(typeof(MSDN.FindText), vcArgs.Result);

break;

case "nlpCommand": // User said something else

rootFrame.Navigate(typeof(MSDN.NlpCommand), vcArgs.Result);

break;

}

}

// Navigate to right page for the voice command switch (voiceCommandName) {

case "FindText": // User said "find" or "search"rootFrame.Navigate(typeof(MSDN.FindText), vcArgs.Result);break;

case "nlpCommand": // User said something elserootFrame.Navigate(typeof(MSDN.NlpCommand), vcArgs.Result);break;

}

// Windows Runtime App on Windows Phone 8.1, inside OnNavigatedTo in FindText.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)

{

// Get recognition result from parameter passed in frame.Navigate call

SpeechRecognitionResult vcResult = e.Parameter as SpeechRecognitionResult;

if (vcResult!=null)

{

// What did the user say? e.g. MSDN, "Find Windows Phone Voice Commands"

string recoText = vcResult.Text;

// Store the semantics dictionary for later use

IReadOnlyDictionary<string,IReadOnlyList<string>> semantics = vcResult.SemanticInterpretation.Properties;

string voiceCommandName = vcResult.RulePath.First();

if (voiceCommandName == "FindText")

{

// What did the user say, for named phrase topic or list "slots"? e.g. "Windows Phone Voice Commands"

if (semantics.ContainsKey("dictatedSearchTerms"))

{

HandleFindTextWithSearchTerms(semantics["dictatedSearchTerms"][0]);

}

else

{

HandleNoSearchTerms();

}

}

// Else handle other voice commands

} navigationHelper.OnNavigatedTo(e)

}

// Windows Runtime App on Windows Phone 8.1, inside OnNavigatedTo In FindText.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)

{

// Get recognition result from parameter passed in frame.Navigate call

SpeechRecognitionResult vcResult = e.Parameter as SpeechRecognitionResult;

if (vcResult!=null)

{

// What did the user say? e.g. MSDN, "Find Windows Phone Voice Commands"

string recoText = vcResult.Text;

// Store the semantics dictionary for later use

IReadOnlyDictionary<string,IReadOnlyList<string>> semantics = vcResult.SemanticInterpretation.Properties;

string voiceCommandName = vcResult.RulePath.First();

if (voiceCommandName == "FindText")

{

// What did the user say, for named phrase topic or list "slots"? e.g. "Windows Phone Voice Commands"

if (semantics.ContainsKey("dictatedSearchTerms"))

{

HandleFindTextWithSearchTerms(semantics["dictatedSearchTerms"][0]);

}

else

{

HandleNoSearchTerms();

}

}

// Else handle other voice commands

} navigationHelper.OnNavigatedTo(e)

}

// Windows Runtime App on Windows Phone 8.1, inside // OnNavigatedTo in FindText.xaml.csprotected override void OnNavigatedTo(NavigationEventArgs e){

// Get recognition result from parameter passed in frame.Navigate callSpeechRecognitionResult vcResult = e.Parameter as SpeechRecognitionResult;

if (vcResult!=null){

// What did the user say? e.g. MSDN, "Find Windows Phone Voice Commands"string recoText = vcResult.Text;

// Store the semantics dictionary for later useIReadOnlyDictionary<string,IReadOnlyList<string>> semantics =

vcResult.SemanticInterpretation.Properties;

string voiceCommandName = vcResult.RulePath.First();

// Windows Runtime App on Windows Phone 8.1, inside OnNavigatedTo In FindText.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)

{

// Get recognition result from parameter passed in frame.Navigate call

SpeechRecognitionResult vcResult = e.Parameter as SpeechRecognitionResult;

if (vcResult!=null)

{

// What did the user say? e.g. MSDN, "Find Windows Phone Voice Commands"

string recoText = vcResult.Text;

// Store the semantics dictionary for later use

IReadOnlyDictionary<string,IReadOnlyList<string>> semantics = vcResult.SemanticInterpretation.Properties;

string voiceCommandName = vcResult.RulePath.First();

if (voiceCommandName == "FindText")

{

// What did the user say, for named phrase topic or list "slots"? e.g. "Windows Phone Voice Commands"

if (semantics.ContainsKey("dictatedSearchTerms"))

{

HandleFindTextWithSearchTerms(semantics["dictatedSearchTerms"][0]);

}

else

{

HandleNoSearchTerms();

}

}

// Else handle other voice commands

} navigationHelper.OnNavigatedTo(e)

}

if (voiceCommandName == "FindText"){

// What did the user say, for named phrase topic or list "slots"?// e.g. "Windows Phone Voice Commands"if (semantics.ContainsKey("dictatedSearchTerms")){

HandleFindTextWithSearchTerms(semantics["dictatedSearchTerms"][0]);}else{

HandleNoSearchTerms();}

}

// Windows Runtime App on Windows Phone 8.1, inside OnNavigatedTo in NlpCommand.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)

{

base.OnNavigatedTo(e);

// Get recognition result from parameter passed in frame.Navigate call

SpeechRecognitionResult vcResult = e.Parameter as SpeechRecognitionResult;

// Check for null!

string commandMode = vcResult.SemanticInterpretation.Properties["commandMode"][0];

if (commandMode == "voice") // Did the user speak or type the command?

{

SpeakText(audioPlayer, String.Format("MSDN app heard you say {0}", vcResult.Text));

HandleNlpCommand(vcResult);

}

else if(commandMode=="text")

{

messageTextBox.Text = string.Format("Working on your request \"{0}\"", vcResult.Text);

HandleNlpCommand(vcResult);

}

}

// Windows Runtime App on Windows Phone 8.1, inside OnNavigatedTo In NlpCommand.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)

{

base.OnNavigatedTo(e);

// Get recognition result from parameter passed in frame.Navigate call

SpeechRecognitionResult vcResult = e.Parameter as SpeechRecognitionResult;

// Check for null!

string commandMode = vcResult.SemanticInterpretation.Properties["commandMode"][0];

if (commandMode == "voice") // Did the user speak or type the command?

{

SpeakText(audioPlayer, String.Format("MSDN app heard you say {0}", vcResult.Text));

HandleNlpCommand(vcResult);

}

else if(commandMode=="text")

{

messageTextBox.Text = string.Format("Working on your request \"{0}\"", vcResult.Text);

HandleNlpCommand(vcResult);

}

}

// Windows Runtime App on Windows Phone 8.1, in OnNavigatedTo in NlpCommand.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)

{

// Get recognition result from parameter passed in frame.Navigate call

SpeechRecognitionResult vcResult = e.Parameter as SpeechRecognitionResult;

string commandMode = vcResult.SemanticInterpretation.Properties["commandMode"][0];

// Windows Runtime App on Windows Phone 8.1, inside OnNavigatedTo In NlpCommand.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)

{

base.OnNavigatedTo(e);

// Get recognition result from parameter passed in frame.Navigate call

SpeechRecognitionResult vcResult = e.Parameter as SpeechRecognitionResult;

// Check for null!

string commandMode = vcResult.SemanticInterpretation.Properties["commandMode"][0];

if (commandMode == "voice") // Did the user speak or type the command?

{

SpeakText(audioPlayer, String.Format("MSDN app heard you say {0}", vcResult.Text));

HandleNlpCommand(vcResult);

}

else if(commandMode=="text")

{

messageTextBox.Text = string.Format("Working on your request \"{0}\"", vcResult.Text);

HandleNlpCommand(vcResult);

}

}

string commandMode = vcResult.SemanticInterpretation.Properties["commandMode"][0];

if (commandMode == "voice") // Did the user speak or type the command?

{

SpeakText(audioPlayer, String.Format("MSDN voice heard you say {0}", vcResult.Text));

HandleNlpCommand(vcResult);

}

else if(commandMode=="text")

{

msgTextBox.Text= string.Format("Working on your request \"{0}\"", vcResult.Text);

HandleNlpCommand(vcResult);

}

private void HandleNlpCommand(string recoText, bool actSilently)

{

string action = null;

string navigateTo = null;

string searchFor = null;

recoText = recoText.ToLower();

if (recoText.Contains("go to ") || recoText.Contains("goto ") ||

recoText.Contains("find ") || recoText.Contains("search ") ||

recoText.Contains("show me "))

{

action = "navigate";

if (recoText.Contains("windows phone dev center"))

{

navigateTo = "http://dev.windowsphone.com";

}

}

else if (recoText.Contains("learn how to "))

{

action = "find";

searchFor = recoText.Substring(recoText.IndexOf("learn how to ") + 13);

}

else

{

action = "find";

searchFor = recoText;

}

switch (action)

{

case "find":

// ...

private void HandleNlpCommand(string recoText, bool actSilently)

{

string action = null;

string navigateTo = null;

string searchFor = null;

recoText = recoText.ToLower();

if (recoText.Contains("go to ") || recoText.Contains("goto ") ||

recoText.Contains("find ") || recoText.Contains("search ") ||

recoText.Contains("show me "))

{

action = "navigate";

if (recoText.Contains("windows phone dev center"))

{

navigateTo = "http://dev.windowsphone.com";

}

}

else if (recoText.Contains("learn how to "))

{

action = "find";

searchFor = recoText.Substring(recoText.IndexOf("learn how to ") + 13);

}

else

{

action = "find";

searchFor = recoText;

}

switch (action)

{

case "find":

// ...

if (recoText.Contains("go to ") || recoText.Contains("goto ") ||recoText.Contains("find ") || recoText.Contains("search ") ||recoText.Contains("show me "))

{action = "navigate";if (recoText.Contains("windows phone dev center")){

navigateTo = "http://dev.windowsphone.com";}

}

private void HandleNlpCommand(string recoText, bool actSilently)

{

string action = null;

string navigateTo = null;

string searchFor = null;

recoText = recoText.ToLower();

if (recoText.Contains("go to ") || recoText.Contains("goto ") ||

recoText.Contains("find ") || recoText.Contains("search ") ||

recoText.Contains("show me "))

{

action = "navigate";

if (recoText.Contains("windows phone dev center"))

{

navigateTo = "http://dev.windowsphone.com";

}

}

else if (recoText.Contains("learn how to "))

{

action = "find";

searchFor = recoText.Substring(recoText.IndexOf("learn how to ") + 13);

}

else

{

action = "find";

searchFor = recoText;

}

switch (action)

{

case "find":

// ...

else if (recoText.Contains("learn how to ")){

action = "find";searchFor = recoText.Substring(recoText.IndexOf("learn how to ") + 13);

}

private void HandleNlpCommand(string recoText, bool actSilently)

{

string action = null;

string navigateTo = null;

string searchFor = null;

recoText = recoText.ToLower();

if (recoText.Contains("go to ") || recoText.Contains("goto ") ||

recoText.Contains("find ") || recoText.Contains("search ") ||

recoText.Contains("show me "))

{

action = "navigate";

if (recoText.Contains("windows phone dev center"))

{

navigateTo = "http://dev.windowsphone.com";

}

}

else if (recoText.Contains("learn how to "))

{

action = "find";

searchFor = recoText.Substring(recoText.IndexOf("learn how to ") + 13);

}

else

{

action = "find";

searchFor = recoText;

}

switch (action)

{

case "find":

// ...

else{

action = "find";searchFor = recoText;

}

// Windows Phone Silverlight App

// Synthesis

private async void SpeakText(string textToSpeak)

{

SpeechSynthesizer synthesizer = new SpeechSynthesizer();

await synthesizer.SpeakTextAsync(textToSpeak);

}

// Recognition

private async Task<SpeechRecognitionUIResult> RecognizeSpeech()

{

SpeechRecognizerUI recognizer = new SpeechRecognizerUI();

// One of three Grammar types available

recognizer.Recognizer.Grammars.AddGrammarFromPredefinedType(

"key1", SpeechPredefinedGrammar.WebSearch);

await recognizer.Recognizer.PreloadGrammarsAsync(); // Optional but recommended

// Put up UI and recognize user's utterance

SpeechRecognitionUIResult result = await recognizer.RecognizeWithUIAsync();

return result;

}

// Calling code uses result.RecognitionResult.Text or result.RecognitionResult.Semantics

// Windows Phone Silverlight App

// Synthesis

private async void SpeakText(string textToSpeak)

{

SpeechSynthesizer synthesizer = new SpeechSynthesizer();

await synthesizer.SpeakTextAsync(textToSpeak);

}

// Recognition

private async Task<SpeechRecognitionUIResult> RecognizeSpeech()

{

SpeechRecognizerUI recognizer = new SpeechRecognizerUI();

// One of three Grammar types available

recognizer.Recognizer.Grammars.AddGrammarFromPredefinedType(

"key1", SpeechPredefinedGrammar.WebSearch);

await recognizer.Recognizer.PreloadGrammarsAsync(); // Optional but recommended

// Put up UI and recognize user's utterance

SpeechRecognitionUIResult result = await recognizer.RecognizeWithUIAsync();

return result;

}

// Calling code uses result.RecognitionResult.Text or result.RecognitionResult.Semantics

// Synthesisprivate async void SpeakText(string textToSpeak){

SpeechSynthesizer synthesizer = new SpeechSynthesizer();await synthesizer.SpeakTextAsync(textToSpeak);

}

// Windows Phone Silverlight App// Synthesisprivate async void SpeakText(string textToSpeak){

SpeechSynthesizer synthesizer = new SpeechSynthesizer();await synthesizer.SpeakTextAsync(textToSpeak);

}

// Recognitionprivate async Task<SpeechRecognitionUIResult> RecognizeSpeech(){

SpeechRecognizerUI recognizer = new SpeechRecognizerUI();

// One of three Grammar types availablerecognizer.Recognizer.Grammars.AddGrammarFromPredefinedType(

"key1", SpeechPredefinedGrammar.WebSearch);

await recognizer.Recognizer.PreloadGrammarsAsync(); // Optional but recommended

// Put up UI and recognize user's utteranceSpeechRecognitionUIResult result = await recognizer.RecognizeWithUIAsync();

return result;}// Calling code uses result.RecognitionResult.Text or result.RecognitionResult.Semantics

// Recognitionprivate async Task<SpeechRecognitionUIResult> RecognizeSpeech(){

SpeechRecognizerUI recognizer = new SpeechRecognizerUI();

// One of three Grammar types availablerecognizer.Recognizer.Grammars.AddGrammarFromPredefinedType(

"key1", SpeechPredefinedGrammar.WebSearch);

// Optional but recommendedawait recognizer.Recognizer.PreloadGrammarsAsync();

// Windows Phone Silverlight App

// Synthesis

private async void SpeakText(string textToSpeak)

{

SpeechSynthesizer synthesizer = new SpeechSynthesizer();

await synthesizer.SpeakTextAsync(textToSpeak);

}

// Recognition

private async Task<SpeechRecognitionUIResult> RecognizeSpeech()

{

SpeechRecognizerUI recognizer = new SpeechRecognizerUI();

// One of three Grammar types available

recognizer.Recognizer.Grammars.AddGrammarFromPredefinedType(

"key1", SpeechPredefinedGrammar.WebSearch);

await recognizer.Recognizer.PreloadGrammarsAsync(); // Optional but recommended

// Put up UI and recognize user's utterance

SpeechRecognitionUIResult result = await recognizer.RecognizeWithUIAsync();

return result;

}

// Calling code uses result.RecognitionResult.Text or result.RecognitionResult.Semantics

// Put up UI and recognize user's utteranceSpeechRecognitionUIResult result

= await recognizer.RecognizeWithUIAsync();

return result;

// Windows Phone Store App

// Synthesis

<!--MediaElement in xaml file-->

<MediaElement Name="audioPlayer" AutoPlay="True" .../>

// C# code behind

// Function to speak a text string

private async void SpeakText(MediaElement audioPlayer, string textToSpeak)

{

SpeechSynthesizer synthesizer = new SpeechSynthesizer();

SpeechSynthesisStream ttsStream = await synthesizer.SynthesizeTextToStreamAsync(textToSpeak);

audioPlayer.SetSource(ttsStream, ""); // This starts the player because AutoPlay="True"

}

// Windows Phone Store App

// Synthesis

<!--MediaElement in xaml file-->

<MediaElement Name="audioPlayer" AutoPlay="True" .../>

// C# code behind

// Function to speak a text string

private async void SpeakText(MediaElement audioPlayer, string textToSpeak)

{

SpeechSynthesizer synthesizer = new SpeechSynthesizer();

SpeechSynthesisStream ttsStream = await synthesizer.SynthesizeTextToStreamAsync(textToSpeak);

audioPlayer.SetSource(ttsStream, ""); // This starts the player because AutoPlay="True"

}

// Synthesis<!--MediaElement in xaml file--><MediaElement Name="audioPlayer" AutoPlay="True" .../>

// Windows Phone Store App

// Synthesis

<!--MediaElement in xaml file-->

<MediaElement Name="audioPlayer" AutoPlay="True" .../>

// C# code behind

// Function to speak a text string

private async void SpeakText(MediaElement audioPlayer, string textToSpeak)

{

SpeechSynthesizer synthesizer = new SpeechSynthesizer();

SpeechSynthesisStream ttsStream = await synthesizer.SynthesizeTextToStreamAsync(textToSpeak);

audioPlayer.SetSource(ttsStream, ""); // This starts the player because AutoPlay="True"

}

// C# code behind// Function to speak a text stringprivate async void SpeakText(MediaElement audioPlayer, string textToSpeak){

SpeechSynthesizer synthesizer = new SpeechSynthesizer();

SpeechSynthesisStream ttsStream= await synthesizer.SynthesizeTextToStreamAsync(textToSpeak);

audioPlayer.SetSource(ttsStream, ""); // This starts the player because AutoPlay="True"

}

// Windows Phone Store App

// Recognition

private async Task<SpeechRecognitionResult> RecognizeSpeech()

{

SpeechRecognizer recognizer = new SpeechRecognizer();

// One of three Constraint types available

SpeechRecognitionTopicConstraint topicConstraint

= new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.WebSearch, "MSDN");

recognizer.Constraints.Add(topicConstraint);

await recognizer.CompileConstraintsAsync(); // Required

// Put up UI and recognize user's utterance

SpeechRecognitionResult result = await recognizer.RecognizeWithUIAsync();

return result;

}

// Calling code uses result.RecognitionResult.Text or// result.RecognitionResult.SemanticInterpretation

// Windows Phone Store App

// Recognition

private async Task<SpeechRecognitionResult> RecognizeSpeech()

{

SpeechRecognizer recognizer = new SpeechRecognizer();

// One of three Constraint types available

SpeechRecognitionTopicConstraint topicConstraint

= new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.WebSearch, "MSDN");

recognizer.Constraints.Add(topicConstraint);

await recognizer.CompileConstraintsAsync(); // Required

// Put up UI and recognize user's utterance

SpeechRecognitionResult result = await recognizer.RecognizeWithUIAsync();

return result;

}

// Calling code uses result.RecognitionResult.Text or// result.RecognitionResult.SemanticInterpretation

SpeechRecognizer recognizer = new SpeechRecognizer();

// One of three Constraint types availableSpeechRecognitionTopicConstraint topicConstraint

= new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.WebSearch, "MSDN");

recognizer.Constraints.Add(topicConstraint);

await recognizer.CompileConstraintsAsync(); // Required

// Windows Phone Store App

// Recognition

private async Task<SpeechRecognitionResult> RecognizeSpeech()

{

SpeechRecognizer recognizer = new SpeechRecognizer();

// One of three Constraint types available

SpeechRecognitionTopicConstraint topicConstraint

= new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.WebSearch, "MSDN");

recognizer.Constraints.Add(topicConstraint);

await recognizer.CompileConstraintsAsync(); // Required

// Put up UI and recognize user's utterance

SpeechRecognitionResult result = await recognizer.RecognizeWithUIAsync();

return result;

}

// Calling code uses result.RecognitionResult.Text or// result.RecognitionResult.SemanticInterpretation

// Put up UI and recognize user's utteranceSpeechRecognitionResult result

= await recognizer.RecognizeWithUIAsync();

return result;}// Calling code uses result.RecognitionResult.Text or// result.RecognitionResult.SemanticInterpretation

http://aka.ms/CortanaDev

http://channel9.msdn.com/Events/Build/2014/2-530

http://www.bing.com/blogs/site_blogs/b/search/archive/2014/04/14/integrating-store-apps-with-cortana-in-windows-phone-8-1.aspx

http://www.bing.com/dev/en-us/speech

http://msdn.microsoft.com/en-us/magazine/jj721592.aspx

http://blogs.msdn.com/b/robch

http://www.windowsphone.com/en-us/store/app/msdn-voice-search/aed09797-b424-4030-a04d-5ec8ec63847f

http://code.msdn.microsoft.com/wpapps/MSDN-Voice-Search-for-95c16d92

https://voicecommands.codeplex.com

http://code.msdn.microsoft.com/wpapps/Voice-Commands-for-Windows-2f808ac6

http://code.msdn.microsoft.com/windowsapps/Speech-synthesis-sample-6e07b218

http://code.msdn.microsoft.com/windowsapps/Bing-Speech-Recognition-210c8978

http://code.msdn.microsoft.com/windowsapps/Speech-Recognition-19c452b4

https://developer.apple.com/technologies/ios/accessibility.html

https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVSpeechSynthesizer_Ref/Reference/Reference.html

http://nshipster.com/avspeechsynthesizer

DEVFRIGHT Blog Post: http://www.devfright.com/quick-look-avspeechsynthesizer-class/

https://play.google.com/store/apps/details?id=com.google.android.launcher

http://developer.android.com/reference/android/speech/package-summary.html

http://developer.android.com/reference/android/speech/tts/package-summary.html

http://channel9.msdn.com/Events/Build/2014/

http://channel9.msdn.com/Events/Build/2014

Get Ready to Become a Windows Phone Developerdev.windowsphone.com

Learn More About Windows Phone Dev via Official Microsoft Videoshttp://aka.ms/wp81js

http://aka.ms/wp81devbegin

Check Out Additional Learning Resourceswww.pluralsight.com/training/Courses#windows-phone

www.developer.nokia.com

Download Additional Resources & Become an Expertphone.codeplex.com

http://bit.ly/nokiadevoffers

68

1

2

3

4

www.AgeofMobility.com

dev.windowsphone.com

dev.windows.com

blogs.windows.com/windows_phone/b/wpdev

blogs.windows.com/windows_phone/b/windowsphone

http://developer.nokia.com

http://bit.ly/godvlup

http://conversations.nokia.com

http://appstudio.windows.com

http://flip.it/95YFG

www.geekchamp.com

www.wpcentral.com

Thank You!Slides will be posted on my Slideshare account.

Slideshare: www.slideshare.net/ActiveNick

Blog: www.AgeofMobility.com

Twitter: @ActiveNick

Mobile Apps: www.bigbaldapps.com

LinkedIn: www.linkedin.com/in/activenick

Website: www.AgeofMobility.com

Email: nick.landry@microsoft.com