정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8의 음성 명령

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1만

 

사용자는 음성 명령을 사용하여 앱을 실행하고 동작을 실행할 수 있습니다. 예를 들면 Contoso Widgets 앱을 사용하는 사용자는 시작 버튼을 탭하고 "Contoso Widgets, show best sellers"라고 말하여 Contoso Widgets 앱을 실행하고 "best sellers" 페이지로 이동하거나 개발자가 지정하는 다른 동작을 수행할 수 있습니다. 다음 세 단계를 완료하여 음성 명령 기능을 추가할 수 있습니다.

  1. VCD(Voice Command Definition) 파일을 만듭니다. 이 파일은 사용자가 앱을 실행할 때 사용자가 동작을 시작하도록 음성으로 지시할 수 있는 모든 음성 명령을 정의하는 XML 문서입니다.

  2. 전화의 음성 명령 기능을 사용하여 VCD 파일을 초기화하는 코드를 추가합니다.

  3. 탐색을 처리하고 명령을 실행하는 코드를 추가합니다.

참고참고:

음성 명령을 사용하려면 앱 매니페스트 파일에서 ID_CAP_SPEECH_RECOGNITION, ID_CAP_MICROPHONE 및 ID_CAP_NETWORKING 기능을 설정해야 합니다. 이러한 기능을 설정하지 않을 경우 앱이 제대로 작동하지 않을 수 있습니다. 자세한 내용은 Windows Phone 8의 앱 기능 및 하드웨어 요구 사항을 참조하세요.

이 항목에는 다음 단원이 포함되어 있습니다.

 

다음 섹션에서는 프로젝트에 VCD 파일을 추가하는 방법 및 파일의 내용을 만드는 방법에 대해 설명합니다.

프로젝트에 VCD 파일 추가

다음 단계에서는 프로젝트에 VCD 파일을 추가하는 방법에 대해 설명합니다.

  1. Visual Studio 에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 추가->새 항목을 선택한 다음 Voice Command Definition을 선택합니다.

  2. VCD 파일의 이름을 입력하고 추가를 선택합니다.

  3. 솔루션 탐색기에서 VCD 파일을 선택합니다.

  4. 속성 창에서 빌드 작업내용으로 설정하고 출력 디렉터리로 복사변경된 내용만 복사로 설정합니다.

VCD 파일의 내용 만들기

각 음성 명령에는 다음 항목이 들어 있습니다.

  • 사용자가 일반적으로 명령을 어떻게 호출해야 하는지 보여 주는 구 예입니다.

  • 앱에서 명령을 시작하기 위해 인식할 단어나 구입니다.

  • 앱에서 명령이 인식될 때 사용자에게 말하고 표시할 텍스트입니다.

  • 명령이 인식될 때 앱에서 이동할 화면입니다.

다음 코드 예제에서는 샘플 VCD 파일을 보여 줍니다.

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">
  <CommandSet xml:lang="en-us">
    <CommandPrefix> Contoso Widgets </CommandPrefix>
    <Example> Show today's specials </Example>
    <Command Name="showWidgets">
      <Example> Show today's specials </Example>
      <ListenFor> [Show] {widgetViews} </ListenFor>
      <Feedback> Showing {widgetViews} </Feedback>
      <Navigate Target="/favorites.xaml"/>
    </Command>

    <PhraseList Label="widgetViews">
      <Item> today's specials </Item>
      <Item> best sellers </Item>
    </PhraseList>
  
  </CommandSet>
  
  <!-- Other CommandSets for other languages -->

</VoiceCommands>

명령 접두사 선택

