切换一次性 - JavaScript - Web Audio API

时间:2013-03-17 14:57:16

标签: javascript audio web-audio

我是一名音频工程师,刚刚开始使用JavaScript和HTML5,特别是WEB音频API。

我有这个振荡器代码连接到目标(输出)。 这是代码

我想要一个按钮来连接和断开振荡器到目的地 我设法让它开始,但我不能断开它。

<html>
<head>
    <script>
        //creating the context
        context = new webkitAudioContext(); //allways the first code for audio API
        function osc1(frequency){ // Creating a function that has an oscillator going to gainNode and then going to the destination

            //creating AudioNodes and AudioParams

            //creating OscillatorNode
            var oscillator = context.createOscillator(); //creating Node's as Variables
            oscillator.type = 0; //0 is a sine wave
            oscillator.noteOn(0); // turning on the oscillator
            oscillator.frequency.value = frequency;// telling that frequency in () of the function equals to what


            //creating GainNode
            var gain = context.createGainNode(); // creating the Gain node
            gain.gain.value = 1; // setting up the value for gain node


            //Making the connections
            oscillator.connect(gain); // connecting oscillator to gain
            gain.connect(context.destination); // connecting gain to destination (speakers)
        }; // now we have a function called osc1(we can put frequency in here) then we can re call


    </script>
</head>

<body>
    <input type="button" value="on"  onClick="osc1(500);" />

</body>

</html>

我知道断开连接的代码是oscillator.disconnect();,但我不知道如何执行它。

3 个答案:

答案 0 :(得分:0)

也许你想在函数外面声明振荡器变量:

var context = new webkitAudioContext();
var oscillator = context.createOscillator();
function osc1(frequency){
  var button = document.getElementsByTagName('input')[0];
  if (button.value === 'off') {
    button.value = 'on';
    oscillator.disconnect();
  } else {
    button.value = 'off';
    // same as your original code (connect, noteOn...)

答案 1 :(得分:0)

我也正在研究这个问题。

你做oscillator.disconnect(0),其中零代表输出数字。

我认为这意味着如果将振荡器分别连接到增益节点和滤波器节点,增益将断开(0)并且滤波器将断开连接(1)。

我认为跟踪哪些输出是我们的工作,因为看起来不像是内置方式。

我希望规范发生变化,以便我们可以将disconnect()传递给我们想要断开的实际节点。

答案 2 :(得分:0)

已经提到过了,但你需要公开oscillator变量(可能是全局范围),以便你的off函数可以断开它(确保你没有重新声明它oscillator处理程序中的onclick变量。

以下是一个工作示例:http://jsbin.com/iwetiy/1/edit