Observação

Os tutoriais misturados do Academia de realidade foram projetados com o HoloLens (1º gen) e com o fone de cabeça de imersão de realidade misturada.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. Como tal, achamos que é importante deixar esses tutoriais em vigor para os desenvolvedores que ainda estão procurando orientação no desenvolvimento para esses dispositivos.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. Esses tutoriais não serão atualizados com os conjuntos de ferramentas e as interações mais recentes usados para o HoloLens 2.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Eles serão mantidos para continuar a trabalhar nos dispositivos com suporte.They will be maintained to continue working on the supported devices. Uma nova série de tutoriais foi postada para o HoloLens 2.A new series of tutorials has been posted for HoloLens 2.


Entrada MR 212: vozMR Input 212: Voice

A entrada de voz nos dá outra maneira de interagir com nossos hologramas.Voice input gives us another way to interact with our holograms. Os comandos de voz funcionam de maneira muito natural e fácil.Voice commands work in a very natural and easy way. Crie seus comandos de voz para que eles sejam:Design your voice commands so that they are:

  • NaturalNatural
  • Fácil de lembrarEasy to remember
  • Contexto apropriadoContext appropriate
  • Suficientemente diferente de outras opções dentro do mesmo contextoSufficiently distinct from other options within the same context

No Sr basics 101, usamos o KeywordRecognizer para criar dois comandos simples de voz.In MR Basics 101, we used the KeywordRecognizer to build two simple voice commands. No Sr Input 212, vamos nos aprofundar e aprender como:In MR Input 212, we'll dive deeper and learn how to:

  • Crie comandos de voz que são otimizados para o mecanismo de fala do HoloLens.Design voice commands that are optimized for the HoloLens speech engine.
  • Faça o usuário reconhecer quais comandos de voz estão disponíveis.Make the user aware of what voice commands are available.
  • Confirme que ouvimos o comando de voz do usuário.Acknowledge that we've heard the user's voice command.
  • Entenda o que o usuário está dizendo, usando um reconhecedor de ditado.Understand what the user is saying, using a Dictation Recognizer.
  • Use um reconhecedor de gramática para escutar comandos com base em um arquivo de especificação de gramática de reconhecimento de fala ou SRGS.Use a Grammar Recognizer to listen for commands based on an SRGS, or Speech Recognition Grammar Specification, file.

Neste curso, revisitaremos o Gerenciador de modelos, que criamos no Sr input 210 e no Sr Input 211.In this course, we'll revisit Model Explorer, which we built in MR Input 210 and MR Input 211.

Importante

Os vídeos inseridos em cada um dos capítulos abaixo foram registrados usando uma versão mais antiga do Unity e o kit de ferramentas do Mixed Reality.The videos embedded in each of the chapters below were recorded using an older version of Unity and the Mixed Reality Toolkit. Embora as instruções passo a passo sejam precisas e atuais, você pode ver scripts e visuais nos vídeos correspondentes que estão desatualizados.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. Os vídeos permanecem incluídos para posterity e porque os conceitos abordados ainda se aplicam.The videos remain included for posterity and because the concepts covered still apply.

Suporte a dispositivosDevice support

CourseCourse HoloLensHoloLens Headsets imersivosImmersive headsets
Entrada MR 212: vozMR Input 212: Voice ✔️✔️ ✔️✔️

Antes de começarBefore you start

Pré-requisitosPrerequisites

Arquivos de projetoProject files

  • Baixe os arquivos exigidos pelo projeto.Download the files required by the project. Requer o Unity 2017,2 ou posterior.Requires Unity 2017.2 or later.
  • Cancele o arquivamento dos arquivos em sua área de trabalho ou outro local fácil de acessar.Un-archive the files to your desktop or other easy to reach location.

Observação

Se você quiser examinar o código-fonte antes de baixá-lo, ele estará disponível no GitHub.If you want to look through the source code before downloading, it's available on GitHub.

