注意

Mixed Reality Academy チュートリアルは、HoloLens (第1世代) と Mixed Reality イマーシブヘッドセットを念頭に置いて設計されています。The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. そのため、これらのデバイスの開発に関するガイダンスをまだ探している開発者には、これらのチュートリアルを残しておくことが重要です。As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. これらのチュートリアルは いない 最新のツールセットや相互作用が使用されている HoloLens 2 で更新されます。These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. サポートされているデバイスでの作業を続行するために管理されます。They will be maintained to continue working on the supported devices. 今後、HoloLens 2 向けの開発方法を示す新しい一連のチュートリアルが掲載されています。There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. この通知は、これらのチュートリアルが投稿されたときのリンクと共に更新されます。This notice will be updated with a link to those tutorials when they are posted.


MR 入力 212:音声MR Input 212: Voice

音声入力によって、ホログラムを操作するもう1つの方法が提供されます。Voice input gives us another way to interact with our holograms. 音声コマンドは、非常に自然で簡単な方法で動作します。Voice commands work in a very natural and easy way. 次のような音声コマンドを設計します。Design your voice commands so that they are:

  • 自然Natural
  • 覚えやすいEasy to remember
  • 適切なコンテキストContext appropriate
  • 同じコンテキスト内の他のオプションと十分に異なるSufficiently distinct from other options within the same context

MR 基本 101では、KeywordRecognizer を使用して、2つの簡単な音声コマンドを作成していました。In MR Basics 101, we used the KeywordRecognizer to build two simple voice commands. MR 入力212では、次の方法について詳しく説明します。In MR Input 212, we'll dive deeper and learn how to:

  • HoloLens speech エンジン用に最適化された音声コマンドを設計します。Design voice commands that are optimized for the HoloLens speech engine.
  • 使用できる音声コマンドをユーザーが認識できるようにします。Make the user aware of what voice commands are available.
  • ユーザーの声コマンドを聞いたことを確認します。Acknowledge that we've heard the user's voice command.
  • ディクテーション認識エンジンを使用して、ユーザーが言っている内容を理解します。Understand what the user is saying, using a Dictation Recognizer.
  • 構文認識エンジンを使用して、SRGS、または音声認識文法仕様 (ファイル) に基づいてコマンドをリッスンします。Use a Grammar Recognizer to listen for commands based on an SRGS, or Speech Recognition Grammar Specification, file.

このコースでは、 Mr 入力 210およびmr 入力 211で構築したモデルエクスプローラーについて説明します。In this course, we'll revisit Model Explorer, which we built in MR Input 210 and MR Input 211.

重要

以下の各章に埋め込まれているビデオは、古いバージョンの Unity と Mixed Reality Toolkit を使用して記録されています。The videos embedded in each of the chapters below were recorded using an older version of Unity and the Mixed Reality Toolkit. ステップバイステップの手順は正確であり、最新のものですが、最新ではない対応するビデオにスクリプトとビジュアルが表示される場合があります。While the step-by-step instructions are accurate and current, you may see scripts and visuals in the corresponding videos that are out-of-date. ビデオはために含まれています。ここで説明する概念は引き続き適用されます。The videos remain included for posterity and because the concepts covered still apply.

デバイスのサポートDevice support

までCourse HoloLensHoloLens イマーシブ ヘッドセットImmersive headsets
MR 入力 212:音声MR Input 212: Voice ✔️✔️ ✔️✔️

開始前の準備Before you start

必須コンポーネントPrerequisites

プロジェクトファイルProject files

  • プロジェクトに必要なファイルをダウンロードします。Download the files required by the project. Unity 2017.2 以降が必要です。Requires Unity 2017.2 or later.
  • ファイルをデスクトップまたはその他の簡単な場所に保管します。Un-archive the files to your desktop or other easy to reach location.

注意

ダウンロードする前にソースコードを確認する場合は、GitHub から入手できます。If you want to look through the source code before downloading, it's available on GitHub.

エラッタとメモErrata and Notes

  • コード内のブレークポイントにヒットするには、Visual Studio の ツール-> オプション-> デバッグ の下にある マイコードのみを有効にする を無効 (オフ) にする必要があります。"Enable Just My Code" needs to be disabled (unchecked) in Visual Studio under Tools->Options->Debugging in order to hit breakpoints in your code.

Unity のセットアップUnity Setup

手順Instructions

  1. Unity を起動します。Start Unity.
  2. [開く] を選択します。Select Open.
  3. 以前にアーカイブしていたHolographicAcademy-212-Voiceフォルダーに移動します。Navigate to the HolographicAcademy-Holograms-212-Voice folder you previously un-archived.
  4. [モデルエクスプローラー開始/] フォルダーを見つけて選択します。Find and select the Starting/Model Explorer folder.
  5. [フォルダーの選択] ボタンをクリックします。Click the Select Folder button.
  6. [プロジェクト] パネルで、[シーン] フォルダーを展開します。In the Project panel, expand the Scenes folder.
  7. [ Modelexplorerシーン] をダブルクリックして Unity に読み込みます。Double-click ModelExplorer scene to load it in Unity.

