Unityで手っ取り早くマイクの音声を文字列にする

  • 28
    いいね
  • 0
    コメント

今のご時世でUnityでマイク入力を文字列に変換する方法を調べて、これが一番手っ取り早いかなぁ~と
Windows.Speechもやってみましたが動かないのでIntelRealsenseSDKになりました。
※IntelRealsenseのカメラがなくても動きます

1.IntelRealsenseSDKのダウンロード

IntelRealsenseSDKのページからFree DownloadでSDKをダウンロードします。
(ユーザ登録とか必要でめんどくさい)

その後、
e5b0a33c9c64a31e6dc577a04536ab3d.png

Intel RealSense SDK for WindowsのDwonloadボタンを押します。

c1668ccdc29d0c54dfd1c9c473261e72.png

どのバージョンとどのインストーラ―をダウンロードしますか?って聞かれるので
【2016 R2】でめんどくさいので【intel_rs_sdk_offline_package】をダウンロードしました。
(別にwebsetupでも良いかと思います)

2.IntelRealsenseSDKのインストール

ダウンロードしたインストーラーを実行します。
何をインストールしますか? 聞かれるので、Unity用のSDKと日本語解析するモジュールをインストールします。
具体的には

  • Intel RealSense SDK
    • Universal Windows Platform Extension
  • Intel RealSense SDK Runtime
    • Core (必ずチェックが入ってる)
  • Speech Recognition and Synthesis
    • Japanese
    • Speech Recognition and Synthesis

これだけ入れればOKです

1.png

2.png

チェック後、インストールを行います。

3.Unity上で必要なPackageを入れる

Unityで必要なPackageは以下のところにありますので
【C:\Program Files (x86)\Intel\RSSDK\framework\Unity\UnityCSharp.unitypackage】
パッケージをインポートします。
無題.png

4.サンプルコード

こんな感じのサンプルコードです。
適当なオブジェクトに貼り付けて実行です

VoiceInputTest.cs
using UnityEngine;

public class VoiceInputTest : MonoBehaviour
{
    private PXCMSession session;
    private PXCMAudioSource source;
    private PXCMSpeechRecognition sr;
    private PXCMSpeechRecognition.Handler handler;

    public void Start()
    {
        session = PXCMSession.CreateInstance();
        source = session.CreateAudioSource();

        PXCMAudioSource.DeviceInfo dinfo = null;

        source.QueryDeviceInfo(0, out dinfo);
        source.SetDevice(dinfo);
        Debug.Log(dinfo.name);

        session.CreateImpl<PXCMSpeechRecognition>(out sr);

        PXCMSpeechRecognition.ProfileInfo pinfo;
        sr.QueryProfile(out pinfo);
        pinfo.language = PXCMSpeechRecognition.LanguageType.LANGUAGE_JP_JAPANESE;
        sr.SetProfile(pinfo);

        handler = new PXCMSpeechRecognition.Handler();
        handler.onRecognition = (x) => Debug.Log(x.scores[0].sentence);
        sr.SetDictation();
        sr.StartRec(source, handler);
    }

    void OnDisable()
    {
        if (sr != null)
        {
            sr.StopRec();
            sr.Dispose();
        }

        if (session != null)
            session.Dispose();
    }

}

もし、複数マイクがある場合は
source.QueryDeviceInfo(0, out dinfo);
ここの0を1とか2とかして試してみてください

5.実行

実行してマイクでなにかしゃべるとコンソールに表示されます

c8e36cc51d8681936fe5952d52c8c5bc.png


うまくいかないパターン

  • マイクデバイスが違う
    • コンソールに出てくるマイクの名前を確認してください
  • LANGUAGE_JP_JAPANESEをLANGUAGE_US_ENGLISHにするとなんかコンソールに出る
    • SDKを一度removeして再度インストールしてみてください