使用范围滑块更改Web Audio API中的振荡器类型

时间:2013-03-31 12:15:52

标签: html5-audio web-audio

我设法让滑块更改为振荡器频率但不适用于振荡器类型。

这里是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);
    }


});

});

2 个答案:

答案 0 :(得分:0)

我没有检查其他可能的问题,但是根据网络音频API规范,您应该传入一个字符串,指明所需类型而不是int,请参阅deprecation notes

//OscillatorNode constants for the .type attribute

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

答案 1 :(得分:0)

两件事:

首先,在第7行,你的选择器是错误的。需要$('#oscType')。你的人错过了#

其次,在第8行,您需要更改为osc.type = parseInt($(this).val(), 10);,因为输入值始终是字符串,您需要一个整数。