我有一個振盪器,它的初始頻率,失諧和增益參數設置爲他們所附帶的滑塊的值。一切正常,除了我注意到的幾件奇怪的事情:滑條不移動&網絡音頻奇怪的音調變化
- 只有按下播放按鈕後,滑塊纔會移動,但數值仍會改變。
- 按下播放按鈕後,最初會播放正確的音高,但當移動音高滑塊以設置新頻率,然後暫停並再次播放時,聽起來它仍然處於正確的頻率,但高出八度。
- 在第一個奇怪的「八度變化」之後,如果它暫停並再次播放,它會保持在新的意想不到的頻率,就像應該放在第一位一樣。
這裏是我的代碼:
<input type="button" id="play_pause" value="play"/><br/>
<label for="cur_vol">Current Volume:</label><input type="text" id="cur_vol" />
<div id="osc1_vol"></div>
<label for="cur_pitch">Current Pitch:</label><input type="text" id="cur_pitch" />
<div id="osc1_pitch"></div>
<label for="cur_detune">Current Detune:</label><input type="text" id="cur_detune" />
<div id="osc1_detune"></div>
$(document).ready(function(){
//GAIN SLIDER//
$(function() {
$("#osc1_vol").slider({
min: 0,
max: 1,
value: .5,
step: .01,
slide: function(event, ui) {
$("#cur_vol").val(ui.value);
gainNode.gain.value = $("#cur_vol").val();
}
});
$("#cur_vol").val($("#osc1_vol").slider("value"));
});
//PITCH SLIDER//
$(function() {
$("#osc1_pitch").slider({
min: 0,
max: 25000,
value: 440,
step: 1,
slide: function(event, ui) {
$("#cur_pitch").val(ui.value);
osc.detune.value = $("#cur_pitch").val();
}
});
$("#cur_pitch").val($("#osc1_pitch").slider("value"));
});
//DETUNE SLIDER//
$(function() {
$("#osc1_detune").slider({
min: -4800,
max: 4800,
value: 0,
step: 1,
slide: function(event, ui) {
$("#cur_detune").val(ui.value);
osc.detune.value = $("#cur_detune").val();
}
});
$("#cur_detune").val($("#osc1_detune").slider("value"));
});
//PLAY/PAUSE BUTTON//
$('#play_pause').click(function() {
if ($(this).val() == "play") {
$(this).val("pause");
osc1();
}
else {
$(this).val("play");
osc.disconnect();
}
});
});
//WEB AUDIO SET UP//
var ctx = new webkitAudioContext();
//CREATE OSCILLATOR//
function osc1(){
osc = ctx.createOscillator(),
osc.type = 0; //0 = sine, 1 = square, 2 = saw, 3 = triangle, 4 = custom
osc.frequency.value = $("#osc1_pitch").slider("value");
osc.detune.value = $("#osc1_detune").slider("value");
gainNode = ctx.createGainNode();
osc.connect(gainNode);
gainNode.connect(ctx.destination);
gainNode.gain.value - $("#osc1_vol").slider("value");
osc.noteOn(0);
};
這裏的工作演示: http://jsfiddle.net/ryanhagz/tvfDZ/
如果您在使用jQuery的.slider麻煩,你可以使用HTML5的'' – uber5001