1

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

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


});

});

4

2 回答 2

0

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

//OscillatorNode constants for the .type attribute

//New way  
enum OscillatorType {"sine",
                     "square",   
                     "sawtooth", 
                     "triangle",
                     "custom" }
于 2013-03-31T13:56:24.357 回答
0

两件事情:

首先,在第 7 行,您的选择器是错误的。需要$('#oscType')。你的缺少#.

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

于 2013-03-31T20:58:10.013 回答