Agora_Unity_WebGL icon indicating copy to clipboard operation
Agora_Unity_WebGL copied to clipboard

Muting/Umuting Remote Users Breaks Spatial Audio

Open moudisoubra opened this issue 1 year ago • 3 comments

Discussed in https://github.com/AgoraIO-Community/Agora_Unity_WebGL/discussions/323

Originally posted by moudisoubra July 1, 2024 When a remote user gets beyond a specific distance I mute their audio so that they cannot be heard at all using: RtcEngine.MuteRemoteAudioStream(uid, true);

However when the remote user gets back within hearing distance unmuting them completely breaks Spatial Audio and they in turn start speaking at full volume.

moudisoubra avatar Jul 01 '24 14:07 moudisoubra

How did you figure out running the spatial audio even? I've been unable to even run any of the features the SDK provides, apart from joining a channel. Here's my script: `public class LobbyVoiceAudio : MonoBehaviourPunCallbacks { private string _appID = "147f1034f33245f4abe865d9bd51fc44"; public static LobbyVoiceAudio Instance; private IRtcEngine _rtcEngine;

    private void Awake()
    {
        if (Instance)
        {
            Destroy(this.gameObject);
        }
        else
        {
            Instance = this;
            DontDestroyOnLoad(this);
        }
    }
    private void Start()
    {
        _rtcEngine = IRtcEngine.GetEngine(_appID);
        _rtcEngine.OnJoinChannelSuccess += OnJoinChannelSuccess;
        _rtcEngine.OnLeaveChannel += OnLeaveChannel;
        _rtcEngine.OnError += OnError;
    }

    private void OnError(int error, string msg)
    {
        Debug.Log($"Received Error. Code: {error}. Message: {msg}");
    }
    private void OnLeaveChannel(RtcStats stats)
    {
        Debug.Log($"Left Channel: {stats}");
    }
    private void OnJoinChannelSuccess(string channelName, uint wid, int elapsed)
    {
        Debug.Log($"Joined Channel: {channelName}");
        Hashtable hash = new Hashtable();
        hash.Add("agoraID", wid.ToString());
        PhotonNetwork.SetPlayerCustomProperties(hash);
    }

    public override void OnJoinedRoom()
    {
        _rtcEngine.EnableSoundPositionIndication(true);
        _rtcEngine.JoinChannel(PhotonNetwork.CurrentRoom.Name);
    }

    public override void OnLeftRoom()
    {
        _rtcEngine.LeaveChannel();
    }

    public void GoToTunnelChannel()
    {
        _rtcEngine.LeaveChannel();
        _rtcEngine.JoinChannel("AtlantaTunnel");
    }
    private void OnDestroy()
    {
        IRtcEngine.Destroy();
    }

    public IRtcEngine GetRTCEngine()
    {
        return _rtcEngine;
    }
}`

Am I missing any callbacks?

dev-kiwicreations avatar Jul 19 '24 04:07 dev-kiwicreations

@moudisoubra

Discussed in #323

Originally posted by moudisoubra July 1, 2024 When a remote user gets beyond a specific distance I mute their audio so that they cannot be heard at all using: RtcEngine.MuteRemoteAudioStream(uid, true);

However when the remote user gets back within hearing distance unmuting them completely breaks Spatial Audio and they in turn start speaking at full volume.

Thanks for discovering this bug. A fix just went into the refactor11 branch. You may just update the diffs to your downloaded source, before a release comes out.

For quick test, also see updated Positional Spatial Audio Example with a new "Mute Remote" button added.

Screenshot 2024-07-23 at 3 08 14 PM

icywind avatar Jul 23 '24 22:07 icywind

@dev-kiwicreations please see the API-examples.

icywind avatar Jul 23 '24 22:07 icywind