ビルドBuilding

  1. Unity で、[ファイル > ビルド設定] を選択します。In Unity, select File > Build Settings.
  2. シーン /ModelExplorerが [ビルド] の [シーン] に表示されていない場合は、[開いているシーンの追加] をクリックしてシーンを追加します。If Scenes/ModelExplorer is not listed in Scenes In Build, click Add Open Scenes to add the scene.
  3. HoloLens 向けに特に開発している場合は、ターゲットデバイスhololensに設定します。If you're specifically developing for HoloLens, set Target device to HoloLens. それ以外の場合は、任意のデバイスに残しておきます。Otherwise, leave it on Any device.
  4. ビルドの種類が [ D3D ] に設定され、[ sdk ] が [最新のインストール済み] に設定されていることを確認します (sdk 16299 以降である必要があります)。Ensure Build Type is set to D3D and SDK is set to Latest installed (which should be SDK 16299 or newer).
  5. [Build] をクリックします。Click Build.
  6. "App" という名前の新しいフォルダーを作成します。Create a New Folder named "App".
  7. アプリフォルダーをシングルクリックします。Single click the App folder.
  8. [フォルダーの選択] をクリックすると、Unity によって Visual Studio のプロジェクトのビルドが開始されます。Press Select Folder and Unity will start building the project for Visual Studio.

Unity が完了すると、エクスプローラーウィンドウが表示されます。When Unity is done, a File Explorer window will appear.

  1. アプリフォルダーを開きます。Open the App folder.
  2. Modelexplorer Visual Studio ソリューションを開きます。Open the ModelExplorer Visual Studio Solution.

HoloLens に展開する場合:If deploying to HoloLens:

  1. Visual Studio の上部のツールバーを使用して、ターゲットをデバッグからリリースに変更し、ARM からx86に変更します。Using the top toolbar in Visual Studio, change the target from Debug to Release and from ARM to x86.
  2. [ローカルコンピューター] ボタンの横にあるドロップダウン矢印をクリックし、[リモートコンピューター] を選択します。Click on the drop down arrow next to the Local Machine button, and select Remote Machine.
  3. HoloLens デバイスの IP アドレスを入力し、[認証モード] を [ユニバーサル (暗号化されていないプロトコル)] に設定します。Enter your HoloLens device IP address and set Authentication Mode to Universal (Unencrypted Protocol). [選択] をクリックします。Click Select. デバイスの IP アドレスがわからない場合は、設定 Network & Internet > 詳細オプション > 確認してください。If you do not know your device IP address, look in Settings > Network & Internet > Advanced Options.
  4. 上部のメニューバーで、[デバッグ]、[デバッグなしで開始] の順にクリック >、Ctrl キーを押しながら F5キーを押します。In the top menu bar, click Debug -> Start Without debugging or press Ctrl + F5. 初めてデバイスをデプロイする場合は、 Visual Studio とペアリングする必要があります。If this is the first time deploying to your device, you will need to pair it with Visual Studio.
  5. アプリが展開されたら、 select ジェスチャを使用して、[ fitbox ] を閉じます。When the app has deployed, dismiss the Fitbox with a select gesture.

イマーシブヘッドセットに展開する場合:If deploying to an immersive headset:

  1. Visual Studio の上部のツールバーを使用して、ターゲットをデバッグからリリースに、ARM からx64に変更します。Using the top toolbar in Visual Studio, change the target from Debug to Release and from ARM to x64.
  2. 配置ターゲットがローカルコンピューターに設定されていることを確認します。Make sure the deployment target is set to Local Machine.
  3. 上部のメニューバーで、[デバッグ]、[デバッグなしで開始] の順にクリック >、Ctrl キーを押しながら F5キーを押します。In the top menu bar, click Debug -> Start Without debugging or press Ctrl + F5.
  4. アプリがデプロイされたら、モーションコントローラーでトリガーをプルして、 Fitbox ボックスを閉じます。When the app has deployed, dismiss the Fitbox by pulling the trigger on a motion controller.

注意

Visual Studio の [エラー] パネルに赤色のエラーが表示されることがあります。You might notice some red errors in the Visual Studio Errors panel. 無視しても安全です。It is safe to ignore them. 実際のビルドの進行状況を表示するには、[出力] パネルに切り替えます。Switch to the Output panel to view actual build progress. [出力] パネルでエラーが発生した場合は、修正を行う必要があります (多くの場合、スクリプトの間違いが原因です)。Errors in the Output panel will require you to make a fix (most often they are caused by a mistake in a script).

Chapter 1-認識Chapter 1 - Awareness

