如何在Unity中将调音台的音量设置为滑块的音量?

时间:2017-10-02 15:54:09

标签: c# unity3d audio uislider mixer

我试图进行一些音频设置。这是我的剧本:

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

3 个答案:

答案 0 :(得分:3)

我认为,您的问题是混频器值(-80db-20db)是对数刻度,滑块值是线性的。例如:一半的音量实际上约为-10db,但是如果将其连接到线性标尺(如滑块),则一半的音量最终将为-40db!这就是为什么听起来在这一点上基本保持沉默的原因。

有一种简单的解决方法:

  1. 不要将滑块的最小/最大值设置为-80和20,而是将其设置为最小0.001和最大1。
  2. 在脚本中设置暴露参数的值,使用它可以将线性值转换为衰减水平:

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

将最小值设置为0.001很重要,否则将其降至零将破坏计算并再次增大音量。

帖子:

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

答案 1 :(得分:2)

这是一个主观上听起来更接近线性音量通常行为的公式:

    private float ValueToVolume(float value, float maxVolume)
    {
        return Mathf.Log10(Mathf.Clamp(value, 0.0001f, 1f)) * (maxVolume - zeroVolume) / 4f + maxVolume;
    }
  • 看起来something like this

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

答案 2 :(得分:0)

您必须处理dB以设置调音台的音量。将滑块的下限设置为-80,上限设置为20,使用调音台可以正常工作。如果您不想处理它您可以更改音频监听器或源的音量。