CommandPrefix 요소에 대한 값 설정은 선택 사항이며 다음과 같은 두 가지 기본 시나리오에서 설정하면 도움이 됩니다.

  • 앱 이름을 발음할 수 없습니다. 예를 들어 앱의 이름이 Contoso Widg3ts인 경우 CommandPrefix 요소를 "Contoso Widgets"로 설정해야 합니다.

  • 음성 명령을 지역화하고 있습니다. 지원되는 각 언어에 대해 명령 집합을 사용하도록 선택한 경우 각 언어에 따라 CommandPrefix 요소를 다르게 설정할 수 있습니다. 예를 들어 앱 이름이 "Contoso Table"인 경우 스페인어 명령 집합에 대해 CommandPrefix 요소를 "Contoso Mesa"로 설정할 수 있습니다.

주의주의:

CommandPrefix 요소에서 하위 집합이 일치하는 텍스트는 사용할 수 없습니다. 예를 들어 CommandPrefix 요소가 "Contoso Weather"로 설정된 경우 "Contoso Weather [phrase]"는 인식되지만 "Contoso [phrase]" 또는 "Weather [phrase]"는 인식되지 않습니다.

CommandPrefix 요소에 대한 자세한 내용은 Windows Phone 8의 음성 명령 요소 및 특성 참조를 참조하세요.

VCD 파일에 단어나 구 지정

각 Command 요소에는 하나 이상의 ListenFor 요소가 들어 있어야 합니다. 각 ListenFor 요소에는 Command 요소에 지정된 작업을 시작할 단어가 들어 있습니다.

ListenFor 요소는 프로그래밍 방식으로 수정할 수 없습니다. 하지만 ListenFor 요소와 연결된 PhraseList 요소는 프로그래밍 방식으로 수정할 수 있습니다. 예를 들어 동영상 뷰어 앱이 있으며 사용자가 앱 이름을 말한 다음 "동영상 이름 재생"을 말하여 간단히 동영상을 시작할 수 있도록 하려고 합니다. 이 경우 사용 가능한 각 동영상에 대해 별도의 ListenFor 요소를 만들어야 하므로 상당한 작업이 될 것입니다. 대신 런타임에 사용 가능한 모든 동영상 옵션으로 PhraseList를 동적으로 채울 수 있습니다. ListenFor 요소 자체에서 <ListenFor>Play {movies}</ListenFor>라고 말할 수 있습니다. 여기서 "movies"는 PhraseList의 레이블 이름입니다. 런타임에 프로그래밍 방식으로 수정할 수 있으려면 최소한 레이블이 지정된 공백 PhraseList 요소를 만들어야 합니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 뒷부분에 나오는 프로그래밍 방식으로 구 목록 수정 섹션을 참조하세요. PhraseList 요소의 단어나 구는 포함 CommandSet의 모든 Command 요소에서 참조될 수 있습니다.

한 번의 메서드 호출을 사용하여 앱을 처음 실행할 때 VCD 파일을 초기화합니다. VCD 파일을 초기화하면 사용자 휴대폰의 음성 시스템에 수신할 명령이 등록됩니다.

다음 코드 예제에서는 VCD 파일을 초기화하는 방법을 보여 줍니다.

await VoiceCommandService.InstallCommandSetsFromFileAsync(
    new Uri("ms-appx:///ContosoWidgets.xml"));

이때 앱은 앱에서 수신할 음성 명령을 정의하는 VCD 파일을 로드할 수 있습니다. 이제 특정 음성 명령에 어떻게 반응해야 하는지 앱에 지시해야 합니다. 이는 앱의 목적에 따라 지도를 표시하거나 예약 확인을 읽어 주거나 항공편 상태를 표시하거나 다른 화면으로 이동할 수 있음을 의미합니다.

먼저 앱이 음성 명령을 통해 실행되었는지 알아보고 나서 음성 명령의 이름 및 매개 변수를 확인해야 합니다. 그러기 위해서는 NavigationContext 클래스의 QueryString 속성을 살펴보면 됩니다. 사용된 음성 명령을 확인했으면 앱에서 적절한 조치를 취할 수 있습니다.

