質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Oculus Quest

Oculus Questは、Facebookの小会社であるOculus VRが開発したVRヘッドセットです。独立型でPCやスマートフォンは不要。6DoFのトラッキングに優れている点が特徴です。すでに販売終了となっていますが、2020年10月には後継のOculus Quest 2が販売されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1353閲覧

UnityカスタムシェーダをOculusQuest2のマイクで動かしたい

tomo20

総合スコア1

Oculus Quest

Oculus Questは、Facebookの小会社であるOculus VRが開発したVRヘッドセットです。独立型でPCやスマートフォンは不要。6DoFのトラッキングに優れている点が特徴です。すでに販売終了となっていますが、2020年10月には後継のOculus Quest 2が販売されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/07/22 05:39

編集2022/01/12 10:55

前提・実現したいこと

Unityで作ったカスタムシェーダをOculusQuest2のマイクを使った音声認識を使って動かしたい

具体的にはヘッドセットをつけた状態で、声を発すると
声を出したポジションからシェーダーが実行されるようにしたいです。

(言葉で反応するのではなく単純に音を拾ってイベントを発生させたいのですが
ネットで調べても音声入力についてしか無く、困っています…
Unity初心者で拙い質問申し訳ないのですが、どうしても実現したく、
アドバイスくださると嬉しいです…)

参考サイト
↑こちらのサイトを参考にエコロケーションシェーダを作りました。

イメージ説明説明](dcd78c9cda8bb1b4843b02e33c82f3d8.png)

カスタムシェーダ

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Custom/Echolocation" { Properties { _Color ("Color", Color) = (1, 1, 1, 1) _Center ("CenterX", vector) = (0, 0, 0) _Radius ("Radius", float) = 0 } SubShader { Pass { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" float4 _Color; float3 _Center; float _Radius; struct v2f { float4 pos : SV_POSITION; float3 worldPos : TEXCOORD1; }; v2f vert(appdata_base v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; return o; } fixed4 frag(v2f i) : COLOR { float dist = distance(_Center, i.worldPos); float val = 1 - step(dist, _Radius - 0.1) * 0.5; val = step(_Radius - 1.5, dist) * step(dist, _Radius) * val; return fixed4(val * _Color.r, val * _Color.g,val * _Color.b, 1.0); } ENDCG } } FallBack "Diffuse" }

C# コントローラー

C#

1using UnityEngine; 2 3public class EcholocationController : MonoBehaviour 4{ 5 private static readonly int Center = Shader.PropertyToID("_Center"); 6 private static readonly int Radius = Shader.PropertyToID("_Radius"); 7 8 // ここにインスペクター上でEcholocationマテリアルをセットしておく 9 [SerializeField] private Material material; 10 11 // 半径が大きくなるスピード 12 [SerializeField][Min(0.0f)] private float speed = 5.0f; 13 14 // 現在の半径 15 private float radius; 16 17 // 半径の初期値は無限大としておく 18 private void OnEnable() 19 { 20 this.radius = Mathf.Infinity; 21 } 22 23 // 毎フレーム半径のセットおよび拡張を行う 24 private void Update() 25 { 26 this.material.SetFloat(Radius, this.radius); 27 this.radius += this.speed * Time.deltaTime; 28 } 29 30 // 他のスクリプトからEmitCallを実行することで 31 // 中心点を設定し、半径を0にリセットする 32 public void EmitCall(Vector3 position) 33 { 34 this.radius = 0.0f; 35 this.material.SetVector(Center, position); 36 } 37}

C# クリックでの呼び出し

C#

1using UnityEngine; 2 3[RequireComponent(typeof(EcholocationController))] 4public class EcholocationTest : MonoBehaviour 5{ 6 private EcholocationController controller; 7 private Camera mainCamera; 8 9 private void Start() 10 { 11 this.mainCamera = Camera.main; 12 this.controller = this.GetComponent<EcholocationController>(); 13 } 14 15 private void Update() 16 { 17 if (Input.GetMouseButtonDown(0) && Physics.Raycast(this.mainCamera.ScreenPointToRay(Input.mousePosition), out var hitInfo)) 18 { 19 this.controller.EmitCall(hitInfo.point); 20 } 21 } 22} 23}

経緯・試したこと

1.シーンを制作
2.こちらのサイトで質問し、別途C#スクリプトを用い、パソコン画面上でクリックしてシェーダーを動かすことに成功
3.OculusQuestで実装するためOculus Integrationをインストール
4.OculusQuest2にビルド→ビルド自体は成功
追記・
5.Azure Cognitive Services - Speech Serviceインストール
Speech SDK のインストール
↑こちらのサイトを参考にしました。
6.Input.GetMouseButtonDown(0)の部分を音声認識にしたらいいのかと思うが、どうしたらいいのかわからない
7.とりあえずマイクから認識するAudioConfigをC#スクリプトで作ってみる
マイクから認識する
↑こちらを参考にしました。

C# マイクから認識する

C#

1using System; 2using System.IO; 3using System.Threading.Tasks; 4using Microsoft.CognitiveServices.Speech; 5using Microsoft.CognitiveServices.Speech.Audio; 6 7class Program 8{ 9 async static Task FromMic(SpeechConfig speechConfig) 10 { 11 using var audioConfig = AudioConfig.FromDefaultMicrophoneInput(); 12 using var recognizer = new SpeechRecognizer(speechConfig, audioConfig); 13 14 Console.WriteLine("Speak into your microphone."); 15 var result = await recognizer.RecognizeOnceAsync(); 16 Console.WriteLine($"RECOGNIZED: Text={result.Text}"); 17 } 18 19 async static Task Main(string[] args) 20 { 21 var speechConfig = SpeechConfig.FromSubscription("<paste-your-subscription-key>", "<paste-your-region>"); 22 await FromMic(speechConfig); 23 } 24}

補足情報(FW/ツールのバージョンなど)

Oculus Integration
MacOS BigSur バージョン11.2.3
unityバージョン2021.1.15fi
ヘッドセット・ OculusQuest2
音声認識API・ Azure Cognitive Services - Speech Service

よろしくお願いいたします

追記・
Azure Cognitive Services - Speech Serviceという音声認識APIをいれてみましたが
導入の仕方がわからずまたしてもつまっています…。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bongo

2021/07/24 18:23

あいにくOculus Quest 2を持っておらず手探りですみませんが、音声認識が不要なのでしたらUnityが標準搭載しているマイク入力機能が使えないでしょうかね? たとえば「Unity:マイクの音量を取得する(1) - Qiita」(https://qiita.com/ELIXIR/items/ff503d48c24092c05843 )みたいな手順で音量を取得することは可能でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問