Errata e observaçõesErrata and Notes

  • "Habilitar Apenas Meu Código" precisa ser desabilitado (desmarcado) no Visual Studio em ferramentas-> opções-> depuração para acessar os pontos de interrupção no código."Enable Just My Code" needs to be disabled (unchecked) in Visual Studio under Tools->Options->Debugging in order to hit breakpoints in your code.

Configuração do UnityUnity Setup

InstruçõesInstructions

  1. Inicie o Unity.Start Unity.
  2. Selecione abrir.Select Open.
  3. Navegue até a pasta HolographicAcademy-hologramas-212-Voice que você cancelou anteriormente.Navigate to the HolographicAcademy-Holograms-212-Voice folder you previously un-archived.
  4. Localize e selecione o/pasta do Gerenciador de modelos de inicialização .Find and select the Starting/Model Explorer folder.
  5. Clique no botão Selecionar pasta .Click the Select Folder button.
  6. No painel projeto , expanda a pasta cenas .In the Project panel, expand the Scenes folder.
  7. Clique duas vezes em cena ModelExplorer para carregá-la no Unity.Double-click ModelExplorer scene to load it in Unity.

BuildsBuilding

  1. No Unity, selecione arquivo > configurações de Build.In Unity, select File > Build Settings.
  2. Se cenas/ModelExplorer não estiver listado em cenas em compilação, clique em Adicionar cenas abertas para adicionar a cena.If Scenes/ModelExplorer is not listed in Scenes In Build, click Add Open Scenes to add the scene.
  3. Se você estiver desenvolvendo especificamente para o HoloLens, defina o dispositivo de destino para o hololens.If you're specifically developing for HoloLens, set Target device to HoloLens. Caso contrário, deixe em qualquer dispositivo.Otherwise, leave it on Any device.
  4. Verifique se tipo de compilação está definido como D3D e se o SDK está definido para o mais recente instalado (que deve ser o SDK 16299 ou mais recente).Ensure Build Type is set to D3D and SDK is set to Latest installed (which should be SDK 16299 or newer).
  5. Clique em Compilar.Click Build.
  6. Crie uma nova pasta chamada "app".Create a New Folder named "App".
  7. Clique uma vez na pasta do aplicativo .Single click the App folder.
  8. Pressione Selecionar pasta e o Unity começará a compilar o projeto para o Visual Studio.Press Select Folder and Unity will start building the project for Visual Studio.

Quando o Unity for concluído, uma janela Explorador de arquivos será exibida.When Unity is done, a File Explorer window will appear.

  1. Abra a pasta do aplicativo .Open the App folder.
  2. Abra a solução ModelExplorer do Visual Studio.Open the ModelExplorer Visual Studio Solution.

Se estiver implantando no HoloLens:If deploying to HoloLens:

  1. Usando a barra de ferramentas superior no Visual Studio, altere o destino de debug para Release e de ARM para x86.Using the top toolbar in Visual Studio, change the target from Debug to Release and from ARM to x86.
  2. Clique na seta suspensa ao lado do botão computador local e selecione computador remoto.Click on the drop down arrow next to the Local Machine button, and select Remote Machine.
  3. Insira o endereço IP do dispositivo de HoloLens e defina o modo de autenticação como Universal (protocolo não criptografado) .Enter your HoloLens device IP address and set Authentication Mode to Universal (Unencrypted Protocol). Clique em Selecionar.Click Select. Se você não souber o endereço IP do dispositivo, examine configurações > rede & Internet > opções avançadas.If you do not know your device IP address, look in Settings > Network & Internet > Advanced Options.
  4. Na barra de menus superior, clique em depurar-> iniciar sem Depurar ou pressione Ctrl + F5.In the top menu bar, click Debug -> Start Without debugging or press Ctrl + F5. Se esta for a primeira vez que você está implantando em seu dispositivo, será necessário emparelhar com o Visual Studio.If this is the first time deploying to your device, you will need to pair it with Visual Studio.
  5. Quando o aplicativo tiver sido implantado, ignore o Fitbox com um gesto de seleção.When the app has deployed, dismiss the Fitbox with a select gesture.

