javascript - 带有 Web 音频节点的 Jquery UI slider

标签 javascript jquery html jquery-ui web-audio-api

我这里有点问题。我想要的是一个 jQuery slider ,它显示它的值并将该值设置为我的振荡器的频率和失谐。问题是,我的 slider 工作得很好,但是只要我取消注释网络音频内容或将 change: 事件添加到我的 slider ,它们就会消失。

这是工作代码:

$(document).ready(function(){
$(function() {
    $("#osc1_pitch").slider({
        min: 0,
        max: 25000,
        value: 440,
        step: 2,
        slide: function(event, ui) {
            $("#cur_pitch").val(ui.value);
        }
    });
    $("#cur_pitch").val($("#osc1_pitch").slider("value"));
});
$(function() {
    $("#osc1_detune").slider({
        min: -4800,
        max: 4800,
        value: 0,
        step: 2,
        slide: function(event, ui) {
            $("#cur_detune").val(ui.value);
        }
    });
    $("#cur_detune").val($("#osc1_detune").slider("value"));
});
});

但是当我在 slide: 事件下面添加这个时,它们就消失了

change: function(event, ui){
    osc.frequency.value = $("#cur_pitch").val();
}

当我取消注释我的网络音频代码时,同样的事情:

var pitch = document.getElementById('cur_pitch').value;
var detune = document.getElementById('cur_detune').value;
var ctx = new webkitAudioContext(); 
function osc1(){ 
osc = ctx.createOscillator(), 
osc.type = 0; //0 = sine, 1 = square, 2 = saw, 3 = triangle, 4 = custom
osc.frequency.value = pitch;
osc.detune.value = detune;
gainNode = ctx.createGainNode(); 
osc.connect(gainNode); 
gainNode.connect(ctx.destination);
gainNode.gain.value = 1; 
osc.noteOn(0); 
};

这是注释掉问题代码的 fiddle 中的工作代码:http://jsfiddle.net/ryanhagz/ruXd7/1/

我到处都在寻找正确的答案,我看到了很多将 UI 元素与网络音频连接起来的方法,但我看到的所有方法似乎都不适合我。我有一种感觉,这也很简单。一如既往,我们将不胜感激!

编辑:我添加了 slidechange: 事件并将音高和频率的初始值设置为 slider 的值,它似乎工作得更好,但 slider 仍然没有影响音高或失谐。

新代码:

var ctx = new webkitAudioContext(); 
function osc1(){ 
osc = ctx.createOscillator(), 
osc.type = 0; //0 = sine, 1 = square, 2 = saw, 3 = triangle, 4 = custom
osc.frequency.value;
osc.detune.value;
gainNode = ctx.createGainNode(); 
osc.connect(gainNode); 
gainNode.connect(ctx.destination);
gainNode.gain.value = 1; 
osc.noteOn(0); 
};
$(document).ready(function(){
$(function() {
    $("#osc1_pitch").slider({
        min: 0,
        max: 25000,
        value: 440,
        step: 1,
        slide: function(event, ui) {
            $("#cur_pitch").val(ui.value);
        }
    });
    $("#cur_pitch").val($("#osc1_pitch").slider("value"));
    $("#cur_pitch").on("slidechange", function(event, ui) {
        osc.detune.value = $("#cur_pitch").val();
    });
});
$(function() {
    $("#osc1_detune").slider({
        min: -4800,
        max: 4800,
        value: 0,
        step: 1,
        slide: function(event, ui) {
            $("#cur_detune").val(ui.value);
        }
    });
    $("#cur_detune").val($("#osc1_detune").slider("value"));
    $("#cur_detune").on("slidechange", function(event, ui) {
        osc.detune.value = $("#cur_detune").val();
    });
});

});

最佳答案

当您包含问题代码时,您需要在幻灯片事件之后添加 ,

slide: function(event, ui) {
            $("#cur_pitch").val(ui.value);
        },

slide: function(event, ui) {
            $("#cur_detune").val(ui.value);
        },

http://jsfiddle.net/ruXd7/3/

关于javascript - 带有 Web 音频节点的 Jquery UI slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19672084/

相关文章:

javascript - 如何使用 nvd3 触发调整大小事件?

javascript - 如何阻止 jQuery 加载已存在的 div

javascript - 加载 asp.net webform 时如何停止运行 javascript 函数?

javascript - 以正确的方式使用 z-index

Javascript - 检测浏览器版本

java - HTML 选择框在 Servlet 中返回 null

javascript - 动态形式的重复问题

iphone - 使用 loadHTMLString 在 drawRect 中渲染 UIWebView

javascript - JavaScript 中的对象检测和跟踪

javascript - Bootstrap 4 工具提示卡住使用 Datatables.net