信息
您所需的主题如下所示。但此主题未包含在此库中。

处理 Windows Phone 8 语音应用中的错误

2014/6/18

尽管在处理语音功能时偶尔会遇到托管异常,但大部分的语音错误都将以 HResult 格式返回。您可以使用调试器查看单独的错误代码和错误说明,也可以在代码中使用 try-catch 语句采取纠正措施。

本主题是语音相关错误的引用,包括 HResult 信息和说明。如果您要在此处查找特定的错误,最快的解决方案是使用 Ctrl+F 找到页面上的错误字符串或代码。

本主题包括以下部分。

使用语音识别时,要处理的最大错误与语音隐私政策有关。每次应用中出现语音识别尝试时,隐私政策窗口就会出现。如果隐私政策未被接受,您应确保您的应用会相应地处理错误。

以下代码示例演示一种您可以处理语音隐私政策错误的方式。在本例中,MessageBox 控件出现,提示用户接受隐私政策。

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 命名空间的错误代码。

错误和错误代码

错误说明

SPERR_RECOERROR_NOSPEECH 0x80045501

在识别操作期间未检测到语音。

SPERR_RECOERROR_NOMATCH 0x80045502

语音输入无法匹配启用的语法。

SPERR_RECOERROR_NETWORK_TIMEOUT 0x80045503

网络连接超时。

SPERR_RECOERROR_NETWORK_UNAVAILABLE 0x80045504

网络连接不可用。

SPERR_GRAMMAR_DUP_NAME 0x80045505

语法集包含多个同名称的语法。

SPERR_GRAMMARSET_CANT_ADD 0x80045506

未能将语法添加到语法集。

SPERR_GRAMMARSET_LOAD_CANCELED 0x80045507

将语法加载到语法集的操作已取消。

SPERR_SYSTEM_CALL_INTERRUPTED 0x80045508

语音操作被系统调用(例如,快速应用切换或呼叫)所中止。

SPERR_SPEECH_PRIVACY_POLICY_NOT_ACCEPTED 0x80045509

首次尝试在手机上使用语音识别之前,没有接受语音隐私策略。

SPERR_AUDIO_LIMIT_EXCEEDED 0x8004550A

语音输入尝试的音频超出支持的限制。

SPERR_NO_RULES_TO_ACTIVATE 0x8004550B

已加载的语法中没有有效规则。

SPERR_WINRT_INTERNAL_ERROR 0x800455A0

开发人员无法操作的一般性错误。

SPERR_WINRT_ALREADY_IN_LEX 0x800455A1

要添加的单词、发音或 POS 对已在词典中。

SPERR_WINRT_NOT_IN_LEX 0x800455A2

词典中不存在该单词。

SPERR_WINRT_RULE_NOT_DYNAMIC 0x800455A3

尝试修改非动态规则。

SPERR_WINRT_DUPLICATE_RULE_NAME 0x800455A4

规则名称重复。

SPERR_WINRT_DUPLICATE_RESOURCE_NAME 0x800455A5

给定规则的资源名称重复。

SPERR_WINRT_TOO_MANY_GRAMMARS 0x800455A6

已加载的语法过多。

SPERR_WINRT_CIRCULAR_REFERENCE 0x800455A7

语法导入规则的循环引用。

SPERR_WINRT_INVALID_IMPORT 0x800455A8

无法解析对已导入语法的规则引用。

SPERR_WINRT_RULE_NAME_ID_CONFLICT 0x800455A9

存在匹配 ID(名称)的规则,但却具有不同的名称 (ID)。

SPERR_WINRT_NO_RULES 0x800455AA

语法不包含高级、动态或已导出的规则。 在此语法中,无法激活规则或无法使用任何规则。

SPERR_WINRT_CIRCULAR_RULE_REF 0x800455AB

规则‘A’引用第二个规则‘B’,而后者又引用规则‘A'。

SPERR_WINRT_NOT_DYNAMIC_GRAMMAR 0x800455AC