Se estiver implantando em um headset de imersão:If deploying to an immersive headset:

  1. Usando a barra de ferramentas superior no Visual Studio, altere o destino de debug para Release e de ARM para x64.Using the top toolbar in Visual Studio, change the target from Debug to Release and from ARM to x64.
  2. Verifique se o destino de implantação está definido como computador local.Make sure the deployment target is set to Local Machine.
  3. Na barra de menus superior, clique em depurar-> iniciar sem Depurar ou pressione Ctrl + F5.In the top menu bar, click Debug -> Start Without debugging or press Ctrl + F5.
  4. Quando o aplicativo tiver sido implantado, ignore o Fitbox puxando o gatilho em um controlador de movimento.When the app has deployed, dismiss the Fitbox by pulling the trigger on a motion controller.

Observação

Você pode observar alguns erros vermelhos no painel de erros do Visual Studio.You might notice some red errors in the Visual Studio Errors panel. É seguro ignorá-los.It is safe to ignore them. Alterne para o painel saída para exibir o andamento real da compilação.Switch to the Output panel to view actual build progress. Os erros no painel de saída exigirão que você faça uma correção (geralmente elas são causadas por um erro em um script).Errors in the Output panel will require you to make a fix (most often they are caused by a mistake in a script).

Capítulo 1-reconhecimentoChapter 1 - Awareness

ObjetivosObjectives

  • Aprenda sobre o dos e não sobre o design de comando de voz.Learn the Dos and Don'ts of voice command design.
  • Use KeywordRecognizer para adicionar comandos de voz baseados em olhar.Use KeywordRecognizer to add gaze based voice commands.
  • Fazer com que os usuários reconheçam comandos de voz usando comentáriosdo cursor.Make users aware of voice commands using cursor feedback.

Design de comando de vozVoice Command Design

Neste capítulo, você aprenderá a criar comandos de voz.In this chapter, you'll learn about designing voice commands. Ao criar comandos de voz:When creating voice commands:

DODO

  • Crie comandos concisos.Create concise commands. Você não deseja usar "reproduzir o vídeo selecionado atualmente" , porque esse comando não é conciso e seria facilmente esquecido pelo usuário.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. Em vez disso, você deve usar: "reproduzir vídeo" , porque ele é conciso e tem várias sílabas.Instead, you should use: "Play Video", because it is concise and has multiple syllables.
  • Use um vocabulário simples.Use a simple vocabulary. Sempre tente usar palavras e frases comuns que sejam fáceis para o usuário descobrir e se lembrar.Always try to use common words and phrases that are easy for the user to discover and remember. Por exemplo, se o seu aplicativo tiver um objeto note que pudesse ser exibido ou oculto da exibição, você não usará o comando "show letreiro" , porque "letreiro" é um termo raramente usado.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. Em vez disso, você usaria o comando: "mostrar nota" , para revelar a nota em seu aplicativo.Instead, you would use the command: "Show Note", to reveal the note in your application.
  • Ser consistente.Be consistent. Os comandos de voz devem ser mantidos consistentes em seu aplicativo.Voice commands should be kept consistent across your application. Imagine que você tenha duas cenas em seu aplicativo e que ambas as cenas contenham um botão para fechar o aplicativo.Imagine that you have two scenes in your application and both scenes contain a button for closing the application. Se a primeira cena usou o comando "Exit" para disparar o botão, mas a segunda cena usou o comando "Close app" , o usuário vai ficar muito confuso.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. Se a mesma funcionalidade persistir em vários bastidores, o mesmo comando de voz deverá ser usado para dispará-lo.If the same functionality persists across multiple scenes, then the same voice command should be used to trigger it.

