音声認識を使用して、UI 要素を呼び出すUsing Speech to Invoke UI Elements

音声有効になっているシェル (VES) は、Windows 音声のプラットフォーム、アプリ内でファースト クラスの音声認識エクスペリエンスを実現する画面を起動するための音声認識を使用できるようにする拡張機能のコントロールとディクテーションを使用してテキストを挿入します。Voice Enabled Shell (VES) is an extension to the Windows Speech Platform that enables a first-class speech experience inside apps, allowing users to use speech for invoking on-screen controls and to insert text via dictation. VE では、すべての Windows シェルおよびデバイスでアプリ開発者のために必要な最小限の労力で一般的なエンド ツー エンドの「it say it エクスペリエンスを提供するよう努力しています。VES strives to provide a common end-to-end see-it-say-it experience on all Windows Shells and devices, with minimum effort required from app developers. これを実現するには、Microsoft の音声のプラットフォームと、UI オートメーション (UIA) フレームワークを活用します。To achieve this, it leverages the Microsoft Speech Platform and the UI Automation (UIA) framework.

ユーザー エクスペリエンスのチュートリアルUser experience walkthrough

次にどのようなユーザーが発生した場合、Xbox で VE を使用する場合の概要と VES のしくみの詳細に入る前にコンテキストを設定するようにします。The following is an overview of what a user would experience when using VES on Xbox, and it should help set the context before diving into the details of how VES works.

  • ユーザーが、Xbox コンソールをオンにし、関心のあるものを検索するには、そのアプリを参照します。User turns on the Xbox console and wants to browse through their apps to find something of interest:

      User: "Hey Cortana, open My Games and Apps"
    
  • ユーザーは左側のアクティブなリッスン モード (ALM)、つまり、コンソールがリッスンするいると言うことがなく、画面に表示されているコントロールの呼び出しをユーザーのコルタナさん」毎回です。User is left in Active Listening Mode (ALM), meaning the console is now listening for the user to invoke a control that’s visible on the screen, without needing to say, “Hey Cortana” each time. アプリとアプリの一覧をスクロールして表示するのには、ユーザーは切り替えることができますようになりました。User can now switch to view apps and scroll through the app list:

      User: "applications"
    
  • ビューをスクロールするには、ユーザー可能だけです。To scroll the view, user can simply say:

      User: "scroll down"
    
  • アプリに関心が名前を忘れた場合、ボックス アートが表示されます。User sees the box art for the app they are interested in but forgot the name. 音声ヒント ラベルに表示するユーザーを要求します。User asks for voice tip labels to be displayed:

      User: "show labels"
    
  • これで明確に何を言おう、アプリを起動できます。Now that it's clear what to say, the app can be launched:

      User: "movies and TV"
    
  • アクティブなリッスン モードを終了するには、ユーザーは、リッスンを停止する Xbox を指示します。To exit active listening mode, user tells Xbox to stop listening:

      User: "stop listening"
    
  • 後で、新しいアクティブなリッスンしているセッションを開始できます。Later on, a new active listening session can be started with:

      User: "Hey Cortana, make a selection" or "Hey Cortana, select"
    

UI オートメーションの依存関係UI automation dependency

VE、UI オートメーション クライアントであり、UI オートメーション プロバイダーを使用してアプリによって公開される情報に依存しています。VES is a UI Automation client and relies on information exposed by the app through its UI Automation providers. これは、Windows プラットフォームでのナレーター機能によって既に使用されている同じインフラストラクチャです。This is the same infrastructure already being used by the Narrator feature on Windows platforms. UI オートメーションでは、コントロール、その型、およびどのようなコントロール パターン、実装の名前を含む、ユーザー インターフェイス要素にプログラムからアクセスできるようにします。UI Automation enables programmatic access to user interface elements, including the name of the control, its type and what control patterns it implements. UI は、アプリの変更、VES は UIA 更新イベントに対応し、この情報を使用して、音声認識文法を作成する実行可能なすべての項目を検索する更新済みの UI オートメーション ツリーを再解析します。As the UI changes in the app, VES will react to UIA update events and re-parse the updated UI Automation tree to find all the actionable items, using this information to build a speech recognition grammar.