曾尝试操作非动态语法。

SPERR_WINRT_AMBIGUOUS_PROPERTY 0x800455AD

无法添加歧义属性。

SPERR_WINRT_EXPORT_DYNAMIC_RULE 0x800455AE

已导出的规则无法直接或间接引用动态规则。

SPERR_WINRT_WORDFORMAT_ERROR 0x800455AF

不正确的单词格式,可能是由于不正确的发音字符串而造成的。

SPERR_WINRT_LANGID_MISMATCH 0x800455B1

尝试使用与其他加载的语法不同的 LANGID 加载 CFG 语法。

SPERR_WINRT_NO_WORD_PRONUNCIATION 0x800455B2

SR 引擎无法将此单词添加到语法。应用程序可能需要为该单词提供清晰的发音。

SPERR_WINRT_SML_GENERATION_FAIL 0x800455B3

无法生成 SML。例如,转换 xslt 模板的格式不良。

SPERR_WINRT_ROOTRULE_ALREADY_DEFINED 0x800455B4

此语法的根规则已存在,定义其他根规则将失败。

SPERR_WINRT_UNSUPPORTED_PHONEME 0x800455B5

未知音素。

SPERR_WINRT_PHONEME_CONVERSION 0x800455B6

无法将音素转换为特定的音标。

SPERR_WINRT_NO_RULES_TO_ACTIVATE 0x800455B7

语法没有任何要激活的根或顶级有效规则。

SPERR_WINRT_LEX_INVALID_DATA 0x800455B8

词典数据无效或已损坏。

SPERR_WINRT_CFG_INVALID_DATA 0x800455B9

CFG 语法中的数据无效或已损坏。

SPERR_WINRT_SISR_ATTRIBUTES_NOT_ALLOWED 0x800455BA

特性不允许位于顶层。

SPERR_WINRT_SISR_MIXED_NOT_ALLOWED 0x800455BB

混合内容不允许位于顶层。

SPERR_WINRT_UNSUPPORTED_LANG 0x800455BC

不支持所请求的语言。

SPERR_WINRT_STRING_TOO_LONG 0x800455BD

字符串太长。

SPERR_WINRT_STRING_EMPTY 0x800455BE

字符串不能为空。

SPERR_WINRT_NO_MORE_ITEMS 0x800455BF

枚举项目时,要求的索引大于项目的计数。

使用语音识别时,除了 Windows.Phone.Speech.Recognition 命名空间错误代码之外,您还可能遇到以下异常。

例外

描述

InvalidFormatException

语音识别器引用的 SRGS 语法文件格式无效。

InvalidOperationException

操作正在进行。

FileNotFoundException

无法找到语音识别器引用的 SRGS 语法文件。

UnauthorizedAccessException

尚未设置语音识别所需的功能。

通过调用 SpeechRecognizerUIRecognizeWithUIAsync() 方法来尝试进行语音识别时,可能会出现多种错误。例如,可能无法进行语音识别,因为手机的语音功能处于活动状态。有关这些错误的完整列表,请参见 SpeechRecognitionUIStatus 枚举。

下表列出了 Windows.Phone.Speech.Synthesis 命名空间的错误代码。

错误

错误代码

描述

SPERR_SYSTEM_CALL_INTERRUPTED

0x80045508

语音操作被系统调用(例如,快速应用切换或呼叫)所中止。

SPERR_WINRT_INTERNAL_ERROR

0x800455A0

开发人员无法操作的一般性错误。

SPERR_WINRT_ALREADY_IN_LEX

0x800455A1

要添加的单词、发音或 POS 对已在词典中。

SPERR_WINRT_NOT_IN_LEX

0x800455A2

词典中不存在该单词。

SPERR_WINRT_UNSUPPORTED_PHONEME

0x800455B5

未知音素。

SPERR_WINRT_PHONEME_CONVERSION

0x800455B6

无法将音素转换为特定的音标。

SPERR_WINRT_LEX_INVALID_DATA

0x800455B8