NãoDON'T

  • Use comandos de sílaba única.Use single syllable commands. Por exemplo, se você estivesse criando um comando de voz para reproduzir um vídeo, evite usar o comando simples "Play" , pois ele é apenas uma única sílaba e pode ser facilmente perdido pelo sistema.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. Em vez disso, você deve usar: "reproduzir vídeo" , porque ele é conciso e tem várias sílabas.Instead, you should use: "Play Video", because it is concise and has multiple syllables.
  • Use comandos do sistema.Use system commands. O comando "Select" é reservado pelo sistema para disparar um evento TAP para o objeto atualmente focalizado.The "Select" command is reserved by the system to trigger a Tap event for the currently focused object. Não use novamente o comando "Select" em uma palavra-chave ou frase, pois ele pode não funcionar conforme o esperado.Do not re-use the "Select" command in a keyword or phrase, as it might not work as you expect. Por exemplo, se o comando de voz para selecionar um cubo em seu aplicativo era "Selecionar Cubo" , mas o usuário estava olhando para uma esfera quando estivessem o comando, então a esfera seria selecionada em vez disso.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. De forma semelhante, os comandos da barra de aplicativos estão habilitados para vozSimilarly app bar commands are voice enabled. Não use os seguintes comandos de fala em sua exibição do CoreWindow:Don't use the following speech commands in your CoreWindow View:
    1. VoltarGo Back
    2. Ferramenta ScrollScroll Tool
    3. Ferramenta de zoomZoom Tool
    4. Ferramenta de arrastarDrag Tool
    5. AjustarAdjust
    6. RemoverRemove
  • Use sons semelhantes.Use similar sounds. Tente evitar o uso de comandos de voz que Rhyme.Try to avoid using voice commands that rhyme. Se você tivesse um aplicativo de compras com suporte para "mostrar armazenamento" e "mostrar mais" como comandos de voz, convém desabilitar um dos comandos enquanto o outro estava em uso.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. Por exemplo, você pode usar o botão "mostrar armazenamento" para abrir o repositório e, em seguida, desabilitar esse comando quando o repositório foi exibido para que o comando "mostrar mais" pudesse ser usado para navegação.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.

InstruçõesInstructions

  • No painel hierarquia do Unity, use a ferramenta de pesquisa para localizar o objeto holoComm_screen_mesh .In Unity's Hierarchy panel, use the search tool to find the holoComm_screen_mesh object.
  • Clique duas vezes no objeto holoComm_screen_mesh para exibi-lo na cena.Double-click on the holoComm_screen_mesh object to view it in the Scene. Essa é a inspeção do Astronaut, que responderá aos nossos comandos de voz.This is the astronaut's watch, which will respond to our voice commands.
  • No painel Inspetor , localize o componente fonte de entrada de fala (script) .In the Inspector panel, locate the Speech Input Source (Script) component.
  • Expanda a seção palavras-chave para ver o comando de voz com suporte: abra o Communicator.Expand the Keywords section to see the supported voice command: Open Communicator.
  • Clique no engrenagem no lado direito e selecione Editar script.Click the cog to the right side, then select Edit Script.
  • Explore o SpeechInputSource.cs para entender como ele usa o KeywordRecognizer para adicionar comandos de voz.Explore SpeechInputSource.cs to understand how it uses the KeywordRecognizer to add voice commands.

Compilar e implantarBuild and Deploy

  • No Unity, use as configurações de Build de > de arquivo para recompilar o aplicativo.In Unity, use File > Build Settings to rebuild the application.
  • Abra a pasta do aplicativo .Open the App folder.
  • Abra a solução ModelExplorer do Visual Studio.Open the ModelExplorer Visual Studio Solution.

