improved web ui, upload is sorta better, 5sec advertise btn

This commit is contained in:
zyphlar
2026-07-04 03:28:14 -07:00
parent 8cba579780
commit d3bd7b71b9
8 changed files with 458 additions and 79 deletions
+7 -6
View File
@@ -27,13 +27,13 @@ async function decodeMono(arrayBuffer, rate) {
return { samples: rendered.getChannelData(0), rate, srcRate: decoded.sampleRate };
}
function floatToPcm(samples, bits) {
function floatToPcm(samples, bits, gain = 1) {
const n = samples.length;
if (bits === 16) {
const out = new Uint8Array(n * 2);
const dv = new DataView(out.buffer);
for (let i = 0; i < n; i++) {
let s = Math.max(-1, Math.min(1, samples[i]));
let s = Math.max(-1, Math.min(1, samples[i] * gain));
dv.setInt16(i * 2, Math.round(s * 32767), true); // signed LE
}
return out;
@@ -41,7 +41,7 @@ function floatToPcm(samples, bits) {
// 8-bit unsigned PCM, center 128
const out = new Uint8Array(n);
for (let i = 0; i < n; i++) {
let s = Math.max(-1, Math.min(1, samples[i]));
let s = Math.max(-1, Math.min(1, samples[i] * gain));
out[i] = Math.max(0, Math.min(255, Math.round(s * 127) + 128));
}
return out;
@@ -88,10 +88,11 @@ export function trimSamples(samples, rate, trimStart = 0, trimEnd = 0) {
return samples.subarray(start, end);
}
// Encode mono Float32 samples to a WAV. Returns { wav, durationSec }.
export function encodeWav(samples, rate, bits, { trimStart = 0, trimEnd = 0 } = {}) {
// Encode mono Float32 samples to a WAV, applying an optional per-track `gain`
// (1 = unchanged) that is baked into the samples. Returns { wav, durationSec }.
export function encodeWav(samples, rate, bits, { trimStart = 0, trimEnd = 0, gain = 1 } = {}) {
const sliced = trimSamples(samples, rate, trimStart, trimEnd);
const pcm = floatToPcm(sliced, bits);
const pcm = floatToPcm(sliced, bits, gain);
const wav = buildWav(pcm, rate, bits);
return { wav, durationSec: sliced.length / rate };
}