クイック スタート: Cortana の音声コマンド (HTML)

Applies to Windows Phone only

Cortana の音声コマンドを使って、アプリを起動し、実行する操作やコマンドを指定します。 たとえば、[スタート] ボタンをタップし、"Contoso Widgets、ベスト セラーを表示" と発声すると、"Contoso Widgets" というアプリを起動して、アプリ内の "ベスト セラー" ページに移動できます。

重要  

Cortana の機能により、ユーザーは特定の音声コマンドを使って電話の組み込みの機能にアクセスできます。これらはシステム音声コマンドであり、電話の音声認識機能に構成されている音声言語の種類によって、コマンドの内容は異なります。音声認識には認定要件があるため、アプリの名前を選ぶときや、アプリに使うオプションの CommandPrefix 要素を選ぶときには、これらのシステム音声コマンドに注意してください。詳しくは、Windows Phone のアプリ ポリシーに関するページをご覧ください。

システム音声コマンドを音声言語別に示した一覧については、「Windows Phone 8 のシステム音声コマンド」をご覧ください。

以下は、音声コマンド機能を追加し、音声またはキーボード入力を使うアプリに Cortana を統合する基本的な手順です。

  1. 音声コマンド定義 (VCD) ファイルを作ります。これは、アプリをアクティブ化して操作を開始するかコマンドを呼び出すためにユーザーが発声できる音声コマンドをすべて定義する XML ドキュメントです。「Voice command elements and attributes」をご覧ください。
  2. VCD ファイル内のコマンド セットを電話の音声機能に登録します。
  3. 音声コマンドによるアクティブ化、アプリ内でのナビゲーション、コマンドの実行を処理します。

目標: 音声コマンドを有効にする方法について理解する。

必要条件

JavaScript を使ってアプリを開発するのが初めての場合:  

このチュートリアルを完了するには、以下のトピックに目を通して、ここで説明されているテクノロジをよく理解できるようにしてください。

ユーザー エクスペリエンス ガイドライン:  

Windows Phone の音声デザイン ガイドライン」の便利で魅力的な音声認識対応アプリの設計に役立つヒントをご覧ください。

1. オーディオ フィードの設定

使っているデバイスにマイクまたは同等の機能があることを確認します。

アプリ パッケージ マニフェスト (package.appxmanifest ファイル) でマイク デバイスの機能 (DeviceCapability) を設定して、マイクのオーディオ フィードにアクセスできるようにします。こうすることで、アプリは接続されたマイクからオーディオを録音できます。

アプリ機能の宣言」をご覧ください。

2. VCD ファイルの作成

  1. Visual Studio で、プロジェクト名を右クリックし、Add->New Item の順にクリックし、[テキスト ファイル] をクリックします。
  2. VCD ファイルの名前を入力します。ファイル拡張子は ".xml" とします。たとえば、"ContosoWidgets.xml" のようになります。[追加] をクリックします。
  3. ソリューション エクスプローラーで、VCD ファイルを選びます。
  4. [プロパティ] ウィンドウで、[ビルド アクション][コンテンツ] に設定し、[出力ディレクトリにコピー][常にコピーする] に設定します。

3. VCD ファイルの編集

VCD ファイルで宣言された各音声コマンドは、次のような基本情報を含む必要があります。

  • ユーザーがコマンドを呼び出す方法を示す語句の例。

    音声コマンドをサポートするアプリと、各アプリの起動と操作の開始に使うコマンドの例の一覧を表示するには、検索ボタンを押したままにして Cortana を起動し、操作を促すメッセージが表示されたら、次のいずれかを行います。

    • 「"音声操作の項目"」と発声する
    • 「"ヘルプ"」と発声する
    • [さらに詳しく] をタップする

    コマンドの例としては、Example 要素 (CommandSet 要素の子) の内容が使われます。

  • アプリが認識してコマンドを開始するための単語または語句。

      

    コマンドは、ListenFor 要素を少なくとも 1 つ含む Command 要素によって定義されます。各 ListenFor 要素には、Command 要素で指定された操作を開始する単語が含まれます。

    ListenFor 要素はプログラムで変更できません。ただし、ListenFor 要素に関連付けられた PhraseList 要素はプログラムで変更できます。たとえば、比較的小さなムービー セットに対して、ムービー ビューアー アプリで、ユーザーがアプリ名に続けて "Play [<MovieName>]" と発声するだけでムービーを開始できるようにするとします。想定されるすべてのムービーについて個別の ListenFor 要素を作成する必要はありません。代わりに、実行時に動的に PhraseList にムービーの選択肢を設定できます。ListenFor 要素自体は、<ListenFor> Play {movies} </ListenFor> のように指定します。ここで、"movies" は PhraseListLabel です。

    音声コマンド定義 (VCD) の語句一覧を動的に変更する方法」をご覧ください。

  • アプリがコマンドを認識したときにユーザーに表示し、読み上げるテキスト。
  • アプリがコマンドを認識したときに、アプリ内で移動するページまたは画面。