词典数据无效或已损坏。

SPERR_WINRT_UNSUPPORTED_LANG

0x800455BC

不支持所请求的语言。

SPERR_WINRT_STRING_TOO_LONG

0x800455BD

字符串太长。

SPERR_WINRT_STRING_EMPTY

0x800455BE

字符串不能为空。

SPERR_WINRT_NO_MORE_ITEMS

0x800455BF

枚举项目时,要求的索引大于项目的计数。

使用语音合成时,除了 Windows.Phone.Speech.Synthesis 命名空间错误代码之外,您还可能遇到以下异常。

例外

描述

InvalidFormatException

语音合成器引用的 SSML 提示文件格式无效。

InvalidOperationException

操作正在进行。

FileNotFoundException

无法找到语音合成器引用的 SSML 提示文件。

UnauthorizedAccessException

尚未设置语音识别所需的功能。

下表列出了 Windows.Phone.Speech.VoiceCommands 命名空间的错误代码。这些错误大部分都与语音命令定义 (VCD) 文件架构相关。有关 VCD 文件的正确架构的更多信息,请参见 Windows Phone 8 的语音命令元素和特性引用

错误

错误代码

描述

SPERR_VC_EXPECTED_VOICE_COMMANDS_ELEMENT

0x80045550

VoiceCommands 元素没有直接位于 xml 元素声明的后方。

SPERR_VC_INVALID_VOICE_COMMANDS_ELEMENT

0x80045551

VoiceCommands 元素无效。

SPERR_VC_EXPECTED_XML_DECLARATION

0x80045552

VCD 文件不以 xml 元素声明开始。

SPERR_VC_INVALID_XML_ATTRIBUTES

0x80045553

xml 元素声明不包含版本和编码特性。

SPERR_VC_INVALID_XML_VERSION

0x80045554

xml 元素没有版本特性 \"1.0\"。

SPERR_VC_INVALID_XML_ENCODING

0x80045555

xml 元素没有编码特性 \"utf-8\"。

SPERR_VC_INVALID_NAMESPACE

0x80045556

VoiceCommands 元素不具备 \"http//schemas.microsoft.com/voicecommands/1.0\" 的命名空间 xmlns 特性。

SPERR_VC_EXPECTED_COMMANDSET

0x80045557

VoiceCommands 元素为空。

SPERR_VC_INVALID_COMMANDSET

0x80045558

VoiceCommands 元素包含非 CommandSet 元素的内容。

SPERR_VC_INVALID_COMMANDSET_ATTRIBUTES

0x80045559

CommandSet 元素没有指定 xmllang 特性,或 CommandSet 元素中的特性无效。

SPERR_VC_EXPECTED_PREFIX_OR_EXAMPLE

0x8004555A

CommandSet 元素为空。

SPERR_VC_INVALID_PREFIX

0x8004555B

CommandPrefix 元素无效。

SPERR_VC_EXPECTED_COMMANDSET_EXAMPLE

0x8004555C

CommandSet 元素不包含 Example 元素。

SPERR_VC_INVALID_COMMANDSET_EXAMPLE

0x8004555D

CommandSet 元素的 Example 元素无效。

SPERR_VC_EXPECTED_COMMAND

0x8004555E

CommandSet 元素不包含任何 Command 元素。

SPERR_VC_INVALID_COMMAND

0x8004555F

CommandSet 元素的 Command 元素无效。

SPERR_VC_INVALID_COMMAND_ATTRIBUTES

0x80045560

Command 元素没有指定 Name 特性,或 Command 元素中的特性无效。

SPERR_VC_EXPECTED_COMMAND_OR_PHRASELIST

0x80045561

CommandSet 元素包含非 CommandPhraseList 元素的内容。

SPERR_VC_EXPECTED_COMMAND_EXAMPLE

0x80045562

Command 元素不包含 Example 元素。

SPERR_VC_INVALID_COMMAND_EXAMPLE

0x80045563

Command 元素的 Example 元素无效。

