2013-03-31 3 views
1

Мне удалось заставить ползунок изменять частоту генератора, но не работает для типа осциллятора.Изменение типа осциллятора в API веб-аудио со сдвигом диапазона

здесь ссылка jsfiddle http://jsfiddle.net/ehsanziya/aKDkf/1/

и Вот JavaScript

$(document).ready(function() { 

var context = new webkitAudioContext(); 
var osc = context.createOscillator(); 

//initializing oscillator type to 0 (Sinewave) 
osc.type=0; 
$('oscType').change(function(){ 
osc.type = $(this).val(); 
}) 

//setting initial OSC frequency to 440. 
osc.frequency.value = 440; 
//changing Oscillator's frequency with the range input 
$('#oscFreq').change(function(){ 
osc.frequency.value = $(this).val() 
}) 



$('#onOff').click(function() { 
    this.value = this.value === 'ON' ? 'OFF' : 'ON'; 
}); 


$('#onOff').click(function() { 
    var buttonValue = $('#onOff').val(); 

    // creating AudioContext 


    if (buttonValue === 'OFF') { 
     osc.connect(context.destination); 
     osc.noteOn(0); 

    } else if (buttonValue === 'ON') { 
     osc.disconnect(0); 
    } 


}); 

});

ответ

0

Две вещи:

Во-первых, в строке 7 ваш селектор ошибочен. Нужно быть $('#oscType'). У вас отсутствовал #.

Во-вторых, в строке 8 вам необходимо изменить на osc.type = parseInt($(this).val(), 10);, поскольку входные значения всегда являются строками, и вам нужно целое число.

+0

Да, спасибо, я исправился, глупая ошибка. теперь его работа. что именно делает второй аргумент в parseInt? я имею в виду 10. – zya

+0

Второй аргумент называется основанием или базой. Это всегда хорошая идея - одна, потому что в некоторых случаях вы можете столкнуться с странными проблемами. Например, некоторые браузеры будут интерпретировать строку '' 065 '' как '53', потому что они предполагают, что начальный нуль означает, что это восьмеричный, или base-8. –

0

Я не проверял другие возможные проблемы, но в соответствии с API спецификации веб-аудио, вы должны передать строку с указанием нужного типа вместо междунар, см deprecation notes

//OscillatorNode constants for the .type attribute 

//New way 
enum OscillatorType {"sine", 
        "square", 
        "sawtooth", 
        "triangle", 
        "custom" } 
+0

Да, но он также должен работать с цифрами, – zya

+0

работает, когда я меняю его вручную на 1 и меняет тип осциллятора на квадратную волну, но не работает с ползунком. – zya

+0

@EhsanZiya, делает jQuery на вашем слайдере, давая вам ints или строки? – kr1