Changes

Jump to: navigation, search

User:David.humphrey/Audio Data API 2

78 bytes added, 20:33, 21 May 2010
Complete Example: Creating a Web Based Tone Generator
<body>
<input type="text" size="4" id="freq" value="440"><label for="hz">Hz</label>
<button onclick="generateWaveform()">set</button>
<button onclick="start()">play</button>
<button onclick="stop()">stop</button>
<script type="text/javascript">
var sampledata sampleRate = [];44100, var freq portionSize = 440;sampleRate / 10, var interval prebufferSize = -1;sampleRate / 2, var audio freq = undefined;// no sound
function writeData() { var n audio = Math.ceilnew Audio(freq / 100); for(var i=0;i<n;i++) audio.mozWriteAudiomozSetup(sampledata1, sampleRate, 1); }var currentWritePosition = 0;
function startgetSoundData(t, size) { audio var soundData = new AudioFloat32Array(size); audioif (freq) { var k = 2* Math.mozSetupPI * freq / sampleRate; for (1, 44100, 1var i=0; i<size; i++);{ interval soundData[i] = setIntervalMath.sin(writeData, 10k * (i + t)); } } return soundData;
}
function stopwriteData() { if while(interval !audio.mozCurrentSampleOffset() + prebufferSize >= -1currentWritePosition) { clearIntervalvar soundData = getSoundData(currentWritePosition, portionSize); audio.mozWriteAudio(intervalsoundData); interval currentWritePosition += -1portionSize;
}
}
// initial write writeData(); var writeInterval = Math.floor(1000 * portionSize / sampleRate); setInterval(writeData, writeInterval);  function generateWaveformstart() {
freq = parseFloat(document.getElementById("freq").value);
// we're playing at 44.1kHz, so figure out how many samples
// will give us one full period
var samples = 44100 / freq;
// Could use Array() here too, typed array is faster
sampledata = Float32Array(Math.round(samples));
for (var i=0; i<sampledata.length; i++) {
sampledata[i] = Math.sin(2*Math.PI * (i / sampledata.length));
}
}
generateWaveformfunction stop(){ freq = undefined; }
</script>
</body>
Confirm
656
edits

Navigation menu