(Se você já criou/implantou esse projeto no Visual Studio durante a instalação, poderá abrir essa instância do VS e clicar em ' recarregar tudo ' quando solicitado).(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).

  • No Visual Studio, clique em depurar-> iniciar sem Depurar ou pressione Ctrl + F5.In Visual Studio, click Debug -> Start Without debugging or press Ctrl + F5.
  • Depois que o aplicativo for implantado no HoloLens, descartar a caixa ajustar usando o gesto de toque do ar .After the application deploys to the HoloLens, dismiss the fit box using the air-tap gesture.
  • Olhar na inspeção do Astronaut.Gaze at the astronaut's watch.
  • Quando o relógio tiver foco, verifique se o cursor é alterado para um microfone.When the watch has focus, verify that the cursor changes to a microphone. Isso fornece comentários que o aplicativo está ouvindo por comandos de voz.This provides feedback that the application is listening for voice commands.
  • Verifique se uma dica de ferramenta aparece na inspeção.Verify that a tooltip appears on the watch. Isso ajuda os usuários a descobrir o comando "Open Communicator" .This helps users discover the "Open Communicator" command.
  • Enquanto nuvens no relógio, digamos que "Abra o Communicator" para abrir o painel do Communicator.While gazing at the watch, say "Open Communicator" to open the communicator panel.

Capítulo 2-confirmaçãoChapter 2 - Acknowledgement

ObjetivosObjectives

  • Registre uma mensagem usando a entrada do microfone.Record a message using the Microphone input.
  • Envie comentários para o usuário que o aplicativo está ouvindo em sua voz.Give feedback to the user that the application is listening to their voice.

Observação

A capacidade do microfone deve ser declarada para um aplicativo gravar do microfone.The Microphone capability must be declared for an app to record from the microphone. Isso é feito para você já no Sr Input 212, mas tenha isso em mente para seus próprios projetos.This is done for you already in MR Input 212, but keep this in mind for your own projects.

  1. No editor do Unity, vá para as configurações do Player navegando até "Editar configurações do projeto > > Player"In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player"
  2. Clique na guia "Plataforma Universal do Windows"Click on the "Universal Windows Platform" tab
  3. Na seção "configurações de publicação > recursos", verifique a capacidade do microfoneIn the "Publishing Settings > Capabilities" section, check the Microphone capability

InstruçõesInstructions

  • No painel hierarquia do Unity, verifique se o objeto holoComm_screen_mesh está selecionado.In Unity's Hierarchy panel, verify that the holoComm_screen_mesh object is selected.
  • No painel Inspetor , localize o componente Astronaut Watch (script) .In the Inspector panel, find the Astronaut Watch (Script) component.
  • Clique no cubo azul pequeno, que é definido como o valor da propriedade pré-fabricado do Communicator .Click on the small, blue cube which is set as the value of the Communicator Prefab property.
  • No painel projeto , o pré-fabricado do Communicator agora deve ter foco.In the Project panel, the Communicator prefab should now have focus.
  • Clique no pré-fabricado do Communicator no painel do projeto para exibir seus componentes no Inspetor.Click on the Communicator prefab in the Project panel to view its components in the Inspector.
  • Examine o componente do Gerenciador de microfone (script) , isso nos permitirá registrar a voz do usuário.Look at the Microphone Manager (Script) component, this will allow us to record the user's voice.
  • Observe que o objeto do Communicator tem um componente de manipulador de entrada de fala (script) para responder ao comando Enviar mensagem .Notice that the Communicator object has a Speech Input Handler (Script) component for responding to the Send Message command.
  • Examine o componente do Communicator (script) e clique duas vezes no script para abri-lo no Visual Studio.Look at the Communicator (Script) component and double-click on the script to open it in Visual Studio.

Communicator.cs é responsável por definir os Estados de botão apropriados no dispositivo do Communicator.Communicator.cs is responsible for setting the proper button states on the communicator device. Isso permitirá que os usuários registrem uma mensagem, a reproduzam e enviem a mensagem para o Astronaut.This will allow our users to record a message, play it back, and send the message to the astronaut. Ele também iniciará e interromperá um formulário de onda animado para confirmar ao usuário que sua voz foi ouvido.It will also start and stop an animated wave form, to acknowledge to the user that their voice was heard.

  • No Communicator.cs, exclua as seguintes linhas (81 e 82) do método Start .In Communicator.cs, delete the following lines (81 and 82) from the Start method. Isso habilitará o botão ' registro ' no 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);

