開発
開発
プラットフォームを選択

チュートリアル - Voice SDKを使って基本的な音声入力を受け取る

更新日時: 2024/06/20
このチュートリアルでは、以下の重要なステップについて説明します。
  1. 音声エクスペリエンスを実現してVoice SDKを強化するためのMetaの自然言語理解サービス、Wit.aiで、音声アプリを設定する。
  2. Wit.aiアプリで確認と否定のインテントを設定する。
  3. UnityプロジェクトでVoice SDKをWit.aiにリンクする。
  4. Unityプロジェクトで、ユーザーの発話をテキストとしてキャプチャして表示する。
  5. 確認と否定のインテントをキャプチャし、認識し、表示する。
このチュートリアルは、Voice SDKを使って音声入力を簡単に行う際の基本的なリファレンスです。Voice SDKは、Meta XRオールインワンSDKの一部となっています。Voice SDKの直接ダウンロードも利用可能です。アプリに音声機能を追加する場合の詳細については、Voice SDKの概要をご覧ください。その他のVoice SDKのチュートリアルについては、ボイスSDKチュートリアルの概要をご覧ください。
このアプリは、ユーザーの発話(下のテキスト)に基づいて、ユーザーによる確認、同意、否定、または反対(上のテキスト)をキャプチャします。
App running
Meta Quest 2で実行するアプリ
注: このチュートリアルでは、Unityエディターバージョン2021.3.20f1とMeta XRオールインワンSDK v59を使っています。他のバージョンを使っている場合スクリーンショットは異なる場合がありますが、機能はほぼ同じです。

前提条件

このチュートリアルを進める前に、Meta Quest VRヘッドセットのUnity Hello Worldに記載された設定ステップを完了し、必要な依存関係を含めてプロジェクトを作成します。これには、Meta Questヘッドセット上で実行できるようにすることが含まれます。このチュートリアルはそのようなプロジェクトに基づき構成されています。

Wit.aiとVoice SDK

Voice SDKは、Metaの自然言語理解(NLU)サービスであるWit.aiを利用し、Meta Questヘッドセット、モバイルデバイス、その他のサードパーティプラットフォームと互換性があります。Wit.aiは無料で簡単に登録できます。Witを使うと、AI/MLの知識がなくても、音声コマンドを使えるようにアプリを簡単にトレーニングできます。
注: アプリの利用開始時に、エンドユーザーはアプリでマイクを使うことに同意するかどうかを選択できます。アプリが発話を記録してWit.aiに送信するのは、エンドユーザーがマイクの使用に同意した場合に限られます。

用語集

用語説明
発話
ユーザーの発話内容
インテント
ユーザー発話の意図
確認インテント
ユーザーが情報を確定したり同意したりするために「ok」「はい」「同意します」「その通り」などと言う場合
否定インテント
ユーザーが情報を否定したり反対したりするために「okではない」「いいえ」「同意しません」「違う」などと言う場合
Activate()
ユーザーのヘッドセット上のデフォルトのマイクをオンにし、音量しきい値に到達してから20秒間、音声コマンドをリスニングする方法。ユーザーが2秒間黙っているか、20秒経過すると、マイク録音は停止します。

アクティブ化

アクティブ化すると、Witがユーザーの音声キャプチャを開始します。これが起動の呼び出しとなり、アプリはユーザー発話のリスニングを開始します。ユーザーが音声エクスペリエンスをアクティブ化するためには、例えば次のような、関連するイベントを設計する必要があります。
  • ユーザーが音声によってオブジェクトを選択して属性の一部を更新する場合
  • ユーザーがキャラクターに近づいて音声でのやり取りをしようとする場合
  • ユーザーが音声によって何かを選択して意思を伝える必要がある場合
  • アプリが特定の時間しきい値に達した場合
このチュートリアルでは、アクティブ化トリガーのために右コントローラーのAボタンを使います。ユーザーが右コントローラーのAボタンを押すと、「Listening (リスニング中)」と表示され、アプリがユーザー発話のキャプチャと処理を開始します。

ステップ1. OVRCameraRigをシーンに追加する

まだプロジェクトにOVRCameraRigを追加していない場合は、次の手順に従ってください。
Meta XR Core SDKには、OVRCameraRig prefabが含まれています。これは、Unityのデフォルトのメインカメラに代わる機能となります。
以下の手順に従って、OVRCameraRigをシーンに追加します。
  1. プロジェクトの[Hierarchy (階層)]で、[Main Camera (メインカメラ)]を右クリックし、[Delete (削除)]を選択します。
  2. [Project (プロジェクト)]タブで[All Prefabs (すべてのprefab)]を選択し、OVRCameraRigを検索し、OVRCameraRig prefabをプロジェクトの[Hierarchy (階層)]にドラッグします。
  3. [Hierarchy (階層)]の中の[OVRCameraRig]を選択します。
  4. [Inspector (インスペクター)]ウィンドウの[OVR Manager (OVRマネージャ)]コンポーネントの下で、[Target Devices (ターゲットデバイス)]から該当するヘッドセットを選択します。

