v88: async onopen + 10ms задержка между чанками — буфер Chrome

This commit is contained in:
“Naeel”
2026-05-23 07:16:10 +04:00
parent a091548925
commit 4acc400fab
3 changed files with 8 additions and 4 deletions
+4 -2
View File
@@ -276,7 +276,7 @@ async function transcribe(blob) {
console.log('[WS] timeout'); ws.close(); resolve({ text: '', error: 'timeout' }); console.log('[WS] timeout'); ws.close(); resolve({ text: '', error: 'timeout' });
}, 60000); }, 60000);
ws.onopen = () => { ws.onopen = async () => {
console.log('[WS] connected, sending ' + total + ' chunks'); console.log('[WS] connected, sending ' + total + ' chunks');
for (let i = 0; i < base64.length; i += CHUNK) { for (let i = 0; i < base64.length; i += CHUNK) {
ws.send(JSON.stringify({ ws.send(JSON.stringify({
@@ -286,6 +286,8 @@ async function transcribe(blob) {
m: mime, m: mime,
n: total n: total
})); }));
// Даём браузеру протолкнуть буфер — Chrome может терять фреймы без этого
await new Promise(r => setTimeout(r, 10));
} }
ws.send(JSON.stringify({ c: -1 })); ws.send(JSON.stringify({ c: -1 }));
console.log('[WS] all sent'); console.log('[WS] all sent');
@@ -803,7 +805,7 @@ async function doCompare(blob, originalText, duration) {
<script> <script>
// ---------- Глобальные переменные и инициализация ---------- // ---------- Глобальные переменные и инициализация ----------
const GROQ_API_KEY = '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'; const GROQ_API_KEY = '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';
const VERSION = 'v87'; const VERSION = 'v88';
let mediaRecorder, audioChunks = [], userAudioBlob = null, ttsText = ''; let mediaRecorder, audioChunks = [], userAudioBlob = null, ttsText = '';
let isRecording = false, isAnalyzing = false, micAnalyser = null, micAnimId = null; let isRecording = false, isAnalyzing = false, micAnalyser = null, micAnimId = null;
+1 -1
View File
@@ -1,6 +1,6 @@
// ---------- Глобальные переменные и инициализация ---------- // ---------- Глобальные переменные и инициализация ----------
const GROQ_API_KEY = ''; const GROQ_API_KEY = '';
const VERSION = 'v87'; const VERSION = 'v88';
let mediaRecorder, audioChunks = [], userAudioBlob = null, ttsText = ''; let mediaRecorder, audioChunks = [], userAudioBlob = null, ttsText = '';
let isRecording = false, isAnalyzing = false, micAnalyser = null, micAnimId = null; let isRecording = false, isAnalyzing = false, micAnalyser = null, micAnimId = null;
+3 -1
View File
@@ -24,7 +24,7 @@ async function transcribe(blob) {
console.log('[WS] timeout'); ws.close(); resolve({ text: '', error: 'timeout' }); console.log('[WS] timeout'); ws.close(); resolve({ text: '', error: 'timeout' });
}, 60000); }, 60000);
ws.onopen = () => { ws.onopen = async () => {
console.log('[WS] connected, sending ' + total + ' chunks'); console.log('[WS] connected, sending ' + total + ' chunks');
for (let i = 0; i < base64.length; i += CHUNK) { for (let i = 0; i < base64.length; i += CHUNK) {
ws.send(JSON.stringify({ ws.send(JSON.stringify({
@@ -34,6 +34,8 @@ async function transcribe(blob) {
m: mime, m: mime,
n: total n: total
})); }));
// Даём браузеру протолкнуть буфер — Chrome может терять фреймы без этого
await new Promise(r => setTimeout(r, 10));
} }
ws.send(JSON.stringify({ c: -1 })); ws.send(JSON.stringify({ c: -1 }));
console.log('[WS] all sent'); console.log('[WS] all sent');