var channels, rate, frameBufferLength, samples; function audioInfo() { var audio = document.getElementById('audio'); // After loadedmetadata event, following media element attributes are known: channels = audio.mozChannels; rate = audio.mozSampleRate; frameBufferLength = audio.mozFrameBufferLength; } function audioAvailable(event) { var samples = event.frameBuffer; var time = event.time; for (var i = 0; i < frameBufferLength; i++) { // Do something with the audio data as it is played. processSample(samples[i], channels, rate); } }
Hz play stop <br/>function AudioDataDestination(sampleRate, readFn) {<br/>// Initialize the audio output.<br/>var audio = new Audio();<br/>audio.mozSetup(1, sampleRate);<br/>var currentWritePosition = 0;<br/>var prebufferSize = sampleRate / 2; // buffer 500ms<br/>var tail = null;<br/>// The function called with regular interval to populate<br/>// the audio output buffer.<br/>setInterval(function() {<br/>var written;<br/>// Check if some data was not written in previous attempts.<br/>if(tail) {<br/>written = audio.mozWriteAudio(tail);<br/>currentWritePosition += written;<br/>if(written < tail.length) {<br/>// Not all the data was written, saving the tail...<br/>tail = tail.slice(written);<br/>return; // ... and exit the function.<br/>}<br/>tail = null;<br/>}<br/>// Check if we need add some data to the audio output.<br/>var currentPosition = audio.mozCurrentSampleOffset();<br/>var available = currentPosition + prebufferSize - currentWritePosition;<br/>if(available > 0) {<br/>// Request some sound data from the callback function.<br/>var soundData = new Float32Array(available);<br/>readFn(soundData);<br/>// Writting the data.<br/>written = audio.mozWriteAudio(soundData);<br/>if(written < soundData.length) {<br/>// Not all the data was written, saving the tail.<br/>tail = soundData.slice(written);<br/>}<br/>currentWritePosition += written;<br/>}<br/>}, 100);<br/>}<br/>// Control and generate the sound.<br/>var frequency = 0, currentSoundSample;<br/>var sampleRate = 44100;<br/>function requestSoundData(soundData) {<br/>if (!frequency) {<br/>return; // no sound selected<br/>}<br/>var k = 2* Math.PI * frequency / sampleRate;<br/>for (var i=0, size=soundData.length; i<size; i++) {<br/>soundData[i] = Math.sin(k * currentSoundSample++);<br/>}<br/>}<br/>var audioDestination = new AudioDataDestination(sampleRate, requestSoundData);<br/>function start() {<br/>currentSoundSample = 0;<br/>frequency = parseFloat(document.getElementById("freq").value);<br/>}<br/>function stop() {<br/>frequency = 0;<br/>}<br/>
var frequency = 0, offset = 0; var sampleRate = 44100; function requestSoundData(e) { var channels = e.outputBuffer.numberOfChannels; var k = 2* Math.PI * frequency / sampleRate; for (var c=0; c< channels; c++) { var soundData = e.outputBuffer.getChannelData(c); for(var i = 0;isoundData[i] = frequency === 0 ? 0.0 : Math.sin(k * (offset + i)); } } offset += soundData.length; }
var frequency = 0, offset = 0; var sampleRate = 44100; function requestSoundData(e) { var channels = e.outputBuffer.numberOfChannels; var k = 2* Math.PI * frequency / sampleRate; for (var c=0; c< channels; c++) { var soundData = e.outputBuffer.getChannelData(c); for(var i = 0;isoundData[i] = frequency === 0 ? 0.0 : Math.sin(k * (offset + i)); } } offset += soundData.length; }
var frequency = 0, offset = 0; var sampleRate = 44100; function requestSoundData(e) { var channels = e.outputBuffer.numberOfChannels; var k = 2* Math.PI * frequency / sampleRate; for (var c=0; c< channels; c++) { var soundData = e.outputBuffer.getChannelData(c); for(var i = 0;isoundData[i] = frequency === 0 ? 0.0 : Math.sin(k * (offset + i)); } } offset += soundData.length; }