すべての UWP アプリでは、UI オートメーション フレームワークにアクセスし、(XAML、DirectX/Direct3D、Xamarin など) に基づいて構築されていますが、どのグラフィックス フレームワークに依存しない UI に関する情報を公開できます。All UWP apps have access to the UI Automation framework and can expose information about the UI independent of which graphics framework they are built upon (XAML, DirectX/Direct3D, Xamarin, etc.). 場合によっては、XAML などでは、面倒な作業のほとんどは、ナレーターおよび VES をサポートするために必要な作業を大幅に削減に、フレームワークによって行われます。In some cases, like XAML, most of the heavy lifting is done by the framework, greatly reducing the work required to support Narrator and VES.

UI オートメーションの詳細についてを参照してください。 UI オートメーションの基礎します。For more info on UI Automation see UI Automation Fundamentals.

コントロールの呼び出しの名前Control invocation name

VE 何がコントロールの名前として「音声認識エンジンに登録する語句を決定するため次ヒューリスティックを採用しています (ie。 コントロールを呼び出す話す必要があるユーザー)。VES employs the following heuristic for determining what phrase to register with the speech recognizer as the control’s name (ie. what the user needs to speak to invoke the control). これは、また、音声ヒント ラベルに表示される語句です。This is also the phrase that will show up in the voice tip label.

優先順位の順序で名前のソース:Source of Name in order of priority:

  1. 要素の場合、 LabeledBy VES、添付プロパティを使用して、AutomationProperties.Nameのこのテキスト ラベル。If the element has a LabeledBy attached property, VES will use the AutomationProperties.Name of this text label.
  2. AutomationProperties.Name 要素。AutomationProperties.Name of the element. 既定値として、コントロールのテキスト コンテンツを使用、XAML でAutomationProperties.Nameします。In XAML, the text content of the control will be used as the default value for AutomationProperties.Name.
  3. VE は有効な最初の子要素を探して、コントロールが ListItem またはボタンの場合は、AutomationProperties.Nameします。If the control is a ListItem or Button, VES will look for the first child element with a valid AutomationProperties.Name.

実用的なコントロールActionable controls

VE は、次のオートメーション コントロール パターンのいずれかを実装している場合に実行可能なコントロールを考慮します。VES considers a control actionable if it implements one of the following Automation control patterns:

  • InvokePattern (例。InvokePattern (eg. ボタン) の開始または 1 つの明確なアクションを実行し、アクティブになったときの状態を保持しないコントロールを表します。Button)- Represents controls that initiate or perform a single, unambiguous action and do not maintain state when activated.

  • TogglePattern (例。TogglePattern (eg. チェック ボックスをオン) に、一連の状態の切り替え、一度設定した状態を維持できるコントロールを表します。Check Box) - Represents a control that can cycle through a set of states and maintain a state once set.

  • SelectionItemPattern (例。SelectionItemPattern (eg. コンボ ボックス) には、選択可能な子項目のコレクションのコンテナーとして機能するコントロールを表します。Combo Box) - Represents a control that acts as a container for a collection of selectable child items.

  • ExpandCollapsePattern (例。ExpandCollapsePattern (eg. コンボ ボックス) - 視覚的に展開するコンテンツを表示し、コンテンツを非表示に折りたたみコントロールを表します。Combo Box) - Represents controls that visually expand to display content and collapse to hide content.

  • ScrollPattern (例。ScrollPattern (eg. リスト) の子要素のコレクションのスクロール可能なコンテナーとして機能するコントロールを表します。List) - Represents controls that act as scrollable containers for a collection of child elements.

スクロール可能なコンテナーScrollable containers

