function Vector2(x, y) {
this.vector = [x, y];
}
Vector2.prototype.getVector = function() {
return this.vector;
};
var vector1 = new Vector2(5, 0);
var vector2 = new Vector2(-5, 0);
var vector3 = new Vector2(0, 5);
var vector4 = new Vector2(0, -5);
var vector5 = new Vector2(5, 5);
var vector6 = new Vector2(-5, -5);
var vector7 = new Vector2(5, -5);
var vector8 = new Vector2(-5, 5);
console.dir(vector1.getVector()) // -> [5, 0]
// ....
window.AudioContext = window.AudioContext || window.webkitAudioContext;
// Create the instance of AudioContext
var context = new AudioContext();
// Create the instance of OscillatorNode
var oscillator = context.createOscillator(); // for input
// for legacy browsers
oscillator.start = oscillator.start || oscillator.noteOn;
oscillator.stop = oscillator.stop || oscillator.noteOff;
// Create the instance of ChannelSplitterNode
var splitter = context.createChannelSplitter(2); // The number of splitted channels
// Create the instance of ChannelMergerNode
var merger = context.createChannelMerger(2); // The number of merged channels
window.AudioContext = window.AudioContext || window.webkitAudioContext;
// Create the instance of AudioContext
var context = new AudioContext();
// Create the instance of PannerNode
var panner = context.createPanner();
// Get the instance of AudioListener
var listener = context.listener;
// Create the instance of OscillatorNode
var oscillator = context.createOscillator(); // for input
// for legacy browsers
oscillator.start = oscillator.start || oscillator.noteOn;
oscillator.stop = oscillator.stop || oscillator.noteOff;
// Connect nodes for effect (Auto Panner) sound
// OscillatorNode (Input) -> PannerNode (pan) -> AudioDestinationNode (Output)
oscillator.connect(panner);
panner.connect(context.destination);
/*
* sample code 02
*/
// ....
processor.onaudioprocess = function(event) {
// Get the instance of Float32Array for input data (Array size equals buffer size)
var inputs = event.inputBuffer.getChannelData(0);
// var outputs = event.outputBuffer.getChannelData(0); // Not used
for (var i = 0; i < this.bufferSize; i++) {
// Move pan
panner.setPosition(inputs[i], 0, 0);
}
}
// Start LFO
lfo.start(0);
/*
* sample code 03
*/
// ....
// Set Depth
var depth = 2.5;
processor.onaudioprocess = function(event) {
// Get the instance of Float32Array for input data (Array size equals buffer size)
var inputs = event.inputBuffer.getChannelData(0);
// var outputs = event.outputBuffer.getChannelData(0); // Not used
for (var i = 0; i < this.bufferSize; i++) {
// Move pan
var x = depth * inputs[i];
panner.setPosition(x, 0, 0);
}
}
// Effector (Auto Panner) ON
lfo.start(0);
window.AudioContext = window.AudioContext || window.webkitAudioContext;
// Create the instance of AudioContext
var context = new AudioContext();
// Create the instance of PannerNode
var panner = context.createPanner();
// Get the instance of AudioListener
var listener = context.listener;
// Create the instance of OscillatorNode
var oscillator = context.createOscillator(); // for input
var lfo = context.createOscillator(); // for LFO
// for legacy browsers
oscillator.start = oscillator.start || oscillator.noteOn;
oscillator.stop = oscillator.stop || oscillator.noteOff;
lfo.start = lfo.start || lfo.noteOn;
lfo.stop = lfo.stop || lfo.noteOff;
// for legacy browsers
context.createScriptProcessor = context.createScriptProcessor || context.createJavaScriptNode;
// for selecting optimized buffer size
var getBufferSize = function() {
if (/(Win(dows )?NT 6\.2)/.test(navigator.userAgent)) {
return 1024; // Windows 8
} else if (/(Win(dows )?NT 6\.1)/.test(navigator.userAgent)) {
return 1024; // Windows 7
} else if (/(Win(dows )?NT 6\.0)/.test(navigator.userAgent)) {
return 2048; // Windows Vista
} else if (/Win(dows )?(NT 5\.1|XP)/.test(navigator.userAgent)) {
return 4096; // Windows XP
} else if (/Mac|PPC/.test(navigator.userAgent)) {
return 1024; // Mac OS X
} else if (/Linux/.test(navigator.userAgent)) {
return 8192; // Linux
} else if (/iPhone|iPad|iPod/.test(navigator.userAgent)) {
return 2048; // iOS
} else {
return 16384; // Otherwise
}
};
// Create the instance of ScriptProcessorNode for LFO
var processor = context.createScriptProcessor(getBufferSize(), 1, 1);
// Connect nodes for effect (Auto Panner) sound
// OscillatorNode (Input) -> PannerNode (pan) -> AudioDestinationNode (Output)
oscillator.connect(panner);
panner.connect(context.destination);
// Connect nodes for LFO that changes pan periodically
// OscillatorNode (LFO) -> ScriptProcessorNode (setPosition) (-> AudioDestinationNode (dummy))
lfo.connect(processor);
processor.connect(context.destination);
// Set Depth
var depth = 2.5;
// Set Rate
lfo.frequency.value = 0.5; // 0.5 Hz
processor.onaudioprocess = function(event) {
// Get the instance of Float32Array for input data (Array size equals buffer size)
var inputs = event.inputBuffer.getChannelData(0);
// var outputs = event.outputBuffer.getChannelData(0); // Not used
for (var i = 0; i < this.bufferSize; i++) {
// Move pan
var x = depth * inputs[i];
panner.setPosition(x, 0, 0);
}
}
// Start sound
oscillator.start(0);
// Effector (Auto Panner) ON
lfo.start(0);