in editor/extension.ts [258:330]
function renderWave(e: any) {
let aud = e.target;
let current = aud.currentTime;
let end = aud.duration;
let canvas = getCanvas();
if (!canvas || !canvas.getContext || !modController || !end) {
return;
}
let strip = canvas.getContext("2d");
// Resize the canvas to be the window size.
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
let h = strip.canvas.height;
let w = strip.canvas.width;
strip.clearRect(0, 0, w, h);
let y: number;
// Draw scale lines at 10% interval
strip.lineWidth = 1.0;
strip.strokeStyle = "#55a";
strip.beginPath();
y = 1 * (h / 10);
strip.moveTo(0, y);
strip.lineTo(w, y);
y = 2 * (h / 10);
strip.moveTo(0, y);
strip.lineTo(w, y);
y = 3 * (h / 10);
strip.moveTo(0, y);
strip.lineTo(w, y);
y = 4 * (h / 10);
strip.moveTo(0, y);
strip.lineTo(w, y);
y = 5 * (h / 10);
strip.moveTo(0, y);
strip.lineTo(w, y);
y = 6 * (h / 10);
strip.moveTo(0, y);
strip.lineTo(w, y);
y = 7 * (h / 10);
strip.moveTo(0, y);
strip.lineTo(w, y);
y = 8 * (h / 10);
strip.moveTo(0, y);
strip.lineTo(w, y);
y = 9 * (h / 10);
strip.moveTo(0, y);
strip.lineTo(w, y);
strip.stroke();
strip.strokeStyle = "#fff";
strip.lineWidth = 1.0;
let buffer = modController.getPcmData();
let b = Math.floor(buffer.length * ((current * 1.0) / end));
let lastSample = (buffer[b++] + 32768) / 65536.0; // map -32768..32768 to 0..1
for (let x = 1; x < canvas.width; x++) {
let sample = (buffer[b++] + 32768) / 65536.0;
if (b > buffer.length) {
break;
}
strip.beginPath();
strip.moveTo(x - 1, h - lastSample * h);
strip.lineTo(x, h - sample * h);
strip.stroke();
lastSample = sample;
}
}