如何在Unity中将混音器的音量设置为滑块的音量?

3

我正在尝试进行一些音频设置。这是我的脚本:

public AudioMixer masterMixer;
public float masterLvl;
public float musicLvl;
public float sfxLvl;

public void SetMasterVolume ()
{
    masterLvl = masterVolumeSlider.value;
    masterMixer.SetFloat("masterVol", masterLvl);
}

public void SetMusicVolume()
{
    musicLvl = musicVolumeSlider.value;
    masterMixer.SetFloat("musicVol", musicLvl);
}

public void SetSfxVolume()
{
    sfxLvl = sfxVolumeSlider.value;
    masterMixer.SetFloat("sfxVol", sfxLvl);
}

它在滑块上具有所有的OnValueChanged()功能,我只是想知道为什么它不起作用。谢谢。

编辑:问题在于它更改了 dB 而不是音量。新问题是:如何使其更改音量而不是dB?

编辑2:屏幕截图。 audiomixer screenshot


顺便说一下,控制台没有任何错误。一切都被分配并且运行良好。 - mesrefoglu
当您设置断点并进行调试时,是否命中了相关的代码? - Sam Marion
我已经放置了它。它可以工作。此外,当我滑动音乐音量滑块时,它会立即增加音量,但不会再次减小音量。它根本没有改变。(背景音乐音量) - mesrefoglu
此外,我所有滑块的最大值都等于1,即使音量也是1,但音量仍然会增加。 - mesrefoglu
你能在检查器选项卡中发布AudioMixer的屏幕截图吗? - Programmer
显示剩余4条评论
3个回答

8
我认为,你的问题在于混音器值(-80db - 20db)是对数刻度,而滑块值是线性的。举个例子:一半的音量实际上大约是 -10db,但如果将其连接到像滑块这样的线性刻度上,那么一半的音量最终会变成 -40db!这就是为什么在那个点听起来基本上是静音的原因。
有一个简单的方法来解决它:
  1. Instead of setting the slider min / max values to -80 and 20, set them to min 0.0001 and max 1.

  2. In the script to set the value of the exposed parameter, use this to convert the linear value to an attenuation level:

     masterMixer.SetFloat("musicVol", Mathf.Log10(masterLevel) * 20);
    

重要的是将最小值设置为0.0001,否则将其降至零会破坏计算并再次增加体积。

发布:

https://forum.unity.com/threads/changing-audio-mixer-group-volume-with-ui-slider.297884/


2
这里有一个公式,听起来更接近于线性音量的通常表现方式:
    private float ValueToVolume(float value, float maxVolume)
    {
        return Mathf.Log10(Mathf.Clamp(value, 0.0001f, 1f)) * (maxVolume - zeroVolume) / 4f + maxVolume;
    }
  • 它看起来像这样

  • 如果您的AudioMixerGroup“max”音量不为0而是-20db,可以使用maxVolume。


zeroVolume?您是指0f吗? - user2015253

1

你将需要处理dB来设置混音器的音量。将滑块的下限设为-80,上限设为20,它就能很好地与混音器配合使用。如果你不想处理它,你可以改变音频侦听器或源的音量。


谢谢。那其实是我已经做过的。我只是想知道是否有任何方法可以这样做。看起来好像没有。再次感谢。 - mesrefoglu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接