我在弄清楚这个与数学有关的问题时遇到了麻烦。

我正在为项目使用jogDial.js插件。

借助它,我正在尝试模拟控制Web音频api的gainNode的音量拨盘。

插件可以使用以下命令返回拨盘的程度:

console.log("event.target.degree: "+event.target.degree);
//between +220 and +140


它也可以返回旋转:

console.log("event.target.rotation: "+ event.target.rotation);
//between -140 and +140


我发现旋转更容易使用。

模拟来自Harman / Karmon接收器的真实现有转盘,下限为-140旋转,中值为0,中值为140旋转。

这是表盘的实际图像,因此您可以直观地看到(忽略图像中的数字0和40):



我的GainNode限制为0和1,其中1为100%音量,0为静音。

在-140度处,体积应为0%。网络音频api gainNode.gain.value将为0。

当刻度盘处于0度时,那将是中间点。音量应为50%,或gainNode.gain的值为0.50。

当拨盘为+140度时,音量应为100%,或Web音频api的增益值为1。

我在弄清楚可以在我的on(“ mousemove”,function(event){})中使用的公式时遇到了麻烦;

我尝试了这个:

var volumeDial = JogDial(document.getElementById('volume-knob'), {
    debug: true,
    wheelSize: '90%',
    zIndex: '100',
    touchMode: 'wheel',
    knobSize: '3%',
    minDegree: -140,
    maxDegree: 140,
    degreeStartAt: 0
}).on("mousemove", function(event){
    var volume = event.target.rotation;
    console.log("event.target.rotation: "+ event.target.rotation);
    console.log("event.target.degree: "+event.target.degree);
    var theGain;
    theGain = Math.abs(50-(volume*0.3575)-100) *0.01;
    gainNode.gain.value = theGain;
console.log("gainNode.gain.value: "+gainNode.gain.value);
    source.connect(gainNode);
}).on("mouseup", function(event){
    console.log("event.target.rotation: "+event.target.rotation);
    console.log("event.target.degree: "+event.target.degree);
});


问题在于它不准确。它接近但不是理想的效果。声音仍为0%,从0%到100%的声音差别不大。

在0%时,我的增益值为“ 0.0005000000237487257”。声音远没有寂静,声音很大。

在50%时,我的增益值为0.5,这是正确的。

在100%时,我的收益值为1.000499963760376。

最佳答案

您真正需要的是

(event.target.rotation + 140) / 280


我什至不知道你从哪里拿乘数。

关于javascript - Web音频API的与数学相关的Javascript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29021851/

10-12 06:42