ステップ2. 新しいWit.aiアプリを作成する

  1. まだ登録していない場合は、Wit.aiアカウントを登録します。登録にはFacebookアカウントを使うことができます。
  2. [+ New App (+ 新しいアプリ)]をクリックして新しいWitアプリを作成します。アプリの名前をtutorialにし、[Private (非公開)]を選択してから、[Create (作成)]をクリックします。
    New Wit app
  3. 左矢印アイコンが表示されている場合、それをクリックするとWitアプリのメイン画面に移動します。
    New Wit app
  4. [Management (管理)]の下で[Intents (インテント)]を選択します。
  5. 右上隅にある[+ Intent (+インテント)]ボタンをクリックします。
  6. ポップアップウィンドウで[Add built-in intents (ビルトインインテントを追加)]を選択し、confirmation (確認)インテントを探します。これは、Wit.aiではwit/confirmationと呼ばれています。
    New intent
  7. リストボックスの外をクリックしてから、[Next (次へ)]をクリックします。
  8. negation (否定)インテントについてもアクションの5~7を実行します。このインテントは、Wit.aiではwit/negationと呼ばれています。
  9. アプリのインテントリストが以下の画像と一致していることを確認します。
    List of intents
  10. [Management (管理)] > [Settings (設定)]に移動し、[Server Access Token (サーバーアクセストークン)]をコピーします。Unityプロジェクトでそれを使う必要があります。
    Wit.ai Settings page with the Server Access Token field highlighted.

ステップ3. Unityプロジェクトで音声機能を設定する

  1. Unity Editorに戻ります。
  2. トップメニューから、[Meta] > [Voice SDK (ボイスSDK)] > [Voice Hub (ボイスハブ)] > [Wit Configuration (Wit設定)]をクリックし、Wit.aiのサーバーアクセストークンを[Wit Configuration (Wit設定)]ボックスに貼り付けます。
  3. [Link (リンク)]をクリックして、UnityアプリをWitアプリにリンクします。
  4. 新しいWit設定ファイルを、アプリ用に一意の名前で保存します。例えば、tutorialという名前にすることができます。この設定は、プロジェクトのAssetsフォルダー内にアセットとして保管されます。
    [Voice SDK Settings (ボイスSDKの設定)]は次のようなものになるはずです。
    Voice SDK Settings
  5. [Edit (編集)]メニューで、[Project Settings (プロジェクト設定)] > [Player (プレイヤー)]に移動し、[Other Settings (その他の設定)]セクションを展開します。
  6. [Configuration (設定)]の下で、[Scripting Backend (スクリプティングバックエンド)]IL2CPPであることを確認した上で、[Internet Access (インターネットアクセス)][Require (必須)]にします。
    Player Settings

ステップ4. UIを設定する

このアプリをテストするには、GameObjectとしてボタンとテキストを追加する必要があります。
  1. [Hierarchy (階層)]を右クリックし、[UI] > [Button - TextMesh Pro (ボタン - TextMesh Pro)]を選択します。[TMP Essentials (TMPエッセンシャル)]ポップアップが表示されたら、それを受け入れます。新しいCanvas (キャンバス)オブジェクトが表示されます。
  2. [Hierarchy (階層)][Canvas (キャンバス)]をクリックします。
  3. [Inspector (インスペクター)]で、[Render Mode (レンダリングモード)]として[Screen Space - Camera (画面スペース - カメラ)]を選択し、[CenterEyeAnchor camera (CenterEyeAnchorカメラ)][Canvas (キャンバス)]コンポーネントにアタッチします。
    Render camera
  4. [Hierarchy (階層)][Canvas (キャンバス)]の下で、[Button (ボタン)]を選択し、これらのスケール設定を[Inspector (インスペクター)]に適用します。
    Button GameObject Inspector showing position and scale settings.
  5. [Hierarchy (階層)]を右クリックして、[UI] > [Text - TextMesh Pro (テキスト - TextMesh Pro)]の順に選択します。
  6. [Inspector (インスペクター)]で、このGameObjectの名前をUser Utterance (ユーザー発話)に変更し、その位置、幅、高さ、スケールを以下のように変更し、[Text Input (テキスト入力)]をクリアします。
    User Utterance text
  7. [Main Settings (メイン設定)]の下で、フォントサイズを更新し、水平と垂直の配置を選択します。
    User Utterance font and allignment

