fixed most upload issues, updated schematic

This commit is contained in:
zyphlar
2026-07-04 03:28:14 -07:00
parent 12140b7ff6
commit 8cba579780
10 changed files with 1305 additions and 1020 deletions
+20 -5
View File
@@ -72,11 +72,26 @@ function buildWav(pcm, rate, bits) {
return u8;
}
// Returns { wav: Uint8Array, durationSec, rate, bits, srcRate }.
export async function fileToWav(file, { rate = 8000, bits = 8 } = {}) {
// Decode a file to mono Float32 samples at `rate`. This is the expensive step,
// so callers cache the result and re-encode cheaply when bits/trim change.
// Returns { samples, rate, srcRate }.
export async function decodeFileToMono(file, rate = 8000) {
const arrayBuffer = await file.arrayBuffer();
const { samples, srcRate } = await decodeMono(arrayBuffer, rate);
const pcm = floatToPcm(samples, bits);
const wav = buildWav(pcm, rate, bits);
return { wav, durationSec: samples.length / rate, rate, bits, srcRate };
return { samples, rate, srcRate };
}
// Slice [trimStart, end-trimEnd] off the mono samples and return that range.
export function trimSamples(samples, rate, trimStart = 0, trimEnd = 0) {
const start = Math.max(0, Math.min(samples.length, Math.floor(trimStart * rate)));
const end = Math.max(start, samples.length - Math.max(0, Math.floor(trimEnd * rate)));
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 } = {}) {
const sliced = trimSamples(samples, rate, trimStart, trimEnd);
const pcm = floatToPcm(sliced, bits);
const wav = buildWav(pcm, rate, bits);
return { wav, durationSec: sliced.length / rate };
}