エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 の音声コマンド

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 のみ

ユーザーは音声コマンドを使用して、アプリを起動し、アクションを実行することができます。たとえば、Contoso Widgets アプリを使用しているユーザーが [スタート] ボタンをタップして "Contoso Widgets、ベスト セラーを表示" と話すことにより、Contoso Widgets アプリを起動して "ベスト セラー" ページに移動するか、または開発者が指定したその他のアクションを実行することができます。アプリに音声コマンド機能を追加するには、次の 3 つの手順を実行します。

  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 で、プロジェクトの名前を右クリックし、[追加-新しいアイテム] を選択して、[音声コマンド定義] を選択します。

  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 要素の値を設定することは任意ですが、設定した場合、2 つの主なシナリオで役に立ちます。

  • アプリの名前が発音しにくい場合。たとえば、アプリの名前が "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 要素には少なくとも 1 つの ListenFor 要素が含まれている必要があります。各 ListenFor 要素には、その Command 要素で指定したアクションを開始する単語または語句が含まれています。

ListenFor 要素は、プログラムによって変更することはできません。ただし、ListenFor 要素に関連付けられた PhraseList 要素は、プログラムによって変更可能です。たとえばムービー ビューアー アプリで、ユーザーがアプリ名の後に続けて "[MovieName] を再生" と話すだけで、ムービーを起動できるようにしたいと仮定します。候補となるすべてのムービーに対応する ListenFor 要素をそれぞれ個別に作成するのは、まず不可能です。その代わりに、候補となるすべてのムービーを実行時に PhraseList に動的に読み込むことができます。ListenFor 要素自体は、<ListenFor>Play {movies}</ListenFor> のように指定することができます。ここで "movies" は PhraseList のラベル名です。実行時にプログラムによって変更可能にするには、ラベルの付いた空白の PhraseList 要素を作成しておく必要があります。具体的な方法については、後述する「プログラムによる語句リストの変更」を参照してください。PhraseList 要素に含まれる単語または語句は、外側の CommandSet 内の任意の Command 要素から参照できます。

アプリの初回実行時に VCD ファイルを初期化するには、1 つのメソッド呼び出しを使用します。VCD ファイルを初期化すると、アプリが待機するコマンドがユーザーの電話の音声認識システムに登録されます。

VCD ファイルの初期化方法を次のコード例で示します。

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

この段階で、アプリが待機する音声コマンドを定義した VCD をアプリに読み込むことができます。特定の音声コマンドへの応答方法をアプリに指示する必要があります。アプリの目的に応じて、地図を表示したり、予約確認を復唱したり、フライト状況を表示したり、別の画面に移動したりするケースが考えられます。

最初に、音声コマンドによってアプリが起動されたかどうかを判別し、次に、その音声コマンドの名前とパラメーターを判別する必要があります。そのためには、NavigationContext クラスの QueryString プロパティをチェックします。使用された音声コマンドを判別したら、アプリで適切なアクションを実行できます。

VCD ファイルの作成」で示したサンプルに戻ると、ユーザーが "Contoso Widgets、ベスト セラーの表示" と話したのであれば、NavigationContext.QueryString ディクショナリには、showWidgets キー、widgetViews キー、および reco キーのエントリが含まれていることになります。

メモメモ:

ワイルドカード機能を実装するため、ListenFor 要素には、アスタリスク文字を中かっこのペアで囲んで追加できます。詳細については、「Windows Phone 8 の音声コマンド要素と属性のリファレンス」を参照してください。ワイルドカードに対応した ListenFor 要素の音声コマンドが一致した場合、reco キーには文字列 "..." が含まれます。

次の例は、showWidgets 音声コマンドを使用して VCD ファイルから favorites.xaml ページに移動する場合の起動 URI を示します。

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

重要:重要:

VCD ファイルによってさまざまな音声コマンドをさまざまな画面に対応付けることが可能になります。音声コマンドの URI マッパーを使用する必要はありません。ただし、検索機能拡張などの他の機能に URI マッパーを使用する場合は、VCD 情報が失われないように、音声コマンドによる起動をパススルーして、完全な URI スキームを保持してください。

起動した画面は、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 ファイルでは、アプリを起動してコマンドを実行するために使用するコマンドを、複数の言語バージョンで指定できます。それぞれ異なる xml:lang 属性を持つ複数の CommandSet を作成し、さまざまな市場を対象としたアプリを開発できます。たとえば、米国向けのアプリの場合、英語の CommandSet とスペイン語の CommandSet を用意するかもしれません。

注意注意:

音声コマンドを使用してアプリを起動し、アクションを開始するには、アプリでは、ユーザーが電話で選択している音声言語と一致する言語の CommandSet が入った VCD ファイルを登録する必要があります。この言語は、ユーザーが電話の [設定 > システム > 音声 > 音声認識の言語] 画面で設定します。

音声コマンドの API には、VCD ファイルに含まれる語句リストを動的に更新するためのメソッドが 2 つ含まれています。プログラムによる 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 要素の子である example 要素のコンテンツです。ユーザーが [スタート] ボタンを押して "何を話せばいいですか" と話すか、またはグローバルな [聞き取り中] 画面で疑問符のボタンを押すと、この画面が表示されます。

What can I say screen

[便利な使い方]画面

[便利な使い方] 画面には、アプリの起動に使用できる音声コマンドが一覧表示されます。この画面は、ユーザーが [音声操作の項目] 画面の [便利な使い方] リンクをタップすると表示され、アプリ名 (開発者が VCD ファイル内で指定している場合は CommandPrefix 要素の値) と音声コマンドの例が示されます。

[便利な使い方] 画面へのリンクは、ユーザーがアプリ名 (または CommandPrefix 要素の値) に続いて、認識されない音声コマンドを言った場合も表示されます。

Did you know? screen

音声コマンド機能を操作しているときは、音声コマンドのエラーが発生する場合があります。そのようなエラーの詳細については、「Windows Phone 8 の音声アプリにおけるエラーの処理」を参照してください。

表示:
© 2014 Microsoft