ステップ5. アプリ音声エクスペリエンスと応答ハンドラーのGameObjectを追加する

アプリ音声エクスペリエンスを追加する

このステップでは、アプリ音声エクスペリエンスオブジェクトを追加します。これにより、シーンでの音声インタラクションを管理します。
  1. Unity Editorで、[Assets (アセット)] > [Create (作成)] > [Voice SDK (ボイスSDK)] > [Add App Voice Experience to Scene (アプリ音声エクスペリエンスをシーンに追加)]の順に選択します。
  2. [Inspector (インスペクター)]ウィンドウで、App Voice Experience (アプリ音声エクスペリエンス)スクリプトを見つけます。
  3. [Wit Runtime Configuration (Witランタイムの設定)]の下で、[Wit Configuration (Witの設定)]を更新し、それを前にステップ3で作成したWitアセットにリンクします。(見つからない場合、Assetsフォルダーの中にあります。)
    Wit config
  4. [Event (イベント)]セクションで[Audio Events (オーディオイベント)]を選択します。
    これらのイベントは、アプリがリスニングを開始したり停止したりする時などにトリガーされます。それらを、GameObjectのスクリプトに関連付けられた関数や基本的なUI要素にリンクすることもできます。
  5. OnStartListeningを選択し、[Add (追加)]ボタンをクリックします。
    Wit config
  6. 表示されるOn Start Listening ()セクションの下で[+]ボタンをクリックしてから、以下のものを選択します。
    1. Editor And Runtime (エディターとランタイム)
    2. [Scene (シーン)]の下で、[Text (TMP)]を選択します(これはボタンのテキストです)。
    3. [Scene (シーン)]の下で、TextMeshProUGUI.textを選択(string textをクリック)します。
      OnStartListening event configured with Editor And Runtime, Text TMP, and TextMeshProUGUI.text.
  7. アクティブ化されていることをユーザーが知ることができるよう、Listening (リスニング中)と入力します。
    OnStartListening event with Listening text value entered.
  8. アクションの4、5、6を繰り返して、OnFullTranscription (string)イベントを追加します。それは、[Event Category (イベントカテゴリ)]セレクターの中の[Transcription Events (文字起こしイベント)]の下にあります。
    これにより、ユーザーが話すのをやめた時点でユーザーの発話全体が返されるようになります。後で、それを[User Utterance (ユーザー発話)]テキストによって表示します。
    OnFullTranscription event configured under Transcription Events.
    重要: 実際のテキストをここに入力するためのテキストボックスはありません。ここでは、[string text (文字列テキスト)]ではなく[Dynamic string (ダイナミックテキスト)]の下の[text (テキスト)]を選択する必要があるからです。
    Dynamic text
注: ここではOnFullTranscriptionの設定だけを使っていますが、ユーザーがリアルタイムで文字起こしフィードバックを受け取ることができるよう、OnPartialTranscriptionも同じように設定するとができます。

応答ハンドラーGameObjectを追加する

これは、ユーザーのインテントをユーザーのビューポートに表示されるボタンテキストに一致させるための、新しいGameObjectです。これは2つのインテント(確認または否定)を特定するのに役立ち、それによってユーザーの発話とインテントに基づき、ユーザーに対して関連テキストを表示することができます。
  1. [Hierarchy (階層)]App Voice Experience (アプリ音声エクスペリエンス) GameObjectを右クリックしてから、その子として[Create Empty (空を作成)]をクリックします。
  2. [Inspector (インスペクター)]で、新しいGameObjectの名前をResponse Handler (応答ハンドラー)に変更します。
    この時点でプロジェクトの階層は、次のようになっているはずです。
    Hierarchy showing App Voice Experience with Response Handler as a child object.
  3. [Hierarchy (階層)]の中でResponse Handler (応答ハンドラー) GameObjectがまだ選択されている状態で、Unityエディターのトップメニューから、[Meta] > [Voice SDK (ボイスSDK)] > [Understanding Viewer (理解ビューア)]を選択します。
  4. [Utterance (発話)]ボックスにyes (はい)と入力し、[Send (送信)]をクリックします。
    数秒後、インテントおよびさまざまな値を含むネストしたデータ構造の形式で結果が返されます。
  5. 名前の値を右クリックし、ポップアップウィンドウで[Add Response Matcher to Response Handler (応答ハンドラーに応答マッチャーを追加)]を選択します。
    Understanding Viewer 1
  6. 新しいResponse Matcher (応答マッチャー)スクリプトがResponse Handler (応答ハンドラー) GameObjectにアタッチされており、リストに含まれるインテントがwit$confirmationであることを確認してください。
  7. On Multi Value Event (String [])の下で、次のものを選択します。
    1. Editor And Runtime (エディターとランタイム)
    2. Text (TMP) (テキスト(TMP)) (ボタンのテキスト)
    3. TextMeshProUGUI.text ([string text (文字列テキスト)]をクリックしてください)
  8. テキスト値としてConfirmation (確認)と入力します。
    Response Matcher 1
  9. 否定インテントを設定するためにアクションの4と5を繰り返します。今回は発話としてno (いいえ)を入力します。
    Understanding Viewer 2
  10. Response Handler (応答ハンドラー) GameObjectの新しいResponse Matcher (応答マッチャー)コンポーネントで、アクション6~8を繰り返します。インテントがwit$negationであることを確認し、ユーザーにNegation (否定)を表示するためのテキストを更新します。
    Response Matcher 2