スクロール可能なコンテナーのサポートは、ScrollPattern、VES 音声をリッスンする「左右にスクロール」、「右にスクロールして」などのようなコマンドは、ユーザーがこれらのコマンドのいずれかをトリガーしたときに、適切なパラメーターを使用してスクロールを呼び出します。For scrollable containers that support the ScrollPattern, VES will listen for voice commands like “scroll left”, “scroll right”, etc. and will invoke Scroll with the appropriate parameters when the user triggers one of these commands. 値に基づくスクロール コマンドが挿入され、HorizontalScrollPercentVerticalScrollPercentプロパティ。Scroll commands are injected based on the value of the HorizontalScrollPercent and VerticalScrollPercent properties. たとえば場合、HorizontalScrollPercentは 100、「右にスクロール」を追加するよりも小さい場合、0 の場合、「スクロール左」が追加するよりも大きいためです。For instance, if HorizontalScrollPercent is greater than 0, “scroll left” will be added, if it’s less than 100, “scroll right” will be added, and so on.

ナレーターの重複Narrator overlap

ナレーター アプリケーションは、UI オートメーション クライアントでも、使用して、AutomationProperties.Nameとして現在選択されている UI 要素を読み取るテキストのソースのいずれかのプロパティ。The Narrator application is also a UI Automation client and uses the AutomationProperties.Name property as one of the sources for the text it reads for the currently selected UI element. アクセシビリティのエクスペリエンスを向上させる多くのアプリを提供する開発者が再度並べ替えられたりオーバー ロード、Name詳細とナレーターで読み取られる場合のコンテキストを提供することで時間の長い説明のテキストを持つプロパティです。To provide a better accessibility experience many app developers have resorted to overloading the Name property with long descriptive text with the goal of providing more information and context when read by Narrator. ただし、これにより、2 つの機能間の競合です。VE では、短い語句と一致するかより適切なコンテキストを提供するフレーズを長くよりわかりやすいメリットは、ナレーターの中に、コントロールの表示テキストと厳密に一致する必要があります。However, this causes a conflict between the two features: VES needs short phrases that match or closely match the visible text of the control, while Narrator benefits from longer, more descriptive phrases to give better context.

これを解決する、Windows 10 Creators Update 以降、ナレーターも見てに更新されました、AutomationProperties.HelpTextプロパティ。To resolve this, starting with Windows 10 Creators Update, Narrator was updated to also look at the AutomationProperties.HelpText property. ナレーターがほかに、その内容を読み上げる場合、このプロパティが空でないAutomationProperties.Nameします。If this property is not empty, Narrator will speak its contents in addition to AutomationProperties.Name. 場合HelpTextは空の場合、ナレーターはのみの内容を読み取る名。If HelpText is empty, Narrator will only read the contents of Name. これにより、必要に応じて、使用するわかりやすい文字列になったが短く、音声認識フレンドリ内の句を維持、Nameプロパティ。This will enable longer descriptive strings to be used where needed, but maintains a shorter, speech recognition friendly phrase in the Name property.

詳細については、次を参照してください。 UI でのユーザー補助のサポートのオートメーション プロパティします。For more info see Automation Properties for Accessibility Support in UI.

アクティブなリッスン モード (ALM)Active Listening Mode (ALM)

ALM を入力します。Entering ALM

Xbox では、VES が音声入力の継続的にリッスンしていません。On Xbox, VES is not constantly listening for speech input. ユーザーは、ことを示すアクティブなリッスン モードを明示的に入力する必要があります。The user needs to enter Active Listening Mode explicitly by saying:

  • "こんにちは Cortana、select"、または“Hey Cortana, select”, or
  • "こんにちは Cortana、選択する"“Hey Cortana, make a selection”

"Hey Cortana、サインイン"または」「コルタナさんホームに戻るなど、完了時アクティブにリッスンしているユーザーのままにもいくつかその他の Cortana コマンドもあります。There are several other Cortana commands that also leave the user in active listening upon completion, for example “Hey Cortana, sign in” or “Hey Cortana, go home”.