SPERR_VC_EXPECTED_LISTENFOR

0x80045564

Command 元素没有指定任何 ListenFor 元素。

SPERR_VC_INVALID_LISTENFOR

0x80045565

ListenFor 元素无效。

SPERR_VC_EXPECTED_FEEDBACK

0x80045566

Feedback 元素没有直接位于 ListenFor 元素的后方。

SPERR_VC_INVALID_FEEDBACK

0x80045567

Feedback 元素无效。

SPERR_VC_EXPECTED_NAVIGATE

0x80045568

Navigate 元素没有直接位于 Feedback 元素的后方。

SPERR_VC_INVALID_NAVIGATE

0x80045569

Navigate 元素无效。

SPERR_VC_INVALID_NAVIGATE_ATTRIBUTES

0x8004556A

Navigate 元素指定的特性无效。

SPERR_VC_EXPECTED_PHRASELIST

0x8004556B

CommandSet 元素包含 PhraseList 元素,后跟 PhraseList 元素之外的其他元素。

SPERR_VC_INVALID_PHRASELIST

0x8004556C

PhraseList 元素无效。

SPERR_VC_INVALID_PHRASELIST_ATTRIBUTES

0x8004556D

PhraseList 元素没有指定 Label 特性,或 PhraseList 元素中的特性无效。

SPERR_VC_EXPECTED_PHRASELIST_ITEM

0x8004556E

PhraseList 元素包含非 Item 元素的内容。

SPERR_VC_INVALID_PHRASELIST_ITEM

0x8004556F

Item 元素无效。

SPERR_VC_TOO_MANY_PHRASELIST_ITEMS

0x80045570

Item 元素太多。

SPERR_VC_INVALID_NODE

0x80045571

Xml 节点不是预期的。

SPERR_VC_TOO_MANY_PHRASELISTS

0x80045572

PhraseList 元素太多。

SPERR_VC_UNEXPECTED_END_OF_FILE

0x80045573

VCD 文件意外终止。

SPERR_VC_EXPECTED_END_OF_FILE

0x80045574

VCD 文件不在 VoiceCommands 元素结束标记后面终止。

SPERR_VC_INVALID_STRING_LENGTH

0x80045575

VCD 文件中的字符串过长或过短。

SPERR_VC_INVALID_XML_DOCUMENT

0x80045576

VCD 文件是无效的 XML 文件。

SPERR_VC_INVALID_FEEDBACK_LABEL_NO_SEMANTICS

0x80045577

Feedback 元素中引用的 PhraseList 元素将 Disambiguate 特性设置为 \"false\"。

SPERR_VC_INVALID_PATTERN_REFERENCED_LABEL_NOT_FOUND

0x80045578

ListenForFeedback 元素通过使用 Label 特性来引用 PhraseList 元素,但是 Label 特性并不映射至现有的 PhraseList 元素。

SPERR_VC_INVALID_PHRASELIST_NEVER_USED

0x80045579

定义了 PhraseList 元素但是从未使用过。

SPERR_VC_INVALID_FEEDBACK_LABEL_NOT_IN_ALL_LISTENFORS

0x80045580

Feedback 元素中引用的 PhraseList 元素未在相应的 Command 元素的所有 ListenFor 元素中引用。

SPERR_VC_TOO_MANY_LISTENFORS

0x80045581

ListenFor 元素太多。

SPERR_VC_TOO_MANY_COMMANDSETS

0x80045582

CommandSet 元素太多。

SPERR_VC_TOO_MANY_COMMANDS

0x80045583

Command 元素太多。

SPERR_VC_INVALID_COMMANDSET_LANGUAGE

0x80045584

CommandSet 元素不支持请求的语言特性值。

SPERR_VC_DUPLICATE_COMMANDSET_LANGUAGE

0x80045585

已存在具有指定语言特性值的 CommandSet 元素。

有关 VCD 文件的正确架构的信息,请参见 Windows Phone 8 的语音命令元素和特性引用

显示: