HoloLens (1. generációs) Bemenet 212: Hang

Fontos

Az Mixed Reality Academy oktatóanyagai az HoloLens (1. generációs), a Unity 2017 és Mixed Reality Modern headsetek szem előtt tartva voltak megtervezve. Ezért fontos, hogy ezeket az oktatóanyagokat a helyére helyezzük azoknak a fejlesztőknek, akik továbbra is útmutatást keresnek az eszközök fejlesztéséhez. Ezek az oktatóanyagok nem frissülnek a HoloLens 2-es verziójához használt legújabb eszközkészletekkel vagy interakciókkal, és előfordulhat, hogy nem kompatibilisek a Unity újabb verzióival. A rendszer fenntartja őket, hogy továbbra is a támogatott eszközökön dolgoznak. A 2. HoloLens új oktatóanyag-sorozat lett közzétéve.

A hangbemenet egy másik lehetőséget biztosít a hologramok kommunikációjára. A hangparancsok nagyon természetes és egyszerű módon működnek. Úgy tervezd meg a hangparancsokat, hogy azok a következők:

  • Természetes
  • Könnyű megjegyezni
  • Környezetnek megfelelő
  • Az ugyanazon környezeten belüli egyéb lehetőségektől való megfelelő különbözik

Az MR Basics 101-bena KeywordRecognizer használatával két egyszerű hangparancsot hoztunk létre. Az MR Input 212-ben a következővel ismerkedünk meg:

  • A beszédfelismerési motorhoz HoloLens hangparancsokat tervez.
  • Tudatossa a felhasználóval, hogy milyen hangparancsok érhetők el.
  • Nyugtázza, hogy a felhasználó hangparancsát már meghallgatta.
  • Ismerje meg a felhasználó által mondott dictation recognizert.
  • A Grammar Recognizer használatával egy SRGS- vagy beszédfelismerési nyelvtani specifikáción alapuló parancsokat figyel.

Ebben a kurzusban visszatérünk a Modellkezelőre, amelyet az MR Input 210 és az MR Input 211 használatával építettünk fel.

Fontos

Az alábbi fejezetekbe beágyazott videók a Unity egy régebbi verziójával és a Mixed Reality Toolkittel voltak rögzítve. Bár a részletes utasítások pontosak és aktuálisak, a megfelelő videókban már elavult szkriptek és vizualizációk is lehetnek. A videók az utókor számára is szerepelnek, és mivel a fogalmak továbbra is érvényesek.

Eszköztámogatás

Tanfolyam HoloLens Modern headsetek
MR Input 212: Voice ✔️ ✔️

Előkészületek

Előfeltételek

Project fájlok

  • Töltse le a projekthez szükséges fájlokat. Unity 2017.2-es vagy újabb szükséges hozzá.
  • Archiválja a fájlokat az asztalra vagy más könnyen elérhető helyre.

Megjegyzés

Ha a letöltés előtt át szeretné nézni a forráskódot, az a következő GitHub.

Kiszámíthatatlan és megjegyzések

  • Az "Saját kód engedélyezése" beállításnak le kell tiltva(nincsbejelölve) a Visual Studio Eszközök – Beállítások – Hibakeresés alatt, hogy töréspontokat ásson el a > kódban.

Unity beállítása

Utasítások

  1. Indítsa el a Unityt.
  2. Válassza a Megnyitás lehetőséget.
  3. Lépjen a HolographicAcademy-Hologramok-212-Voice mappába, amelyet korábban archivált.
  4. Keresse meg és válassza ki a StartingModel Explorer (Modellkezelő indítása) mappát.
  5. Kattintson a Mappa kiválasztása gombra.
  6. A Project bontsa ki a Scenes mappát.
  7. Kattintson duplán a ModelExplorer jelenetre a Unitybe való betöltéséhez.

Épület

  1. A Unityben válassza a File Build Gépházlehetőséget.
  2. Ha a Scenes/ModelExplorer nem szerepel a Scenes In Build(Buildelési jelenetek) listában, kattintson az Add Open Scenes (Nyitott jelenetek hozzáadása) elemre a jelenet hozzáadásához.
  3. Ha kifejezetten a fejlesztést használja a HoloLens, állítsa a Céleszközt akövetkezőre: HoloLens. Ellenkező esetben hagyja a Bármely eszközön.
  4. Győződjön meg arról, hogy a Build Type (Build típusa) beállítása D3D, az SDK beállítása pedig Latest installed (Legújabb telepített) (sdk 16299 vagy újabb).
  5. Kattintson a Build (Build) gombra.
  6. Hozzon létre egy "App" nevű új mappát.
  7. Kattintson egyszer az Alkalmazás mappára.
  8. Kattintson a Select Folder (Mappa kiválasztása) gombra, és a Unity elkezdi a projekt Visual Studio.

Amikor a Unity végzett, megjelenik egy Fájlkezelő ablak.

  1. Nyissa meg az Alkalmazás mappát.
  2. Nyissa meg a ModelExplorer Visual Studio Solution (Megoldás) gombra.

Ha az üzembe helyezés a HoloLens:

  1. Az eszköz felső eszköztárának Visual Studio módosítsa a célt Hibakeresésről Kiadásra, ARM-ről x86-ra.
  2. Kattintson a Helyi gép gomb melletti legördülő nyílra, és válassza a Távoli gép lehetőséget.
  3. Adja meg a HoloLens IP-címét, és állítsa a Hitelesítési módot Univerzális (Titkosítatlan protokoll) beállításra. Kattintson a Kiválasztás elemre. Ha nem ismeri az eszköz IP-címét, keresse meg Gépház Hálózati internet speciális beállításai &> lehetőséget.
  4. A felső menüsávon kattintson a Debug - Start Without debugging (Hibakeresés – Indítás hibakeresés nélkül) elemre, vagy nyomja le a Ctrl + F5 billentyűkombinációt. Ha ez az első üzembe helyezés az eszközön, a következővel kell párosítani: Visual Studio.
  5. Az alkalmazás üzembe helyezése után egy kijelölési kézmozdulattal mellőzheti a Fitboxot.

Modern headseten való üzembe helyezés esetén:

  1. Az eszköz felső eszköztárának Visual Studio módosítsa a célt Hibakeresésről Kiadásra, ARM-ről x64-re.
  2. Győződjön meg arról, hogy az üzembe helyezési célhely a Helyi gép beállításra van beállítva.
  3. A felső menüsávon kattintson a Debug - Start Without debugging (Hibakeresés – Indítás hibakeresés nélkül) elemre, vagy nyomja le a Ctrl + F5 billentyűkombinációt.
  4. Az alkalmazás üzembe helyezése után az eseményindítót egy mozgásvezérlőre leküldve bezárhatja a Fitboxot.

Megjegyzés

A Hibák panelen vörös Visual Studio is észrevehet. Ezeket biztonságosan figyelmen kívül hagyhatja. Váltson a Kimenet panelre a build tényleges folyamatának megtekintéséhez. A Kimeneti panel hibáihoz javításra van szükség (leggyakrabban egy szkript hibája okozza őket).

1. fejezet – Tudatosság

Célkitűzések

  • Ismerje meg a Hangparancsok tervezésének dos and Don'ts of voice command design (A hangalapú parancsok tervezése és a nem jó parancsok) útmutatót.
  • A KeywordRecognizer használatával tekintetalapú hangparancsokat adhat hozzá.
  • A kurzor-visszajelzés használatával a felhasználók figyelmét a hangparancsokkal lehet tudatni.

Hangparancsok tervezése

Ebben a fejezetben megismeri a hangparancsok tervezését. Hangparancsok létrehozásakor:

DO

  • Hozzon létre tömör parancsokat. Nem szeretné a "Jelenlegkiválasztott videó lejátszása" parancsot használni, mert ez a parancs nem tömör, és a felhasználó könnyen elfelejtheti. Ehelyett a "Play Video"(Videó lejátszása) használhatja, mert az tömör, és több szótagból áll.
  • Használjon egyszerű szókincset. Mindig olyan gyakori szavakat és kifejezéseket használjon, amelyek könnyen felfedezhetőek és könnyen megjegyezni a felhasználó számára. Ha például az alkalmazás egy olyan jegyzetobjektummal volt, amely megjeleníthető vagy elrejthető a nézetből, nem használhatja a "Placard megjelenítése"parancsot, mert a "placard" kifejezés ritkán használt kifejezés. Ehelyett a "Show Note"(Megjegyzés megjelenítése) paranccsal fedje fel a megjegyzést az alkalmazásban.
  • Legyen konzisztens. A hangparancsokat konzisztensnek kell tartania az alkalmazásban. Imagine, hogy az alkalmazásban két jelenet található, és mindkét jelenet tartalmaz egy gombot az alkalmazás bezárásához. Ha az első jelenet az "Exit" (Kilépés) parancsot használta a gomb aktiválására, de a második jelenet az "Alkalmazás bezárása"parancsot használta, akkor a felhasználó nagyon zavaros lesz. Ha ugyanaz a funkció több helyszínen is megmarad, akkor ugyanazt a hangparancsot kell használni az aktiváláshoz.

NEM

  • Használjon egyetlen szótagos parancsokat. Ha például hangparancsot hoz létre egy videó lejátszására, ne használja az egyszerű "Lejátszás"parancsot, mivel ez csak egyetlen szótag, és a rendszer könnyen kihagyhatja. Ehelyett a "Play Video"(Videó lejátszása) használhatja, mert az tömör, és több szótagból áll.
  • Használjon rendszerparancsokat. A "Select" parancsot a rendszer lefoglalja, hogy egy Koppintás eseményt indítson el az aktuálisan összpontosított objektumhoz. Ne használja újra a "Select" parancsot egy kulcsszóban vagy kifejezésben, mert előfordulhat, hogy nem a vártnak megfelelő lesz. Ha például az alkalmazásban a kocka kiválasztására vonatkozó hangparancs a "Select cube"(Kocka kiválasztása) volt, de a felhasználó egy sphere-t figyelt a parancs kiejtve, akkor a sphere lesz kiválasztva. Hasonlóképpen az alkalmazássáv parancsai is engedélyezve vannak. Ne használja a következő beszédparancsokat a CoreWindow Nézetben:
    1. Menj vissza
    2. Görgetőeszköz
    3. Nagyítási eszköz
    4. Áthúzó eszköz
    5. Adjust
    6. Eltávolítás
  • Használjon hasonló hangokat. Kerülje a hangparancsok használatának mellőzését. Ha olyan bevásárlóalkalmazása van, amely támogatja a "Show Store" (Áruház megjelenítése) és a "Show More" (Több megjelenítése) hangparancsot, akkor le kell tiltania az egyik parancsot, amíg a másik használatban volt. A "Show Store" (Áruház megjelenítése) gombbal például megnyithatja az áruházat, majd letilthatja ezt a parancsot az áruház megjelenítésekor, hogy a "További megjelenítése" parancs használható legyen a böngészéshez.

Utasítások

  • A Unity Hierarchy panelen a keresőeszköz használatával keresse meg a holoComm_screen_mesh objektumot.
  • Kattintson duplán a holoComm_screen_mesh objektumra, hogy megtekintse a Scene (Jelenet) nézetben. Ez az űrhajós karóra, amely válaszol a hangparancsainkra.
  • Az Inspector panelen keresse meg a Speech Input Source (Script) összetevőt.
  • Bontsa ki a Keywords (Kulcsszavak) szakaszt a támogatott hangparancs megnyitásához: Open Communicator.
  • Kattintson a jobb oldalon található fogasfedőre, majd válassza a Szkript szerkesztése lehetőséget.
  • A SpeechInputSource.cs fájlban megismerheti, hogyan használja a KeywordRecognizert hangparancsok hozzáadásához.

Build és üzembe helyezés

  • A Unityben a File Build Gépház az alkalmazás újraépítéséhez.
  • Nyissa meg az Alkalmazás mappát.
  • Nyissa meg a ModelExplorer Visual Studio Solution (Megoldás) gombra.

(Ha a telepítés során már felépítette/üzembe Visual Studio a projektet a Visual Studio, akkor megnyithatja a VS ezen példányát, és ha a rendszer kéri, kattintson az "Összes újratöltése" gombra).

  • A Visual Studio kattintson a Hibakeresés – Indítás hibakeresés nélkül lehetőségre, vagy nyomja le a Ctrl + F5 billentyűkombinációt.
  • Miután az alkalmazás üzembe helyezése a HoloLens, a légi koppintásos kézmozdulattal mellőzheti a beillesztést.
  • Tekintsen az űrhajós figyelőre.
  • Ha az óra fókuszban van, ellenőrizze, hogy a kurzor mikrofonra változik-e. Ez visszajelzést ad arról, hogy az alkalmazás hangparancsokat figyel.
  • Ellenőrizze, hogy megjelenik-e elemleírás az óra alatt. Ez segít a felhasználóknak az "Open Communicator" parancs felderítésében.
  • Miközben az órát nézi, mondja ki a "Communicator" a kommunikációs panel megnyitásához.

2. fejezet – Nyugtázás

Célkitűzések

  • Rögzítsen egy üzenetet a Mikrofon bemenettel.
  • Visszajelzés küldése a felhasználónak arról, hogy az alkalmazás figyel a hangjára.

Megjegyzés

A Mikrofon képességet deklarálni kell ahhoz, hogy egy alkalmazás rögzítsen a mikrofonból. Ezt már az MR Input 212-ben is meg kell tenni, de ezt tartsa szem előtt a saját projektjeinél.

  1. A Unity-szerkesztőben a lejátszó beállításaihoz navigáljon az Edit > Project Gépház > Player (Lejátszó szerkesztése) elemre.
  2. Kattintson az "Univerzális Windows platform" lapra
  3. A "Közzétételi Gépház > képességek" szakaszban ellenőrizze a > képességet

Utasítások

  • Ellenőrizze a Unity Hierarchy panelen, hogy a holoComm_screen_mesh van-e kiválasztva.
  • Az Inspector panelen keresse meg az Astronaut Watch (Script) összetevőt.
  • Kattintson a kis, kék kockára, amely a Prefab Communicator értékeként van beállítva.
  • A Project panelen az Communicator előfabnak fókuszban kell lennie.
  • Kattintson a Communicator panelen a Project panelen, hogy megtekintse az összetevőit az Inspector (Vizsgáló) nézetben.
  • Nézze meg a Mikrofonkezelő (szkript) összetevőt, amely lehetővé teszi a felhasználó hangjának rögzítését.
  • Figyelje meg, Communicator objektum rendelkezik egy Speech Input Handler (Script) összetevővel, amely válaszol az Üzenet küldése parancsra.
  • Nézze meg a Communicator (Script) összetevőt, és kattintson duplán a szkriptre annak megnyitásához a Visual Studio.

Communicator.cs fájl felelős a megfelelő gomb-beállítások beállításáért a kommunikációs eszközön. Ez lehetővé teszi, hogy a felhasználók rögzítsenek egy üzenetet, lejátszják azt, és elküldjék az üzenetet az űrhajósnak. Elindít és leállít egy animált hulláműrlapokat is, hogy a felhasználónak tudomásul veszi a hangját.

  • A Communicator.cs fájlbantörölje a következő sorokat (81 és 82) a Start metódusból. Ez engedélyezi a "Rekord" gombot a kommunikálón.
// TODO: 2.a Delete the following two lines:
RecordButton.SetActive(false);
MessageUIRenderer.gameObject.SetActive(false);