ALM を入力すると、次の効果が完成します。Entering ALM will have the following effect:

  • Cortana のオーバーレイは、表示される内容とユーザーに求める上部右に表示されます。The Cortana overlay will be shown in the top right corner, telling the user they can say what they see. ユーザーが言うと、中に音声認識エンジンによって認識される語句フラグメントはこの場所にも表示されます。While the user is speaking, phrase fragments that are recognized by the speech recognizer will also be shown in this location.

  • VE は、UIA ツリーに解析、実行可能なすべてのコントロールを検索します、それぞれのテキストを音声認識文法の登録、および継続的なリッスンしているセッションを開始するを。VES parses the UIA tree, finds all actionable controls, registers their text in the speech recognition grammar and starts a continuous listening session.

既存の ALMExiting ALM

ユーザーが音声を使用して UI を使用した操作中に、システムは ALM に残ります。The system will remain in ALM while the user is interacting with the UI using voice. ALM を終了する 2 つの方法はあります。There are two ways to exit ALM:

  • ユーザーに明示的には、「リッスンを停止」またはUser explicitly says, “stop listening”, or
  • ALM を入力してから、または最後の正の認識以降 17 秒以内に正の認識がない場合、タイムアウトが発生します。A timeout will occur If there isn’t a positive recognition within 17 seconds of entering ALM or since the last positive recognition

コントロールの呼び出しInvoking controls

音声を使用して UI を使用したユーザーが操作できる ALM の場合にします。When in ALM the user can interact with the UI using voice. UI が正しく (表示されるテキストに一致する名前プロパティ) で構成されている、音声を使用してアクションを実行する、シームレスで自然なの経験ことがあります。If the UI is configured correctly (with Name properties matching the visible text), using voice to perform actions should be a seamless, natural experience. ユーザーは、単に画面に表示できる必要があります。The user should be able to just say what they see on the screen.

Xbox で UI をオーバーレイします。Overlay UI on Xbox

VES 名前は派生のコントロールが UI に表示される実際のテキストよりも異なる可能性があります。The name VES derives for a control may be different than the actual visible text in the UI. 期限を指定できます、Nameプロパティまたは関連付けられているコントロールのLabeledBy要素の明示的に別の文字列に設定します。This can be due to the Name property of the control or the attached LabeledBy element being explicitly set to different string. または、コントロールに GUI テキスト、アイコンまたはイメージ要素のみがありません。Or, the control does not have GUI text but only an icon or image element.

このような場合は、ユーザーには、このようなコントロールを呼び出すためには当てはまりませんが必要なものを表示する方法が必要があります。In these cases, users need a way to see what needs to be said in order to invoke such a control. そのため、1 回でアクティブなリッスンしている、音声のヒント表示できます「のラベルを表示する」と言って。Therefore, once in active listening, voice tips can be displayed by saying “show labels”. これにより、音声はヒント ラベルをすべて実行可能なコントロールの上に表示されます。This causes voice tip labels to appear on top of every actionable control.

100 のラベルの制限がある場合は、アプリの UI がある 100 よりもより実施可能なコントロールがあるため一部の音声ヒント ラベルはありません。There is a limit of 100 labels, so if the app’s UI has more actionable controls than 100 there will be some that will not have voice tip labels shown. ラベルが選択したこの例では非決定的、構造と、現在の UI の構成に依存している UIA ツリーに最初に列挙します。Which labels are chosen in this case is not deterministic, as it depends on the structure and composition of the current UI as first enumerated in the UIA tree.

音声ヒント ラベルを表示するには、非表示にするコマンドがないとは引き続き表示された、次のイベントのいずれかが発生するまで。Once voice tip labels are shown there is no command to hide them, they will remain visible until one of the following events occur:

  • ユーザーがコントロールを呼び出すuser invokes a control
  • ユーザーが現在のシーンから離れたuser navigates away from the current scene
  • 「リッスンを停止」、ユーザーを質問します。user says, “stop listening”
  • アクティブなリッスン モードをタイムアウトします。active listening mode times out

音声のヒントのラベルの場所Location of voice tip labels

音声ヒント ラベルは、コントロールの BoundingRectangle 内で水平方向および垂直方向に中央が。Voice tip labels are horizontally and vertically centered within the control’s BoundingRectangle. ラベルができるコントロールが小さいと緊密にグループ化する場合、他のユーザーがはっきりと見えなく重複/なる、VES はこれらのラベル間隔にプッシュを別々 に表示されることを確認しようとしています。When controls are small and tightly grouped, the labels can overlap/become obscured by others and VES will try to push these labels apart to separate them and ensure they are visible. ただし、これは保証されません 100% の時間を操作します。However, this is not guaranteed to work 100% of the time. 可能性は非常に混雑した UI の場合、他のユーザーによって隠されている一部のラベルが発生します。If there is a very crowded UI, it will likely result in some labels being obscured by others. 「ラベルを表示する」で、UI を確認してください音声ヒントの表示のための十分な余裕があることを確認します。Please review your UI with “show labels” to ensure there is adequate room for voice tip visibility.

コンボ ボックスCombo boxes

コンボ ボックスは、コンボ ボックスの個々 の項目を展開するときに、独自の音声ヒント ラベルを取得し、ドロップダウン リストの背後にある既存のコントロールの上にこれらは多くの場合、します。When a combo box is expanded each individual item in the combo box gets its own voice tip label and often these will be on top of existing controls behind drop down list. プレゼンテーションの乱雑および混乱ラベルの混同 (コンボ ボックス項目のラベルがコンボ ボックスの背後にあるコントロールのラベルを混在させるは) を回避するために子アイテムが表示されるため、コンボ ボックスのラベルのみを展開します。 その他のすべての音声ヒント ラベルは表示されません。To avoid presenting a cluttered and confusing muddle of labels (where combo box item labels are intermixed with the labels of controls behind the combo box) when a combo box is expanded only the labels for its child items will be shown; all other voice tip labels will be hidden. ユーザーか、ドロップダウン リストの項目のいずれかを選択したりできますコンボ ボックスの「閉じる」。The user can then either select one of the drop-down items or “close” the combo box.

  • 折りたたまれたコンボ ボックスのラベル。Labels on collapsed combo boxes:

  • 拡張コンボ ボックスのラベル。Labels on expanded combo box:

スクロール可能なコントロールScrollable controls

スクロール可能なコントロールは、各コントロールの端でスクロール コマンドに対する音声ヒントが中央揃えにします。For scrollable controls, the voice tips for the scroll commands will be centered on each of the edges of the control. 音声のヒントは実用的なは、そのため、たとえば「上にスクロールする」と「スクロール」の垂直方向スクロールがない場合は表示されませんがスクロール方向のみ表示されます。Voice tips will only be shown for the scroll directions that are actionable, so for example if vertical scrolling is not available, “scroll up” and “scroll down” will not be shown. VE が序数を使用して区別する (例: スクロール可能な複数のリージョンが存在する場合When multiple scrollable regions are present VES will use ordinals to differentiate between them (eg. 「スクロール権限 1」、「スクロール右側 2」など。)。“Scroll right 1”, “Scroll right 2”, etc.).

不明瞭解消Disambiguation

複数の UI 要素が同じ名前を持つか、音声認識エンジンが複数の候補を一致、VES は曖昧性除去モードを入力します。When multiple UI elements have the same Name, or the speech recognizer matched multiple candidates, VES will enter disambiguation mode. このモードの音声のヒントにラベルを表示する要素の関連するユーザーが適切なものを選択できるようにします。In this mode voice tip labels will be shown for the elements involved so that the user can select the right one. 曖昧性除去モードを解除「キャンセル」を言うことにより、ユーザーをキャンセルできます。The user can cancel out of disambiguation mode by saying "cancel".

次に、例を示します。For example:

  • 曖昧性除去; 前に、のアクティブなリッスン モードで「います I があいまいです」、ユーザーを質問します。In Active Listening Mode, before disambiguation; user says, "Am I Ambiguous":

  • 両方のボタンと一致します。曖昧性除去は、次の開始。Both buttons matched; disambiguation started:

  • 表示は、"Select 2"が選択されたときにアクションをクリックします。Showing click action when "Select 2" was chosen:

