Brooklyn Nicholson
9b761903b9
fix(tts): silence identifier-dense tokens in both speech normalizers
...
Filenames with extensions, hashes, UUIDs, dense model/version IDs and
paths were spoken character by character ('peyton-sample-20260922.wav'
as 'peyton dash sample dash two zero two six...'), making otherwise
clean synthesized audio sound corrupted (#119207 ).
One identifier-to-speech pass, mirrored token-for-token in
tools/tts_text_normalize.py (prune_identifier_tokens_for_tts, wired
into prepare_spoken_text after the symbols pass) and
apps/desktop/src/lib/speech-text.ts (pruneIdentifierTokens, in
sanitizeTextForSpeech after code fences/links/URLs/MEDIA tokens are
consumed). Identifier-dense tokens become silence — never a hardcoded
English placeholder word, per the #86602 lesson (the reply may be in
any language). Ordinary prose, email addresses, dates ('2026/06/02'),
ratios ('3:2'), prices and short hyphenated words (COVID-19,
well-known) pass verbatim.
Also fixes a pre-existing smooth_whitespace_for_tts bug the corpus
surfaced: 'user@example.com ' was read as 'user@example. com' because
the punctuation-space pass split any letter-follows-punctuation pair;
it now only splits when the punctuation is not glued to a word
character on the left.
The two implementations are pinned to the same corpus
(tests/fixtures/identifier_speech_corpus.json), asserted by both
tests/tools/test_tts_identifier_speech.py (pytest) and
apps/desktop/src/lib/speech-text.identifier-corpus.test.ts (vitest).
Builds on the desktop-half approach of PR #119212 (which leaves the
gateway/CLI normalizer in tools/tts_text_normalize.py untouched) and
extends it to both halves.
Co-authored-by: KoNit-K <konit.block@protonmail.com >
2026-09-30 23:02:33 -05:00
..
2026-09-29 02:06:58 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 12:43:03 -07:00
2026-09-29 22:57:48 -04:00
2026-09-21 15:02:49 -07:00
2026-09-29 12:25:29 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 14:16:18 -07:00
2026-09-30 21:33:08 -04:00
2026-09-17 09:04:38 -07:00
2026-09-15 21:46:37 -07:00
2026-09-20 15:32:42 -07:00
2026-09-28 14:16:18 -07:00
2026-09-20 18:50:37 -07:00
2026-09-28 10:21:41 -07:00
2026-09-17 21:17:26 +05:30
2026-09-20 10:16:51 -07:00
2026-09-30 10:00:37 -05:00
2026-09-30 10:00:37 -05:00
2026-09-28 06:06:17 -07:00
2026-09-29 15:58:55 +05:30
2026-09-28 10:21:41 -07:00
2026-09-17 13:52:05 -04:00
2026-09-28 10:21:41 -07:00
2026-09-23 20:04:27 -04:00
2026-09-28 10:21:41 -07:00
2026-09-15 06:16:38 -07:00
2026-09-28 12:43:03 -07:00
2026-09-24 11:50:30 -04:00
2026-09-23 10:13:26 -04:00
2026-09-23 07:36:31 -04:00
2026-09-23 07:36:31 -04:00
2026-09-28 03:34:07 -07:00
2026-09-17 09:02:55 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 03:34:07 -07:00
2026-09-18 14:06:15 -07:00
2026-09-24 01:55:51 -04:00
2026-09-24 03:42:38 -04:00
2026-09-29 14:12:41 -04:00
2026-09-19 01:03:23 -04:00
2026-09-29 18:33:44 +05:30
2026-09-29 19:44:05 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 06:42:00 -07:00
2026-09-28 10:11:33 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:11:33 -07:00
2026-09-28 19:41:57 -04:00
2026-09-28 02:32:05 +05:30
2026-09-28 10:21:41 -07:00
2026-09-17 13:52:05 -04:00
2026-09-27 18:17:20 +05:30
2026-09-23 10:42:18 -04:00
2026-09-28 12:43:03 -07:00
2026-09-19 23:57:59 -07:00
2026-09-15 18:40:52 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-29 12:25:29 -05:00
2026-09-29 02:06:58 +05:30
2026-09-28 10:21:41 -07:00
2026-09-21 14:01:47 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-25 14:58:09 -04:00
2026-09-29 03:28:46 +05:30
2026-09-21 00:58:39 -04:00
2026-09-28 10:21:41 -07:00
2026-09-18 10:10:40 -07:00
2026-09-27 01:10:56 +05:30
2026-09-21 18:39:24 -07:00
2026-09-26 22:26:05 +05:30
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-30 00:59:14 -04:00
2026-09-16 16:59:03 -07:00
2026-09-16 16:42:47 -07:00
2026-09-28 10:21:41 -07:00
2026-09-26 18:27:10 -05:00
2026-09-16 17:21:14 -07:00
2026-09-19 10:44:26 -07:00
2026-09-26 11:16:45 -07:00
2026-09-29 15:08:07 +05:30
2026-09-28 10:21:41 -07:00
2026-09-21 10:04:32 +05:30
2026-09-27 06:26:52 -05:00
2026-09-20 18:22:18 -07:00
2026-09-25 14:27:51 +05:30
2026-09-23 11:41:01 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-23 15:43:51 -07:00
2026-09-28 02:03:42 +05:30
2026-09-28 19:02:20 +05:30
2026-09-28 05:24:26 -07:00
2026-09-27 21:30:10 -07:00
2026-09-22 17:54:42 +05:30
2026-09-17 19:06:29 -04:00
2026-09-26 20:58:16 -04:00
2026-09-27 21:30:10 -07:00
2026-09-26 22:40:54 +05:30
2026-09-18 19:31:50 -04:00
2026-09-21 13:14:22 -07:00
2026-09-28 05:24:26 -07:00
2026-09-27 21:30:10 -07:00
2026-09-28 10:21:41 -07:00
2026-09-24 15:38:22 +05:30
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-25 14:58:09 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 10:21:41 -07:00
2026-09-26 17:19:34 -05:00
2026-09-26 22:19:53 -05:00
2026-09-17 13:52:05 -04:00
2026-09-28 10:21:41 -07:00
2026-09-24 03:52:03 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-29 12:25:29 -05:00
2026-09-29 12:25:29 -05:00
2026-09-28 10:21:41 -07:00
2026-09-23 15:26:34 -04:00
2026-09-19 10:16:59 -07:00
2026-09-23 18:52:49 -05:00
2026-09-21 19:08:19 -04:00
2026-09-28 10:21:41 -07:00
2026-09-23 18:29:35 -05:00
2026-09-18 09:35:16 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-24 16:49:18 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-29 20:57:45 -05:00
2026-09-22 15:59:17 +05:30
2026-09-22 07:05:11 -04:00
2026-09-28 12:43:03 -07:00
2026-09-22 07:05:11 -04:00
2026-09-17 13:52:05 -04:00
2026-09-22 15:59:17 +05:30
2026-09-20 12:58:32 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-16 17:23:44 -07:00
2026-09-15 18:33:15 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-30 15:16:40 -05:00
2026-09-19 01:29:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 12:33:01 -07:00
2026-09-26 18:27:10 -05:00
2026-09-26 18:27:10 -05:00
2026-09-26 18:27:10 -05:00
2026-09-23 17:09:54 -07:00
2026-09-17 13:52:05 -04:00
2026-09-26 23:44:55 +05:30
2026-09-28 12:43:03 -07:00
2026-09-20 11:30:03 -07:00
2026-09-29 17:29:05 +00:00
2026-09-29 22:07:30 +05:30
2026-09-20 10:17:04 -07:00
2026-09-22 13:57:51 +05:30
2026-09-28 10:21:41 -07:00
2026-09-22 17:54:42 +05:30
2026-09-19 10:03:11 -07:00
2026-09-28 10:21:41 -07:00
2026-09-22 05:16:50 -04:00
2026-09-27 03:45:07 -04:00
2026-09-27 03:45:07 -04:00
2026-09-17 13:52:05 -04:00
2026-09-30 15:16:40 -05:00
2026-09-28 12:23:25 -07:00
2026-09-26 06:19:34 +05:30
2026-09-30 23:02:33 -05:00
2026-09-28 12:23:25 -07:00
2026-09-19 10:10:29 -07:00
2026-09-26 06:19:34 +05:30
2026-09-20 10:25:30 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-19 12:22:44 -07:00
2026-09-19 09:52:18 -07:00
2026-09-19 22:57:07 -04:00
2026-09-28 10:21:41 -07:00
2026-09-29 18:19:39 -05:00
2026-09-28 10:21:41 -07:00
2026-09-29 19:14:28 -05:00
2026-09-28 10:21:41 -07:00
2026-09-15 18:42:38 -07:00
2026-09-24 16:17:16 -04:00
2026-09-19 03:07:47 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-23 11:41:01 -04:00
2026-09-19 12:22:44 -07:00
2026-09-28 10:21:41 -07:00