VCD 파일 만들기 섹션의 샘플로 다시 돌아가서 사용자가 "Contoso Widgets, show best sellers"라고 말할 경우 NavigationContext.QueryString 사전에 showWidgets, widgetViews 및 reco 키에 대한 항목이 포함된다는 의미입니다.

참고참고:

ListenFor 요소는 중괄호 쌍 안에 별표 문자를 포함하여 와일드카드 기능을 구현할 수 있습니다. 자세한 내용은 Windows Phone 8의 음성 명령 요소 및 특성 참조를 참조하세요. 와일드카드 사용 ListenFor 요소에 대한 음성 명령이 일치할 경우 reco 키에는 "…" 문자열이 포함됩니다.

다음 예제에서는 VCD 파일이 showWidgets 음성 명령을 사용하여 favorites.xaml 페이지로 이동할 경우 실행 URI의 모양을 보여 줍니다.

"/favorites.xaml?voiceCommandName=showWidgets&widgetViews=best%20sellers&reco=Contoso%20Widgets%Show%20best%20sellers"

중요중요:

VCD 파일을 사용하면 다양한 음성 명령을 다양한 화면에 매핑할 수 있으며 음성 명령에 URI 매퍼를 사용할 필요가 없습니다. 그러나 검색 확장성 같은 다른 기능에 URI 매퍼를 사용하는 경우 통과 음성 명령이 실행되고 전체 URI 스키마를 유지하여 VCD 정보가 손실되지 않도록 해야 합니다.

화면이 시작되면 NavigationContext 클래스의 QueryString 속성을 사용하여 URI 매개 변수 값을 추출하고 음성 명령에 대한 정보를 가져올 수 있습니다. 다음 코드 예제는 QueryString을 사용하여 음성 명령에 대한 정보를 가져오고 그 후 해당 작업을 시작하는 방법을 보여 줍니다.

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

  // Is this a new activation or a resurrection from tombstone?
  if (e.NavigationMode == System.Windows.Navigation.NavigationMode.New)
  {

    // Was the app launched using a voice command?
    if (NavigationContext.QueryString.ContainsKey("voiceCommandName"))
    {

      // If so, get the name of the voice command.
      string voiceCommandName 
        = NavigationContext.QueryString["voiceCommandName"];

      // Define app actions for each voice command name.
      switch (voiceCommandName)
      {
        case "showWidgets":
          string viewWidget = NavigationContext.QueryString["widgetViews"];
                   
          // Add code to display specified widgets.
          break;
 
        // Add cases for other voice commands. 
        default:

          // There is no match for the voice command name.
          break;
      }
    }
  }
}

VCD 파일을 사용하면 앱을 실행하고 명령을 실행하는 데 사용되는 명령에 대한 다국어 버전을 지정할 수 있습니다. 여러 각각의 CommandSet마다 서로 다른 xml:lang 특성을 사용하는 여러 CommandSet을 만들어서 앱을 다양한 시장에서 사용할 수 있습니다. 예를 들면 미국용 앱에는 영어용 CommandSet과 스페인어용 CommandSet이 있을 수 있습니다.

주의주의:

음성 명령을 사용하여 앱을 실행하고 동작을 시작하려면 사용자가 휴대폰에서 선택한 음성 언어와 언어가 일치하는 CommandSet을 포함하는 VCD 파일을 앱에서 등록해야 합니다. 이 언어는 사용자가 휴대폰의 설정 > 시스템 > 음성 명령 > 음성 언어 화면에서 설정합니다.

음성 명령용 API에는 VCD 파일의 구 목록을 동적으로 업데이트할 수 있도록 하는 두 개 메서드가 포함되어 있습니다. PhraseList를 프로그래밍 방식으로 업데이트하는 기능은 음성 명령이 사용자의 즐겨찾기 목록이나 업데이트된 앱 데이터 등 업데이트된 데이터를 수반하는 작업과 관련이 있는 경우에 유용합니다. VCD 파일에서 구 목록을 업데이트하려면 먼저 업데이트할 구 목록을 포함하는 CommandSet을 가져와야 합니다. 그런 다음 가져온 CommandSet을 VoiceCommandSet 개체에 저장합니다. 호출은 Name 특성 값을 통해 CommandSet을 지정합니다. 이 특성 값은 VCD 파일에서 고유해야 합니다.