サンプル UISample UI

ここでは、XAML の例に基づく UI、さまざまな方法で AutomationProperties.Name を設定します。Here’s an example of a XAML based UI, setting the AutomationProperties.Name in various ways:

<Page
    x:Class="VESSampleCSharp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:VESSampleCSharp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button x:Name="button1" Content="Hello World" HorizontalAlignment="Left" Margin="44,56,0,0" VerticalAlignment="Top"/>
        <Button x:Name="button2" AutomationProperties.Name="Launch Game" Content="Launch" HorizontalAlignment="Left" Margin="44,106,0,0" VerticalAlignment="Top" Width="99"/>
        <TextBlock AutomationProperties.Name="Day of Week" x:Name="label1" HorizontalAlignment="Left" Height="22" Margin="168,62,0,0" TextWrapping="Wrap" Text="Select Day of Week:" VerticalAlignment="Top" Width="137"/>
        <ComboBox AutomationProperties.LabeledBy="{Binding ElementName=label1}" x:Name="comboBox" HorizontalAlignment="Left" Margin="310,57,0,0" VerticalAlignment="Top" Width="120">
            <ComboBoxItem Content="Monday" IsSelected="True"/>
            <ComboBoxItem Content="Tuesday"/>
            <ComboBoxItem Content="Wednesday"/>
            <ComboBoxItem Content="Thursday"/>
            <ComboBoxItem Content="Friday"/>
            <ComboBoxItem Content="Saturday"/>
            <ComboBoxItem Content="Sunday"/>
        </ComboBox>
        <Button x:Name="button3" HorizontalAlignment="Left" Margin="44,156,0,0" VerticalAlignment="Top" Width="213">
            <Grid>
                <TextBlock AutomationProperties.Name="Accept">Accept Offer</TextBlock>
                <TextBlock Margin="0,25,0,0" Foreground="#FF5A5A5A">Exclusive offer just for you</TextBlock>
            </Grid>
        </Button>
    </Grid>
</Page>

ここで、上記のサンプルを使用して、UI の外観と音声のヒントのラベルがない場合です。Using the above sample here is what the UI will look like with and without voice tip labels.

  • アクティブなリッスン モードで表示されるラベルがない場合。In Active Listening Mode, without labels shown:

  • アクティブなリッスン モードで、ユーザーの質問「ラベルを表示する」後。In Active Listening Mode, after user says "show labels":

場合にbutton1、XAML 自動に設定します、AutomationProperties.Nameプロパティ、コントロールの表示のテキスト コンテンツからテキストを使用します。In the case of button1, XAML auto populates the AutomationProperties.Name property using text from the control’s visible text content. これは、明示的ながない場合でも、音声ヒント ラベルがある理由AutomationProperties.Nameを設定します。This is why there is a voice tip label even though there isn't an explicit AutomationProperties.Name set.

button2を明示的に設定、AutomationProperties.Nameコントロールのテキスト以外のものにします。With button2, we explicitly set the AutomationProperties.Name to something other than the text of the control.

comboBoxを使用して、LabeledByプロパティ参照をlabel1自動化のソースとしてName、し、label1を設定します、AutomationProperties.Nameを画面にレンダリングされるコンテンツよりもより自然な語句 ("Day of Week"ではなく"Select 1 日に複数の曜日")。With comboBox, we used the LabeledBy property to reference label1 as the source of the automation Name, and in label1 we set the AutomationProperties.Name to a more natural phrase than what is rendered on screen (“Day of Week” rather than “Select Day of Week”).

最後に、 button3、VES を取得、Nameから最初の子要素からbutton3自体はありません、AutomationProperties.Nameを設定します。Finally, with button3, VES grabs the Name from the first child element since button3 itself does not have an AutomationProperties.Name set.

関連項目See also