이 항목은 아직 평가되지 않았습니다.- 이 항목 평가

Windows Phone용 음성 앱에서 오류 처리

2013-12-05

간혹 음성 기능을 다룰 때 관리된 예외가 발생함에도 불구하고 음성 오류의 대다수는 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

음성 인식에 필요한 기능이 설정되지 않았습니다.

SpeechRecognizerUI.RecognizeWithUIAsync() 메서드를 호출하여 음성 인식을 시도하면 여러 가지 오류가 발생할 수 있습니다. 예를 들어 휴대폰의 음성 기능이 활성화되어 있으므로 음성 인식을 수행할 수 없습니다. 이러한 오류의 전체 목록은 Windows.Phone.Speech.Recognition.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(Voice Command Definition) 파일 스키마와 관련이 있습니다. 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 요소에 Command 또는 PhraseList 요소가 아닌 다른 콘텐츠가 있습니다.

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 요소에 \"false\"로 설정된 Disambiguate 특성이 있습니다.

SPERR_VC_INVALID_PATTERN_REFERENCED_LABEL_NOT_FOUND

0x80045578

ListenFor 또는 Feedback 요소가 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의 음성 명령 요소 및 특성 참조를 참조하세요.

이 정보가 도움이 되었습니까?
(1500자 남음)
의견을 주셔서 감사합니다.
표시:
© 2014 Microsoft. All rights reserved.