ステップ6. コントローラー入力でWitアクティブ化を管理するスクリプトを追加する

これは、ユーザーがAボタンをタップした(押して放した)時にWitをアクティブ化する基本的なスクリプトです。
  1. [Project (プロジェクト)]タブの下で、[Assets (アセット)]フォルダに移動します。
  2. 右クリックして、[Create (作成)] > [Folder (フォルダー)]を選択し、その名前としてScriptsを指定してから、この新しいフォルダーを開きます。
  3. 右クリックして、[Create (作成)] > [C# Script (C#スクリプト)]を選択し、VoiceScriptという名前にします。
  4. 新しいスクリプトを、[Hierarchy (階層)]タブのCube (キューブ) GameObjectにドラッグ&ドロップします。
  5. [Hierarchy (階層)]タブで、Cube (キューブ) GameObjectを選択します。
  6. [Inspector (インスペクター)]で、VoiceScript.csスクリプトをダブルクリックして、設定しているIDEでそれを開きます。

Oculus.Voiceネームスペースを参照する

以下の行をスクリプトに追加します。
using Oculus.Voice;

アプリ音声エクスペリエンスGameObjectを参照する

以下のようにしてAppVoiceExperience GameObjectへの参照を追加します。
    public AppVoiceExperience voiceExperience;

Aボタンを使ってWitをアクティブ化する

ユーザーが(前のフレームで)Aボタンを放したかどうかを確認するには、OVRInputのメンバー関数GetUp()を使用します。このインタラクションでは、OVRInput.Button.One (ユーザーがAボタンを押した)のブーリアン値を受け取る必要があります。trueの場合、ユーザーはAボタンをちょうど放したところです。
Update()関数にコントローラーサポートを追加した後のスクリプト全体は、次のようになります。これにより、ユーザーがAボタンを放した直後にWitがアクティブ化されます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Oculus.Voice;

public class VoiceScript : MonoBehaviour
{
    public AppVoiceExperience voiceExperience;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (OVRInput.GetUp(OVRInput.Button.One))
        {
            voiceExperience.Activate();
        }
    }
}

ステップ7. Cube (キューブ) GameObjectに最終的な更新を加えてからアプリを実行する

  1. Unityエディターを開き、[Hierarchy (階層)]タブでCube (キューブ) GameObjectを選択します(選択されていない場合)。
  2. このアプリでは、このキューブとのユーザーインタラクションはないため、その[Position (位置)][5, 0, 0]に、[Scale (スケール)][0.2, 0.2, 0.2]に変更します。
  3. [App Voice Experience (アプリ音声エクスペリエンス)]オブジェクトを[Voice Experience (音声エクスペリエンス)]スロットにアタッチします。
    Voice Script in Inspector
  4. プロジェクトを保存して、[File (ファイル)] > [Build And Run (ビルドして実行)]をクリックし、ヘッドセットを装着してください。
アプリをテストするには、次のようにします。
  • 右コントローラーのAボタンをタップして、Wit.aiをアクティブ化します。最初の発話がキャプチャされるまで、数秒待つことが必要な場合があります。
  • 「ok」、「no (いいえ)」、「nope (いや)」、「yeah (うん)」、「maybe yes (多分)」、「of course (もちろん)」、「of course not (もちろん違う)」、「not ok (よくない)」、「I agree (そう)」、「I don’t think so (そうは思わない)」、「absolutely (絶対そう)」、「absolutely not (絶対違う)」」、「correct (その通り)」、「absolutely right (まさしくその通り)」などと言ってみてください。
  • 新しい発話の場合は、Aボタンをもう一度タップします。

Voice SDKでさらにできること

ナビゲーションロゴ
日本語
© 2026 Meta