HoloLens (1. nesil) Giriş 212: Ses
Önemli
Karma Gerçeklik Academy öğreticileri HoloLens (1. nesil), Unity 2017 ve Karma Gerçeklik Immersive Headsets düşünülerek tasarlanmıştır. Bu nedenle, bu cihazlar için geliştirme konusunda hala rehberlik arayan geliştiriciler için bu öğreticileri yerinde bırakmanın önemli olduğunu hissediyoruz. Bu öğreticiler, HoloLens 2 için kullanılan en son araç kümeleri veya etkileşimlerle güncelleştirilmez ve Unity'nin daha yeni sürümleriyle uyumlu olmayabilir. Desteklenen cihazlarda çalışmaya devam etmek için bakımları yapılır. HoloLens 2 için yeni bir öğretici serisi yayınlanmıştır.
Ses girişi , hologramlarımızla etkileşim kurmanın başka bir yolunu sunar. Sesli komutlar çok doğal ve kolay bir şekilde çalışır. Sesli komutlarınızı şunlar olacak şekilde tasarla:
- Doğal
- Hatırlaması kolay
- Bağlam uygun
- Aynı bağlamdaki diğer seçeneklerden yeterince farklı
MR Basics 101'de iki basit sesli komut oluşturmak için KeywordRecognizer'ı kullandık. MR Input 212'de daha ayrıntılı bilgi edinecek ve şunların nasıl yapılacağını öğreneceğiz:
- HoloLens konuşma altyapısı için iyileştirilmiş sesli komutlar tasarla.
- Kullanıcının hangi sesli komutların kullanılabildiğinden haberdar olmasını sağlayın.
- Kullanıcının sesli komutunu duyduğumuzu kabul edin.
- Dikte Tanıma kullanarak kullanıcının ne dediğini anlayın.
- SRGS veya Konuşma Tanıma Dil Bilgisi Belirtimi, dosyası temelinde komutları dinlemek için Dil Bilgisi Tanıyıcısı kullanın.
Bu kursta MR Input 210 ve MR Input 211'de oluşturduğumuz Model Gezgini'ni yeniden ziyaret edeceğiz.
Önemli
Aşağıdaki bölümlerin her birine eklenen videolar Unity'nin eski bir sürümü ve Karma Gerçeklik Araç Seti kullanılarak kaydedilmiştir. Adım adım yönergeler doğru ve güncel olsa da, ilgili videolarda güncel olmayan betikler ve görseller görebilirsiniz. Videolar, gelecek nesiller için ve ele alınan kavramlar hala geçerli olduğu için dahil olmaya devam etmektedir.
Cihaz desteği
Kurs | HoloLens | Çevreleyici kulaklıklar |
---|---|---|
MR Giriş 212: Ses | ✔️ | ✔️ |
Başlamadan önce
Önkoşullar
- Doğru araçlar yüklü olarak yapılandırılmış bir Windows 10 bilgisayar.
- Bazı temel C# programlama yetenekleri.
- MR Basics 101'i tamamlamış olmanız gerekirdi.
- MR Input 210'un tamamlanmış olması gerekir.
- MR Input 211'i tamamlamış olmanız gerekir.
- Geliştirme için yapılandırılmış bir HoloLens cihazı.
Proje dosyaları
- Projenin gerektirdiği dosyaları indirin. Unity 2017.2 veya sonraki bir sürümü gerektirir.
- Dosyaları masaüstünüzde veya ulaşılmaya kolay başka bir konumda arşivden kaldırın.
Not
İndirmeden önce kaynak kodu incelemek isterseniz GitHub'da kullanılabilir.
Errata ve Notlar
- Kodunuzda kesme noktalarına gitmek için Visual Studio'da Araçlar-Seçenekler-Hata>> Ayıklama altında "Yalnızca Kodumu Etkinleştir" seçeneğinin devre dışı bırakılması (işaretlenmemiş) olması gerekir.
Unity Kurulumu
Yönergeler
- Unity'i başlatın.
- Aç’ı seçin.
- Daha önce arşivlediğiniz HolographicAcademy-Holograms-212-Voice klasörüne gidin.
- Başlangıç/Modeli Gezgini klasörünü bulun ve seçin.
- Klasör Seç düğmesine tıklayın.
- Proje panelinde Sahneler klasörünü genişletin.
- Unity'de yüklemek için ModelExplorer sahnesine çift tıklayın.
Oluşturma
- Unity'de Dosya > Derleme Ayarları'nı seçin.
- Derlemedeki Sahneler/ModelExplorer listelenmiyorsa, sahneyi eklemek için Açık Sahne Ekle'ye tıklayın.
- Özellikle HoloLens için geliştiriyorsanız Hedef cihazıHoloLens olarak ayarlayın. Aksi takdirde , Herhangi bir cihazda bırakın.
- Derleme Türü'ninD3D ve SDK'nınEn Son yüklü (SDK 16299 veya üzeri olmalıdır) olarak ayarlandığından emin olun.
- Oluştur'a tıklayın.
- "Uygulama" adlı yeni bir Klasör oluşturun.
- Uygulama klasörüne tek tek tıklayın.
- Klasör Seç'e bastığında Unity, Visual Studio için projeyi oluşturmaya başlar.
Unity tamamlandığında bir Dosya Gezgini penceresi görüntülenir.
- Uygulama klasörünü açın.
- ModelExplorer Visual Studio Çözümünü açın.
HoloLens'e dağıtıyorsanız:
- Visual Studio'da üst araç çubuğunu kullanarak hedefi Hata Ayıklama'dan Yayın'a ve ARM'den x86'ya değiştirin.
- Yerel Makine düğmesinin yanındaki açılan oka tıklayın ve Uzak Makine'yi seçin.
- HoloLens cihazınızın IP adresini girin ve Kimlik Doğrulama Modu'nu Evrensel (Şifrelenmemiş Protokol) olarak ayarlayın. Seç’e tıklayın. Cihazınızın IP adresini bilmiyorsanız Ayarlar > Ağ & İnternet > Gelişmiş Seçenekleri'ne bakın.
- Üst menü çubuğunda Hata Ayıkla -> Hata ayıklama olmadan başlat'a tıklayın veya Ctrl + F5 tuşlarına basın. Cihazınıza ilk kez dağıtılıyorsa, bunu Visual Studio ile eşleştirmeniz gerekir.
- Uygulama dağıtıldığında, Fitbox'ı bir seçme hareketiyle kapatabilirsiniz.
Çevreleyici bir mikrofonlu kulaklığa dağıtıyorsanız:
- Visual Studio'daki üst araç çubuğunu kullanarak hedefi Hata Ayıklama'dan Yayın'a ve ARM'den x64'e değiştirin.
- Dağıtım hedefinin Yerel Makine olarak ayarlandığından emin olun.
- Üst menü çubuğunda Hata Ayıkla -> Hata ayıklama olmadan başlat'a tıklayın veya Ctrl + F5 tuşlarına basın.
- Uygulama dağıtıldığında, tetikleyiciyi bir hareket denetleyicisine çekerek Fitbox'ı kapatabilirsiniz.
Not
Visual Studio Hataları panelinde bazı kırmızı hatalar görebilirsiniz. Onları yok saymak güvenlidir. Gerçek derleme ilerleme durumunu görüntülemek için Çıkış paneline geçin. Çıkış panelindeki hatalar için bir düzeltme yapmanız gerekir (çoğu zaman bunların nedeni betikteki bir hatadır).
1. Bölüm - Farkındalık
Hedefler
- Sesli komut tasarımının Dos ve Don'larını öğrenin.
- Bakış tabanlı sesli komutlar eklemek için KeywordRecognizer kullanın.
- İmleç geri bildirimini kullanarak kullanıcıları sesli komutlardan haberdar edin.
Sesli Komut Tasarımı
Bu bölümde sesli komutları tasarlamayı öğreneceksiniz. Sesli komutlar oluştururken:
DO
- Kısa komutlar oluşturun. "Seçili durumdaki videoyu oynat" komutunu kullanmak istemezsiniz, çünkü bu komut kısa değildir ve kullanıcı tarafından kolayca unutulur. Bunun yerine şunu kullanmalısınız: "Video Oynat", çünkü kısadır ve birden çok hece içerir.
- Basit bir sözcük dağarcığı kullanın. Her zaman kullanıcının bulması ve hatırlaması kolay olan ortak sözcükleri ve tümcecikleri kullanmayı deneyin. Örneğin, uygulamanızın görüntülenebilen veya görünümden gizlenebilen bir not nesnesi varsa, "Placard" nadiren kullanılan bir terim olduğundan "Placard Göster" komutunu kullanamazsınız. Bunun yerine, " Notu Göster" komutunu kullanarak notu uygulamanızda gösterebilirsiniz.
- Tutarlı olun. Sesli komutlar uygulamanız genelinde tutarlı tutulmalıdır. Uygulamanızda iki sahne olduğunu ve her iki sahnenin de uygulamayı kapatmaya yönelik bir düğme içerdiğini düşünün. İlk sahne düğmeyi tetiklerken "Çıkış" komutunu kullandıysa, ancak ikinci sahne "Uygulamayı Kapat" komutunu kullandıysa, kullanıcının kafası çok karışır. Aynı işlevsellik birden çok sahne boyunca devam ederse, tetikleme için aynı sesli komut kullanılmalıdır.
YAPMA
- Tek hece komutları kullanın. Örneğin, bir videoyu oynatmak için bir sesli komut oluşturuyorsanız, yalnızca tek bir hece olduğundan ve sistem tarafından kolayca kaçırılabileceğinden basit "Oynat" komutunu kullanmaktan kaçınmalısınız. Bunun yerine şunu kullanmalısınız: "Video Oynat", çünkü kısadır ve birden çok hece içerir.
- Sistem komutlarını kullanın.
"Seç" komutu sistem tarafından o anda odaklanmış nesne için bir Dokunma olayını tetikleme amacıyla ayrılmıştır.
"Select" komutunu bir anahtar sözcükte veya tümcecikte yeniden kullanmayın çünkü beklediğiniz gibi çalışmayabilir. Örneğin, uygulamanızda bir küp seçmeye yönelik sesli komut "Küp seç" ise, ancak kullanıcı komutu ifade ettiğinde bir küreye bakıyorsa, bunun yerine küre seçilir. Benzer şekilde uygulama çubuğu komutları da ses etkindir. CoreWindow Görünümünüzde aşağıdaki konuşma komutlarını kullanmayın:
- Geri Git
- Kaydırma Aracı
- Yakınlaştırma Aracı
- Sürükleme Aracı
- Ayarlamak
- Kaldır
- Benzer sesleri kullanın. Kafiyeli sesli komutları kullanmaktan kaçınmaya çalışın. Sesli komutlar olarak "Mağazayı Göster" ve "Daha Fazla Göster" i destekleyen bir alışveriş uygulamanız varsa, komutlardan birini kullanımdayken devre dışı bırakmak istersiniz. Örneğin, mağazayı açmak için "Mağazayı Göster" düğmesini kullanabilir ve ardından mağaza görüntülendiğinde "Daha Fazla Göster" komutunun göz atmak için kullanılabilmesi için bu komutu devre dışı bırakabilirsiniz.
Yönergeler
- Unity'nin Hiyerarşi panelinde , holoComm_screen_mesh nesnesini bulmak için arama aracını kullanın.
- holoComm_screen_mesh nesneyi Sahne'de görüntülemek için çift tıklayın. Bu astronotların sesli komutlarımıza yanıt verecek watch.
- Denetçi panelinde Konuşma Giriş Kaynağı (Betik) bileşenini bulun.
- Desteklenen sesli komutu görmek için Anahtar Sözcükler bölümünü genişletin: Communicator'ı açın.
- Sağ taraftaki dişliye tıklayın ve ardından Betiği Düzenle'yi seçin.
- Voice komutları eklemek için KeywordRecognizer'ı nasıl kullandığını anlamak için SpeechInputSource.cs dosyasını keşfedin.
Yapılandırma ve Dağıtma
- Unity'de, uygulamayı yeniden oluşturmak için Dosya > Derleme Ayarları'nı kullanın.
- Uygulama klasörünü açın.
- ModelExplorer Visual Studio Çözümünü açın.
(Bu projeyi kurulum sırasında Visual Studio'da zaten derlediyseniz/dağıttıysanız, söz konusu VS örneğini açabilir ve istendiğinde 'Tümünü Yeniden Yükle'ye tıklayabilirsiniz).
- Visual Studio'da Hata Ayıkla -> Hata Ayıklama Olmadan Başlat'a tıklayın veya Ctrl + F5 tuşlarına basın.
- Uygulama HoloLens'e dağıtıldıktan sonra , hava dokunma hareketini kullanarak sığdırma kutusunu kapatın.
- Astronotların watch bakın.
- watch odaklandığında imlecin mikrofona değiştiğini doğrulayın. Bu, uygulamanın sesli komutları dinlediğiyle ilgili geri bildirim sağlar.
- watch bir araç ipucunun göründüğünü doğrulayın. Bu, kullanıcıların "Communicator'i Aç" komutunu bulmasına yardımcı olur.
- watch bakarken communicator panelini açmak için "Communicator'ı Aç" deyin.
Bölüm 2 - Onay
Hedefler
- Mikrofon girişini kullanarak bir ileti kaydedin.
- Kullanıcıya uygulamanın sesini dinlediğiyle ilgili geri bildirim sağlayın.
Not
Bir uygulamanın mikrofondan kayıt yapması için Mikrofon özelliğinin bildirilmesi gerekir. Bu zaten MR Input 212'de sizin için yapılır, ancak kendi projeleriniz için bunu aklınızda bulundurun.
- Unity Düzenleyicisi'nde"Proje Ayarlarını > Düzenle > Yürütücü" bölümüne giderek oynatıcı ayarlarına gidin
- "Evrensel Windows Platformu" sekmesine tıklayın
- "Yayımlama Ayarları > Özellikleri" bölümünde Mikrofon özelliğini denetleyin
Yönergeler
- Unity'nin Hiyerarşi panelinde holoComm_screen_mesh nesnesinin seçili olduğunu doğrulayın.
- Denetçi panelinde Astronot İzleme (Betik) bileşenini bulun.
- Communicator Prefab özelliğinin değeri olarak ayarlanan küçük mavi kübü tıklatın.
- Proje panelinde Communicator prefab artık odaklanmalıdır.
- Bileşenlerini Denetçi'de görüntülemek için Proje panelinde Communicator ön bileşenine tıklayın.
- Mikrofon Yöneticisi (Betik) bileşenine bakın; bu, kullanıcının sesini kaydetmemize olanak tanır.
- Communicator nesnesinin İleti Gönder komutunu yanıtlamak için bir Konuşma Giriş İşleyicisi (Betik) bileşenine sahip olduğuna dikkat edin.
- Communicator (Betik) bileşenine bakın ve betiği Visual Studio'da açmak için çift tıklayın.
Communicator.cs, communicator cihazında düzgün düğme durumlarını ayarlamakla sorumludur. Bu, kullanıcılarımızın bir iletiyi kaydetmesine, geri oynatmasına ve iletiyi astronota göndermesine olanak sağlar. Ayrıca, kullanıcıya sesinin duyulduğunu kabul etmek için animasyonlu dalga formunu başlatır ve durdurur.
- Communicator.cs dosyasındaStart yönteminden aşağıdaki satırları (81 ve 82) silin. Bu, iletişimcide 'Kaydet' düğmesini etkinleştirir.
// TODO: 2.a Delete the following two lines:
RecordButton.SetActive(false);
MessageUIRenderer.gameObject.SetActive(false);
Yapılandırma ve Dağıtma
- Visual Studio'da uygulamanızı yeniden derleyin ve cihaza dağıtın.
- Astronotların watch bakın ve iletişimciyi göstermek için "Communicator'ı Aç" deyin.
- Astronot için sözlü ileti kaydetmeye başlamak için Kaydet düğmesine (mikrofon) basın.
- Konuşmaya başlayın ve kullanıcıya sesinin duyulduğunu belirten geri bildirim sağlayan dalga animasyonunun iletişimcide oynatıldığını doğrulayın.
- Durdur düğmesine (sol kare) basın ve dalga animasyonunun çalışmayı durdurduğunu doğrulayın.
- Kaydedilen iletiyi oynatmak ve cihazda dinlemek için Yürüt düğmesine (sağ üçgen) basın.
- Kaydedilen iletinin kayıttan yürütülmesini durdurmak için Durdur düğmesine (sağ kare) basın.
- İletişimciyi kapatmak ve astronottan 'İleti Alındı' yanıtı almak için "İleti Gönder" deyin.
3. Bölüm - Dikte Tanımayı Anlama
Hedefler
- Kullanıcının konuşmasını metne dönüştürmek için Dikte Tanıyıcı'sını kullanın.
- Dictation Recognizer'ın hipotezini ve nihai sonuçlarını iletişimcide gösterin.
Bu bölümde Dikte Tanıma özelliğini kullanarak astronot için bir ileti oluşturacağız. Dikte Tanıma'yı kullanırken şunları unutmayın:
- Dikte Tanıma'nın çalışması için WiFi'ye bağlı olmanız gerekir.
- Zaman aşımları belirli bir süre sonra gerçekleşir. Dikkat etmeniz gereken iki zaman aşımı vardır:
- Tanıyıcı başlatılırsa ve ilk beş saniye boyunca herhangi bir ses duymazsa zaman aşımına uğrar.
- Tanıyıcı bir sonuç verdiyse ancak yirmi saniye boyunca sessizliği duyarsa zaman aşımına uğrar.
- Aynı anda yalnızca bir tür tanıyıcı (Anahtar Sözcük veya Dikte) çalışabilir.
Not
Bir uygulamanın mikrofondan kayıt yapması için Mikrofon özelliğinin bildirilmesi gerekir. Bu zaten MR Input 212'de sizin için yapılır, ancak kendi projeleriniz için bunu aklınızda bulundurun.
- Unity Düzenleyicisi'nde"Proje Ayarlarını > Düzenle > Yürütücü" bölümüne giderek oynatıcı ayarlarına gidin
- "Evrensel Windows Platformu" sekmesine tıklayın
- "Yayımlama Ayarları > Özellikleri" bölümünde Mikrofon özelliğini denetleyin
Yönergeler
Dikte Tanıma özelliğini kullanmak için MicrophoneManager.cs dosyasını düzenleyeceğiz. Ekleyeceğimiz şey şudur:
- Kaydet düğmesine basıldığında DictationRecognizer'ı başlatacağız.
- DictationRecognizer'ın ne anladığını gösteren hipotezi gösterin.
- DictationRecognizer'ın anladığının sonuçlarına kilitleyin.
- DictationRecognizer'dan zaman aşımlarını denetleyin.
- Durdur düğmesine basıldığında veya mikrofon oturumu zaman aşımına uğrarsa DictationRecognizer'ı durdurun.
- İleti Gönder komutunu dinleyen KeywordRecognizer'ı yeniden başlatın.
Haydi başlayalım. MicrophoneManager.cs'de 3.a için tüm kodlama alıştırmalarını tamamlayın veya aşağıda bulunan tamamlanmış kodu kopyalayıp yapıştırın:
// 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;
}
}
}
}
Yapılandırma ve Dağıtma
- Visual Studio'da yeniden derleyin ve cihazınıza dağıtın.
- Sığdırma kutusunu bir hava dokunma hareketiyle kapatın.
- Astronotların watch bakın ve "Open Communicator" deyin.
- İletinizi kaydetmek için Kaydet düğmesini (mikrofon) seçin.
- Konuşmaya başlayın. Dikte Tanıma, konuşmanızı yorumlar ve hipotezlenmiş metni iletişimcide gösterir.
- Bir iletiyi kaydederken "İleti Gönder" demeyi deneyin. DikteTanıma hala etkin olduğundan Anahtar Sözcük Tanıma'nın yanıt vermediğini fark edin.
- Birkaç saniye konuşmayı kes. Dikte Tanıma'nın hipotezini tamamlayıp nihai sonucu göstermesine dikkat edin.
- Konuşmaya başlayın ve ardından 20 saniye bekleyin. Bu, Dikte Tanıma'nın zaman aşımına neden olur.
- Yukarıdaki zaman aşımından sonra Anahtar Sözcük Tanıyıcı'nın yeniden etkinleştirildiğine dikkat edin. İletişimci artık sesli komutlara yanıt verecektir.
- Mesajı astronota göndermek için "Mesaj Gönder" deyin.
4. Bölüm - Dil Bilgisi Tanıyıcı
Hedefler
- SRGS veya Konuşma Tanıma Dil Bilgisi Belirtimi, dosyasına göre kullanıcının konuşmasını tanımak için Dil Bilgisi Tanıyıcı'yı kullanın.
Not
Bir uygulamanın mikrofondan kayıt yapması için Mikrofon özelliğinin bildirilmesi gerekir. Bu zaten MR Input 212'de sizin için yapılır, ancak kendi projeleriniz için bunu aklınızda bulundurun.
- Unity Düzenleyicisi'nde"Proje Ayarlarını > Düzenle > Yürütücü" bölümüne giderek oynatıcı ayarlarına gidin
- "Evrensel Windows Platformu" sekmesine tıklayın
- "Yayımlama Ayarları > Özellikleri" bölümünde Mikrofon özelliğini denetleyin
Yönergeler
- Hiyerarşi panelinde Jetpack_Center arayın ve seçin.
- Denetçi panelinde Tagalong Eylem betiğini arayın.
- Birlikte Etikete Nesne alanının sağındaki küçük daireye tıklayın.
- Açılan pencerede SRGSToolbox'ı arayın ve listeden seçin.
-
StreamingAssets klasöründeki SRGSColor.xml dosyasına göz atın.
- SRGS tasarım belirtimi burada W3C web sitesinde bulunabilir.
SRGS dosyamızda üç tür kuralımız vardır:
- On iki renk listesinden bir renk söylemenizi sağlayan bir kural.
- Renk kuralının bir bileşimini ve üç şekilden birini dinleyen üç kural.
- Üç "renk + şekil" kuralının herhangi bir bileşimini dinleyen colorChooser kök kuralı. Şekiller herhangi bir sırada ve yalnızca bir ile üç arasında herhangi bir miktarda söylenebilir. İlk <dil bilgisi> etiketinde dosyanın en üstünde kök kural olarak belirtildiğinden, bu tek kural dinlenen kuraldır.
Yapılandırma ve Dağıtma
- Uygulamayı Unity'de yeniden derleyin, ardından Uygulamayı HoloLens'te deneyimlemek için Visual Studio'dan derleyin ve dağıtın.
- Sığdırma kutusunu bir hava dokunma hareketiyle kapatın.
- Astronotların jetpack'ine bakın ve bir hava dokunma hareketi yapın.
- Konuşmaya başlayın. Dil Bilgisi Tanıyıcısı konuşmanızı yorumlar ve tanımaya göre şekillerin renklerini değiştirir. Örnek olarak "mavi daire, sarı kare" komutu verilmiştir.
- Araç kutusunu kapatmak için başka bir hava dokunma hareketi gerçekleştirin.
Son
Tebrikler! Mr Input 212: Voice'i tamamladınız.
- Sesli komutların Dos ve Don'larını biliyorsunuz.
- Kullanıcıların sesli komutların farkında olmasını sağlamak için araç ipuçlarının nasıl kullanıldığını gördünüz.
- Kullanıcının sesinin duyulduğunu kabul etmek için kullanılan çeşitli geri bildirim türlerini gördünüz.
- Anahtar Sözcük Tanıma ile Dikte Tanıma arasında nasıl geçiş yapılacağını ve bu iki özelliğin sesinizi nasıl anlayıp yorumlayacağını biliyorsunuz.
- Uygulamanızda konuşma tanıma için SRGS dosyasını ve Dilbilgisi Tanıyıcısını kullanmayı öğrendiniz.