// 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
let constraints = { audio: true, video: false } navigator.mediaDevices.getUserMedia(constraints).then(function(stream) { var audioContext = new AudioContext(); var audioSource = audioContext.createMediaStreamSource(stream); }) .catch(function(err) { alert(err); });
var audioContext = new AudioContext(); var audioSource = audioContext.createMediaStreamSource(stream); // Create the analyser and set it up var analyser = audioContext.createAnalyser(); analyser.fftSize = 256; var dataArray = new Uint8Array(analyser.frequencyBinCount); //analyser.getByteTimeDomainData(dataArray); //analyser.getByteFrequencyData(dataArray); // Connect to audio audio audioSource.connect(analyser); // Draw on Canvas var drawingCanvas = document.getElementById("drawingCanvas"); var drawingContext = drawingCanvas.getContext("2d"); var performAnalysis = function() { drawingContext.fillStyle = "#FFFFFF"; drawingContext.fillRect(0,0,drawingCanvas.width,drawingCanvas.height); //analyser.getByteTimeDomainData(dataArray); analyser.getByteFrequencyData(dataArray); drawingContext.fillStyle = "#FF0000"; let total = 0; for (var i = 0; i < dataArray.length; i++) { //console.log(frequencies[i]); drawingContext.fillRect(i,0,1,dataArray[i]); total+=dataArray[i]; } console.log("Volume:"+total/dataArray.length); requestAnimationFrame(performAnalysis); }; performAnalysis();
let constraints = { audio: true, video: false } navigator.mediaDevices.getUserMedia(constraints).then(function(stream) { var audioContext = new AudioContext(); var audioSource = audioContext.createMediaStreamSource(stream); // Do something to it, in this case, add tones // This can combine audio streams var gainNode = audioContext.createGain(); // Connect our source to it audioSource.connect(gainNode); // Create an oscillator var osc = audioContext.createOscillator(); // Connect to gainNode osc.connect(gainNode); osc.frequency.value = 440; // Probably want to hook this up to something osc.start(); // newStream.stream is what we would use to send to other people var newStream = audioContext.createMediaStreamDestination(); // Connect the gainNode to the stream gainNode.connect(newStream); /* If we have video, we want to put that on the newStream as well: // Extract the video tracks from the stream let videoTracks = stream.getVideoTracks(); // Use the first video track, add it to the newStream if (videoTracks.length > 0) { newStream.stream.addTrack(videoTracks[0]); } */ }) .catch(function(err) { alert(err); });Full Example