MRが楽しい

MRやVRについて学習したことを書き残す

公式チュートリアル「MR and Azure 303 5章」を試してみる

本日はチュートリアルの実施枠です。
Academyの「MR and Azure 303: Natural language understanding (LUIS)」の実施内容をまとめます。
docs.microsoft.com
前回記事の続きです。
bluebirdofoz.hatenablog.com
今回は「Chapter 5」です。

Chapter 5:Create the MicrophoneManager class

最初に作成するスクリプトは MicrophoneManager クラスです。
これは、次の処理を行います。
・ヘッドセットまたはマシンに接続されている録音デバイスを検出します(いずれかデフォルトのもの)。
・オーディオ(音声)をキャプチャし、ディクテーションを使用して文字列として保存します。
・音声が停止したら、口述を LuisManager クラスに提出します。

1.Script フォルダを作成します。
Asset フォルダで右クリックし、Create > Folder を選択します。
f:id:bluebirdofoz:20180908034201j:plain

2.作成した Script フォルダを開き、フォルダ内で右クリックして、Creapte -> C# Script を選択します。
Script の名称は MicrophoneManager に設定します。
f:id:bluebirdofoz:20180908034209j:plain

3.新しいスクリプトをダブルクリックしてVisual Studioで開きます。
4-8.以下の通り、スクリプトを編集します。
・MicrophoneManager.cs

// 名前空間の追加
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Windows.Speech;

public class MicrophoneManager : MonoBehaviour {
    // メンバ変数の追加
    // help to access instance of this object
    // このオブジェクトのインスタンスにアクセスするのに利用します
    public static MicrophoneManager instance;
    
    // recording frequency of mic
    // マイクの記録周波数
    private int frequency = 44100;
    
    // AudioSource component, provides access to mic
    // AudioSourceコンポーネント、マイクへのアクセスを提供します
    private AudioSource audioSource;
    
    // Component converting speech to text
    // 音声をテキストに変換するコンポーネント
    private DictationRecognizer dictationRecognizer;
    
    // a UI object used to debug dictation result
    // ディクテーション結果をデバッグするために使用されるUIオブジェクト
    public TextMesh dictationText;

    /// <summary>
    /// Initialises this class
    /// 初期化クラス
    /// </summary>
    private void Awake()
    {
        // allows this class instance to behave like a singleton
        // このクラスをシングルトンと同じように動作させます
        instance = this;
    }

    /// <summary>
    /// Runs at initialization right after Awake method
    /// StartメソッドはAwakeメソッドの直後の初期化時に実行されます
    /// </summary>
    void Start()
    {
        if (Microphone.devices.Length > 0)
        {
            // Once the scene starts, begin to capture the audio
            // シーンが開始したら、オーディオのキャプチャを開始します
            audioSource = GetComponent<AudioSource>();

            StartCapturingAudio();

            Debug.Log("Mic Detected");
        }
    }

    /// <summary>
    /// Start microphone capture, by providing the microphone as a continual audio source (looping),
    /// then initialise the DictationRecognizer, which will capture spoken words
    /// マイクキャプチャを開始するには、マイクを継続的なオーディオソース(ルーピング)として提供し、
    /// DictationRecognizer(ディクテーション)を初期化します。DictationRecognizerは口述を取得します
    /// </summary>
    public void StartCapturingAudio()
    {
        dictationRecognizer = new DictationRecognizer();
        dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
        dictationRecognizer.DictationError += DictationRecognizer_DictationError;
        dictationRecognizer.Start();
        Debug.Log("Capturing Audio...");
    }

    /// <summary>
    /// This handler is called every time the Dictation detects a pause in the speech. 
    /// ディクテーションが音声の区切りを検出するたびにこのハンドラが呼び出されます。
    /// </summary>
    private void DictationRecognizer_DictationResult(string dictationCaptured, ConfidenceLevel confidence)
    {
        StartCoroutine(LuisManager.instance.SubmitRequestToLuis(dictationCaptured));
        Debug.Log("Dictation: " + dictationCaptured);
        dictationText.text = dictationCaptured;
    }

    private void DictationRecognizer_DictationError(string error, int hresult)
    {
        Debug.Log("Dictation exception: " + error);
    }
}

f:id:bluebirdofoz:20180908034220j:plain※ この時点でエラーが表示されます(「The name ‘LuisManager’ does not exist...」)。
これは、コードが LuisManager クラスを参照するためです。LuisManager クラスは、次の章で作成します

9.Visual Studio で変更を保存して Unity に戻ります。
f:id:bluebirdofoz:20180908034231j:plain

Chapter 5 はここまでです。
次回は Chapter 6 を実施します。
bluebirdofoz.hatenablog.com