我正在用DirectX.DirectSound开发音乐播放器。我的音量有问题。直接音量是对数。这意味着在无声的情况下,对幅度的微小变化比对响亮的声音要敏感得多。这也意味着,对于线性音量滑块,我们会有音量变化的对数感觉,并且感觉不对。我的问题是:我怎样才能使它线性? 我的代码,直到这里是:Directsound对数音量到线性音量滑块
if (trkBalance.Value == trkBalance.Minimum)
{
foreGroundSound.Volume = (int)DS.Volume.Min;
}
else if (trkBalance.Value == trkBalance.Maximum)
{
foreGroundSound.Volume = (int)DS.Volume.Max;
}
else
{
foreGroundSound.Volume = (int)(-5000 * Math.Log10(100 - trkBalance.Value));
}
“trkBalance.Value”的范围是多少?如果你想恢复对数标度,你必须使用反函数('Math.Exp')。 DS.Volume.Min/Max是什么值?你需要找到一个函数'v(t)= c * Math.Exp(t)',其中'v(minValue)== DS.Volume.Min'和'v(maxValue)== DS.Volume.Max'。 – 2013-04-08 16:00:13
@NicoSchertler它用于-10000 Min和0 for Maximum,我的轨迹栏是0-100。我正在尝试'foreGroundSound.Volume = Math.Exp(((trkBalance.Value * 100) - 10000)',但没有运气。 – 2013-04-08 16:07:20