Build és üzembe helyezés

  • A Visual Studio újraépítheti az alkalmazást, és üzembe helyezheti az eszközön.
  • Tekintse meg az űrhajós figyelőt, és mondja ki az "Open Communicator" (Megnyitási ablak) szót a kommunikáló eszköz megnyitásához.
  • Nyomja meg a Rekord gombot (mikrofon) az űrhajósnak küldött szóbeli üzenet rögzítéséhez.
  • Kezdjen el beszélni, és ellenőrizze, hogy a hullám animációja a kommunikálón játszik-e, amely visszajelzést küld a felhasználónak, hogy hallatták a véleményét.
  • Nyomja le a Leállítás gombot (bal oldali négyzet), és ellenőrizze, hogy a hullám animációja leállt-e.
  • Nyomja le a Lejátszás gombot (a jobb háromszög) a rögzített üzenet lejátszáshoz és az eszközön való hanghoz.
  • Nyomja le a Leállítás gombot (jobb négyzet), hogy leállítsa a rögzített üzenet lejátszását.
  • Mondja ki az "Üzenet küldése" szót a kommunikáló bezárása és az űrhajóstól kapott üzenetre adott válasz fogadása érdekében.

3. fejezet – A Dictation Recognizer ismertetése

Célkitűzések

  • A Dictation Recognizer használatával szöveggé konvertálhatja a felhasználó beszédét.
  • A Dictation Recognizer hipotézis- és végső eredményeinek megjelenítése a kommunikálóban.

Ebben a fejezetben a Dictation Recognizer használatával létrehozunk egy üzenetet az űrhajós számára. A Dictation Recognizer használata során tartsa szem előtt a következőt:

  • Ahhoz, hogy a Dictation Recognizer működjön, csatlakozva kell lennie a Wi-Fi-hez.
  • Az időtúllépések adott idő után következnek be. Két időtúllépést kell figyelembe vegye:
    • Ha a felismerő elindul, és az első öt másodpercben nem hall hanganyagot, időtúllépés történik.
    • Ha a felismerő adott eredményt, de ezután 20 másodpercig hallja a csendet, időtúllépés történik.
  • Egyszerre csak egy típusú recognizer (kulcsszó vagy diktálás) futtatható.

Megjegyzés

A Mikrofon képességet deklarálni kell ahhoz, hogy egy alkalmazás rögzítsen egy mikrofont. Ez már az MR Input 212-ben is meg van tartva, de ezt tartsa szem előtt a saját projektjeinél.

  1. A Unity-szerkesztőben a "Lejátszó szerkesztése" elemre navigálva navigáljon a > Project Gépház > beállításokhoz
  2. Kattintson az "Univerzális Windows Platform" lapra
  3. A "Közzétételi Gépház > képességek" szakaszban ellenőrizze a > képességet

Utasítások

A Dictation Recognizer használatára szerkesztjük a MicrophoneManager.cs-t. A következőt fogjuk hozzáadni:

  1. A Rekord gomb megnyomásakor elindítjuk a DictationRecognizert.
  2. A DictationRecognizer által megértett hipotézis megjelenítése.
  3. Zárolja a DictationRecognizer által megértett eredményeket.
  4. Ellenőrizze, hogy vannak-e időtúllépések a DictationRecognizerben.
  5. Amikor megnyomja a Leállítás gombot, vagy a mikrofon-munkamenet időkorrekta, állítsa le a DictationRecognizert.
  6. Indítsa újra a KeywordRecognizert,amely az Üzenet küldése parancsot fogja figyelni.

Lássunk neki! A MicrophoneManager.csfájlban töltse ki a 3.a összes kódolási gyakorlatát, vagy másolja és illessze be az alább található kész kódot:

// 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 és üzembe helyezés

  • Építse újra Visual Studio, majd telepítse az eszközre.
  • A beillesztés mező mellőzését egy légi koppintásos kézmozdulattal.
  • Tekintsen az űrhajós karóra, és mondja ki az "Open Communicator" szót.
  • Válassza a Rekord gombot (mikrofon) az üzenet rögzítéséhez.
  • Kezdjen el beszélni. A Dictation Recognizer értelmezi a beszédet, és a hipotézist felismerő szöveget mutatja a kommunikálóban.
  • Próbálja ki a "Send Message" (Üzenet küldése) üzenetet az üzenet rögzítése közben. Figyelje meg, hogy a Keyword Recognizer nem válaszol, mert a Dictation Recognizer még aktív.
  • Néhány másodpercig nem kell tovább beszélnie. Figyelje meg, ahogy a Dictation Recognizer befejezi a hipotézist, és megjeleníti a végeredményt.
  • Kezdjen el beszélni, majd szüneteltesse 20 másodpercig. Ez időtúllépést okoz a Dictation Recognizerben.
  • Figyelje meg, hogy a fenti időtúllépés után újra engedélyezve van a Kulcsszavas felismerés. A kommunikáló mostantól válaszol a hangparancsra.
  • Mondja ki az "Üzenet küldése" szót, hogy elküldjék az üzenetet az űrhajósnak.

