我是一名音频工程师,刚刚开始使用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();
,但我不知道如何执行它。
答案 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