Sine Wave The Hard Way
by teropa
Babel + JSX
const REAL_TIME_FREQUENCY = 440;
const ANGULAR_FREQUENCY = REAL_TIME_FREQUENCY * 2 * Math.PI;
let audioContext = new AudioContext();
let myBuffer = audioContext.createBuffer(1, 88200, 44100);
let myArray = myBuffer.getChannelData(0);
for (let sampleNumber = 0 ; sampleNumber < 88200 ; sampleNumber++) {
myArray[sampleNumber] = generateSample(sampleNumber);
}
function generateSample(sampleNumber) {
let currentTime = sampleNumber / 44100;
let currentAngle = currentTime * ANGULAR_FREQUENCY;
return Math.sin(currentAngle);
}
let src = audioContext.createBufferSource();
src.buffer = myBuffer;
src.connect(audioContext.destination);
src.start();