目的Objectives

  • 音声コマンドの設計のDos とすべきについて説明します。Learn the Dos and Don'ts of voice command design.
  • KeywordRecognizerを使用して、宝石ベースの音声コマンドを追加します。Use KeywordRecognizer to add gaze based voice commands.
  • ユーザーがカーソルフィードバックを使用して音声コマンドを認識できるようにします。Make users aware of voice commands using cursor feedback.

音声コマンドのデザインVoice Command Design

この章では、音声コマンドの設計について学習します。In this chapter, you'll learn about designing voice commands. 音声コマンドを作成する場合:When creating voice commands:

DODO

  • 簡潔なコマンドを作成します。Create concise commands. "現在選択されているビデオを再生する" を使用しないでください。そのコマンドは簡潔ではなく、ユーザーが簡単に覚えられないからです。You don't want to use "Play the currently selected video", because that command is not concise and would easily be forgotten by the user. 代わりに、次のものを使用する必要があります。 "ビデオの再生" は簡潔で、複数の音節があるためです。Instead, you should use: "Play Video", because it is concise and has multiple syllables.
  • 単純なボキャブラリを使用します。Use a simple vocabulary. ユーザーが簡単に見つけて覚えておくことができる一般的な単語と語句を常に使用してください。Always try to use common words and phrases that are easy for the user to discover and remember. たとえば、アプリケーションで、表示または非表示にできるノートオブジェクトがある場合、"プラカード" はあまり使用されていないため、コマンド "Show プラカード" は使用しません。For example, if your application had a note object that could be displayed or hidden from view, you would not use the command "Show Placard", because "placard" is a rarely used term. 代わりに、コマンドを使用します。アプリケーションでメモを表示するには、メモを表示します。Instead, you would use the command: "Show Note", to reveal the note in your application.
  • 一貫性を保ちます。Be consistent. 音声コマンドは、アプリケーション全体で一貫した状態に保つ必要があります。Voice commands should be kept consistent across your application. アプリケーションに2つのシーンがあり、両方のシーンにアプリケーションを閉じるためのボタンが含まれているとします。Imagine that you have two scenes in your application and both scenes contain a button for closing the application. 最初のシーンで "Exit" コマンドを使用してボタンをトリガーしたが、2番目のシーンで "アプリを閉じる" コマンドを使用した場合、ユーザーは混乱を招きます。If the first scene used the command "Exit" to trigger the button, but the second scene used the command "Close App", then the user is going to get very confused. 同じ機能を複数のシーンで保持する場合は、同じ音声コマンドを使用してトリガーする必要があります。If the same functionality persists across multiple scenes, then the same voice command should be used to trigger it.

できませんDON'T

  • 単一の syllable コマンドを使用します。Use single syllable commands. たとえば、音声コマンドを作成してビデオを再生する場合は、単純なコマンド "play" を使用しないようにする必要があります。これは単一の syllable であり、システムによって簡単に見逃しられる可能性があるためです。As an example, if you were creating a voice command to play a video, you should avoid using the simple command "Play", as it is only a single syllable and could easily be missed by the system. 代わりに、次のものを使用する必要があります。 "ビデオの再生" は簡潔で、複数の音節があるためです。Instead, you should use: "Play Video", because it is concise and has multiple syllables.
  • システムコマンドを使用します。Use system commands. "Select" コマンドは、現在フォーカスがあるオブジェクトに対して Tap イベントをトリガーするためにシステムによって予約されています。The "Select" command is reserved by the system to trigger a Tap event for the currently focused object. キーワードまたは語句では、予期したとおりに動作しない可能性があるため、 "Select" コマンドを再使用しないでください。Do not re-use the "Select" command in a keyword or phrase, as it might not work as you expect. たとえば、アプリケーションでキューブを選択するための音声コマンドが "Select cube" であったのに、ユーザーがコマンドを発音したときに球を見ていた場合、代わりに球が選択されます。For example, if the voice command for selecting a cube in your application was "Select cube", but the user was looking at a sphere when they uttered the command, then the sphere would be selected instead. 同様に、アプリケーションバーのコマンドも音声に対応しています。Similarly app bar commands are voice enabled. CoreWindow ビューでは、次の音声コマンドを使用しないでください。Don't use the following speech commands in your CoreWindow View:
    1. 戻ってくださいGo Back
    2. スクロールツールScroll Tool
    3. ズーム ツールZoom Tool
    4. ツールのドラッグDrag Tool
    5. AdjustAdjust
    6. 削除Remove
  • 同様のサウンドを使用します。Use similar sounds. Rhyme する音声コマンドを使用しないようにしてください。Try to avoid using voice commands that rhyme. "Show Store""More show More" がサポートされているショッピングアプリケーションがある場合は、もう一方のコマンドを使用している間に、いずれかのコマンドを無効にする必要があります。If you had a shopping application which supported "Show Store" and "Show More" as voice commands, then you would want to disable one of the commands while the other was in use. たとえば、[ Show store] \ (ストアの表示 ) ボタンを使用してストアを開き、ストアが表示されたときにそのコマンドを無効にして、[さらに表示] コマンドを使用して参照することができます。For example, you could use the "Show Store" button to open the store, and then disable that command when the store was displayed so that the "Show More" command could be used for browsing.

手順Instructions

  • Unity の [階層] パネルで、検索ツールを使用してholoComm_screen_meshオブジェクトを検索します。In Unity's Hierarchy panel, use the search tool to find the holoComm_screen_mesh object.
  • HoloComm_screen_meshオブジェクトをダブルクリックして、シーンで表示します。Double-click on the holoComm_screen_mesh object to view it in the Scene. これは、音声コマンドに応答する astronaut の watch です。This is the astronaut's watch, which will respond to our voice commands.
  • [インスペクター ] パネルで、[音声入力ソース (スクリプト) ] コンポーネントを見つけます。In the Inspector panel, locate the Speech Input Source (Script) component.
  • [キーワード] セクションを展開して、サポートされている音声コマンドを確認します。Communicator を開きます。Expand the Keywords section to see the supported voice command: Open Communicator.
  • 右側にある [歯車] をクリックし、[スクリプトの編集] を選択します。Click the cog to the right side, then select Edit Script.
  • SpeechInputSource.csを調べて、 KeywordRecognizerを使用して音声コマンドを追加する方法を理解します。Explore SpeechInputSource.cs to understand how it uses the KeywordRecognizer to add voice commands.

ビルドと配置Build and Deploy

  • Unity では、ファイル > ビルド設定を使用して、アプリケーションをリビルドします。In Unity, use File > Build Settings to rebuild the application.
  • アプリフォルダーを開きます。Open the App folder.
  • Modelexplorer Visual Studio ソリューションを開きます。Open the ModelExplorer Visual Studio Solution.

(セットアップ時に Visual Studio でこのプロジェクトを既にビルドまたは展開している場合は、VS のインスタンスを開いて、メッセージが表示されたら [すべて再読み込み] をクリックします)。(If you already built/deployed this project in Visual Studio during set-up, then you can open that instance of VS and click 'Reload All' when prompted).

  • Visual Studio で、[デバッグ]、[デバッグなしで開始] の順にクリック >、Ctrl キーを押しながら F5キーを押します。In Visual Studio, click Debug -> Start Without debugging or press Ctrl + F5.
  • アプリケーションが HoloLens にデプロイされたら、エアタップジェスチャを使用して [フィット] ボックスを閉じます。After the application deploys to the HoloLens, dismiss the fit box using the air-tap gesture.
  • Astronaut の watch を見つめます。Gaze at the astronaut's watch.
  • ウォッチにフォーカスがある場合は、カーソルがマイクに変わっていることを確認します。When the watch has focus, verify that the cursor changes to a microphone. これにより、アプリケーションが音声コマンドをリッスンしていることを示すフィードバックが提供されます。This provides feedback that the application is listening for voice commands.
  • ウォッチにツールヒントが表示されていることを確認します。Verify that a tooltip appears on the watch. これにより、ユーザーは "Open Communicator" コマンドを見つけることができます。This helps users discover the "Open Communicator" command.
  • 監視での再生中に、「communicator を開く」 と言い、communicator パネルを開きます。While gazing at the watch, say "Open Communicator" to open the communicator panel.

Chapter 2-確認Chapter 2 - Acknowledgement

目的Objectives

  • マイク入力を使用してメッセージを記録します。Record a message using the Microphone input.
  • アプリケーションが音声をリッスンしていることをユーザーにフィードバックします。Give feedback to the user that the application is listening to their voice.

注意

マイクから録音するアプリのマイク機能を宣言する必要があります。The Microphone capability must be declared for an app to record from the microphone. これは、MR 入力212で既に行われていますが、独自のプロジェクトでは考慮しておいてください。This is done for you already in MR Input 212, but keep this in mind for your own projects.

  1. Unity エディターで、[Edit > Project Settings > Player] の順に移動して、windows media player の設定に移動します。In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player"
  2. [ユニバーサル Windows プラットフォーム] タブをクリックします。Click on the "Universal Windows Platform" tab
  3. [発行設定 > 機能] セクションで、マイクの機能を確認します。In the "Publishing Settings > Capabilities" section, check the Microphone capability

手順Instructions

  • Unity の [階層] パネルで、 holoComm_screen_meshオブジェクトが選択されていることを確認します。In Unity's Hierarchy panel, verify that the holoComm_screen_mesh object is selected.
  • [インスペクター ] パネルで、 Astronaut Watch (スクリプト) コンポーネントを見つけます。In the Inspector panel, find the Astronaut Watch (Script) component.
  • [ Communicator Prefab ] プロパティの値として設定されている小さい、blue のキューブをクリックします。Click on the small, blue cube which is set as the value of the Communicator Prefab property.
  • [プロジェクト] パネルで、 Communicator prefab にフォーカスがあるはずです。In the Project panel, the Communicator prefab should now have focus.
  • [プロジェクト] パネルの [ Communicator prefab] をクリックして、インスペクターでそのコンポーネントを表示します。Click on the Communicator prefab in the Project panel to view its components in the Inspector.
  • マイクマネージャー (スクリプト) コンポーネントを見ると、ユーザーの声を記録することができます。Look at the Microphone Manager (Script) component, this will allow us to record the user's voice.
  • Communicatorオブジェクトに、[メッセージの送信] コマンドに応答するための音声入力ハンドラー (スクリプト) コンポーネントがあることに注意してください。Notice that the Communicator object has a Speech Input Handler (Script) component for responding to the Send Message command.
  • Communicator (スクリプト) コンポーネントを確認し、スクリプトをダブルクリックして Visual Studio で開きます。Look at the Communicator (Script) component and double-click on the script to open it in Visual Studio.

Communicator.cs は、communicator デバイスで適切なボタンの状態を設定する役割を担います。Communicator.cs is responsible for setting the proper button states on the communicator device. これにより、ユーザーはメッセージを記録して再生し、astronaut にメッセージを送信できるようになります。This will allow our users to record a message, play it back, and send the message to the astronaut. また、アニメーション化された wave フォームを開始および停止して、音声が聞こえたことをユーザーに確認します。It will also start and stop an animated wave form, to acknowledge to the user that their voice was heard.

  • Communicator.csで、 Startメソッドから次の行 (81 と 82) を削除します。In Communicator.cs, delete the following lines (81 and 82) from the Start method. これにより、communicator の [レコード] ボタンが有効になります。This will enable the 'Record' button on the communicator.
// TODO: 2.a Delete the following two lines:
RecordButton.SetActive(false);
MessageUIRenderer.gameObject.SetActive(false);

ビルドと配置Build and Deploy

  • Visual Studio で、アプリケーションをリビルドし、デバイスにデプロイします。In Visual Studio, rebuild your application and deploy to the device.
  • Astronaut の watch を見つめ、 「Open communicator」 と言うと、communicator が表示されます。Gaze at the astronaut's watch and say "Open Communicator" to show the communicator.
  • [録音] ボタン (マイク) を押して、astronaut の音声メッセージの録音を開始します。Press the Record button (microphone) to start recording a verbal message for the astronaut.
  • 読み上げを開始し、wave アニメーションが communicator で再生されることを確認します。これにより、音声が聞こえたことをユーザーにフィードバックできます。Start speaking, and verify that the wave animation plays on the communicator, which provides feedback to the user that their voice is heard.
  • [停止] ボタン (左の四角形) をクリックし、wave アニメーションの実行が停止していることを確認します。Press the Stop button (left square), and verify that the wave animation stops running.
  • 再生ボタン (右三角形) を押して、記録されたメッセージを再生し、デバイスで再生します。Press the Play button (right triangle) to play back the recorded message and hear it on the device.
  • 記録されたメッセージの再生を停止するには、[停止] ボタン (右の四角形) をクリックします。Press the Stop button (right square) to stop playback of the recorded message.
  • Communicator を終了し、astronaut から "メッセージを受信しました" という応答を受信するには、 "メッセージの送信" と言います。Say "Send Message" to close the communicator and receive a 'Message Received' response from the astronaut.

章 3-およびディクテーション認識エンジンについてChapter 3 - Understanding and the Dictation Recognizer

目的Objectives

  • ディクテーション認識エンジンを使用して、ユーザーの音声をテキストに変換します。Use the Dictation Recognizer to convert the user's speech to text.
  • Communicator でディクテーションエンジンの仮説と最終結果を表示します。Show the Dictation Recognizer's hypothesized and final results in the communicator.

この章では、ディクテーション認識エンジンを使用して、astronaut のメッセージを作成します。In this chapter, we'll use the Dictation Recognizer to create a message for the astronaut. ディクテーション認識エンジンを使用する場合は、次の点に注意してください。When using the Dictation Recognizer, keep in mind that:

  • ディクテーションエンジンが動作するには、WiFi に接続されている必要があります。You must be connected to WiFi for the Dictation Recognizer to work.
  • タイムアウトは、一定の時間が経過すると発生します。Timeouts occur after a set period of time. 次の2つの点に注意する必要があります。There are two timeouts to be aware of:
    • 認識エンジンが起動し、最初の5秒間オーディオが聞こえない場合は、タイムアウトします。If the recognizer starts and doesn't hear any audio for the first five seconds, it will timeout.
    • 認識エンジンが結果を指定した後、20秒間無音の状態になると、タイムアウトします。If the recognizer has given a result but then hears silence for twenty seconds, it will timeout.
  • 一度に実行できるのは、1種類のレコグナイザー (キーワードまたはディクテーション) だけです。Only one type of recognizer (Keyword or Dictation) can run at a time.

注意

マイクから録音するアプリのマイク機能を宣言する必要があります。The Microphone capability must be declared for an app to record from the microphone. これは、MR 入力212で既に行われていますが、独自のプロジェクトでは考慮しておいてください。This is done for you already in MR Input 212, but keep this in mind for your own projects.

  1. Unity エディターで、[Edit > Project Settings > Player] の順に移動して、windows media player の設定に移動します。In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player"
  2. [ユニバーサル Windows プラットフォーム] タブをクリックします。Click on the "Universal Windows Platform" tab
  3. [発行設定 > 機能] セクションで、マイクの機能を確認します。In the "Publishing Settings > Capabilities" section, check the Microphone capability

手順Instructions

ディクテーション認識エンジンを使用するようにMicrophoneManager.csを編集します。We're going to edit MicrophoneManager.cs to use the Dictation Recognizer. 次のように追加します。This is what we'll add:

  1. [レコード] ボタンが押されると、 DictationRecognizer が開始されます。When the Record button is pressed, we'll start the DictationRecognizer.
  2. DictationRecognizer が理解したことの仮説を示します。Show the hypothesis of what the DictationRecognizer understood.
  3. DictationRecognizer が理解した結果をロックします。Lock in the results of what the DictationRecognizer understood.
  4. DictationRecognizer からのタイムアウトを確認します。Check for timeouts from the DictationRecognizer.
  5. [停止] ボタンが押されたとき、または mic セッションがタイムアウトになった場合は、 DictationRecognizer を停止します。When the Stop button is pressed, or the mic session times out, stop the DictationRecognizer.
  6. KeywordRecognizerを再起動します。これにより、[メッセージの送信] コマンドがリッスンされます。Restart the KeywordRecognizer, which will listen for the Send Message command.

では、始めましょう。Let's get started. MicrophoneManager.csの 3. a のコード演習をすべて完了するか、以下の完成したコードをコピーして貼り付けます。Complete all coding exercises for 3.a in MicrophoneManager.cs, or copy and paste the finished code found below:

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Windows.Speech;

namespace Academy
{
    public class MicrophoneManager : MonoBehaviour
    {
        [Tooltip("A text area for the recognizer to display the recognized strings.")]
        [SerializeField]
        private Text dictationDisplay;

        private DictationRecognizer dictationRecognizer;

        // Use this string to cache the text currently displayed in the text box.
        private StringBuilder textSoFar;

        // Using an empty string specifies the default microphone. 
        private static string deviceName = string.Empty;
        private int samplingRate;
        private const int messageLength = 10;

        // Use this to reset the UI once the Microphone is done recording after it was started.
        private bool hasRecordingStarted;

        void Awake()
        {
            /* TODO: DEVELOPER CODING EXERCISE 3.a */

            // 3.a: Create a new DictationRecognizer and assign it to dictationRecognizer variable.
            dictationRecognizer = new DictationRecognizer();

            // 3.a: Register for dictationRecognizer.DictationHypothesis and implement DictationHypothesis below
            // This event is fired while the user is talking. As the recognizer listens, it provides text of what it's heard so far.
            dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

            // 3.a: Register for dictationRecognizer.DictationResult and implement DictationResult below
            // This event is fired after the user pauses, typically at the end of a sentence. The full recognized string is returned here.
            dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

            // 3.a: Register for dictationRecognizer.DictationComplete and implement DictationComplete below
            // This event is fired when the recognizer stops, whether from Stop() being called, a timeout occurring, or some other error.
            dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

            // 3.a: Register for dictationRecognizer.DictationError and implement DictationError below
            // This event is fired when an error occurs.
            dictationRecognizer.DictationError += DictationRecognizer_DictationError;

            // Query the maximum frequency of the default microphone. Use 'unused' to ignore the minimum frequency.
            int unused;
            Microphone.GetDeviceCaps(deviceName, out unused, out samplingRate);

            // Use this string to cache the text currently displayed in the text box.
            textSoFar = new StringBuilder();

            // Use this to reset the UI once the Microphone is done recording after it was started.
            hasRecordingStarted = false;
        }

        void Update()
        {
            // 3.a: Add condition to check if dictationRecognizer.Status is Running
            if (hasRecordingStarted && !Microphone.IsRecording(deviceName) && dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                // Reset the flag now that we're cleaning up the UI.
                hasRecordingStarted = false;

                // This acts like pressing the Stop button and sends the message to the Communicator.
                // If the microphone stops as a result of timing out, make sure to manually stop the dictation recognizer.
                // Look at the StopRecording function.
                SendMessage("RecordStop");
            }
        }

        /// <summary>
        /// Turns on the dictation recognizer and begins recording audio from the default microphone.
        /// </summary>
        /// <returns>The audio clip recorded from the microphone.</returns>
        public AudioClip StartRecording()
        {
            // 3.a Shutdown the PhraseRecognitionSystem. This controls the KeywordRecognizers
            PhraseRecognitionSystem.Shutdown();

            // 3.a: Start dictationRecognizer
            dictationRecognizer.Start();

            // 3.a Uncomment this line
            dictationDisplay.text = "Dictation is starting. It may take time to display your text the first time, but begin speaking now...";

            // Set the flag that we've started recording.
            hasRecordingStarted = true;

            // Start recording from the microphone for 10 seconds.
            return Microphone.Start(deviceName, false, messageLength, samplingRate);
        }

        /// <summary>
        /// Ends the recording session.
        /// </summary>
        public void StopRecording()
        {
            // 3.a: Check if dictationRecognizer.Status is Running and stop it if so
            if (dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                dictationRecognizer.Stop();
            }

            Microphone.End(deviceName);
        }

        /// <summary>
        /// This event is fired while the user is talking. As the recognizer listens, it provides text of what it's heard so far.
        /// </summary>
        /// <param name="text">The currently hypothesized recognition.</param>
        private void DictationRecognizer_DictationHypothesis(string text)
        {
            // 3.a: Set DictationDisplay text to be textSoFar and new hypothesized text
            // We don't want to append to textSoFar yet, because the hypothesis may have changed on the next event
            dictationDisplay.text = textSoFar.ToString() + " " + text + "...";
        }

        /// <summary>
        /// This event is fired after the user pauses, typically at the end of a sentence. The full recognized string is returned here.
        /// </summary>
        /// <param name="text">The text that was heard by the recognizer.</param>
        /// <param name="confidence">A representation of how confident (rejected, low, medium, high) the recognizer is of this recognition.</param>
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // 3.a: Append textSoFar with latest text
            textSoFar.Append(text + ". ");

            // 3.a: Set DictationDisplay text to be textSoFar
            dictationDisplay.text = textSoFar.ToString();
        }

        /// <summary>
        /// This event is fired when the recognizer stops, whether from Stop() being called, a timeout occurring, or some other error.
        /// Typically, this will simply return "Complete". In this case, we check to see if the recognizer timed out.
        /// </summary>
        /// <param name="cause">An enumerated reason for the session completing.</param>
        private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
        {
            // If Timeout occurs, the user has been silent for too long.
            // With dictation, the default timeout after a recognition is 20 seconds.
            // The default timeout with initial silence is 5 seconds.
            if (cause == DictationCompletionCause.TimeoutExceeded)
            {
                Microphone.End(deviceName);

                dictationDisplay.text = "Dictation has timed out. Please press the record button again.";
                SendMessage("ResetAfterTimeout");
            }
        }

        /// <summary>
        /// This event is fired when an error occurs.
        /// </summary>
        /// <param name="error">The string representation of the error reason.</param>
        /// <param name="hresult">The int representation of the hresult.</param>
        private void DictationRecognizer_DictationError(string error, int hresult)
        {
            // 3.a: Set DictationDisplay text to be the error string
            dictationDisplay.text = error + "\nHRESULT: " + hresult;
        }

        /// <summary>
        /// The dictation recognizer may not turn off immediately, so this call blocks on
        /// the recognizer reporting that it has actually stopped.
        /// </summary>
        public IEnumerator WaitForDictationToStop()
        {
            while (dictationRecognizer != null && dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                yield return null;
            }
        }
    }
}

ビルドと配置Build and Deploy

  • Visual Studio でリビルドし、デバイスにデプロイします。Rebuild in Visual Studio and deploy to your device.
  • エアタップジェスチャで [フィット] ボックスを閉じます。Dismiss the fit box with an air-tap gesture.
  • Astronaut の watch を見つめ、 "Open Communicator" と言います。Gaze at the astronaut's watch and say "Open Communicator".
  • [録音] ボタン (マイク) を選択して、メッセージを記録します。Select the Record button (microphone) to record your message.
  • 読み上げを開始します。Start speaking. ディクテーションレコグナイザーは、音声を解釈し、そのテキストを communicator で表示します。The Dictation Recognizer will interpret your speech and show the hypothesized text in the communicator.
  • メッセージを記録しているときに、 "メッセージの送信" をお試しください。Try saying "Send Message" while you are recording a message. ディクテーションレコグナイザーがまだアクティブであるため、キーワードレコグナイザーは応答しないことに注意してください。Notice that the Keyword Recognizer does not respond because the Dictation Recognizer is still active.
  • 数秒間読み上げを停止します。Stop speaking for a few seconds. ディクテーションレコグナイザーが仮説を完了し、最終的な結果が表示されることを確認します。Watch as the Dictation Recognizer completes its hypothesis and shows the final result.
  • 読み上げを開始し、20秒間一時停止します。Begin speaking and then pause for 20 seconds. これにより、ディクテーションレコグナイザーがタイムアウトします。This will cause the Dictation Recognizer to timeout.
  • 上記のタイムアウト後に、キーワード認識エンジンが再度有効になっていることに注意してください。Notice that the Keyword Recognizer is re-enabled after the above timeout. これで、communicator は音声コマンドに応答します。The communicator will now respond to voice commands.
  • Astronaut にメッセージを送信するには、 "メッセージの送信" と言います。Say "Send Message" to send the message to the astronaut.

Chapter 4-文法レコグナイザーChapter 4 - Grammar Recognizer

目的Objectives

  • SRGS、または音声認識の文法指定ファイルに従って、ユーザーの音声を認識するには、文法認識エンジンを使用します。Use the Grammar Recognizer to recognize the user's speech according to an SRGS, or Speech Recognition Grammar Specification, file.

注意

マイクから録音するアプリのマイク機能を宣言する必要があります。The Microphone capability must be declared for an app to record from the microphone. これは、MR 入力212で既に行われていますが、独自のプロジェクトでは考慮しておいてください。This is done for you already in MR Input 212, but keep this in mind for your own projects.

  1. Unity エディターで、[Edit > Project Settings > Player] の順に移動して、windows media player の設定に移動します。In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player"
  2. [ユニバーサル Windows プラットフォーム] タブをクリックします。Click on the "Universal Windows Platform" tab
  3. [発行設定 > 機能] セクションで、マイクの機能を確認します。In the "Publishing Settings > Capabilities" section, check the Microphone capability

手順Instructions

  1. [階層] パネルで、 Jetpack_Centerを検索して選択します。In the Hierarchy panel, search for Jetpack_Center and select it.
  2. [インスペクター ] パネルでtagalongスクリプトを探します。Look for the Tagalong Action script in the Inspector panel.
  3. オブジェクトの右側にある小さな円をクリックして、フィールドにタグを付けます。Click the little circle to the right of the Object To Tag Along field.
  4. ポップアップ表示されたウィンドウで、[ Srgstoolbox] を検索し、一覧から選択します。In the window that pops up, search for SRGSToolbox and select it from the list.
  5. Streamingassetsフォルダー内のSrgscolor .xmlファイルを見てみましょう。Take a look at the SRGSColor.xml file in the StreamingAssets folder.
  • SRGS の設計仕様は、W3Cの web サイトにあります。The SRGS design spec can be found on the W3C website here.
  • この SRGS ファイルには、次の3種類のルールがあります。In our SRGS file, we have three types of rules:
    • 12色のリストから1色を指定できるルール。A rule which lets you say one color from a list of twelve colors.
    • 色ルールと3つの図形の組み合わせをリッスンする3つのルール。Three rules which listen for a combination of the color rule and one of the three shapes.
    • ルートルールである colorChooser は、3つの "カラー + シェイプ" ルールの任意の組み合わせをリッスンします。The root rule, colorChooser, which listens for any combination of the three "color + shape" rules. 図形は任意の順序で、任意の量の任意の数を3つにすることができます。The shapes can be said in any order and in any amount from just one to all three. これは、最初<の文法>タグのファイルの先頭にルートルールとして指定されているので、でリッスンされる唯一のルールです。This is the only rule that is listened for, as it's specified as the root rule at the top of the file in the initial <grammar> tag.

ビルドと配置Build and Deploy

  • Unity でアプリケーションをリビルドし、Visual Studio からビルドしてデプロイし、HoloLens でアプリを体験します。Rebuild the application in Unity, then build and deploy from Visual Studio to experience the app on HoloLens.
  • エアタップジェスチャで [フィット] ボックスを閉じます。Dismiss the fit box with an air-tap gesture.
  • Astronaut の jetpack を見つめ、エアタップジェスチャを実行します。Gaze at the astronaut's jetpack and perform an air-tap gesture.
  • 読み上げを開始します。Start speaking. 文法認識エンジンは、音声を解釈し、認識に基づいて図形の色を変更します。The Grammar Recognizer will interpret your speech and change the colors of the shapes based on the recognition. コマンドの例としては、"blue circle, 黄色い square" などがあります。An example command is "blue circle, yellow square".
  • 別のエアタップジェスチャを実行して、ツールボックスを閉じます。Perform another air-tap gesture to dismiss the toolbox.

最後ですThe End

おめでとうございます!Congratulations! これで MR 入力212 が完了しました。音声You have now completed MR Input 212: Voice.

  • 音声コマンドの Dos とすべきがわかっています。You know the Dos and Don'ts of voice commands.
  • ユーザーが音声コマンドを認識できるように、ツールヒントがどのように使用されたかを見てきました。You saw how tooltips were employed to make users aware of voice commands.
  • ユーザーの声が聞こえたことを認識するために使用されるフィードバックの種類がいくつかあります。You saw several types of feedback used to acknowledge that the user's voice was heard.
  • キーワードレコグナイザーとディクテーション認識エンジンを切り替える方法と、これら2つの機能が音声を理解し、解釈する方法について説明します。You know how to switch between the Keyword Recognizer and the Dictation Recognizer, and how these two features understand and interpret your voice.
  • アプリケーションで、SRGS ファイルと文法認識エンジンを使用して音声認識を行う方法を学習しました。You learned how to use an SRGS file and the Grammar Recognizer for speech recognition in your application.