アプリのアクティブ化とコマンドの実行に使われるコマンドに対して、複数の言語バージョンを指定できます。複数の CommandSet 要素を作り、それぞれに異なる xml:lang 属性を指定することで、アプリをさまざまな市場で使うことができます。たとえば、米国用のアプリに、英語の CommandSet とスペイン語の CommandSet を含めることができます。

注意  

音声コマンドを使ってアプリをアクティブ化して操作を開始するには、ユーザーが電話で選んだ音声の言語に一致する言語を含む CommandSet を格納している VCD ファイルをアプリで登録する必要があります。この言語は、電話の [設定] から System > Speech > Speech Language 画面でユーザーが設定します。

詳しくは、「Voice command elements and attributes」をご覧ください。

音声認識のさまざまな種類を実装するデモ アプリ用に 4 つのコマンド オプションを定義する VCD ファイルの例を次に示します。

この例では、コマンド プレフィックス ("Recognize")、オプションの単語 ("Show")、アプリで実装されたさまざまな種類の音声認識方法を特定する語句一覧、音声コマンド内で自由形式メッセージを使用できる PhraseTopic が定義されています。


<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

  <CommandSet xml:lang="en-us" Name="examplevcd">
    <CommandPrefix>Recognize</CommandPrefix>
    <Example>Show default speech recognition</Example>

  <Command Name="showRecognition">
      <Example>Show default recognition</Example>
      <ListenFor>[Show] {options} {person}</ListenFor>
      <Feedback>Showing {options} {person}</Feedback>
      <Navigate/>
    </Command>

    <PhraseList Label="options">
      <Item>default recognition</Item>
      <Item>web search</Item>
      <Item>list constraint</Item>
      <Item>file constraint</Item>
    </PhraseList>
    
    <PhraseTopic Label="person" Scenario="Search">
      <Subject>Person Names</Subject>
    </PhraseTopic>
  
  </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 [<語句>]" は認識されますが、"Contoso [<語句>]" や "Weather [<語句>]" は認識されません。

4. VCD コマンドのインストール

VCD のコマンド セットをインストールするには、アプリを 1 回実行する必要があります。

アプリがアクティブ化されたら、Launch中に InstallCommandSetsFromStorageFileAsync を呼び出して、システムがリッスンするコマンドを登録します。

  電話のバックアップが発生し、アプリが自動的に再インストールされる場合、音声コマンド データは保持されません。アプリの音声コマンド データをそのまま保持するには、アプリを起動またはアクティブ化するたびに VCD ファイルを初期化するか、VCD が現在インストールされているかどうかを示す設定を保存し、アプリを起動またはアクティブ化するたびにその設定をチェックするようにしてください。

VCD ファイル (vcd.xml) で指定されたコマンドをインストールする方法の例を次に示します。


if (args.detail.kind === activation.ActivationKind.launch) {
    if (args.detail.previousExecutionState !==
        activation.ApplicationExecutionState.terminated) {
        // This application has been newly launched. 
        // TODO: Initialize your application here.

        var uri = new Windows.Foundation.Uri("ms-appx:///data/vcd.xml");
        var storageFile =
            Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then(
            // Success function.
            function (vcd) {
                Windows.Media.SpeechRecognition.VoiceCommandManager.installCommandSetsFromStorageFileAsync(vcd);
            },
            // Error function.
            function (err) {
                WinJS.log && WinJS.log("File access failed.");
            });

        initialize();

    } else {
        // This application has been reactivated from suspension.
        // TODO: Restore application state here.
    }
    args.setPromise(WinJS.UI.processAll());
}


