Modification of the STT structure

This commit is contained in:
2026-09-22 11:56:16 +03:30
parent 42db5919e1
commit 41f0025883
2 changed files with 47 additions and 16 deletions
+21 -1
View File
@@ -137,6 +137,25 @@ function mergeChunks(parts: Float32Array[]) {
return out;
}
/** Downsample to 16 kHz so STT does not depend on server ffmpeg. */
function resampleTo16k(samples: Float32Array, srcRate: number) {
const dstRate = 16000;
if (!srcRate || srcRate === dstRate) return { samples, rate: srcRate || dstRate };
const ratio = srcRate / dstRate;
const newLen = Math.max(1, Math.floor(samples.length / ratio));
const out = new Float32Array(newLen);
for (let i = 0; i < newLen; i += 1) {
const srcIndex = i * ratio;
const i0 = Math.floor(srcIndex);
const i1 = Math.min(samples.length - 1, i0 + 1);
const t = srcIndex - i0;
const a = samples[i0] ?? 0;
const b = samples[i1] ?? a;
out[i] = a + (b - a) * t;
}
return { samples: out, rate: dstRate };
}
function encodeWav(samples: Float32Array, rate: number) {
const bytes = samples.length * 2;
const buffer = new ArrayBuffer(44 + bytes);
@@ -189,7 +208,8 @@ async function finish(keep: boolean) {
setTranscribing(true);
try {
const text = await upload(encodeWav(samples, rate));
const prepared = resampleTo16k(samples, rate);
const text = await upload(encodeWav(prepared.samples, prepared.rate));
if (!text) {
setError('متنی از صدا تشخیص داده نشد.');
return;