// An example of jsMaxim with manual implementation of webAudio var context = new (window.AudioContext || window.webkitAudioContext)(); var source; var jsProcessor = 0; var analyser; var output = 0; var bufferLoader; // function handling audio processing // called byjsProcessor function process(event) { var numChannels = event.outputBuffer.numberOfChannels; var outputLength = event.outputBuffer.getChannelData(0).length; for (var i = 0; i < outputLength; ++i) { play(); if(output instanceof Array){ // check if we're using arrays for (var channel = 0; channel < numChannels; channel++) { event.outputBuffer.getChannelData(channel)[i] = output[channel]; } } else { for (var channel = 0; channel < numChannels; channel++) { event.outputBuffer.getChannelData(channel)[i] = output; } } } } function initAudio(numChannels) { source = context.createBufferSource(); jsProcessor = context.createScriptProcessor(4096, numChannels, numChannels); jsProcessor.onaudioprocess = process; analyser = context.createAnalyser(); analyser.fftSize = 2048; // Connect the processing graph: source -> jsProcessor -> analyser -> destination source.connect(jsProcessor); jsProcessor.connect(analyser); analyser.connect(context.destination); } function init() { initAudio(2); setup(); } window.onload = init; // ---------------------------------------------------------------------- // The code var mySine = new maximJs.maxiOsc(); var mySamp = new maximJs.maxiSample(); function setup(){ // assign sample to mySamp using current context maximJs.maxiTools.loadSample("audio/beat2.wav", mySamp, context); // makes temporary AudioContext to assign file // maximJs.maxiTools.loadSample("audio/beat2.wav", mySamp); } // called from process() function function play(){ // output = mySine.sinewave(440); if(mySamp.isReady()){ output = mySamp.play(); } }