如何解决Agora 中的语音平移在非常小的“平移”值下是全有或全无的,并且会大大降低音量
我在 Unity 中使用 Agora SDK 使玩家能够相互语音聊天,并使用 SetRemoteVoicePosition(uid,pan,gain) 使声音听起来像是来自他们所在的世界。我已经将我输入的值输出为“pan”,它在文档中定义的 -1.0 到 1.0 范围内。但我注意到了一些奇怪的行为:如果“pan”是 -0.00999 到 0.00999,它会将 pan 视为“完全居中”;但是当它达到 -0.01 或 0.01 的那一刻,它会立即猛烈撞击左声道或右声道,伴随着音量突然下降,因为它突然失去了一个声道。
这里的问题是它的突然性。例如,我没有明显的方法让右声道的声音达到 100%,左声道的声音达到 85%;要么两者均为 100%,要么两者均为 0%,介于两者之间。
这是完整的功能。 (距离计算工作正常,当我取消对 Debug.Log 的注释时,平移值是我期望看到的:-1 表示直接在左边的人,1 表示直接在右边的人,并且在它们之间平滑移动正如预期的那样。)
public void SetSpeakerPosition(uint uid,Vector3 worldPosition)
{
Vector3 localPosition = transform.InverseTransformPoint(worldPosition);
float distanceToSpeaker = localPosition.magnitude;
float gain = GetEmitterVolume(distanceToSpeaker) * 100f * VTWConfigManager.config.voiceChatVolume * dynamicVolumeMultiplier;
float pan = 0f;
if (VTWConfigManager.config.voiceChatPanningActive)
pan = Mathf.Lerp(
0f,Vector3.Dot(localPosition.normalized,Vector3.right),panFactorByRange.Evaluate(distanceToSpeaker / maxRange));
//Debug.Log($"Pan for {uid} is {pan} for x-pos {localPosition.normalized.x}; volume is {gain}");
audioEffects.SetRemoteVoicePosition(uid,gain);
}
在初始化期间和加入房间之前,我还调用了上面链接文档中提到的 mRtcEngine.EnableSoundPositionIndication(true);
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。