如何在 Unity 中将混音器的音量设置为滑块的音量?
How to set a Mixer's volume to a slider's volume in Unity?
我正在尝试进行一些音频设置。这是我的脚本:
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:截图。
您必须处理 dB 才能设置调音台的音量。将滑块的下限设置为 -80,将上限设置为 20,它将与混音器一起正常工作。如果您不想处理它,您可以更改音频侦听器或源的音量。
我认为,您的问题是混频器值 (-80db - 20db) 是对数刻度,滑块值是线性的。例如:半音量实际上是-10db,但是如果你把它连接到一个线性刻度,比如滑块,那么半音量最终会是-40db!这就是为什么听起来它在那一点上基本上是沉默的。
有一个简单的方法可以修复它:
不要将滑块的最小值/最大值设置为 -80 和 20,而是将它们设置为最小值 0.0001 和最大值 1。
在设置暴露参数值的脚本中,使用这个将线性值转换为衰减级别:
masterMixer.SetFloat("musicVol", Mathf.Log10(masterLevel) * 20);
将最小值设置为 0.0001 很重要,否则将其一直降至零会破坏计算并再次提高音量。
Post:
https://forum.unity.com/threads/changing-audio-mixer-group-volume-with-ui-slider.297884/
这是一个主观上听起来更接近线性音量通常表现的公式:
private float ValueToVolume(float value, float maxVolume)
{
return Mathf.Log10(Mathf.Clamp(value, 0.0001f, 1f)) * (maxVolume - zeroVolume) / 4f + maxVolume;
}
-
如果您的 AudioMixerGroup“最大”音量不是 0 而是 -20db,则可以使用 maxVolume。
我正在尝试进行一些音频设置。这是我的脚本:
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:截图。
您必须处理 dB 才能设置调音台的音量。将滑块的下限设置为 -80,将上限设置为 20,它将与混音器一起正常工作。如果您不想处理它,您可以更改音频侦听器或源的音量。
我认为,您的问题是混频器值 (-80db - 20db) 是对数刻度,滑块值是线性的。例如:半音量实际上是-10db,但是如果你把它连接到一个线性刻度,比如滑块,那么半音量最终会是-40db!这就是为什么听起来它在那一点上基本上是沉默的。
有一个简单的方法可以修复它:
不要将滑块的最小值/最大值设置为 -80 和 20,而是将它们设置为最小值 0.0001 和最大值 1。
在设置暴露参数值的脚本中,使用这个将线性值转换为衰减级别:
masterMixer.SetFloat("musicVol", Mathf.Log10(masterLevel) * 20);
将最小值设置为 0.0001 很重要,否则将其一直降至零会破坏计算并再次提高音量。
Post:
https://forum.unity.com/threads/changing-audio-mixer-group-volume-with-ui-slider.297884/
这是一个主观上听起来更接近线性音量通常表现的公式:
private float ValueToVolume(float value, float maxVolume)
{
return Mathf.Log10(Mathf.Clamp(value, 0.0001f, 1f)) * (maxVolume - zeroVolume) / 4f + maxVolume;
}
如果您的 AudioMixerGroup“最大”音量不是 0 而是 -20db,则可以使用 maxVolume。