5. アクティブ化の処理と音声コマンドの実行

アプリが起動され、コマンド セットがインストールされたら、その後の音声コマンドのアクティブ化にアプリがどのように応答するかを指定します。たとえば、コンテンツの特定のページに移動することも、マップなどのナビゲーション ユーティリティを表示することも、確認メッセージや状態を読み上げることもあります。

以下を実行する必要があります。

  1. アプリが音声コマンドによってアクティブになったことを確認します。

    onactivated イベントで、ActivationKindvoiceCommand かどうかを確認します。

  2. コマンドの名前と内容を判断します。

    WebUILaunchActivatedEventArgsdetail プロパティを照会して、kind プロパティを取得します。音声コマンドでアクティブ化された場合、この値は ActivationKind.voiceCommand と等しくなります。

使われた音声コマンドと発声されたテキストを確かめた後で、適切な操作をアプリで実行できます。

重要:  VCD ファイルでは、さまざまな音声コマンドを別々の画面に割り当てることができます。音声コマンドに URI マッパーを使う必要はありません。ただし検索拡張機能など他の機能に URI マッパーを使う場合は、VCD 情報が失われないように、音声コマンドのアクティブ化をそのまま渡し、完全な URI スキームを維持してください。

この例では、「VCD ファイルの編集」手順の VCD について思い出す必要があります。

音声コマンドの音声認識の結果を取得したら、rulePath 配列の最初の値からコマンド名を取得します。VCD ファイルで複数の可能な音声コマンドが定義されている場合は、配列のすべての値を反復処理します。

次に、サポートしているコマンドの 1 つと話されたテキストを比較します。ここでは、MessageDialog を使って認識結果をユーザーに表示します。

また、Navigate 要素の Target 属性の値にアクセスする方法も示しています。この例では、ターゲットは指定しません。詳しくは、「Voice command elements and attributes」をご覧ください。

  アプリを起動した音声コマンドが実際に発声されたかどうか、または commandMode キーを使って SpeechRecognitionSemanticInterpretation.Properties 辞書からテキストとして入力されたかどうかを確認できます。このキーの値は、"voice" または "text" です。

if (args.detail.kind === activation.ActivationKind.voiceCommand) {
    // This application has been activated with a voice command.

    var speechRecognitionResult = args.detail.result;

    // Get the name of the voice command. 
    // For this example, we declare only one command.
    var voiceCommandName = speechRecognitionResult.rulePath[0];

    // Get the actual text spoken.
    var textSpoken =
        speechRecognitionResult.text !==
        undefined ? speechRecognitionResult.text : "EXCEPTION";

    // Get the value of Command/Navigate@Target.
    // Navigate is a required child element of the Command element. 
    // The Target attribute is optional and is typically used to 
    // specify the page that the app should navigate to when it launches. 
    // You can obtain the value of the Target attribute from the 
    // SpeechRecognitionSemanticInterpretation.Properties dictionary 
    // using the "NavigationTarget" key. 
    // For this example, we declare only one command with no target.
    var navigationTarget = speechRecognitionResult.semanticInterpretation.properties["NavigationTarget"][0];

    if (voiceCommandName === "showRecognition") {
        if (textSpoken.indexOf("default recognition") > -1) {
            // Code for default recognition.
        }
        else if (textSpoken.indexOf("web search") > -1) {
            // Code for default recognition.
        }
        else if (textSpoken.indexOf("list constraint") > -1) {
            // Code for default recognition.
        }
        else if (textSpoken.indexOf("file constraint") > -1) {
            // Code for default recognition.
        }
    }
    else {
        // There is no match for the voice command name.
    }

    var messageDialog =
        new Windows.UI.Popups.MessageDialog(
        textSpoken, "Text spoken");
    messageDialog.showAsync();
}


要約と次のステップ

ここでは、Windows Phone に用意されている VCD ファイルと音声認識機能を使って基本的な音声コマンドを実装する方法について説明しました。

次は、「音声コマンド定義 (VCD) の語句一覧を動的に変更する方法」に進んでください。

関連トピック

音声操作への反応
カスタム認識の制約を定義する方法
Windows.Media.SpeechRecognition
Windows Phone の音声デザイン ガイドライン

 

 

表示:
© 2015 Microsoft