Compilar e implantarBuild and Deploy

  • No Visual Studio, recompile seu aplicativo e implante-o no dispositivo.In Visual Studio, rebuild your application and deploy to the device.
  • Olhar na inspeção do Astronaut e diga "Open Communicator" para mostrar o Communicator.Gaze at the astronaut's watch and say "Open Communicator" to show the communicator.
  • Pressione o botão gravar (microfone) para começar a gravar uma mensagem verbal para o Astronaut.Press the Record button (microphone) to start recording a verbal message for the astronaut.
  • Comece a falar e verifique se a animação ondulada é reproduzida no Communicator, que fornece comentários para o usuário de que a voz é ouvida.Start speaking, and verify that the wave animation plays on the communicator, which provides feedback to the user that their voice is heard.
  • Pressione o botão parar (quadrado à esquerda) e verifique se a animação de onda interrompe a execução.Press the Stop button (left square), and verify that the wave animation stops running.
  • Pressione o botão reproduzir (triângulo à direita) para reproduzir a mensagem gravada e ouvi-la no dispositivo.Press the Play button (right triangle) to play back the recorded message and hear it on the device.
  • Pressione o botão parar (quadrado direito) para parar a reprodução da mensagem gravada.Press the Stop button (right square) to stop playback of the recorded message.
  • Diga "Enviar mensagem" para fechar o Communicator e receber uma resposta "mensagem recebida" do Astronaut.Say "Send Message" to close the communicator and receive a 'Message Received' response from the astronaut.

Capítulo 3-noções básicas e o reconhecedor de ditadorChapter 3 - Understanding and the Dictation Recognizer

ObjetivosObjectives

  • Use o reconhecedor de ditado para converter a fala do usuário em texto.Use the Dictation Recognizer to convert the user's speech to text.
  • Mostre os resultados hipotéticos e finais do reconhecedor de ditado no Communicator.Show the Dictation Recognizer's hypothesized and final results in the communicator.

Neste capítulo, usaremos o reconhecedor de ditado para criar uma mensagem para o Astronaut.In this chapter, we'll use the Dictation Recognizer to create a message for the astronaut. Ao usar o reconhecedor de ditado, tenha em mente que:When using the Dictation Recognizer, keep in mind that:

  • Você deve estar conectado a WiFi para que o reconhecedor de ditado funcione.You must be connected to WiFi for the Dictation Recognizer to work.
  • Os tempos limite ocorrem após um determinado período de tempo.Timeouts occur after a set period of time. Há dois tempos limite a serem cientes:There are two timeouts to be aware of:
    • Se o reconhecedor for iniciado e não ouvir nenhum áudio pelos primeiros cinco segundos, ele atingirá o tempo limite.If the recognizer starts and doesn't hear any audio for the first five seconds, it will timeout.
    • Se o reconhecedor tiver dado um resultado, mas, em seguida, ouvir silêncio por vinte segundos, ele atingirá o tempo limite.If the recognizer has given a result but then hears silence for twenty seconds, it will timeout.
  • Somente um tipo de reconhecedor (palavra-chave ou ditado) pode ser executado de cada vez.Only one type of recognizer (Keyword or Dictation) can run at a time.

Observação

A capacidade do microfone deve ser declarada para um aplicativo gravar do microfone.The Microphone capability must be declared for an app to record from the microphone. Isso é feito para você já no Sr Input 212, mas tenha isso em mente para seus próprios projetos.This is done for you already in MR Input 212, but keep this in mind for your own projects.

  1. No editor do Unity, vá para as configurações do Player navegando até "Editar configurações do projeto > > Player"In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player"
  2. Clique na guia "Plataforma Universal do Windows"Click on the "Universal Windows Platform" tab
  3. Na seção "configurações de publicação > recursos", verifique a capacidade do microfoneIn the "Publishing Settings > Capabilities" section, check the Microphone capability

InstruçõesInstructions

