Handling errors in speech apps for Windows Phone 8
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
Although occasionally you'll encounter a managed exception when dealing with the speech feature, the majority of speech errors are returned in HResult format. You can use the debugger to view both the individual error code, and the error description, and you can use try-catch statements in your code to take corrective action.
This topic is a reference of speech-related errors, including HResult info and descriptions. If you're here to look up a specific error, the fastest solution is to use Ctrl+F to find the error string or code on the page.
This topic contains the following sections.
- Handling the speech privacy policy error
- Windows.Phone.Speech.Recognition error codes
- Speech recognition exceptions
- Speech recognition status errors
- Windows.Phone.Speech.Synthesis error codes
- Speech synthesis exceptions
- Windows.Phone.Speech.VoiceCommands error codes
Handling the speech privacy policy error
When working with speech recognition, the most important error to handle relates to the speech privacy policy. Each time a speech recognition attempt occurs in an app, a privacy policy window appears. If the privacy policy is not accepted, you should ensure that your app handles the error accordingly.
The following code example shows one way you could handle the speech privacy policy error. In this example, a MessageBox control appears and prompts the user to accept the privacy policy.
private async void Reco1_Click(object sender, RoutedEventArgs e)
{
try
{
// Start speech recognition.
SpeechRecognitionResult recoResult = await myRecognizer.RecognizeAsync();
// Display the recognized text.
displayText.Text = "You said: \n\n" + recoResult.Text;
}
// Catch errors related to the recognition operation.
catch (Exception err)
{
// Define a variable that holds the error for the speech recognition privacy policy.
// This value maps to the SPERR_SPEECH_PRIVACY_POLICY_NOT_ACCEPTED error,
// as described in the Windows.Phone.Speech.Recognition error codes section later on.
const int privacyPolicyHResult = unchecked((int)0x80045509);
// Check whether the error is for the speech recognition privacy policy.
if (err.HResult == privacyPolicyHResult)
{
MessageBox.Show("You will need to accept the speech privacy policy in order to use speech recognition in this app.");
}
else
{
// Handle other types of errors here.
}
}
}
Windows.Phone.Speech.Recognition error codes
The following table lists error codes for the Windows.Phone.Speech.Recognition namespace.
Error and error code |
Error description |
---|---|
SPERR_RECOERROR_NOSPEECH 0x80045501 |
No speech was detected during a recognition operation. |
SPERR_RECOERROR_NOMATCH 0x80045502 |
Speech input could not be matched to an enabled grammar. |
SPERR_RECOERROR_NETWORK_TIMEOUT 0x80045503 |
The network connection timed out. |
SPERR_RECOERROR_NETWORK_UNAVAILABLE 0x80045504 |
The network connection is not available. |
SPERR_GRAMMAR_DUP_NAME 0x80045505 |
The grammar set contains more than one grammar with the same name. |
SPERR_GRAMMARSET_CANT_ADD 0x80045506 |
The grammar could not be added to the grammar set. |
SPERR_GRAMMARSET_LOAD_CANCELED 0x80045507 |
An operation to load a grammar to a grammar set was cancelled. |
SPERR_SYSTEM_CALL_INTERRUPTED 0x80045508 |
A speech operation was aborted by a system call, for example fast app switching or an incoming phone call. |
SPERR_SPEECH_PRIVACY_POLICY_NOT_ACCEPTED 0x80045509 |
The speech privacy policy was not accepted before the first attempt to use speech recognition on the phone. |
SPERR_AUDIO_LIMIT_EXCEEDED 0x8004550A |
The audio of a speech input attempt exceeds the supported limit. |
SPERR_NO_RULES_TO_ACTIVATE 0x8004550B |
There are no active rules in any loaded grammars. |
SPERR_WINRT_INTERNAL_ERROR 0x800455A0 |
Generic error that is not actionable by developers. |
SPERR_WINRT_ALREADY_IN_LEX 0x800455A1 |
The word, pronunciation, or POS pair being added is already in lexicon. |
SPERR_WINRT_NOT_IN_LEX 0x800455A2 |
The word does not exist in the lexicon. |
SPERR_WINRT_RULE_NOT_DYNAMIC 0x800455A3 |
An attempt was made to modify a non-dynamic rule. |
SPERR_WINRT_DUPLICATE_RULE_NAME 0x800455A4 |
A rule name was duplicated. |
SPERR_WINRT_DUPLICATE_RESOURCE_NAME 0x800455A5 |
A resource name was duplicated for a given rule. |
SPERR_WINRT_TOO_MANY_GRAMMARS 0x800455A6 |
Too many grammars have been loaded. |
SPERR_WINRT_CIRCULAR_REFERENCE 0x800455A7 |
Circular reference in import rules of grammars. |
SPERR_WINRT_INVALID_IMPORT 0x800455A8 |
A rule reference to an imported grammar that could not be resolved. |
SPERR_WINRT_RULE_NAME_ID_CONFLICT 0x800455A9 |
A rule exists with matching IDs (names) but different names (IDs). |
SPERR_WINRT_NO_RULES 0x800455AA |
A grammar contains no top-level, dynamic, or exported rules. There is no possible way to activate or otherwise use any rule in this grammar. |
SPERR_WINRT_CIRCULAR_RULE_REF 0x800455AB |
Rule 'A' refers to a second rule 'B' which, in turn, refers to rule 'A'. |
SPERR_WINRT_NOT_DYNAMIC_GRAMMAR 0x800455AC |
Attempt was made to manipulate a non-dynamic grammar. |
SPERR_WINRT_AMBIGUOUS_PROPERTY 0x800455AD |
Cannot add ambiguous property. |
SPERR_WINRT_EXPORT_DYNAMIC_RULE 0x800455AE |
Exported rules cannot refer directly or indirectly to a dynamic rule. |
SPERR_WINRT_WORDFORMAT_ERROR 0x800455AF |
Incorrect word format, probably due to incorrect pronunciation string. |
SPERR_WINRT_LANGID_MISMATCH 0x800455B1 |
An attempt to load a CFG grammar with a LANGID different than other loaded grammars. |
SPERR_WINRT_NO_WORD_PRONUNCIATION 0x800455B2 |
The SR engine is unable to add this word to a grammar. The application may need to supply an explicit pronunciation for this word. |
SPERR_WINRT_SML_GENERATION_FAIL 0x800455B3 |
The SML couldn't be generated. For example, the transformation xslt template is not well formed. |
SPERR_WINRT_ROOTRULE_ALREADY_DEFINED 0x800455B4 |
There is already a root rule for this grammar Defining another root rule will fail. |
SPERR_WINRT_UNSUPPORTED_PHONEME 0x800455B5 |
Unknown phoneme. |
SPERR_WINRT_PHONEME_CONVERSION 0x800455B6 |
Cannot convert the phonemes to the specified phonetic alphabet. |
SPERR_WINRT_NO_RULES_TO_ACTIVATE 0x800455B7 |
The grammar does not have any root or top-level active rules to activate. |
SPERR_WINRT_LEX_INVALID_DATA 0x800455B8 |
The lexicon data is invalid or corrupted. |
SPERR_WINRT_CFG_INVALID_DATA 0x800455B9 |
The data in the CFG grammar is invalid or corrupted. |
SPERR_WINRT_SISR_ATTRIBUTES_NOT_ALLOWED 0x800455BA |
Attributes are not allowed at the top level. |
SPERR_WINRT_SISR_MIXED_NOT_ALLOWED 0x800455BB |
Mixed content is not allowed at the top level. |
SPERR_WINRT_UNSUPPORTED_LANG 0x800455BC |
The requested language is not supported. |
SPERR_WINRT_STRING_TOO_LONG 0x800455BD |
The string is too long. |
SPERR_WINRT_STRING_EMPTY 0x800455BE |
The string cannot be empty. |
SPERR_WINRT_NO_MORE_ITEMS 0x800455BF |
When enumerating items, the requested index is greater than the count of items. |
Speech recognition exceptions
In addition to the Windows.Phone.Speech.Recognition namespace error codes, you might encounter the following exceptions when working with speech recognition.
Exception |
Description |
---|---|
InvalidFormatException |
An SRGS grammar file reference by a speech recognizer has an invalid format. |
InvalidOperationException |
An operation is already in progress. |
FileNotFoundException |
An SRGS grammar file reference by a speech recognizer cannot be found. |
UnauthorizedAccessException |
A capability required by speech recognition has not been set. |
Speech recognition status errors
When attempting speech recognition by calling the SpeechRecognizerUIRecognizeWithUIAsync()()() method, several errors could occur. For example, speech recognition might not be possible because the phone's speech feature is active. For a full list of these errors, see the SpeechRecognitionUIStatus enumeration.
Windows.Phone.Speech.Synthesis error codes
The following table lists error codes for the Windows.Phone.Speech.Synthesis namespace.
Error |
Error code |
Description |
---|---|---|
SPERR_SYSTEM_CALL_INTERRUPTED |
0x80045508 |
A speech operation was aborted by a system call, for example fast app switching or an incoming phone call. |
SPERR_WINRT_INTERNAL_ERROR |
0x800455A0 |
Generic error that is not actionable by developers. |
SPERR_WINRT_ALREADY_IN_LEX |
0x800455A1 |
The word, pronunciation, or POS pair being added is already in lexicon. |
SPERR_WINRT_NOT_IN_LEX |
0x800455A2 |
The word does not exist in the lexicon. |
SPERR_WINRT_UNSUPPORTED_PHONEME |
0x800455B5 |
Unknown phoneme. |
SPERR_WINRT_PHONEME_CONVERSION |
0x800455B6 |
Cannot convert the phonemes to the specified phonetic alphabet. |
SPERR_WINRT_LEX_INVALID_DATA |
0x800455B8 |
The lexicon data is invalid or corrupted. |
SPERR_WINRT_UNSUPPORTED_LANG |
0x800455BC |
The requested language is not supported. |
SPERR_WINRT_STRING_TOO_LONG |
0x800455BD |
The string is too long. |
SPERR_WINRT_STRING_EMPTY |
0x800455BE |
The string cannot be empty. |
SPERR_WINRT_NO_MORE_ITEMS |
0x800455BF |
When enumerating items, the requested index is greater than the count of items. |
Speech synthesis exceptions
In addition to the Windows.Phone.Speech.Synthesis namespace error codes, you might encounter the following exceptions when working with speech synthesis.
Exception |
Description |
---|---|
InvalidFormatException |
An SSML prompt file referenced by a speech synthesizer has an invalid format. |
InvalidOperationException |
An operation is already in progress. |
FileNotFoundException |
An SSML prompt file referenced by a speech synthesizer cannot be found. |
UnauthorizedAccessException |
A capability required by speech recognition has not been set. |
Windows.Phone.Speech.VoiceCommands error codes
The following table lists error codes for the Windows.Phone.Speech.VoiceCommands namespace. The majority of these errors relate to the Voice Command Definition (VCD) file schema. For more info about the correct schema for VCD files, see Voice command element and attribute reference for Windows Phone 8.
Error |
Error code |
Description |
---|---|---|
SPERR_VC_EXPECTED_VOICE_COMMANDS_ELEMENT |
0x80045550 |
The VoiceCommands element is not located directly after the xml element declaration. |
SPERR_VC_INVALID_VOICE_COMMANDS_ELEMENT |
0x80045551 |
The VoiceCommands element is invalid. |
SPERR_VC_EXPECTED_XML_DECLARATION |
0x80045552 |
The VCD file does not start with an xml element declaration. |
SPERR_VC_INVALID_XML_ATTRIBUTES |
0x80045553 |
The xml element declaration does not contain both the version and encoding attributes. |
SPERR_VC_INVALID_XML_VERSION |
0x80045554 |
The xml element does not have a version attribute of \"1.0\". |
SPERR_VC_INVALID_XML_ENCODING |
0x80045555 |
The xml element does not have an encoding attribute of \"utf-8\". |
SPERR_VC_INVALID_NAMESPACE |
0x80045556 |
The VoiceCommands element does not have the namespace xmlns attribute of \"http//schemas.microsoft.com/voicecommands/1.0\". |
SPERR_VC_EXPECTED_COMMANDSET |
0x80045557 |
The VoiceCommands element is empty. |
SPERR_VC_INVALID_COMMANDSET |
0x80045558 |
The VoiceCommands element contains content other than CommandSet elements. |
SPERR_VC_INVALID_COMMANDSET_ATTRIBUTES |
0x80045559 |
The CommandSet element does not specify an xmllang attribute, or any attribute within the CommandSet element is invalid. |
SPERR_VC_EXPECTED_PREFIX_OR_EXAMPLE |
0x8004555A |
The CommandSet element is empty. |
SPERR_VC_INVALID_PREFIX |
0x8004555B |
The CommandPrefix element is invalid. |
SPERR_VC_EXPECTED_COMMANDSET_EXAMPLE |
0x8004555C |
The CommandSet element does not contain an Example element. |
SPERR_VC_INVALID_COMMANDSET_EXAMPLE |
0x8004555D |
The Example element for the CommandSet element is invalid. |
SPERR_VC_EXPECTED_COMMAND |
0x8004555E |
The CommandSet element does not contain any Command elements. |
SPERR_VC_INVALID_COMMAND |
0x8004555F |
The Command element for the CommandSet element is invalid. |
SPERR_VC_INVALID_COMMAND_ATTRIBUTES |
0x80045560 |
The Command element does not specify a Name attribute; or, any attribute within the Command element is invalid. |
SPERR_VC_EXPECTED_COMMAND_OR_PHRASELIST |
0x80045561 |
The CommandSet element contains content other than Command or PhraseList elements. |
SPERR_VC_EXPECTED_COMMAND_EXAMPLE |
0x80045562 |
The Command element does not contain an Example element. |
SPERR_VC_INVALID_COMMAND_EXAMPLE |
0x80045563 |
The Example element for the Command element is invalid. |
SPERR_VC_EXPECTED_LISTENFOR |
0x80045564 |
The Command element does not specify any ListenFor elements. |
SPERR_VC_INVALID_LISTENFOR |
0x80045565 |
The ListenFor element is invalid. |
SPERR_VC_EXPECTED_FEEDBACK |
0x80045566 |
The Feedback element is not directly located after the ListenFor element. |
SPERR_VC_INVALID_FEEDBACK |
0x80045567 |
The Feedback element is invalid. |
SPERR_VC_EXPECTED_NAVIGATE |
0x80045568 |
The Navigate element is not directly located after the Feedback element. |
SPERR_VC_INVALID_NAVIGATE |
0x80045569 |
The Navigate element is invalid. |
SPERR_VC_INVALID_NAVIGATE_ATTRIBUTES |
0x8004556A |
An attribute specified by the Navigate element is invalid. |
SPERR_VC_EXPECTED_PHRASELIST |
0x8004556B |
A CommandSet element contains a PhraseList element, followed by something other than a PhraseList element. |
SPERR_VC_INVALID_PHRASELIST |
0x8004556C |
The PhraseList element is invalid. |
SPERR_VC_INVALID_PHRASELIST_ATTRIBUTES |
0x8004556D |
The PhraseList element does not specify a Label attribute, or any attribute within the PhraseList element is invalid. |
SPERR_VC_EXPECTED_PHRASELIST_ITEM |
0x8004556E |
The PhraseList element contains content other than Item elements. |
SPERR_VC_INVALID_PHRASELIST_ITEM |
0x8004556F |
The Item element is invalid. |
SPERR_VC_TOO_MANY_PHRASELIST_ITEMS |
0x80045570 |
There are too many Item elements. |
SPERR_VC_INVALID_NODE |
0x80045571 |
This Xml node was not expected. |
SPERR_VC_TOO_MANY_PHRASELISTS |
0x80045572 |
There are too many PhraseList elements. |
SPERR_VC_UNEXPECTED_END_OF_FILE |
0x80045573 |
The VCD file ended unexpectedly. |
SPERR_VC_EXPECTED_END_OF_FILE |
0x80045574 |
The VCD file does not end after the VoiceCommands element closing tag. |
SPERR_VC_INVALID_STRING_LENGTH |
0x80045575 |
A string in the VCD file is too long or too short. |
SPERR_VC_INVALID_XML_DOCUMENT |
0x80045576 |
The VCD file is an invalid XML file. |
SPERR_VC_INVALID_FEEDBACK_LABEL_NO_SEMANTICS |
0x80045577 |
A PhraseList element referenced in a Feedback element has the Disambiguate attribute set to \"false\". |
SPERR_VC_INVALID_PATTERN_REFERENCED_LABEL_NOT_FOUND |
0x80045578 |
A ListenFor or Feedback element refers to a PhraseList element by using a Label attribute, but that Label attribute does not map to an existing PhraseList element. |
SPERR_VC_INVALID_PHRASELIST_NEVER_USED |
0x80045579 |
A PhraseList element was defined but never used. |
SPERR_VC_INVALID_FEEDBACK_LABEL_NOT_IN_ALL_LISTENFORS |
0x80045580 |
A PhraseList element that is referenced in a Feedback element is not referenced in all ListenFor elements for the corresponding Command element. |
SPERR_VC_TOO_MANY_LISTENFORS |
0x80045581 |
There are too many ListenFor elements. |
SPERR_VC_TOO_MANY_COMMANDSETS |
0x80045582 |
There are too many CommandSet elements. |
SPERR_VC_TOO_MANY_COMMANDS |
0x80045583 |
There are too many Command elements. |
SPERR_VC_INVALID_COMMANDSET_LANGUAGE |
0x80045584 |
The requested language attribute value is not supported for a CommandSet element. |
SPERR_VC_DUPLICATE_COMMANDSET_LANGUAGE |
0x80045585 |
There is already a CommandSet element with the specified language attribute value. |
For info about the correct schema for VCD files, see Voice command element and attribute reference for Windows Phone 8.