다음 코드 예제에서는 CommandSet 요소의 Name 특성으로 설정되어야 하는 명령 집합을 "en-US" 문자열을 사용하여 검색합니다.

VoiceCommandSet widgetVcs =
    VoiceCommandService.InstalledCommandSets["en-US"];

이제 구 목록의 새로운 내용을 구성할 label 특성과 문자열 배열을 지정하여 구 목록의 항목을 업데이트할 수 있습니다.

await widgetVcs.UpdatePhraseListAsync("saved", 
    new string[] {"today’s special", "best sellers", "hammer", "plane", "scroll saw"});

이 호출은 구 목록의 전체 내용을 대체합니다. 구 목록의 기존 항목에 새 항목만 추가하려는 경우에는 이 호출에서 기존 항목과 새 항목을 모두 지정해야 합니다. 앞의 예에서 구 목록에 이미 "today’s special"과 "best sellers" 값이 포함되어 있지만, 호출에서 지정해야 하며 그렇지 않으면 덮어쓰게 됩니다.

휴대폰 백업이 수행되고 앱이 자동으로 다시 설치되면 음성 명령 데이터가 유지되지 않습니다. 이런 경우가 발생하지 않도록 하고 앱의 음성 명령 데이터가 그대로 유지되도록 하려면 앱이 실행될 때마다 VCD 파일을 초기화하거나 VCD가 현재 설치되어 있는지를 나타내는 설정을 저장하고 앱이 실행될 때마다 해당 설정을 확인합니다.

음성 명령 기능에는 사용자가 휴대폰에서 음성 명령을 지원하는 앱과 앱을 실행하는 데 사용할 수 있는 음성 명령을 찾을 수 있도록 도와 주는 GUI 화면이 포함되어 있습니다.

  • 사용자가 휴대폰의 앱 목록에서 앱을 선택합니다.

  • 사용자가 앱에서 음성 명령을 말하지만 요청된 작업이 인식되지 않습니다. 표시되는 명확성 화면에는 알고 계셨나요? 화면으로 연결되는 물음표 버튼이 포함되어 있습니다.

이렇게 말하세요 화면

이렇게 말하세요 화면에는 음성 명령을 지원하는 앱의 이름과 각 앱을 실행하고 동작을 시작하는 데 사용할 수 있는 명령의 예가 나열됩니다. 샘플 명령은 VCD 파일 내 CommandSet 요소의 자식인 예제 요소의 내용입니다. 이 화면은 사용자가 시작 버튼을 누르고 "이렇게 말 하세요~"라고 말하거나 전역 입력 내용 화면에 있는 물음표 버튼을 누를 때 나타납니다.

What can I say screen

알고 계셨나요? 화면

알고 계셨나요? 화면에는 앱을 실행하는 데 사용할 수 있는 음성 명령이 나열됩니다. 이 화면은 사용자가 이렇게 말하세요 화면에서 알고 계셨나요? 링크를 탭하여 액세스할 수 있으며, 앱 이름(또는 개발자가 VCD 파일에서 지정한 경우 CommandPrefix 요소의 값) 및 음성 명령 예가 포함됩니다.

알고 계셨나요? 화면에 대한 링크는 사용자가 앱 이름(또는 CommandPrefix 요소 값)을 말한 다음 인식할 수 없는 음성 명령을 말하는 경우에도 나타납니다.

Did you know? screen

기능을 사용할 때 음성 명령 오류가 발생할 수 있습니다. 이러한 오류에 대한 자세한 내용은 Windows Phone 8용 음성 앱에서 오류 처리를 참조하세요.

표시: