注意

Mixed Reality Academy チュートリアルでは、HoloLens として設計された (第 1 世代) と混在の現実イマーシブ ヘッドセットに注意してください。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

音声入力により、当社ホログラムと対話することもできます。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、2 つの単純な音声コマンドの作成に、KeywordRecognizer を使いました。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 の音声認識エンジン用に最適化された音声コマンドをデザインします。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 入力 210MR 入力 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

  • 「マイ コードのみを有効にする」無効にする必要があります (unchecked) -> ツールの 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 音声フォルダー以前されていないアーカイブします。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 では、次のように選択します。ファイル > Build Settingsします。In Unity, select File > Build Settings.
  2. 場合シーン/ModelExplorerに記載されていないScenes In Build、 をクリックして開くシーンを追加シーンを追加します。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. 確認ビルド タイプに設定されているD3DSDKに設定されているインストールされている最新(16299 またはそれ以降の SDK がある必要があります)。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. 1 回のクリック、アプリフォルダー。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 アドレスがわからない場合に参照設定 > ネットワークとインターネット > 詳細オプションします。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. アプリが展開されると、消去、 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).

第 1 章 - 認識Chapter 1 - Awareness

目標Objectives

  • について説明します、注意事項の音声コマンド デザインします。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. たとえば、アプリケーションに表示または非表示になりますが、注オブジェクトがある場合はいないコマンドを使用する 「プラカードを表示」「プラカード」はめったに使用される用語であるためです。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

  • 1 つ音節コマンドを使用します。Use single syllable commands. 例として、音声、ビデオを再生するコマンドを作成する場合を避ける必要があります、単純なコマンドを使用して 「再生」 音節は 1 つのみであり、システムで簡単に見落とされる可能性があります。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" コマンドは、現在フォーカスがあるオブジェクトのタップ イベントをトリガーする、システムによって予約されています。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. などの場合は、アプリケーションでキューブを選択するための音声コマンドが 「キューブの選択」 ユーザーが求めていた球体で、コマンドを載せた、ときに球は、代わりに、選択した後、します。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. RemoveRemove
  • ようなサウンドを使用します。Use similar sounds. 広げると覚える音声コマンドを使用しないようにしてください。Try to avoid using voice commands that rhyme. サポート ショッピング アプリケーションがあれば 「ストアの表示」「詳細」 し、もう一方を使用していたときに、コマンドのいずれかを無効にすると、同様の音声コマンド。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. たとえば、使用する可能性があります、 「を表示する格納」 、ストアを開くボタンをクリックし、ストアが表示されたときにそのコマンドを無効にできるように、 「詳細」 コマンドが参照される可能性があります。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. これは、「宇宙飛行士のウォッチ式は、音声コマンドに応答します。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 では、次のように使用します。ファイル > Build Settings 、アプリケーションをリビルドします。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.
  • 「宇宙飛行士ウォッチを見つめます。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.
  • Watch でツールヒントが表示されることを確認します。Verify that a tooltip appears on the watch. これにより、ユーザーの検出、 "開いている Communicator" コマンド。This helps users discover the "Open Communicator" command.
  • ウォッチで gazing、中に答えて "開く Communicator" communicator パネルを開きます。While gazing at the watch, say "Open Communicator" to open the communicator panel.

第 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 エディターは、「> プロジェクトの設定 > プレーヤーの編集」に移動して、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.
  • インスペクターパネルで、検索、飛行士ウォッチ (スクリプト) コンポーネント。In the Inspector panel, find the Astronaut Watch (Script) component.
  • 値として設定されますが、小さな青いキューブをクリックして、 Communicator Prefabプロパティ。Click on the small, blue cube which is set as the value of the Communicator Prefab property.
  • プロジェクトパネル、 Communicatorプレハブはフォーカスがあるようになりました。In the Project panel, the Communicator prefab should now have focus.
  • をクリックして、 Communicatorのプレハブ、プロジェクトでそのコンポーネントを表示するパネル、インスペクターします。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. これによって、ユーザー メッセージを記録、再生、および、飛行士にメッセージを送信します。This will allow our users to record a message, play it back, and send the message to the astronaut. 開始もとそれぞれの声が聞こえたことをユーザーに確認をアニメーション化された波フォームを停止します。It will also start and stop an animated wave form, to acknowledge to the user that their voice was heard.

  • Communicator.csから次の行 (81 および 82) を削除、開始メソッド。In Communicator.cs, delete the following lines (81 and 82) from the Start method. これは、communicator の 'Record' ボタンを有効になります。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.
  • 「宇宙飛行士ウォッチ見つめますと答えて "開いている Communicator" 、communicator を表示します。Gaze at the astronaut's watch and say "Open Communicator" to show the communicator.
  • キーを押して、レコード口頭でメッセージを「宇宙飛行士記録を開始するボタン (マイク)。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 を閉じてから、「宇宙飛行士 'メッセージが受信した' 応答を受信しますします。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.

この章でディクテーション認識エンジン、飛行士に対するメッセージの作成に使用します。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 エディターは、「> プロジェクトの設定 > プレーヤーの編集」に移動して、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. 3. a でのコーディングの練習をすべて完了MicrophoneManager.cs、またはコピーして、下の完成したコードを貼り付けます。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.
  • 「宇宙飛行士ウォッチ見つめますと答えて "開いている 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.
  • たとえば 「メッセージの送信」 飛行士にメッセージを送信します。Say "Send Message" to send the message to the astronaut.

第 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 エディターは、「> プロジェクトの設定 > プレーヤーの編集」に移動して、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. 探して、末尾アクションでスクリプトを作成、インスペクターパネル。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. 見て、 SRGSColor.xmlファイル、 StreamingAssetsフォルダー。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 つの図形の 1 つの組み合わせをリッスンする 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 つすべてを 1 つだけで、図形と言えます。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 では、アプリケーションをリビルドし、ビルド HoloLens でアプリを体験する Visual Studio からデプロイします。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.
  • 「宇宙飛行士の 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. コマンドの例は、「青色、黄色の正方形」です。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.