はじめに
初めまして。初投稿するUnity初心者です。試行錯誤しながらゲームを作っていきたいと思ってます。
今回は自分の興味ある分野である音声信号処理とゲームを掛け合わせられないかなと考えて、音声周波数スペクトルでなんか作るかーとなりました。気長にやっていきます。
環境(一応)
- Unity 2020.3.32f1
- Visual Studio Code
- マイク(USB2.0でつなげるやつ)
最初にやったこと
まずProjectを2Dで作成しました。(スペクトルの図は2Dの印象が強いので...)
その後、以下のコードを作成して空のGameObjectにアタッチ。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MicrophoneController : MonoBehaviour
{
void Start ()
{
var audio = GetComponent<AudioSource>();
foreach (string device in Microphone.devices)
{
Debug.Log("Name: " + device);
}
audio.clip = Microphone.Start(Microphone.devices[0], true, 10, 44100);
while (Microphone.GetPosition(null) <= 0) { }
audio.Play();
}
}
「とりあえずマイクがちゃんとUnityと連携してるかな~」ということを確かめたかったので、
①Unityに認識されているマイクのデバイス名を表示
②起動してから10秒間の間、音声を録音
③音声はそのまま再生
という順序で動くコードを以下の記事からパクり参考しました。勉強になります。
DIYer Unityにマイク音声を取り込む
この記事にある
audio.mute=true;
という部分で音声をミュートにしちゃって確認できなかったりするので、コードはちゃんとすべてに目を通したほうがいいですね...(筆者もそこでちょっともたつきました。反省。)
で、実行してみると...自分の声が跳ね返ってきました!わーい!
また、こんな感じで認識しているマイクがConsoleウィンドウに表示されてます!
自分のだとUSBマイク、Oculusのマイク、ゲームのキャプチャボードのマイクが認識されていますね。これの先頭から
foreach (string device in Microphone.devices)
のMiicrophone.devicesの0,1,2,...番目に入っていく行くようです。使用するマイクのインデックスは要確認ですね。
次やりたいこと
次は実際にスペクトルを取得してみようと思っています。とりあえず今回はここまで。気長にやっていきます。それでは!