Vamos editar MicrophoneManager.cs para usar o reconhecedor de ditado.We're going to edit MicrophoneManager.cs to use the Dictation Recognizer. Isso é o que vamos adicionar:This is what we'll add:

  1. Quando o botão gravar for pressionado, vamos iniciar o DictationRecognizer.When the Record button is pressed, we'll start the DictationRecognizer.
  2. Mostre a hipótese do que o DictationRecognizer entendeu.Show the hypothesis of what the DictationRecognizer understood.
  3. Bloqueie os resultados do que o DictationRecognizer entendeu.Lock in the results of what the DictationRecognizer understood.
  4. Verifique se há tempos limite do DictationRecognizer.Check for timeouts from the DictationRecognizer.
  5. Quando o botão parar é pressionado, ou a sessão do MIC atinge o tempo limite, pare o DictationRecognizer.When the Stop button is pressed, or the mic session times out, stop the DictationRecognizer.
  6. Reinicie o KeywordRecognizer, que escutará o comando Enviar mensagem .Restart the KeywordRecognizer, which will listen for the Send Message command.

Vamos começar.Let's get started. Conclua todos os exercícios de codificação para 3. a no MicrophoneManager.cs, ou copie e cole o código concluído encontrado abaixo: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;
            }
        }
    }
}

Compilar e implantarBuild and Deploy

  • Recompile no Visual Studio e implante em seu dispositivo.Rebuild in Visual Studio and deploy to your device.
  • Descartar a caixa ajustar com um gesto de toque de ar.Dismiss the fit box with an air-tap gesture.
  • Olhar na inspeção do Astronaut e diga "Open Communicator" .Gaze at the astronaut's watch and say "Open Communicator".
  • Selecione o botão gravar (microfone) para registrar sua mensagem.Select the Record button (microphone) to record your message.
  • Comece a falar.Start speaking. O reconhecedor de ditado irá interpretar a fala e mostrar o texto hipotético no Communicator.The Dictation Recognizer will interpret your speech and show the hypothesized text in the communicator.
  • Tente dizer "Enviar mensagem" enquanto estiver gravando uma mensagem.Try saying "Send Message" while you are recording a message. Observe que o reconhecedor de palavra-chave não responde porque o reconhecedor de ditado ainda está ativo.Notice that the Keyword Recognizer does not respond because the Dictation Recognizer is still active.
  • Pare de falar por alguns segundos.Stop speaking for a few seconds. Observe como o reconhecedor de ditado conclui sua hipótese e mostra o resultado final.Watch as the Dictation Recognizer completes its hypothesis and shows the final result.
  • Comece a falar e, em seguida, pause por 20 segundos.Begin speaking and then pause for 20 seconds. Isso fará com que o reconhecedor de ditado tenha tempo limite.This will cause the Dictation Recognizer to timeout.
  • Observe que o reconhecedor de palavra-chave é habilitado novamente após o tempo limite acima.Notice that the Keyword Recognizer is re-enabled after the above timeout. Agora, o Communicator responderá aos comandos de voz.The communicator will now respond to voice commands.
  • Diga "Enviar mensagem" para enviar a mensagem para o Astronaut.Say "Send Message" to send the message to the astronaut.

Capítulo 4-reconhecedor de gramáticaChapter 4 - Grammar Recognizer

ObjetivosObjectives

  • Use o reconhecedor de gramática para reconhecer a fala do usuário de acordo com um arquivo SRGS ou especificação de gramática de reconhecimento de fala.Use the Grammar Recognizer to recognize the user's speech according to an SRGS, or Speech Recognition Grammar Specification, file.

Observação

A capacidade do microfone deve ser declarada para um aplicativo gravar do microfone.The Microphone capability must be declared for an app to record from the microphone. Isso é feito para você já no Sr Input 212, mas tenha isso em mente para seus próprios projetos.This is done for you already in MR Input 212, but keep this in mind for your own projects.

  1. No editor do Unity, vá para as configurações do Player navegando até "Editar configurações do projeto > > Player"In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player"
  2. Clique na guia "Plataforma Universal do Windows"Click on the "Universal Windows Platform" tab
  3. Na seção "configurações de publicação > recursos", verifique a capacidade do microfoneIn the "Publishing Settings > Capabilities" section, check the Microphone capability

