freezmo/package.json
Martin Dvorak 5d82612e2a Podcast player: pause no longer kills the system voice
"It only plays once, and when you pause it you can't unpause."

WebKit leaves speechSynthesis paused after a cancel(), and every later
speak() is queued into that paused state - silently. Fixes:
- resume() whenever the synth is paused, before speaking and after our own
  cancel;
- a ~90ms beat before a speak() that follows a cancel (several engines drop
  it otherwise);
- no cancel when nothing is pending.

The speech engine also no longer rebuilds on rate or voice changes: both are
read live through getters, so a voiceschanged arriving after the first
utterance cannot leave a second engine speaking over the first. A rate or
voice change restarts the current part from the same word instead (the Web
Speech API cannot change either mid-utterance), making the change audible at
once; the natural engine applies speed live and resumes across a voice swap.

The suite's speech stub now models the quirk (cancel -> paused, speak while
paused is dropped and counted) and pins that nothing is ever spoken into a
paused engine. 44 checks. Version 0.7.7, SW v99.
2026-10-16 17:25:12 +00:00

44 lines
1.2 KiB
JSON

{
"name": "freezmo",
"version": "0.7.7",
"private": true,
"license": "GPL-3.0-only",
"scripts": {
"predev": "node scripts/copy-pdf-worker.mjs",
"dev": "next dev -H 0.0.0.0 -p 3207",
"prebuild": "node scripts/copy-pdf-worker.mjs",
"build": "next build",
"start": "next start -H 0.0.0.0 -p 3207",
"lint": "eslint",
"test:e2e": "node tests/run-all.mjs",
"version:bump": "node scripts/bump-version.mjs"
},
"dependencies": {
"canvas-confetti": "^1.9.4",
"framer-motion": "^12.23.24",
"jszip": "^3.10.2",
"katex": "^0.19.0",
"mammoth": "^1.13.0",
"next": "15.5.27",
"pdfjs-dist": "^6.4.299",
"react": "19.1.0",
"react-dom": "19.1.0",
"web-push": "^3.6.7",
"zod": "^4.1.13"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
"@tailwindcss/postcss": "^4",
"@types/canvas-confetti": "^1.9.0",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"@types/web-push": "^3.6.4",
"axe-core": "^4.14.0",
"eslint": "^9",
"eslint-config-next": "15.5.27",
"playwright-core": "^1.64.0",
"tailwindcss": "^4",
"typescript": "^5"
}
}