Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab574acd39 | ||
|
|
0bee9f40d3 |
@@ -2,5 +2,5 @@ apiVersion: v2
|
|||||||
name: ai-spel-frontend
|
name: ai-spel-frontend
|
||||||
description: Static web frontend for the Swedish life simulator
|
description: Static web frontend for the Swedish life simulator
|
||||||
type: application
|
type: application
|
||||||
version: 0.1.53
|
version: 0.1.54
|
||||||
appVersion: "0.1.53"
|
appVersion: "0.1.54"
|
||||||
+7
-1
@@ -170,7 +170,8 @@
|
|||||||
const value = document.querySelector('#speech-progress-value');
|
const value = document.querySelector('#speech-progress-value');
|
||||||
const preparing = message.startsWith('Förbereder svensk uppläsning.');
|
const preparing = message.startsWith('Förbereder svensk uppläsning.');
|
||||||
const match = message.match(/^Hämtar svensk röstmodell till enheten: (\d+) procent\.$/);
|
const match = message.match(/^Hämtar svensk röstmodell till enheten: (\d+) procent\.$/);
|
||||||
if (!preparing && !match) {
|
const bytesMatch = message.match(/^Hämtar svensk röstmodell till enheten: ([\d.,]+) MB hämtade\.$/);
|
||||||
|
if (!preparing && !match && !bytesMatch) {
|
||||||
container.hidden = true;
|
container.hidden = true;
|
||||||
progress.removeAttribute('value');
|
progress.removeAttribute('value');
|
||||||
value.textContent = 'Väntar på nedladdning';
|
value.textContent = 'Väntar på nedladdning';
|
||||||
@@ -183,6 +184,11 @@
|
|||||||
value.textContent = `${percent}%`;
|
value.textContent = `${percent}%`;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (bytesMatch) {
|
||||||
|
progress.removeAttribute('value');
|
||||||
|
value.textContent = `${bytesMatch[1]} MB hämtade`;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
progress.removeAttribute('value');
|
progress.removeAttribute('value');
|
||||||
value.textContent = 'Förbereder…';
|
value.textContent = 'Förbereder…';
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ grep -q 'id="microphone" aria-pressed="false"' index.html
|
|||||||
grep -q 'id="voice-status" role="status" aria-live="polite"' index.html
|
grep -q 'id="voice-status" role="status" aria-live="polite"' index.html
|
||||||
grep -q 'id="speech-progress" aria-label="Nedladdning av svensk röstmodell"' index.html
|
grep -q 'id="speech-progress" aria-label="Nedladdning av svensk röstmodell"' index.html
|
||||||
grep -q 'id="speech-progress-value"' index.html
|
grep -q 'id="speech-progress-value"' index.html
|
||||||
|
grep -q 'MB hämtade' index.html
|
||||||
grep -q "window.GameVoice.createVoiceController" index.html
|
grep -q "window.GameVoice.createVoiceController" index.html
|
||||||
grep -q "addVoiceButton(item, 'Testa ljudet'" index.html
|
grep -q "addVoiceButton(item, 'Testa ljudet'" index.html
|
||||||
grep -q 'Jag förstår – starta mikrofonen' index.html
|
grep -q 'Jag förstår – starta mikrofonen' index.html
|
||||||
|
|||||||
@@ -264,6 +264,8 @@ test('Piper model download progress is reported as a bounded percentage', async
|
|||||||
assert.match(h.states.at(-1).message, /50 procent/);
|
assert.match(h.states.at(-1).message, /50 procent/);
|
||||||
h.piperProgressCallbacks[0]({loaded: 90_000_000, total: 63_000_000});
|
h.piperProgressCallbacks[0]({loaded: 90_000_000, total: 63_000_000});
|
||||||
assert.match(h.states.at(-1).message, /100 procent/);
|
assert.match(h.states.at(-1).message, /100 procent/);
|
||||||
|
h.piperProgressCallbacks[0]({loaded: 10 * 1024 * 1024, total: 0});
|
||||||
|
assert.match(h.states.at(-1).message, /10 MB hämtade/);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Piper output keeps per-character pitch and rate stable', async () => {
|
test('Piper output keeps per-character pitch and rate stable', async () => {
|
||||||
|
|||||||
@@ -250,13 +250,21 @@
|
|||||||
setState('IDLE', 'Piper tog för lång tid på sig. Dialogen finns kvar som text. Tryck på Läs senaste repliken för att försöka igen.');
|
setState('IDLE', 'Piper tog för lång tid på sig. Dialogen finns kvar som text. Tryck på Läs senaste repliken för att försöka igen.');
|
||||||
}, 180000);
|
}, 180000);
|
||||||
|
|
||||||
let lastProgress = -1;
|
let lastProgressPercent = -1;
|
||||||
|
let lastProgressMegabytes = -1;
|
||||||
const progress = event => {
|
const progress = event => {
|
||||||
if (token !== generation || !Number.isFinite(event?.loaded) || !Number.isFinite(event?.total) || event.total <= 0) return;
|
if (token !== generation || !Number.isFinite(event?.loaded) || event.loaded < 0) return;
|
||||||
const percent = Math.max(0, Math.min(100, Math.floor((event.loaded / event.total) * 100)));
|
if (Number.isFinite(event.total) && event.total > 0) {
|
||||||
if (percent === lastProgress) return;
|
const percent = Math.max(0, Math.min(100, Math.floor((event.loaded / event.total) * 100)));
|
||||||
lastProgress = percent;
|
if (percent === lastProgressPercent) return;
|
||||||
setState('PROCESSING', `Hämtar svensk röstmodell till enheten: ${percent} procent.`);
|
lastProgressPercent = percent;
|
||||||
|
setState('PROCESSING', `Hämtar svensk röstmodell till enheten: ${percent} procent.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const megabytes = Math.floor((event.loaded / (1024 * 1024)) * 10) / 10;
|
||||||
|
if (megabytes === lastProgressMegabytes) return;
|
||||||
|
lastProgressMegabytes = megabytes;
|
||||||
|
setState('PROCESSING', `Hämtar svensk röstmodell till enheten: ${megabytes.toLocaleString('sv-SE')} MB hämtade.`);
|
||||||
};
|
};
|
||||||
|
|
||||||
Promise.resolve()
|
Promise.resolve()
|
||||||
|
|||||||
Reference in New Issue
Block a user