InstruçõesInstructions

  1. No painel hierarquia , procure Jetpack_Center e selecione-o.In the Hierarchy panel, search for Jetpack_Center and select it.
  2. Procure o script de ação que no painel Inspetor .Look for the Tagalong Action script in the Inspector panel.
  3. Clique no pequeno círculo à direita do campo para marcar ao lado do objeto.Click the little circle to the right of the Object To Tag Along field.
  4. Na janela que aparece, pesquise por SRGSToolbox e selecione-o na lista.In the window that pops up, search for SRGSToolbox and select it from the list.
  5. Dê uma olhada no arquivo SRGSColor. xml na pasta StreamingAssets .Take a look at the SRGSColor.xml file in the StreamingAssets folder.
    1. A especificação de design SRGS pode ser encontrada no site W3C aqui.The SRGS design spec can be found on the W3C website here.

Em nosso arquivo SRGS, temos três tipos de regras:In our SRGS file, we have three types of rules:

  • Uma regra que permite que você diga uma cor de uma lista de doze cores.A rule which lets you say one color from a list of twelve colors.
  • Três regras que escutam uma combinação da regra de cor e uma das três formas.Three rules which listen for a combination of the color rule and one of the three shapes.
  • A regra raiz, colorChooser, que escuta qualquer combinação das três regras de "cor + forma".The root rule, colorChooser, which listens for any combination of the three "color + shape" rules. As formas podem ser consideradas em qualquer ordem e em qualquer quantidade de apenas uma para a terceira.The shapes can be said in any order and in any amount from just one to all three. Essa é a única regra que está escutada, pois ela é especificada como a regra raiz na parte superior do arquivo na marca> de gramática inicial de <.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.

Compilar e implantarBuild and Deploy

  • Recompile o aplicativo no Unity e, em seguida, compile e implante a partir do Visual Studio para experimentar o aplicativo no HoloLens.Rebuild the application in Unity, then build and deploy from Visual Studio to experience the app on HoloLens.
  • Descartar a caixa ajustar com um gesto de toque de ar.Dismiss the fit box with an air-tap gesture.
  • Olhar no jetpack do Astronaut e execute um gesto de toque de ar.Gaze at the astronaut's jetpack and perform an air-tap gesture.
  • Comece a falar.Start speaking. O reconhecedor gramatical irá interpretar sua fala e alterar as cores das formas com base no reconhecimento.The Grammar Recognizer will interpret your speech and change the colors of the shapes based on the recognition. Um comando de exemplo é "círculo azul, quadrado amarelo".An example command is "blue circle, yellow square".
  • Execute outro gesto de toque de ar para ignorar a caixa de ferramentas.Perform another air-tap gesture to dismiss the toolbox.

FimThe End

Parabéns!Congratulations! Agora você concluiu a entrada MR 212: Voice.You have now completed MR Input 212: Voice.

  • Você conhece o dos e não os comandos de voz.You know the Dos and Don'ts of voice commands.
  • Você viu como as dicas de ferramentas foram empregadas para fazer com que os usuários reconheçam os comandos de voz.You saw how tooltips were employed to make users aware of voice commands.
  • Você viu vários tipos de comentários usados para confirmar que a voz do usuário foi ouvida.You saw several types of feedback used to acknowledge that the user's voice was heard.
  • Você sabe como alternar entre o reconhecedor de palavra-chave e o reconhecedor de ditador e como esses dois recursos compreendem e interpretam sua voz.You know how to switch between the Keyword Recognizer and the Dictation Recognizer, and how these two features understand and interpret your voice.
  • Você aprendeu a usar um arquivo SRGS e o reconhecedor de gramática para reconhecimento de fala em seu aplicativo.You learned how to use an SRGS file and the Grammar Recognizer for speech recognition in your application.