// The context is the base for the API.
var audioContext = new AudioContext();
// We can load an audio file by using an audio tag
var audiotoload = document.getElementById("audiotoplay");
var audioSource = audioContext.createMediaElementSource(audiotoload);
// To simply play it, we can connect it to the "destination" or default output of the context
audioSource.connect(audioContext.destination); // Connect to the default output
audiotoload.play();
var audioContext = new AudioContext();
var audiotoload = document.getElementById("audiotoplay");
var audioSource = audioContext.createMediaElementSource(audiotoload); // No longer playable by the normal audio tag
// We can construct a "Gain node" and connect our audio to it
var gainNode = audioContext.createGain();
audioSource.connect(gainNode);
// We can then connect it to our output to play it with gain control
gainNode.connect(audioContext.destination);
audiotoload.play();
// Here is a slider on the page which change the gain
var volumeControl = document.getElementById("volume");
volumeControl.addEventListener("change", function(event) {
console.log(event);
gainNode.gain.value = event.target.value;
audiotoload.play();
});
// The element on the page
// <input type="range" name="volume" id="volume" min="0" max="10" step=".1">
More
HTML5 Rocks: Web Audio Intro
Mozilla: Web Audio API
window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true}, function(stream) {
var audioContext = new AudioContext();
var audioSource = audioContext.createMediaStreamSource(stream);
}, function(error) {alert("Failure " + error.code);}
);
}
var analyser = (analyser || audioContext.createAnalyser());
audioSource.connect(analyser);
audiotoload.play();
var drawingCanvas = document.getElementById("drawingCanvas");
var drawingContext = drawingCanvas.getContext("2d");
drawingContext.fillStyle = "#FF0000";
var performAnalysis = function() {
var frequencies = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(frequencies);
for (var i = 0; i < frequencies.length; i++) {
//console.log(frequencies[i]);
drawingContext.fillRect(i*10,frequencies[i], 10, drawingCanvas.height);
}
requestAnimationFrame(performAnalysis);
};
performAnalysis();
requestAnimationFrame documentation
Web Audio API samples from a forthcoming book
var recorder;
//recorder = new Recorder(audioSource); // Once we have the stream...
var startRecording = function() {
recorder.record();
};
var stopRecording = function() {
recorder.stop();
recorder.exportWAV(function(blob) {
var url = URL.createObjectURL(blob);
var au = document.createElement('audio');
var hf = document.createElement('a');
au.controls = true;
au.src = url;
hf.href = url;
hf.download = new Date().toISOString() + '.wav';
hf.innerHTML = hf.download;
document.body.appendChild(au);
document.body.appendChild(hf);
});
};