fixed most upload issues, updated schematic
This commit is contained in:
+20
-5
@@ -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 };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user