4. fejezet – Grammar Recognizer

Célkitűzések

  • A Grammar Recognizer használatával felismerhető a felhasználó beszéde egy SRGS-fájl vagy beszédfelismerési nyelvtani specifikáció alapján.

Megjegyzés

A Mikrofon képességet deklarálni kell ahhoz, hogy egy alkalmazás rögzítsen egy mikrofont. Ez már az MR Input 212-ben is meg van tartva, de ezt tartsa szem előtt a saját projektjeinél.

  1. A Unity-szerkesztőben a "Lejátszó szerkesztése" elemre navigálva navigáljon a > Project Gépház > beállításokhoz
  2. Kattintson az "Univerzális Windows Platform" lapra
  3. A "Közzétételi Gépház > képességek" szakaszban ellenőrizze a > képességet

Utasítások

  1. A Hierarchy (Hierarchia) panelen keressen rá a Jetpack_Center, és jelölje ki.
  2. Keresse meg a Tagalong action szkriptet az Inspector panelen.
  3. Kattintson az Object To Tag Along mező jobb oldalon a kis körre.
  4. A felugró ablakban keressen rá az SRGSToolbox kifejezésre, és válassza ki a listából.
  5. Nézze meg a StreamingAssetsSRGSColor.xml fájlját.
    1. Az SRGS tervezési specifikációját itt, a W3C webhelyén talál.

Az SRGS-fájlban három szabálytípus található:

  • Egy olyan szabály, amely lehetővé teszi, hogy egy színt a 12 színből listából mondjon ki.
  • Három szabály, amelyek a színszabály és a három alakzat kombinációját figyelik.
  • A colorChooser gyökérszabály, amely a három "szín + alakzat" szabály bármilyen kombinációját figyeli. Az alakzatok bármilyen sorrendben és bármilyen mennyiségben mondhatóak, csak egytől mindháromhoz. Ez az egyetlen szabály, amely a számára meg van adva, mivel gyökérszabályként van megadva a fájl tetején a kezdeti < nyelvtani > címkében.

Build és üzembe helyezés

  • Építse újra az alkalmazást a Unityben, majd hozza létre és Visual Studio az alkalmazást a HoloLens.
  • A beillesztés mező mellőzését egy légi koppintásos kézmozdulattal.
  • Tekintsen az űrhajós jetpackre, és hajtson végre egy légi koppintásos kézmozdulatot.
  • Kezdjen el beszélni. A Grammar Recognizer értelmezi a beszédet, és a felismerés alapján módosítja az alakzatok színét. Ilyen parancs például a "kék kör, sárga négyzet".
  • Végezzen el még egy légi koppintásos kézmozdulatot az eszközkészlet elvetését.

Vége

Gratulálunk! Befejezte az MR Input 212: Voice (Mr. bemenet 212: Hang) műveletét.

  • Ismeri a hangparancsok dos és ne típusú parancsát.
  • Láthatta, hogyan használhatók az elemleírások arra, hogy a felhasználók tisztában legyenek a hangparancsokkal.
  • Több típusú visszajelzést is látott, amelyek annak nyugtázára használták, hogy a felhasználó véleményét meghallgatta.
  • Tudja, hogyan válthat a Kulcsszófelismerés és a Dictation Recognizer között, és hogy a két funkció hogyan értelmezi és értelmezi a hangot.
  • Megtanulta, hogyan használhatja az SRGS-fájlt és a Grammar Recognizert beszédfelismeréshez az alkalmazásban.