LoginSignup
0
0

More than 1 year has passed since last update.

【Unity】Voice ProのデモをWebGLでビルドしても上手くいかない件

Last updated at Posted at 2022-09-25

この記事は、WebGLでのボイスチャットを実現するVoice Proに関する記事です。

Voice Proのデモをそのままビルドしてもマイクがうまく作動しない

PUN2とVoice Proをそのままインポートして、PUN2の設定を済ませた後、
FrostweepGames/VoicePro/Examples/Demo/VoiceDemo.scene
を開いて、VoiceProオブジェクトのDebug Echoにチェックをつけて、エディタ上で再生すると、Rキーを押しながら話すと、自分の声が返ってきます。うまく動作していますね。

次にこのシーンをBuild & Runしてみて、Rキーを押しながら話すと、声が返ってこない...
これはマイクがうまく動作できていないのです。

Microphoneのリフレッシュが必要

Voice ProはMicrophone Proを使用しています。そのMicrophone Proのデモとしてこちらが提示されています。
右上のマイクリストに注目してください。

マイクを許可する前は、Microphone 1と表示されています。
69.png

しかし、マイクを許可した後、Refresh Devicesを二回押すと各々のマイク名に更新されます。
70.png

そこで、マイクを許可していても、Microphone 1になっている間はマイクが動作しません
ちゃんとリフレッシュしてMicrophone1からちゃんとしたマイク名に更新する必要があるんですね。

そこでどうリフレッシュするのか。
このデモのリフレッシュ部分のスクリプトを抜粋します。

Example.cs
private void RefreshMicrophoneDevicesButtonOnclickHandler()
		{
            //マイクリストの更新
            CustomMicrophone.RefreshMicrophoneDevices();

            if (!CustomMicrophone.HasConnectedMicrophoneDevices())
                return;

            //ポップダウンリストの更新
            devicesDropdown.ClearOptions();
            devicesDropdown.AddOptions(CustomMicrophone.devices.ToList());
            DevicesDropdownValueChangedHandler(0);
        }

このCustomMicrophone.RefreshMicrophoneDevices();を差し込めばいいんですね。

デモのスクリプトを改善

デモのスクリプトを改善して下記のようにしました。
改善部分を強調しています。

VoiceTest.cs
using FrostweepGames.Plugins.Native;
using FrostweepGames.VoicePro;
using UnityEngine;

public class VoiceTest : MonoBehaviour
{
    public Recorder recorder;

    public Listener listener;

    public bool isRecording;

    void Update()
    {
        //録音
        if (Input.GetKeyDown(KeyCode.R) && !isRecording)
        {
            StartRecord();
        }
        else if (Input.GetKeyUp(KeyCode.R) && isRecording)
        {
            StopRecord();
        }

        ///////////////////////////////////////////////////////
        //【リフレッシュ】
        if (Input.GetKey(KeyCode.F))
        {
            Debug.Log("Refresh");
            
            //マイクリストのリフレッシュ
            CustomMicrophone.RefreshMicrophoneDevices();

            //リストの中の最初の項目にマイクをセット
            recorder.SetMicrophone(CustomMicrophone.devices[0]);
        }
        ///////////////////////////////////////////////////////////////////
    }

    public void StartRecord()
    {
        if (CustomMicrophone.HasConnectedMicrophoneDevices())
        {
            recorder.SetMicrophone(CustomMicrophone.devices[0]);
            isRecording = recorder.StartRecord();

            Debug.Log("Record started: " + isRecording);
        }
        else
        {
            recorder.RefreshMicrophones();
        }
    }

    public void StopRecord()
    {
        isRecording = false;
        recorder.StopRecord();

        Debug.Log("Record ended");
    }
}

この例ではFキーを押すとリフレッシュされます。
マイクの許可をしたのち、Fキー連打してからだとRキー押すと話せるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0