polats Claude Opus 4.8 (1M context) commited on
Commit
9c371b5
·
1 Parent(s): fa27f81

Add in-browser TTS: read war diaries aloud (Kokoro / Kitten / Web Speech)

Browse files

The diary panel can now narrate entries on the user's device — fully local-first,
no audio touches the Space. A switchable TTS facade (tts.js) mirrors the LLM facade:

- ttsKokoro.js — Kokoro-82M via kokoro-js (Transformers.js/ONNX, WebGPU/WASM),
best quality, Apache-2.0, ~92MB q8 / 326MB fp32; weights from HF.
- ttsKitten.js — KittenTTS Nano 15M (~24MB) via onnxruntime-web + phonemizer,
WASM for robustness; tokenizer/voices vendored under web/kitten/.
- ttsWebSpeech.js— Web Speech API, zero download, OS voices (instant fallback).
- ttsAudio.js — one shared AudioContext, sequential sentence playback.
- tts.js — facade + makeNarrator(): streams sentence-by-sentence so the
diary narrates itself while the LLM is still writing.
- ttsBar.js — engine + voice picker + "narrate as it writes" toggle.

diaryPanel.js gains a 🔊 Read aloud / ⏹ Stop button and live auto-narration.
Reuses storage.js persist() so the voice model isn't evicted. CSS for the controls.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

web/diaryPanel.js CHANGED
@@ -1,8 +1,11 @@
1
  // War-diary panel — vanilla DOM, mounted into #diary-stage. Streams a first-person
2
- // diary entry generated ON THE USER'S DEVICE via wllama (llama.cpp WASM). Shares the
3
- // persona styling (.persona-*), the model picker (modelBar), and tok/s stats.
 
4
  import { streamChat, ensureModel, currentModel } from '/web/runtime.js'
5
  import { mountModelBar } from '/web/modelBar.js'
 
 
6
  import { DIARY_SYSTEM, diaryUserPrompt, stripThink } from '/web/personaPrompts.js'
7
 
8
  function el(tag, props = {}, kids = []) {
@@ -18,30 +21,88 @@ function el(tag, props = {}, kids = []) {
18
 
19
  export function mountDiaryPanel(host) {
20
  const modelHost = el('div')
 
21
  const unit = el('input', { class: 'persona-input', type: 'text', value: 'Bram the Warrior' })
22
  const traits = el('input', { class: 'persona-input', type: 'text', value: 'Cautious, Veteran, Vengeful' })
23
  const stats = el('div', { class: 'persona-stats' })
24
  const status = el('div', { class: 'persona-status' }, 'Runs on your device — no cloud.')
25
  const btn = el('button', { class: 'persona-go', type: 'button' }, '✒ Write war diary')
26
- const out = el('div', { class: 'persona-about' }, 'A first-person diary entry, written by a small llama.cpp model in your browser.')
 
 
27
 
28
  const controls = el('aside', { class: 'persona-controls' }, [
29
  modelHost,
30
  el('label', { class: 'persona-label' }, 'Unit'), unit,
31
  el('label', { class: 'persona-label' }, 'Traits'), traits,
32
  btn, stats, status,
 
33
  ])
34
  const result = el('div', { class: 'persona-result' }, [out])
35
  host.appendChild(el('div', { class: 'persona-view' }, [controls, result]))
36
 
37
  const bar = mountModelBar(modelHost)
 
38
 
39
  let busy = false
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  async function write() {
41
  if (busy) return
42
  busy = true; btn.disabled = true; stats.textContent = ''
 
43
  const header = `— Diary of ${(unit.value || 'a nameless soldier').trim()} —\n\n`
44
  out.textContent = header
 
 
 
 
 
 
 
 
 
 
45
  try {
46
  status.textContent = `loading ${currentModel().label} into your browser…`
47
  await ensureModel((frac) => { status.textContent = `downloading ${currentModel().label}… ${Math.round(frac * 100)}% (one-time)` })
@@ -49,16 +110,25 @@ export function mountDiaryPanel(host) {
49
  let raw = ''
50
  await streamChat(DIARY_SYSTEM, diaryUserPrompt(unit.value, traits.value), {
51
  maxTokens: 220, temperature: 0.9,
52
- onToken: (piece) => { raw += piece; out.textContent = header + stripThink(raw) }, // hide <think>
 
 
 
 
 
53
  onStats: (s) => { stats.textContent = `● ${s.tokPerSec} tok/s · ${s.tokens} tok${s.ttftSeconds != null ? ` · first ${s.ttftSeconds}s` : ''}` },
54
  })
55
  status.textContent = 'written ✓ (generated locally)'
 
56
  bar.refresh()
57
  } catch (e) {
58
  status.textContent = `couldn't run the local model: ${e.message || e}`
 
59
  } finally {
60
  busy = false; btn.disabled = false
61
  }
62
  }
 
63
  btn.addEventListener('click', write)
 
64
  }
 
1
  // War-diary panel — vanilla DOM, mounted into #diary-stage. Streams a first-person
2
+ // diary entry generated ON THE USER'S DEVICE via the LLM facade, and can READ IT ALOUD
3
+ // on the user's device too (Kokoro / Kitten / Web Speech via the TTS facade). Shares
4
+ // the persona styling (.persona-*), the model picker, and tok/s stats.
5
  import { streamChat, ensureModel, currentModel } from '/web/runtime.js'
6
  import { mountModelBar } from '/web/modelBar.js'
7
+ import { mountTtsBar } from '/web/ttsBar.js'
8
+ import { makeNarrator, ensureTts } from '/web/tts.js'
9
  import { DIARY_SYSTEM, diaryUserPrompt, stripThink } from '/web/personaPrompts.js'
10
 
11
  function el(tag, props = {}, kids = []) {
 
21
 
22
  export function mountDiaryPanel(host) {
23
  const modelHost = el('div')
24
+ const ttsHost = el('div')
25
  const unit = el('input', { class: 'persona-input', type: 'text', value: 'Bram the Warrior' })
26
  const traits = el('input', { class: 'persona-input', type: 'text', value: 'Cautious, Veteran, Vengeful' })
27
  const stats = el('div', { class: 'persona-stats' })
28
  const status = el('div', { class: 'persona-status' }, 'Runs on your device — no cloud.')
29
  const btn = el('button', { class: 'persona-go', type: 'button' }, '✒ Write war diary')
30
+ const narrateBtn = el('button', { class: 'persona-go persona-go-alt', type: 'button' }, '🔊 Read aloud')
31
+ const ttsStatus = el('div', { class: 'persona-status tts-status' })
32
+ const out = el('div', { class: 'persona-about' }, 'A first-person diary entry, written by a small model in your browser — and read aloud on your device.')
33
 
34
  const controls = el('aside', { class: 'persona-controls' }, [
35
  modelHost,
36
  el('label', { class: 'persona-label' }, 'Unit'), unit,
37
  el('label', { class: 'persona-label' }, 'Traits'), traits,
38
  btn, stats, status,
39
+ ttsHost, narrateBtn, ttsStatus,
40
  ])
41
  const result = el('div', { class: 'persona-result' }, [out])
42
  host.appendChild(el('div', { class: 'persona-view' }, [controls, result]))
43
 
44
  const bar = mountModelBar(modelHost)
45
+ const ttsBar = mountTtsBar(ttsHost)
46
 
47
  let busy = false
48
+ let lastBody = '' // diary text (no header), what gets narrated
49
+ let narrator = null
50
+ let speaking = false
51
+
52
+ function setSpeaking(on) {
53
+ speaking = on
54
+ narrateBtn.textContent = on ? '⏹ Stop reading' : '🔊 Read aloud'
55
+ }
56
+ function stopNarration() { if (narrator) narrator.stop() }
57
+
58
+ // Ensure the TTS model is loaded (showing progress), then return a fresh narrator.
59
+ async function makeReadyNarrator() {
60
+ ttsStatus.textContent = 'loading voice…'
61
+ await ensureTts((frac) => { ttsStatus.textContent = `downloading voice… ${Math.round(frac * 100)}% (one-time)` })
62
+ ttsStatus.textContent = 'reading on your device…'
63
+ return makeNarrator({
64
+ onState: (s) => {
65
+ if (s === 'done' || s === 'stopped') {
66
+ setSpeaking(false)
67
+ ttsStatus.textContent = s === 'stopped' ? 'stopped' : 'done reading ✓'
68
+ }
69
+ },
70
+ })
71
+ }
72
+
73
+ async function readAloud() {
74
+ if (speaking) { stopNarration(); return }
75
+ if (!lastBody.trim()) { ttsStatus.textContent = 'nothing to read yet — write a diary first'; return }
76
+ narrateBtn.disabled = true
77
+ try {
78
+ setSpeaking(true)
79
+ narrator = await makeReadyNarrator()
80
+ narrator.push(lastBody)
81
+ narrator.end()
82
+ } catch (e) {
83
+ setSpeaking(false)
84
+ ttsStatus.textContent = `couldn't read aloud: ${e.message || e}`
85
+ } finally {
86
+ narrateBtn.disabled = false
87
+ }
88
+ }
89
+
90
  async function write() {
91
  if (busy) return
92
  busy = true; btn.disabled = true; stats.textContent = ''
93
+ stopNarration()
94
  const header = `— Diary of ${(unit.value || 'a nameless soldier').trim()} —\n\n`
95
  out.textContent = header
96
+ lastBody = ''
97
+
98
+ // If auto-narrate is on, prepare a live narrator before generation starts.
99
+ let live = null
100
+ let spokenLen = 0
101
+ if (ttsBar.autoNarrate()) {
102
+ try { setSpeaking(true); narrator = live = await makeReadyNarrator() }
103
+ catch (e) { setSpeaking(false); ttsStatus.textContent = `voice unavailable: ${e.message || e}` }
104
+ }
105
+
106
  try {
107
  status.textContent = `loading ${currentModel().label} into your browser…`
108
  await ensureModel((frac) => { status.textContent = `downloading ${currentModel().label}… ${Math.round(frac * 100)}% (one-time)` })
 
110
  let raw = ''
111
  await streamChat(DIARY_SYSTEM, diaryUserPrompt(unit.value, traits.value), {
112
  maxTokens: 220, temperature: 0.9,
113
+ onToken: (piece) => {
114
+ raw += piece
115
+ lastBody = stripThink(raw)
116
+ out.textContent = header + lastBody
117
+ if (live) { const delta = lastBody.slice(spokenLen); if (delta) { live.push(delta); spokenLen = lastBody.length } }
118
+ },
119
  onStats: (s) => { stats.textContent = `● ${s.tokPerSec} tok/s · ${s.tokens} tok${s.ttftSeconds != null ? ` · first ${s.ttftSeconds}s` : ''}` },
120
  })
121
  status.textContent = 'written ✓ (generated locally)'
122
+ if (live) live.end() // flush the tail sentence; onState resets the button
123
  bar.refresh()
124
  } catch (e) {
125
  status.textContent = `couldn't run the local model: ${e.message || e}`
126
+ if (live) live.stop()
127
  } finally {
128
  busy = false; btn.disabled = false
129
  }
130
  }
131
+
132
  btn.addEventListener('click', write)
133
+ narrateBtn.addEventListener('click', readAloud)
134
  }
web/kitten/tokenizer.json ADDED
@@ -0,0 +1,235 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": "1.0",
3
+ "truncation": null,
4
+ "padding": null,
5
+ "added_tokens": [],
6
+ "normalizer": {
7
+ "type": "Replace",
8
+ "pattern": {
9
+ "Regex": "[^$;:,.!?¡¿—…\"«» ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzɑɐɒæɓʙβɔɕçɗɖðʤəɘɚɛɜɝɞɟʄɡɠɢʛɦɧħɥʜɨɪʝɭɬɫɮʟɱɯɰŋɳɲɴøɵɸθœɶʘɹɺɾɻʀʁɽʂʃʈʧʉʊʋⱱʌɣɤʍχʎʏʑʐʒʔʡʕʢǀǁǂǃˈˌːˑʼʴʰʱʲʷˠˤ˞↓↑→↗↘'̩ᵻ]"
10
+ },
11
+ "content": ""
12
+ },
13
+ "pre_tokenizer": {
14
+ "type": "Split",
15
+ "pattern": {
16
+ "Regex": ""
17
+ },
18
+ "behavior": "Isolated",
19
+ "invert": false
20
+ },
21
+ "post_processor": {
22
+ "type": "TemplateProcessing",
23
+ "single": [
24
+ {
25
+ "SpecialToken": {
26
+ "id": "$",
27
+ "type_id": 0
28
+ }
29
+ },
30
+ {
31
+ "Sequence": {
32
+ "id": "A",
33
+ "type_id": 0
34
+ }
35
+ },
36
+ {
37
+ "SpecialToken": {
38
+ "id": "$",
39
+ "type_id": 0
40
+ }
41
+ }
42
+ ],
43
+ "special_tokens": {
44
+ "$": {
45
+ "id": "$",
46
+ "ids": [
47
+ 0
48
+ ],
49
+ "tokens": [
50
+ "$"
51
+ ]
52
+ }
53
+ }
54
+ },
55
+ "decoder": null,
56
+ "model": {
57
+ "vocab": {
58
+ "$": 0,
59
+ ";": 1,
60
+ ":": 2,
61
+ ",": 3,
62
+ ".": 4,
63
+ "!": 5,
64
+ "?": 6,
65
+ "\u00a1": 7,
66
+ "\u00bf": 8,
67
+ "\u2014": 9,
68
+ "\u2026": 10,
69
+ "\"": 15,
70
+ "\u00ab": 12,
71
+ "\u00bb": 13,
72
+ " ": 16,
73
+ "A": 17,
74
+ "B": 18,
75
+ "C": 19,
76
+ "D": 20,
77
+ "E": 21,
78
+ "F": 22,
79
+ "G": 23,
80
+ "H": 24,
81
+ "I": 25,
82
+ "J": 26,
83
+ "K": 27,
84
+ "L": 28,
85
+ "M": 29,
86
+ "N": 30,
87
+ "O": 31,
88
+ "P": 32,
89
+ "Q": 33,
90
+ "R": 34,
91
+ "S": 35,
92
+ "T": 36,
93
+ "U": 37,
94
+ "V": 38,
95
+ "W": 39,
96
+ "X": 40,
97
+ "Y": 41,
98
+ "Z": 42,
99
+ "a": 43,
100
+ "b": 44,
101
+ "c": 45,
102
+ "d": 46,
103
+ "e": 47,
104
+ "f": 48,
105
+ "g": 49,
106
+ "h": 50,
107
+ "i": 51,
108
+ "j": 52,
109
+ "k": 53,
110
+ "l": 54,
111
+ "m": 55,
112
+ "n": 56,
113
+ "o": 57,
114
+ "p": 58,
115
+ "q": 59,
116
+ "r": 60,
117
+ "s": 61,
118
+ "t": 62,
119
+ "u": 63,
120
+ "v": 64,
121
+ "w": 65,
122
+ "x": 66,
123
+ "y": 67,
124
+ "z": 68,
125
+ "\u0251": 69,
126
+ "\u0250": 70,
127
+ "\u0252": 71,
128
+ "\u00e6": 72,
129
+ "\u0253": 73,
130
+ "\u0299": 74,
131
+ "\u03b2": 75,
132
+ "\u0254": 76,
133
+ "\u0255": 77,
134
+ "\u00e7": 78,
135
+ "\u0257": 79,
136
+ "\u0256": 80,
137
+ "\u00f0": 81,
138
+ "\u02a4": 82,
139
+ "\u0259": 83,
140
+ "\u0258": 84,
141
+ "\u025a": 85,
142
+ "\u025b": 86,
143
+ "\u025c": 87,
144
+ "\u025d": 88,
145
+ "\u025e": 89,
146
+ "\u025f": 90,
147
+ "\u0284": 91,
148
+ "\u0261": 92,
149
+ "\u0260": 93,
150
+ "\u0262": 94,
151
+ "\u029b": 95,
152
+ "\u0266": 96,
153
+ "\u0267": 97,
154
+ "\u0127": 98,
155
+ "\u0265": 99,
156
+ "\u029c": 100,
157
+ "\u0268": 101,
158
+ "\u026a": 102,
159
+ "\u029d": 103,
160
+ "\u026d": 104,
161
+ "\u026c": 105,
162
+ "\u026b": 106,
163
+ "\u026e": 107,
164
+ "\u029f": 108,
165
+ "\u0271": 109,
166
+ "\u026f": 110,
167
+ "\u0270": 111,
168
+ "\u014b": 112,
169
+ "\u0273": 113,
170
+ "\u0272": 114,
171
+ "\u0274": 115,
172
+ "\u00f8": 116,
173
+ "\u0275": 117,
174
+ "\u0278": 118,
175
+ "\u03b8": 119,
176
+ "\u0153": 120,
177
+ "\u0276": 121,
178
+ "\u0298": 122,
179
+ "\u0279": 123,
180
+ "\u027a": 124,
181
+ "\u027e": 125,
182
+ "\u027b": 126,
183
+ "\u0280": 127,
184
+ "\u0281": 128,
185
+ "\u027d": 129,
186
+ "\u0282": 130,
187
+ "\u0283": 131,
188
+ "\u0288": 132,
189
+ "\u02a7": 133,
190
+ "\u0289": 134,
191
+ "\u028a": 135,
192
+ "\u028b": 136,
193
+ "\u2c71": 137,
194
+ "\u028c": 138,
195
+ "\u0263": 139,
196
+ "\u0264": 140,
197
+ "\u028d": 141,
198
+ "\u03c7": 142,
199
+ "\u028e": 143,
200
+ "\u028f": 144,
201
+ "\u0291": 145,
202
+ "\u0290": 146,
203
+ "\u0292": 147,
204
+ "\u0294": 148,
205
+ "\u02a1": 149,
206
+ "\u0295": 150,
207
+ "\u02a2": 151,
208
+ "\u01c0": 152,
209
+ "\u01c1": 153,
210
+ "\u01c2": 154,
211
+ "\u01c3": 155,
212
+ "\u02c8": 156,
213
+ "\u02cc": 157,
214
+ "\u02d0": 158,
215
+ "\u02d1": 159,
216
+ "\u02bc": 160,
217
+ "\u02b4": 161,
218
+ "\u02b0": 162,
219
+ "\u02b1": 163,
220
+ "\u02b2": 164,
221
+ "\u02b7": 165,
222
+ "\u02e0": 166,
223
+ "\u02e4": 167,
224
+ "\u02de": 168,
225
+ "\u2193": 169,
226
+ "\u2191": 170,
227
+ "\u2192": 171,
228
+ "\u2197": 172,
229
+ "\u2198": 173,
230
+ "'": 176,
231
+ "\u0329": 175,
232
+ "\u1d7b": 177
233
+ }
234
+ }
235
+ }
web/kitten/voices.json ADDED
@@ -0,0 +1,2082 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "expr-voice-2-m": [
3
+ [
4
+ 0.11270160228013992,
5
+ 0.021359093487262726,
6
+ -0.1844792366027832,
7
+ -0.07136015594005585,
8
+ -0.21113179624080658,
9
+ 0.14814700186252594,
10
+ -0.11635541915893555,
11
+ 0.24492166936397552,
12
+ 0.1566852331161499,
13
+ 0.010686025023460388,
14
+ -0.0946270152926445,
15
+ -0.17332977056503296,
16
+ -0.11770869791507721,
17
+ 0.22536273300647736,
18
+ -0.14232172071933746,
19
+ 0.2968124747276306,
20
+ 0.3612103760242462,
21
+ 0.09331803023815155,
22
+ -0.10455592721700668,
23
+ -0.1774781346321106,
24
+ 0.06423509120941162,
25
+ -0.21604079008102417,
26
+ -0.05113345757126808,
27
+ -0.11147573590278625,
28
+ -0.07192851603031158,
29
+ -0.22665899991989136,
30
+ 0.1757027804851532,
31
+ -0.13767080008983612,
32
+ 0.281850665807724,
33
+ -0.11184552311897278,
34
+ -0.062458336353302,
35
+ -0.01382242888212204,
36
+ 0.036698490381240845,
37
+ -0.051675956696271896,
38
+ -0.23829154670238495,
39
+ 0.28728318214416504,
40
+ 0.07666128873825073,
41
+ 0.25035256147384644,
42
+ -0.1590975672006607,
43
+ 0.047718241810798645,
44
+ -0.08347664028406143,
45
+ -0.17357586324214935,
46
+ -0.13812163472175598,
47
+ -0.1347237080335617,
48
+ 0.05141608044505119,
49
+ -0.5032267570495605,
50
+ -0.14981630444526672,
51
+ 0.08085460960865021,
52
+ 0.000160902738571167,
53
+ 0.009334392845630646,
54
+ -0.04281169921159744,
55
+ -0.07150190323591232,
56
+ -0.08093105256557465,
57
+ -0.08654770255088806,
58
+ -0.1591738611459732,
59
+ -0.02907295525074005,
60
+ -0.029053054749965668,
61
+ -0.19983115792274475,
62
+ 0.21119394898414612,
63
+ 0.1275409758090973,
64
+ 0.26245778799057007,
65
+ -0.07966428250074387,
66
+ -0.43234217166900635,
67
+ -0.0020837709307670593,
68
+ 0.21791470050811768,
69
+ 0.1012488305568695,
70
+ -0.15701697766780853,
71
+ 0.1808035522699356,
72
+ -0.05320920795202255,
73
+ -0.046876758337020874,
74
+ -0.12161028385162354,
75
+ -0.0785590261220932,
76
+ -0.2092764675617218,
77
+ 0.0859377384185791,
78
+ 0.07770632952451706,
79
+ -0.23275408148765564,
80
+ 0.12601178884506226,
81
+ 0.22762447595596313,
82
+ -0.2268955260515213,
83
+ 0.25288617610931396,
84
+ -0.031926222145557404,
85
+ -0.07464313507080078,
86
+ 0.11971703171730042,
87
+ 0.26520973443984985,
88
+ 0.040859777480363846,
89
+ 0.08543587476015091,
90
+ -0.18182533979415894,
91
+ -0.24442265927791595,
92
+ 0.09738470613956451,
93
+ 0.22239023447036743,
94
+ -0.30742669105529785,
95
+ -0.2196228951215744,
96
+ -0.10329856723546982,
97
+ -0.0956839770078659,
98
+ -0.07050618529319763,
99
+ -0.2705242931842804,
100
+ -0.11601544916629791,
101
+ -0.13247628509998322,
102
+ -0.2868480384349823,
103
+ -0.09352165460586548,
104
+ 0.11898892372846603,
105
+ -0.29813820123672485,
106
+ 0.2806939482688904,
107
+ -0.09160652756690979,
108
+ -0.26422375440597534,
109
+ 0.23104286193847656,
110
+ 0.23033195734024048,
111
+ 0.06019838526844978,
112
+ -0.23825675249099731,
113
+ 0.25467076897621155,
114
+ 0.06492352485656738,
115
+ -0.0579964704811573,
116
+ 0.32454460859298706,
117
+ 0.25692781805992126,
118
+ -0.04218762367963791,
119
+ 0.03751738369464874,
120
+ 0.32837802171707153,
121
+ -0.12132973223924637,
122
+ -0.09143444895744324,
123
+ 0.08536212146282196,
124
+ -0.2586565911769867,
125
+ -0.18688081204891205,
126
+ -0.05937829613685608,
127
+ -0.07718057930469513,
128
+ 0.21632033586502075,
129
+ 0.2436983585357666,
130
+ -0.06731531023979187,
131
+ 0.0192759707570076,
132
+ 0.1854877918958664,
133
+ -0.1369609832763672,
134
+ 0.18003542721271515,
135
+ 0.12589919567108154,
136
+ 0.21513980627059937,
137
+ 0.03567107766866684,
138
+ -0.013375252485275269,
139
+ 0.36813175678253174,
140
+ 0.022780850529670715,
141
+ -0.15941154956817627,
142
+ -0.17527799308300018,
143
+ 0.025481484830379486,
144
+ 0.25173139572143555,
145
+ 0.22826610505580902,
146
+ -0.19977116584777832,
147
+ 0.2152213752269745,
148
+ -0.14668205380439758,
149
+ 0.2154211401939392,
150
+ 0.008959304541349411,
151
+ 0.10383520275354385,
152
+ 0.031544700264930725,
153
+ -0.21842949092388153,
154
+ 0.23470619320869446,
155
+ 0.2303774356842041,
156
+ 0.14094246923923492,
157
+ 0.13633500039577484,
158
+ -0.1081799790263176,
159
+ -0.31116992235183716,
160
+ -0.07749694585800171,
161
+ -0.16278237104415894,
162
+ -0.22167326509952545,
163
+ -0.020158808678388596,
164
+ 0.012939877808094025,
165
+ -0.06978997588157654,
166
+ -0.29010599851608276,
167
+ -0.012677378952503204,
168
+ 0.01509547233581543,
169
+ 0.02520660310983658,
170
+ -0.05727057158946991,
171
+ 0.24920204281806946,
172
+ -0.24735912680625916,
173
+ 0.017018266022205353,
174
+ -0.136925607919693,
175
+ -0.23768404126167297,
176
+ -0.008835293352603912,
177
+ -0.17127257585525513,
178
+ -0.24774512648582458,
179
+ -0.028303056955337524,
180
+ -0.5288939476013184,
181
+ -0.04151506349444389,
182
+ -0.04209231585264206,
183
+ -0.0633503794670105,
184
+ -0.07845757901668549,
185
+ 0.036394648253917694,
186
+ -0.18118688464164734,
187
+ 0.16131600737571716,
188
+ 0.5422171354293823,
189
+ -0.13408835232257843,
190
+ 0.4606509804725647,
191
+ 0.07760550081729889,
192
+ 0.4609440565109253,
193
+ -0.007004626095294952,
194
+ 0.09284662455320358,
195
+ 0.19724634289741516,
196
+ 0.025137364864349365,
197
+ -0.10026779770851135,
198
+ -0.12733590602874756,
199
+ 0.11934685707092285,
200
+ 0.15408490598201752,
201
+ 0.19926369190216064,
202
+ -0.1130024641752243,
203
+ -0.1419847458600998,
204
+ -0.09888492524623871,
205
+ -0.05763082578778267,
206
+ -0.038478221744298935,
207
+ -0.3984842300415039,
208
+ -0.17286193370819092,
209
+ 0.3967825174331665,
210
+ -0.2141353338956833,
211
+ 0.017276722937822342,
212
+ 0.4059041440486908,
213
+ 0.14445078372955322,
214
+ 0.07632704824209213,
215
+ 0.13182371854782104,
216
+ 0.3360334634780884,
217
+ 0.06217241287231445,
218
+ 0.12153735756874084,
219
+ -0.08551124483346939,
220
+ -0.11330971121788025,
221
+ -0.1287345290184021,
222
+ -0.1169394701719284,
223
+ -0.1297483593225479,
224
+ 0.1412757933139801,
225
+ -0.3134949207305908,
226
+ -0.22142702341079712,
227
+ 0.08325711637735367,
228
+ -0.5003457069396973,
229
+ 0.07479020208120346,
230
+ -0.2063189446926117,
231
+ 0.21594005823135376,
232
+ 0.29178211092948914,
233
+ 0.07181556522846222,
234
+ -0.06034606695175171,
235
+ 0.1476336419582367,
236
+ -0.026515524834394455,
237
+ 0.007481083273887634,
238
+ 0.1924506574869156,
239
+ 0.10797493159770966,
240
+ -0.3111971914768219,
241
+ 0.0371844619512558,
242
+ 0.3112681210041046,
243
+ 0.15955936908721924,
244
+ 0.2572972774505615,
245
+ -0.0673949122428894,
246
+ -0.3278656601905823,
247
+ -0.11043745279312134,
248
+ -0.018712760880589485,
249
+ -0.16792193055152893,
250
+ 0.17997539043426514,
251
+ 0.3661631941795349,
252
+ 0.270271897315979,
253
+ 0.02902933582663536,
254
+ 0.14902734756469727,
255
+ 0.24445591866970062,
256
+ 0.20117202401161194,
257
+ 0.08673397451639175,
258
+ -0.11939778923988342,
259
+ -0.01866413652896881
260
+ ]
261
+ ],
262
+ "expr-voice-2-f": [
263
+ [
264
+ 0.08963094651699066,
265
+ 0.020991705358028412,
266
+ -0.16283026337623596,
267
+ -0.04947962611913681,
268
+ -0.2763441801071167,
269
+ 0.21161668002605438,
270
+ -0.17054519057273865,
271
+ 0.29953765869140625,
272
+ 0.035724811255931854,
273
+ 0.048416297882795334,
274
+ 0.033176615834236145,
275
+ -0.11834675073623657,
276
+ -0.22590483725070953,
277
+ 0.28372466564178467,
278
+ -0.1347014456987381,
279
+ 0.3348008692264557,
280
+ 0.4028339982032776,
281
+ 0.034310515969991684,
282
+ -0.2225627452135086,
283
+ -0.18677477538585663,
284
+ 0.07155368477106094,
285
+ -0.20473888516426086,
286
+ -0.2691861093044281,
287
+ -0.07872723042964935,
288
+ -0.1869553178548813,
289
+ -0.16390123963356018,
290
+ 0.07499777525663376,
291
+ -0.03069191426038742,
292
+ 0.3573354184627533,
293
+ -0.07577085494995117,
294
+ -0.03172009438276291,
295
+ -0.12041699141263962,
296
+ -0.02338508516550064,
297
+ 0.07532234489917755,
298
+ -0.14163753390312195,
299
+ 0.23140838742256165,
300
+ 0.08714387565851212,
301
+ 0.06630460917949677,
302
+ -0.22536726295948029,
303
+ 0.09107229113578796,
304
+ -0.13000956177711487,
305
+ -0.15180444717407227,
306
+ -0.0645533949136734,
307
+ -0.11142750084400177,
308
+ -0.02036525309085846,
309
+ -0.5491072535514832,
310
+ 0.10044336318969727,
311
+ 0.23916393518447876,
312
+ 0.20535790920257568,
313
+ -0.048438433557748795,
314
+ 0.12792836129665375,
315
+ 0.055821262300014496,
316
+ 0.15521472692489624,
317
+ -0.15314579010009766,
318
+ -0.009527307003736496,
319
+ -0.11204413324594498,
320
+ -0.03583400696516037,
321
+ -0.15011757612228394,
322
+ 0.17470179498195648,
323
+ -0.019120492041110992,
324
+ 0.2783603072166443,
325
+ -0.08051005005836487,
326
+ -0.31353121995925903,
327
+ -0.08798731118440628,
328
+ 0.03930751979351044,
329
+ 0.10958555340766907,
330
+ -0.23298180103302002,
331
+ 0.060215357691049576,
332
+ -0.1308131217956543,
333
+ -0.21161215007305145,
334
+ -0.05488214269280434,
335
+ 0.010871932841837406,
336
+ -0.1675562560558319,
337
+ 0.1794602870941162,
338
+ 0.13269847631454468,
339
+ -0.1517391800880432,
340
+ 0.22250309586524963,
341
+ 0.07353069633245468,
342
+ -0.07122956961393356,
343
+ 0.2966436743736267,
344
+ -0.08467132598161697,
345
+ -0.08300358057022095,
346
+ 0.0776766985654831,
347
+ 0.33852964639663696,
348
+ -0.09662164747714996,
349
+ 0.14937786757946014,
350
+ -0.17627668380737305,
351
+ -0.36173737049102783,
352
+ 0.08985046297311783,
353
+ 0.25749605894088745,
354
+ -0.16385485231876373,
355
+ -0.2703692317008972,
356
+ -0.2145581692457199,
357
+ -0.029859300702810287,
358
+ -0.2382160872220993,
359
+ -0.3048144280910492,
360
+ -0.15154282748699188,
361
+ -0.20393449068069458,
362
+ -0.22816047072410583,
363
+ -0.04677999019622803,
364
+ 0.03188181668519974,
365
+ -0.27974456548690796,
366
+ 0.2165083885192871,
367
+ -0.08008165657520294,
368
+ -0.3485633134841919,
369
+ 0.21396952867507935,
370
+ 0.22516345977783203,
371
+ 0.056476861238479614,
372
+ -0.14646181464195251,
373
+ 0.24922031164169312,
374
+ 0.07309365272521973,
375
+ -0.04147454351186752,
376
+ 0.16505856812000275,
377
+ 0.21586593985557556,
378
+ 0.09741128236055374,
379
+ 0.08602514863014221,
380
+ 0.4053085446357727,
381
+ 0.020537935197353363,
382
+ 0.0026763230562210083,
383
+ -0.02273615449666977,
384
+ -0.3009239435195923,
385
+ -0.09213623404502869,
386
+ -0.11945860832929611,
387
+ -0.0021112486720085144,
388
+ 0.16982422769069672,
389
+ 0.22680562734603882,
390
+ -0.034271106123924255,
391
+ -0.02960791438817978,
392
+ -0.04764706268906593,
393
+ -0.07606898248195648,
394
+ 0.2869862914085388,
395
+ 0.3599057197570801,
396
+ -0.0046041905879974365,
397
+ 0.23779961466789246,
398
+ -0.0806245505809784,
399
+ 0.26484400033950806,
400
+ 0.10938495397567749,
401
+ 0.08758903294801712,
402
+ 0.03376920148730278,
403
+ 0.31944262981414795,
404
+ 0.16401271522045135,
405
+ 0.06274104118347168,
406
+ -0.09799349308013916,
407
+ 0.09090681374073029,
408
+ -0.08519433438777924,
409
+ -0.042447082698345184,
410
+ -0.09129129350185394,
411
+ 0.07484277337789536,
412
+ 0.12386336177587509,
413
+ -0.21554169058799744,
414
+ -0.4530963897705078,
415
+ -0.1544765830039978,
416
+ -0.18843477964401245,
417
+ -0.12369159609079361,
418
+ -0.21436607837677002,
419
+ -0.09986887872219086,
420
+ -0.03141375631093979,
421
+ -0.21155975759029388,
422
+ -0.036985449492931366,
423
+ 0.039111342281103134,
424
+ 0.02176091820001602,
425
+ -0.03868794068694115,
426
+ -0.1367398202419281,
427
+ -0.19851621985435486,
428
+ 0.07046337425708771,
429
+ -0.15933120250701904,
430
+ -0.15452930331230164,
431
+ 0.09034714102745056,
432
+ -0.4168629050254822,
433
+ 0.02960614114999771,
434
+ -0.3867896795272827,
435
+ -0.2812226414680481,
436
+ -0.22664615511894226,
437
+ -0.25210893154144287,
438
+ -0.13130752742290497,
439
+ -0.049847185611724854,
440
+ -0.10070018470287323,
441
+ 0.19385448098182678,
442
+ 0.37571778893470764,
443
+ -0.029225891456007957,
444
+ 0.4184458255767822,
445
+ -0.11537116765975952,
446
+ -0.24953614175319672,
447
+ -0.1097152978181839,
448
+ 0.4889371395111084,
449
+ -0.1482056975364685,
450
+ 0.0718505010008812,
451
+ 0.006557129323482513,
452
+ 0.061559148132801056,
453
+ -0.15445679426193237,
454
+ 0.15055739879608154,
455
+ -0.09643016755580902,
456
+ 0.00030659884214401245,
457
+ 0.09048932790756226,
458
+ -0.11288423091173172,
459
+ -0.0834316611289978,
460
+ -0.032663580030202866,
461
+ -0.0988813042640686,
462
+ -0.1983623057603836,
463
+ 0.1112716794013977,
464
+ -0.07404337078332901,
465
+ 0.12395387142896652,
466
+ -0.15984781086444855,
467
+ -0.1698935478925705,
468
+ 0.10910089313983917,
469
+ 0.1824510246515274,
470
+ -0.06082591414451599,
471
+ 0.039037976413965225,
472
+ 0.41354161500930786,
473
+ -0.14641693234443665,
474
+ -0.027056656777858734,
475
+ 0.31446871161460876,
476
+ 0.04896148294210434,
477
+ -0.06365514546632767,
478
+ -0.07186399400234222,
479
+ 0.04212665557861328,
480
+ 0.004552245140075684,
481
+ 0.3571828305721283,
482
+ -0.011968478560447693,
483
+ -0.14171572029590607,
484
+ 0.102998286485672,
485
+ -0.23090779781341553,
486
+ 0.18072941899299622,
487
+ -0.04373215138912201,
488
+ -0.05400930345058441,
489
+ -0.18216392397880554,
490
+ -0.19523313641548157,
491
+ -0.15295660495758057,
492
+ 0.04312564805150032,
493
+ 0.07906154543161392,
494
+ 0.23495614528656006,
495
+ -0.07797323167324066,
496
+ -0.04888187721371651,
497
+ 0.16886496543884277,
498
+ 0.11824670433998108,
499
+ 0.211635559797287,
500
+ -0.25983235239982605,
501
+ -0.15237492322921753,
502
+ 0.0017881542444229126,
503
+ -0.02223038859665394,
504
+ 0.17275230586528778,
505
+ 0.0644221156835556,
506
+ 0.08746808767318726,
507
+ -0.09875933825969696,
508
+ 0.1401960402727127,
509
+ -0.14037415385246277,
510
+ -0.22432419657707214,
511
+ 0.29512715339660645,
512
+ -0.10966013371944427,
513
+ 0.1668573021888733,
514
+ 0.05994541198015213,
515
+ 0.3940209150314331,
516
+ 0.1629388928413391,
517
+ 0.2011866569519043,
518
+ -0.06670022010803223,
519
+ -0.10273121297359467
520
+ ]
521
+ ],
522
+ "expr-voice-3-m": [
523
+ [
524
+ 0.12095526605844498,
525
+ 0.005409218370914459,
526
+ -0.16340896487236023,
527
+ -0.04641019180417061,
528
+ -0.21520757675170898,
529
+ 0.19349072873592377,
530
+ -0.11324626952409744,
531
+ 0.23295018076896667,
532
+ 0.13819065690040588,
533
+ -0.012375228106975555,
534
+ -0.03278642147779465,
535
+ -0.07203444838523865,
536
+ -0.00868099182844162,
537
+ 0.18307271599769592,
538
+ -0.10838243365287781,
539
+ 0.30715709924697876,
540
+ 0.3834494650363922,
541
+ 0.12615685164928436,
542
+ -0.10370932519435883,
543
+ -0.17922048270702362,
544
+ 0.01175668090581894,
545
+ 0.004702024161815643,
546
+ -0.13527989387512207,
547
+ -0.061467092484235764,
548
+ -0.18858569860458374,
549
+ -0.13392274081707,
550
+ 0.03695879131555557,
551
+ -0.11981737613677979,
552
+ 0.29952311515808105,
553
+ 0.0003732740879058838,
554
+ 0.01364416629076004,
555
+ -0.0743163600564003,
556
+ 0.026847481727600098,
557
+ -0.1088760569691658,
558
+ -0.3269684910774231,
559
+ 0.2540029287338257,
560
+ 0.07246382534503937,
561
+ 0.09681005775928497,
562
+ -0.18642596900463104,
563
+ 0.015103110112249851,
564
+ -0.1073998361825943,
565
+ -0.2177630513906479,
566
+ -0.13407136499881744,
567
+ -0.15828147530555725,
568
+ -0.1558927744626999,
569
+ -0.5558854341506958,
570
+ -0.02269597537815571,
571
+ 0.16410773992538452,
572
+ -0.09099502861499786,
573
+ -0.060512665659189224,
574
+ 0.010920427739620209,
575
+ 0.08791166543960571,
576
+ 0.07647774368524551,
577
+ -0.05792307108640671,
578
+ -0.08491620421409607,
579
+ -0.06701554358005524,
580
+ -0.017091073095798492,
581
+ -0.16404025256633759,
582
+ 0.26611992716789246,
583
+ 0.1837930679321289,
584
+ 0.3313993811607361,
585
+ -0.11768592149019241,
586
+ -0.3832252025604248,
587
+ 0.045485369861125946,
588
+ 0.12103071808815002,
589
+ -0.07402243465185165,
590
+ -0.1992703676223755,
591
+ -0.028816554695367813,
592
+ 0.010397549718618393,
593
+ -0.0014130212366580963,
594
+ 0.01106192171573639,
595
+ -0.0036659035831689835,
596
+ -0.020395949482917786,
597
+ 0.2579013407230377,
598
+ 0.10747591406106949,
599
+ -0.13547983765602112,
600
+ 0.12793925404548645,
601
+ 0.1600361317396164,
602
+ -0.2541537880897522,
603
+ 0.0819946676492691,
604
+ -0.056574054062366486,
605
+ -0.04738030582666397,
606
+ 0.03279224783182144,
607
+ 0.31531280279159546,
608
+ -0.06221285089850426,
609
+ 0.06596431881189346,
610
+ -0.2683725655078888,
611
+ -0.373086154460907,
612
+ 0.20953719317913055,
613
+ 0.2288844883441925,
614
+ -0.372770220041275,
615
+ -0.30398476123809814,
616
+ -0.1982385665178299,
617
+ -0.09293974936008453,
618
+ 0.019459526985883713,
619
+ -0.34112879633903503,
620
+ -0.2560391426086426,
621
+ -0.22878341376781464,
622
+ -0.2347424328327179,
623
+ -0.016106046736240387,
624
+ 0.17339572310447693,
625
+ -0.24978484213352203,
626
+ 0.19037441909313202,
627
+ -0.1414477825164795,
628
+ -0.3755734860897064,
629
+ 0.19600750505924225,
630
+ 0.268595814704895,
631
+ 0.08602241426706314,
632
+ -0.2919912338256836,
633
+ 0.10232318192720413,
634
+ 0.10147527605295181,
635
+ -0.01876905933022499,
636
+ 0.4759398102760315,
637
+ 0.13229575753211975,
638
+ -0.008817091584205627,
639
+ -0.10976037383079529,
640
+ 0.1586039662361145,
641
+ -0.1602168083190918,
642
+ -0.05835449695587158,
643
+ -0.030834421515464783,
644
+ -0.23571771383285522,
645
+ -0.10901704430580139,
646
+ -0.07864931225776672,
647
+ -0.03527016192674637,
648
+ 0.10884739458560944,
649
+ 0.24489539861679077,
650
+ -0.012997664511203766,
651
+ -0.0900355726480484,
652
+ 0.022751742973923683,
653
+ -0.15365281701087952,
654
+ 0.10014019161462784,
655
+ 0.17065507173538208,
656
+ 0.3614352345466614,
657
+ 0.0735483467578888,
658
+ -0.07423453032970428,
659
+ 0.042132869362831116,
660
+ 0.12264852225780487,
661
+ 0.012627165764570236,
662
+ -0.01395268365740776,
663
+ -0.22379249334335327,
664
+ 0.19285787642002106,
665
+ 0.11697758734226227,
666
+ -0.0041245222091674805,
667
+ 0.31414657831192017,
668
+ -0.03885297849774361,
669
+ 0.1432349681854248,
670
+ 0.028727293014526367,
671
+ 0.09328880161046982,
672
+ 0.0880362018942833,
673
+ -0.05066407471895218,
674
+ -0.0026065409183502197,
675
+ 0.30186787247657776,
676
+ -0.013164419680833817,
677
+ 0.06964950263500214,
678
+ -0.0541776642203331,
679
+ -0.2788379490375519,
680
+ 0.0030776597559452057,
681
+ -0.07051735371351242,
682
+ 0.25848639011383057,
683
+ -0.12028256058692932,
684
+ -0.10213588178157806,
685
+ -0.22662858664989471,
686
+ -0.2931559085845947,
687
+ -0.061146803200244904,
688
+ 0.027028195559978485,
689
+ -0.0345332995057106,
690
+ 0.01314389705657959,
691
+ -0.006255168467760086,
692
+ -0.10469792783260345,
693
+ 0.06542258709669113,
694
+ -0.372946172952652,
695
+ -0.3019169270992279,
696
+ -0.08145053684711456,
697
+ 0.06039217486977577,
698
+ -0.11412863433361053,
699
+ -0.11494053900241852,
700
+ -0.9562330842018127,
701
+ -0.16530144214630127,
702
+ -0.10841047018766403,
703
+ 0.20949356257915497,
704
+ 0.08814768493175507,
705
+ -0.023415520787239075,
706
+ -0.1113462746143341,
707
+ -0.05921939015388489,
708
+ 0.4023820459842682,
709
+ -0.06005010008811951,
710
+ 0.22224345803260803,
711
+ 0.16955427825450897,
712
+ 0.1784098744392395,
713
+ -0.08048687875270844,
714
+ -0.01863168179988861,
715
+ 0.099650077521801,
716
+ 0.026277758181095123,
717
+ -0.3469662368297577,
718
+ -0.15093660354614258,
719
+ -0.0689137876033783,
720
+ 0.132249653339386,
721
+ 0.3804929554462433,
722
+ 0.011008646339178085,
723
+ 0.02918316423892975,
724
+ -0.047244105488061905,
725
+ -0.09141844511032104,
726
+ -0.14136792719364166,
727
+ -0.2874971628189087,
728
+ -0.07393712550401688,
729
+ 0.44581109285354614,
730
+ -0.2795799672603607,
731
+ 0.11311779916286469,
732
+ 0.16090570390224457,
733
+ -0.2261631190776825,
734
+ -0.06709315627813339,
735
+ 0.28239184617996216,
736
+ 0.11225946247577667,
737
+ 0.052622705698013306,
738
+ -0.05838698148727417,
739
+ 0.01626400649547577,
740
+ 0.26377978920936584,
741
+ 0.10513624548912048,
742
+ -0.18948715925216675,
743
+ 0.06818864494562149,
744
+ 0.11168000102043152,
745
+ -0.24578958749771118,
746
+ 0.1631578803062439,
747
+ 0.07817580550909042,
748
+ -0.4553224444389343,
749
+ -0.07407737523317337,
750
+ -0.06370435655117035,
751
+ -0.03479281812906265,
752
+ 0.2524678111076355,
753
+ 0.16354800760746002,
754
+ 0.1802605539560318,
755
+ -0.08273276686668396,
756
+ 0.09574167430400848,
757
+ -0.12705782055854797,
758
+ -0.07118156552314758,
759
+ 0.05481063947081566,
760
+ -0.23204734921455383,
761
+ 0.09771014750003815,
762
+ 0.11500401049852371,
763
+ 0.15409505367279053,
764
+ 0.5273442268371582,
765
+ -0.07016666233539581,
766
+ -0.07489809393882751,
767
+ -0.33390510082244873,
768
+ -0.4184330999851227,
769
+ -0.1018545925617218,
770
+ 0.05623817443847656,
771
+ 0.0074525922536849976,
772
+ 0.23007038235664368,
773
+ 0.06738405674695969,
774
+ 0.009771645069122314,
775
+ 0.017491638660430908,
776
+ -0.02375597506761551,
777
+ 0.45636898279190063,
778
+ 0.06808190047740936,
779
+ -0.20143212378025055
780
+ ]
781
+ ],
782
+ "expr-voice-3-f": [
783
+ [
784
+ 0.13871213793754578,
785
+ -0.005840830504894257,
786
+ -0.15852361917495728,
787
+ -0.1598411500453949,
788
+ -0.26698994636535645,
789
+ 0.02586376667022705,
790
+ -0.1921071857213974,
791
+ 0.24981868267059326,
792
+ 0.04115496203303337,
793
+ 0.08569401502609253,
794
+ 0.0707128569483757,
795
+ -0.14005476236343384,
796
+ -0.10387319326400757,
797
+ 0.1855223923921585,
798
+ -0.1979597508907318,
799
+ 0.36583632230758667,
800
+ 0.37012192606925964,
801
+ 0.15987826883792877,
802
+ 0.06491114944219589,
803
+ -0.257508784532547,
804
+ 0.08976570516824722,
805
+ -0.15797775983810425,
806
+ -0.14944151043891907,
807
+ -0.04109838604927063,
808
+ -0.17586340010166168,
809
+ -0.24992059171199799,
810
+ 0.010172002017498016,
811
+ -0.07082582265138626,
812
+ 0.2843496799468994,
813
+ -0.12158498913049698,
814
+ 0.026785872876644135,
815
+ -0.03277174383401871,
816
+ 0.04536290466785431,
817
+ 0.013299577869474888,
818
+ -0.18160071969032288,
819
+ 0.3922956585884094,
820
+ 0.007729392498731613,
821
+ 0.08069252967834473,
822
+ -0.19619448482990265,
823
+ 0.023759573698043823,
824
+ -0.10848170518875122,
825
+ -0.13332051038742065,
826
+ -0.14102697372436523,
827
+ -0.14820843935012817,
828
+ -0.08707141876220703,
829
+ -0.39382386207580566,
830
+ 0.0417485311627388,
831
+ 0.14097517728805542,
832
+ 0.14293213188648224,
833
+ 0.023514043539762497,
834
+ 0.055757876485586166,
835
+ 0.046206533908843994,
836
+ 0.1265213042497635,
837
+ -0.20803479850292206,
838
+ -0.03653295710682869,
839
+ -0.08230766654014587,
840
+ -0.09524410218000412,
841
+ -0.053787581622600555,
842
+ 0.27056893706321716,
843
+ 0.13554835319519043,
844
+ 0.2644631266593933,
845
+ -0.17855031788349152,
846
+ -0.4131408929824829,
847
+ -0.0880313590168953,
848
+ 0.08452498912811279,
849
+ 0.07456091046333313,
850
+ -0.1374712586402893,
851
+ 0.17265889048576355,
852
+ -0.10551238805055618,
853
+ -0.07296378910541534,
854
+ -0.08699771761894226,
855
+ -0.0052269212901592255,
856
+ -0.13721658289432526,
857
+ 0.09439760446548462,
858
+ 0.08153028786182404,
859
+ -0.12032093107700348,
860
+ 0.31358230113983154,
861
+ 0.017849169671535492,
862
+ -0.10918796062469482,
863
+ 0.25221139192581177,
864
+ -0.16257944703102112,
865
+ 0.03966780751943588,
866
+ 0.2648327350616455,
867
+ 0.3740457594394684,
868
+ -0.049868982285261154,
869
+ 0.15496593713760376,
870
+ -0.14554986357688904,
871
+ -0.3388577699661255,
872
+ 0.12365785986185074,
873
+ 0.22419792413711548,
874
+ -0.2847480773925781,
875
+ -0.14948470890522003,
876
+ -0.23220768570899963,
877
+ -0.06325745582580566,
878
+ -0.135714590549469,
879
+ -0.29497942328453064,
880
+ -0.16444231569766998,
881
+ -0.09958910942077637,
882
+ -0.17071066796779633,
883
+ -0.0965820923447609,
884
+ 0.1966513991355896,
885
+ -0.26755401492118835,
886
+ 0.2715594172477722,
887
+ -0.04767560586333275,
888
+ -0.23197872936725616,
889
+ 0.21915774047374725,
890
+ 0.3655705451965332,
891
+ 0.05229884386062622,
892
+ -0.2548077702522278,
893
+ 0.17090949416160583,
894
+ 0.13893850147724152,
895
+ 0.10304880142211914,
896
+ 0.24274475872516632,
897
+ 0.13461849093437195,
898
+ 0.07624354213476181,
899
+ 0.057291269302368164,
900
+ 0.4676368832588196,
901
+ -0.12860107421875,
902
+ -0.18356117606163025,
903
+ -0.05406884104013443,
904
+ -0.30958402156829834,
905
+ -0.17091166973114014,
906
+ -0.1032642349600792,
907
+ -0.16445590555667877,
908
+ 0.170028954744339,
909
+ 0.3129478096961975,
910
+ -0.14443637430667877,
911
+ -0.0122670978307724,
912
+ 0.23929432034492493,
913
+ -0.11866934597492218,
914
+ 0.12111514061689377,
915
+ 0.0700269564986229,
916
+ -0.12877538800239563,
917
+ -0.12539897859096527,
918
+ -0.11374304443597794,
919
+ 0.1582166999578476,
920
+ -0.031904857605695724,
921
+ -0.09916714578866959,
922
+ 0.0418274961411953,
923
+ -0.15201184153556824,
924
+ -0.12827050685882568,
925
+ 0.08552508056163788,
926
+ 0.01665734499692917,
927
+ 0.2533664107322693,
928
+ -0.33761894702911377,
929
+ -0.13769857585430145,
930
+ 0.19498766958713531,
931
+ 0.05782202631235123,
932
+ 0.22418996691703796,
933
+ -0.3455173969268799,
934
+ 0.06176409125328064,
935
+ 0.18046945333480835,
936
+ 0.04745572432875633,
937
+ -0.07705894857645035,
938
+ -0.09928419440984726,
939
+ -0.2738415002822876,
940
+ 0.04903321713209152,
941
+ 0.009562775492668152,
942
+ -0.10788482427597046,
943
+ -0.08994223177433014,
944
+ -0.11192557215690613,
945
+ 0.046946849673986435,
946
+ -0.2762613892555237,
947
+ 0.06982748955488205,
948
+ 0.026923134922981262,
949
+ -0.020478568971157074,
950
+ -0.2552128732204437,
951
+ 0.23829782009124756,
952
+ -0.26357829570770264,
953
+ -0.004325494170188904,
954
+ -0.2945777177810669,
955
+ -0.5100986957550049,
956
+ -0.12639102339744568,
957
+ -0.3181808292865753,
958
+ -0.136610209941864,
959
+ -0.15780270099639893,
960
+ -0.515294075012207,
961
+ -0.18769705295562744,
962
+ 0.22508305311203003,
963
+ 0.1896374225616455,
964
+ 0.2498699426651001,
965
+ -0.04813116043806076,
966
+ -0.004326710477471352,
967
+ 0.21494421362876892,
968
+ 0.6013686656951904,
969
+ -0.05016929656267166,
970
+ 0.364529550075531,
971
+ 0.07933302223682404,
972
+ 0.3284788131713867,
973
+ -0.2583238482475281,
974
+ 0.0023151934146881104,
975
+ -0.09977125376462936,
976
+ -0.0046474263072013855,
977
+ 0.09796135127544403,
978
+ -0.29395532608032227,
979
+ 0.04820738360285759,
980
+ 0.02372843772172928,
981
+ 0.09901507943868637,
982
+ -0.057117097079753876,
983
+ -0.1626986563205719,
984
+ 0.21257340908050537,
985
+ -0.10018446296453476,
986
+ 0.008972667157649994,
987
+ -0.24153783917427063,
988
+ 0.04020877182483673,
989
+ 0.22632437944412231,
990
+ 0.047335490584373474,
991
+ 0.17544248700141907,
992
+ 0.20996198058128357,
993
+ -0.017102576792240143,
994
+ -0.02071326971054077,
995
+ 0.2738295793533325,
996
+ 0.0933825820684433,
997
+ 0.20236346125602722,
998
+ 0.029390813782811165,
999
+ -0.08172589540481567,
1000
+ -0.12418398261070251,
1001
+ 0.04503977298736572,
1002
+ -0.03738844394683838,
1003
+ -0.08649343997240067,
1004
+ -0.0018795430660247803,
1005
+ -0.47754430770874023,
1006
+ -0.17342504858970642,
1007
+ -0.09775803983211517,
1008
+ -0.3843430280685425,
1009
+ 0.19738426804542542,
1010
+ -0.2649127244949341,
1011
+ -0.042505405843257904,
1012
+ 0.17321796715259552,
1013
+ 0.11326520144939423,
1014
+ -0.05666382610797882,
1015
+ 0.1488335132598877,
1016
+ -0.0678987056016922,
1017
+ 0.16736572980880737,
1018
+ 0.2827565371990204,
1019
+ -0.07944101840257645,
1020
+ -0.05206843465566635,
1021
+ -0.12347323447465897,
1022
+ 0.02526196651160717,
1023
+ 0.13037703931331635,
1024
+ 0.277080237865448,
1025
+ -0.02109110727906227,
1026
+ 0.10639187693595886,
1027
+ -0.06475184857845306,
1028
+ -0.13968110084533691,
1029
+ -0.05486571788787842,
1030
+ -0.05690477788448334,
1031
+ 0.425478458404541,
1032
+ 0.07124663889408112,
1033
+ 0.04820084944367409,
1034
+ 0.06510826200246811,
1035
+ 0.2518041729927063,
1036
+ -0.020264409482479095,
1037
+ 0.3077050745487213,
1038
+ -0.143794983625412,
1039
+ -0.009051360189914703
1040
+ ]
1041
+ ],
1042
+ "expr-voice-4-m": [
1043
+ [
1044
+ 0.0952199175953865,
1045
+ -0.0024725571274757385,
1046
+ -0.18992125988006592,
1047
+ -0.010708220303058624,
1048
+ -0.21033528447151184,
1049
+ 0.13221319019794464,
1050
+ -0.05863914638757706,
1051
+ 0.27836671471595764,
1052
+ 0.10281602293252945,
1053
+ 0.14313995838165283,
1054
+ -0.049078792333602905,
1055
+ -0.05745581537485123,
1056
+ -0.16475263237953186,
1057
+ 0.23562109470367432,
1058
+ -0.10586008429527283,
1059
+ 0.2887856960296631,
1060
+ 0.4389207065105438,
1061
+ 0.12532994151115417,
1062
+ -0.01569790579378605,
1063
+ -0.2820974886417389,
1064
+ 0.07737893611192703,
1065
+ -0.12347874045372009,
1066
+ -0.07371968030929565,
1067
+ -0.10501465201377869,
1068
+ -0.04761665686964989,
1069
+ -0.15372726321220398,
1070
+ 0.21102173626422882,
1071
+ -0.14761599898338318,
1072
+ 0.33984294533729553,
1073
+ -0.01460660994052887,
1074
+ -0.012233633548021317,
1075
+ -0.1342252492904663,
1076
+ 0.037350039929151535,
1077
+ -0.10430601984262466,
1078
+ -0.25558245182037354,
1079
+ 0.34743618965148926,
1080
+ 0.10816638171672821,
1081
+ 0.2185852825641632,
1082
+ -0.24589566886425018,
1083
+ 0.00973756704479456,
1084
+ -0.18009154498577118,
1085
+ -0.053188592195510864,
1086
+ -0.035720162093639374,
1087
+ -0.19866344332695007,
1088
+ -0.10299849510192871,
1089
+ -0.4247433543205261,
1090
+ -0.03315550088882446,
1091
+ 0.1662677526473999,
1092
+ 0.09703761339187622,
1093
+ -0.050528910011053085,
1094
+ 0.05203554779291153,
1095
+ 0.06395753473043442,
1096
+ 0.06557227671146393,
1097
+ -0.08789791911840439,
1098
+ -0.11697688698768616,
1099
+ 0.00733184814453125,
1100
+ -0.027109898626804352,
1101
+ -0.15125200152397156,
1102
+ 0.27161937952041626,
1103
+ 0.12706944346427917,
1104
+ 0.1539584994316101,
1105
+ -0.1499481052160263,
1106
+ -0.43577778339385986,
1107
+ 0.04031963646411896,
1108
+ 0.15046808123588562,
1109
+ 0.14206060767173767,
1110
+ -0.12375032901763916,
1111
+ 0.04872458055615425,
1112
+ -0.008081693202257156,
1113
+ 0.04888621345162392,
1114
+ -0.025430137291550636,
1115
+ -0.11307256668806076,
1116
+ -0.12025891989469528,
1117
+ 0.1909235417842865,
1118
+ 0.11408016830682755,
1119
+ -0.2425723373889923,
1120
+ 0.2968887388706207,
1121
+ 0.18061237037181854,
1122
+ -0.10872483253479004,
1123
+ 0.18752926588058472,
1124
+ -0.1904236078262329,
1125
+ -0.009878693148493767,
1126
+ 0.12517568469047546,
1127
+ 0.26664215326309204,
1128
+ -0.026521366089582443,
1129
+ 0.14491870999336243,
1130
+ -0.230604887008667,
1131
+ -0.32546836137771606,
1132
+ 0.11101026833057404,
1133
+ 0.2209850549697876,
1134
+ -0.2868024408817291,
1135
+ -0.2398785799741745,
1136
+ -0.27206653356552124,
1137
+ -0.13478201627731323,
1138
+ -0.002844269387423992,
1139
+ -0.32844191789627075,
1140
+ -0.1875229775905609,
1141
+ -0.13251858949661255,
1142
+ -0.2895949184894562,
1143
+ 0.019307315349578857,
1144
+ 0.19926661252975464,
1145
+ -0.39100950956344604,
1146
+ 0.3230056166648865,
1147
+ -0.20191209018230438,
1148
+ -0.3222658634185791,
1149
+ 0.17230170965194702,
1150
+ 0.2699040472507477,
1151
+ 0.10517066717147827,
1152
+ -0.20111601054668427,
1153
+ 0.18357816338539124,
1154
+ 0.0777335911989212,
1155
+ -0.04576971009373665,
1156
+ 0.36911189556121826,
1157
+ 0.11802582442760468,
1158
+ -0.05095860734581947,
1159
+ 0.01657317578792572,
1160
+ 0.3360751271247864,
1161
+ -0.09206347912549973,
1162
+ -0.01967744529247284,
1163
+ 0.050976742058992386,
1164
+ -0.2092645764350891,
1165
+ -0.19065406918525696,
1166
+ -0.14133822917938232,
1167
+ -0.08417556434869766,
1168
+ 0.10521888732910156,
1169
+ 0.3346131145954132,
1170
+ -0.0561993271112442,
1171
+ 0.0381443053483963,
1172
+ 0.12204118818044662,
1173
+ -0.40802162885665894,
1174
+ 0.13718123733997345,
1175
+ 0.33158525824546814,
1176
+ -0.04774290323257446,
1177
+ -0.06192554160952568,
1178
+ 0.0961100161075592,
1179
+ 0.09462687373161316,
1180
+ 0.28760871291160583,
1181
+ 0.1977214515209198,
1182
+ -0.3317374289035797,
1183
+ 0.10458284616470337,
1184
+ 0.003636091947555542,
1185
+ 0.2875797152519226,
1186
+ 0.049911536276340485,
1187
+ 0.2784287631511688,
1188
+ -0.031866349279880524,
1189
+ 0.062265440821647644,
1190
+ 0.052010856568813324,
1191
+ 0.06262392550706863,
1192
+ 0.09534131735563278,
1193
+ -0.08583962917327881,
1194
+ 0.2035648226737976,
1195
+ 0.10816887766122818,
1196
+ 0.009504888206720352,
1197
+ -0.07617136836051941,
1198
+ -0.10840853303670883,
1199
+ -0.1763756275177002,
1200
+ 0.06223386898636818,
1201
+ 0.12994253635406494,
1202
+ 0.07521222531795502,
1203
+ -0.0012001879513263702,
1204
+ -0.0055129677057266235,
1205
+ -0.1736374944448471,
1206
+ -0.30260419845581055,
1207
+ 0.14597037434577942,
1208
+ 0.11471143364906311,
1209
+ 0.022479303181171417,
1210
+ -0.12159854173660278,
1211
+ -0.03107035532593727,
1212
+ -0.09057781845331192,
1213
+ 0.018555767834186554,
1214
+ -0.19900067150592804,
1215
+ -0.35838502645492554,
1216
+ -0.30753692984580994,
1217
+ -0.2961001694202423,
1218
+ -0.31172874569892883,
1219
+ 0.06307318061590195,
1220
+ -0.47987431287765503,
1221
+ -0.1161670982837677,
1222
+ -0.013860665261745453,
1223
+ 0.06805908679962158,
1224
+ -0.014434754848480225,
1225
+ -0.07823242247104645,
1226
+ 3.74428927898407e-05,
1227
+ 0.09932373464107513,
1228
+ 0.5068054795265198,
1229
+ -0.13047467172145844,
1230
+ 0.2669246792793274,
1231
+ 0.022760502994060516,
1232
+ 0.12191189080476761,
1233
+ -0.17972096800804138,
1234
+ -0.26514625549316406,
1235
+ 0.08372729271650314,
1236
+ 0.1040930226445198,
1237
+ -0.11174861341714859,
1238
+ -0.006047241389751434,
1239
+ 0.05895190313458443,
1240
+ 0.3426474630832672,
1241
+ 0.31392529606819153,
1242
+ -0.05797629430890083,
1243
+ -0.08965197205543518,
1244
+ 0.14553499221801758,
1245
+ 0.03769601136445999,
1246
+ -0.21699337661266327,
1247
+ -0.25532397627830505,
1248
+ 0.07315167784690857,
1249
+ 0.28547021746635437,
1250
+ -0.20243047177791595,
1251
+ -0.06701919436454773,
1252
+ 0.2104637324810028,
1253
+ 0.04807844012975693,
1254
+ 0.004309859126806259,
1255
+ 0.27956458926200867,
1256
+ 0.13423766195774078,
1257
+ -0.05935635417699814,
1258
+ -0.2142050713300705,
1259
+ -0.08972686529159546,
1260
+ 0.17432601749897003,
1261
+ 0.002843298017978668,
1262
+ -0.21426773071289062,
1263
+ -0.1928202211856842,
1264
+ 0.0027323514223098755,
1265
+ -0.48660707473754883,
1266
+ -0.05254216492176056,
1267
+ -0.3392464220523834,
1268
+ -0.31981295347213745,
1269
+ 0.13590103387832642,
1270
+ -0.16710792481899261,
1271
+ 0.12927380204200745,
1272
+ 0.23874743282794952,
1273
+ -0.11378521472215652,
1274
+ 0.37355053424835205,
1275
+ -0.26109519600868225,
1276
+ 0.12599241733551025,
1277
+ 0.06596970558166504,
1278
+ 0.26122912764549255,
1279
+ 0.03834444284439087,
1280
+ -0.14845117926597595,
1281
+ 0.026155894622206688,
1282
+ 0.017989620566368103,
1283
+ 0.08486741036176682,
1284
+ 0.30622565746307373,
1285
+ -0.13737623393535614,
1286
+ -0.2582918405532837,
1287
+ -0.2045847773551941,
1288
+ -0.19270196557044983,
1289
+ -0.12875300645828247,
1290
+ 0.13610607385635376,
1291
+ 0.16890865564346313,
1292
+ 0.16747358441352844,
1293
+ 0.2318812906742096,
1294
+ 0.10281985253095627,
1295
+ 0.029384255409240723,
1296
+ -0.025407575070858,
1297
+ 0.4095771312713623,
1298
+ -0.19751593470573425,
1299
+ -0.13057292997837067
1300
+ ]
1301
+ ],
1302
+ "expr-voice-4-f": [
1303
+ [
1304
+ 0.18880455195903778,
1305
+ -0.0140334852039814,
1306
+ -0.1418013870716095,
1307
+ -0.20764237642288208,
1308
+ -0.3178022503852844,
1309
+ 0.045685261487960815,
1310
+ -0.21496164798736572,
1311
+ 0.19767647981643677,
1312
+ 0.043763380497694016,
1313
+ 0.048171695321798325,
1314
+ 0.2119288444519043,
1315
+ -0.277169406414032,
1316
+ -0.19392499327659607,
1317
+ 0.15691876411437988,
1318
+ -0.08882923424243927,
1319
+ 0.41144776344299316,
1320
+ 0.4381123483181,
1321
+ -0.003059864044189453,
1322
+ -0.04476870596408844,
1323
+ -0.2906145751476288,
1324
+ -0.010741718113422394,
1325
+ -0.10101539641618729,
1326
+ -0.20736470818519592,
1327
+ -0.11444179713726044,
1328
+ -0.16930001974105835,
1329
+ -0.24567493796348572,
1330
+ -0.07482317090034485,
1331
+ -0.1546013057231903,
1332
+ 0.2472112774848938,
1333
+ -0.1251595914363861,
1334
+ -0.11532816290855408,
1335
+ 0.012167524546384811,
1336
+ -0.04819313436746597,
1337
+ -0.054902512580156326,
1338
+ -0.1765771359205246,
1339
+ 0.44418662786483765,
1340
+ 0.05842672660946846,
1341
+ 0.23300686478614807,
1342
+ -0.22605957090854645,
1343
+ 0.17334924638271332,
1344
+ -0.2093581110239029,
1345
+ -0.141520157456398,
1346
+ -0.07031615078449249,
1347
+ -0.23093804717063904,
1348
+ 0.006228934973478317,
1349
+ -0.29160207509994507,
1350
+ 0.10801190882921219,
1351
+ 0.1526104062795639,
1352
+ 0.18930545449256897,
1353
+ -0.0769025981426239,
1354
+ 0.14519774913787842,
1355
+ 0.02973814122378826,
1356
+ 0.09255189448595047,
1357
+ -0.27177730202674866,
1358
+ -0.015224780887365341,
1359
+ 0.019247017800807953,
1360
+ -0.0733930841088295,
1361
+ -0.12352107465267181,
1362
+ 0.25906410813331604,
1363
+ 0.1917492151260376,
1364
+ 0.20290443301200867,
1365
+ -0.15074916183948517,
1366
+ -0.4081234335899353,
1367
+ -0.0803636759519577,
1368
+ -0.04337303712964058,
1369
+ 0.014891143888235092,
1370
+ -0.3521175980567932,
1371
+ 0.02524259313941002,
1372
+ -0.07993665337562561,
1373
+ -0.0389237143099308,
1374
+ -0.1530742198228836,
1375
+ 0.07393437623977661,
1376
+ -0.12860077619552612,
1377
+ 0.09320971369743347,
1378
+ 0.0983436331152916,
1379
+ -0.1698281466960907,
1380
+ 0.22344225645065308,
1381
+ 0.055355072021484375,
1382
+ -0.09985534846782684,
1383
+ 0.18552106618881226,
1384
+ -0.16698402166366577,
1385
+ -0.08165302127599716,
1386
+ 0.1652231514453888,
1387
+ 0.36602267622947693,
1388
+ -0.06530480086803436,
1389
+ 0.07646335661411285,
1390
+ -0.12639226019382477,
1391
+ -0.3548475503921509,
1392
+ 0.07275298237800598,
1393
+ 0.19831109046936035,
1394
+ -0.20784500241279602,
1395
+ -0.11738839745521545,
1396
+ -0.37074822187423706,
1397
+ -0.15437263250350952,
1398
+ -0.15825483202934265,
1399
+ -0.367908775806427,
1400
+ -0.21065013110637665,
1401
+ -0.191669300198555,
1402
+ -0.17679443955421448,
1403
+ -0.08948996663093567,
1404
+ 0.09071541577577591,
1405
+ -0.32906949520111084,
1406
+ 0.20570331811904907,
1407
+ -0.10349181294441223,
1408
+ -0.3029400110244751,
1409
+ 0.1852070689201355,
1410
+ 0.2730630934238434,
1411
+ -0.0184471495449543,
1412
+ -0.22825157642364502,
1413
+ 0.12131186574697495,
1414
+ 0.11251639574766159,
1415
+ -0.012224998325109482,
1416
+ 0.19131290912628174,
1417
+ 0.3030052185058594,
1418
+ 0.09788734465837479,
1419
+ -0.0473514124751091,
1420
+ 0.41827940940856934,
1421
+ -0.1329759657382965,
1422
+ -0.14882251620292664,
1423
+ -0.0067719966173172,
1424
+ -0.35161739587783813,
1425
+ -0.026627741754055023,
1426
+ -0.18240375816822052,
1427
+ 0.001200847327709198,
1428
+ 0.13064104318618774,
1429
+ 0.36026066541671753,
1430
+ -0.15579795837402344,
1431
+ -0.0434747040271759,
1432
+ -0.0252430010586977,
1433
+ -0.19896246492862701,
1434
+ 0.0856584906578064,
1435
+ 0.1312103271484375,
1436
+ -0.020916156470775604,
1437
+ 0.14111009240150452,
1438
+ -0.1995535045862198,
1439
+ 0.16306668519973755,
1440
+ 0.04324851557612419,
1441
+ -0.2089436650276184,
1442
+ 0.033715393394231796,
1443
+ 0.09840942919254303,
1444
+ -0.06833907961845398,
1445
+ -0.024825841188430786,
1446
+ 0.09166029840707779,
1447
+ 0.3348466753959656,
1448
+ -0.09853219985961914,
1449
+ -0.03956661373376846,
1450
+ -0.06594860553741455,
1451
+ 0.11125677078962326,
1452
+ 0.09491252154111862,
1453
+ -0.07117488235235214,
1454
+ -0.23003040254116058,
1455
+ -0.031425222754478455,
1456
+ -0.2415955811738968,
1457
+ -0.07504288852214813,
1458
+ -0.22473734617233276,
1459
+ -0.17512840032577515,
1460
+ -0.03131487965583801,
1461
+ -0.08344490826129913,
1462
+ -0.046673744916915894,
1463
+ -0.06596428155899048,
1464
+ -0.14411866664886475,
1465
+ 0.04372454807162285,
1466
+ 0.09679386019706726,
1467
+ 0.18974019587039948,
1468
+ 0.1331016570329666,
1469
+ 0.05952640622854233,
1470
+ -0.20901581645011902,
1471
+ 0.020735615864396095,
1472
+ -0.3296099603176117,
1473
+ 0.019605107605457306,
1474
+ -0.18822765350341797,
1475
+ -0.362109899520874,
1476
+ -0.13461434841156006,
1477
+ -0.14701808989048004,
1478
+ -0.0656614676117897,
1479
+ -0.10349118709564209,
1480
+ -0.38542425632476807,
1481
+ 0.09054096043109894,
1482
+ 0.26779070496559143,
1483
+ 0.04322489723563194,
1484
+ 0.1330929398536682,
1485
+ -0.17370718717575073,
1486
+ 0.006655709818005562,
1487
+ 0.1957501471042633,
1488
+ 0.45284754037857056,
1489
+ -0.0685308575630188,
1490
+ 0.39191800355911255,
1491
+ 0.1675826460123062,
1492
+ 0.2303124964237213,
1493
+ -0.12629464268684387,
1494
+ -0.07115292549133301,
1495
+ -0.07266009598970413,
1496
+ -0.035289157181978226,
1497
+ -0.11248612403869629,
1498
+ -0.3486238420009613,
1499
+ -0.20580162107944489,
1500
+ -0.2406969964504242,
1501
+ 0.01655798964202404,
1502
+ -0.27403005957603455,
1503
+ 0.1466657966375351,
1504
+ 0.07245612889528275,
1505
+ 0.025395870208740234,
1506
+ -0.03490045666694641,
1507
+ -0.3175053596496582,
1508
+ -0.13412785530090332,
1509
+ 0.20813800394535065,
1510
+ 0.019953176379203796,
1511
+ 0.0707082450389862,
1512
+ 0.12429428100585938,
1513
+ -0.35314151644706726,
1514
+ -0.13968059420585632,
1515
+ 0.35762158036231995,
1516
+ 0.13972926139831543,
1517
+ 0.33709627389907837,
1518
+ 0.031183019280433655,
1519
+ 0.06388825178146362,
1520
+ -0.19142553210258484,
1521
+ -0.14596271514892578,
1522
+ -0.1576690375804901,
1523
+ -0.11846912652254105,
1524
+ -0.15740664303302765,
1525
+ -0.2677772343158722,
1526
+ -0.1361580193042755,
1527
+ -0.1821131706237793,
1528
+ -0.24375773966312408,
1529
+ -0.028675854206085205,
1530
+ 0.04741836339235306,
1531
+ -0.13830968737602234,
1532
+ 0.05012785270810127,
1533
+ 0.03130105137825012,
1534
+ -0.01401422917842865,
1535
+ 0.11734001338481903,
1536
+ 0.08377125859260559,
1537
+ 0.25009632110595703,
1538
+ 0.42987802624702454,
1539
+ -0.18471550941467285,
1540
+ -0.2228032648563385,
1541
+ -0.03527883440256119,
1542
+ -0.07460293918848038,
1543
+ 0.11295715719461441,
1544
+ 0.25237035751342773,
1545
+ -0.040709543973207474,
1546
+ -0.07949578016996384,
1547
+ -0.09623905271291733,
1548
+ -0.20849895477294922,
1549
+ 0.13003820180892944,
1550
+ 0.04128529876470566,
1551
+ 0.4078994691371918,
1552
+ -0.0266677588224411,
1553
+ 0.17410126328468323,
1554
+ -0.04813161864876747,
1555
+ -0.03309305012226105,
1556
+ 0.1008414700627327,
1557
+ 0.23173272609710693,
1558
+ 0.019571997225284576,
1559
+ -0.03808845207095146
1560
+ ]
1561
+ ],
1562
+ "expr-voice-5-m": [
1563
+ [
1564
+ 0.06432017683982849,
1565
+ -0.07923335582017899,
1566
+ -0.2219942808151245,
1567
+ -0.14966577291488647,
1568
+ -0.3155282437801361,
1569
+ 0.24665741622447968,
1570
+ -0.1455119252204895,
1571
+ 0.20826655626296997,
1572
+ 0.04136960953474045,
1573
+ 0.16803500056266785,
1574
+ -0.034509338438510895,
1575
+ -0.05074550211429596,
1576
+ -0.13084673881530762,
1577
+ 0.2285449355840683,
1578
+ -0.05928029865026474,
1579
+ 0.2740812599658966,
1580
+ 0.3587525188922882,
1581
+ 0.05716518312692642,
1582
+ -0.10699201375246048,
1583
+ -0.3027176260948181,
1584
+ 0.046505920588970184,
1585
+ -0.08466688543558121,
1586
+ -0.12076345831155777,
1587
+ 0.004232887178659439,
1588
+ -0.08293218910694122,
1589
+ -0.07562959939241409,
1590
+ 0.11177782714366913,
1591
+ -0.11047543585300446,
1592
+ 0.2805103063583374,
1593
+ -0.046650372445583344,
1594
+ 0.027784258127212524,
1595
+ -0.19626572728157043,
1596
+ 0.06947457045316696,
1597
+ -0.029808634892106056,
1598
+ -0.23235827684402466,
1599
+ 0.35536837577819824,
1600
+ 0.11808853596448898,
1601
+ 0.14621591567993164,
1602
+ -0.14554406702518463,
1603
+ 0.102340467274189,
1604
+ -0.08329078555107117,
1605
+ -0.25971701741218567,
1606
+ -0.0725565105676651,
1607
+ -0.1687813103199005,
1608
+ -0.0563470758497715,
1609
+ -0.5985289812088013,
1610
+ -0.06764042377471924,
1611
+ 0.06147020682692528,
1612
+ 0.09045936167240143,
1613
+ 0.005636684596538544,
1614
+ 0.09289659559726715,
1615
+ 0.05853208154439926,
1616
+ 0.020114514976739883,
1617
+ -0.09521060436964035,
1618
+ -0.1835472136735916,
1619
+ -0.14537768065929413,
1620
+ -0.04858776181936264,
1621
+ -0.19229958951473236,
1622
+ 0.2858748733997345,
1623
+ 0.12789089977741241,
1624
+ 0.19207993149757385,
1625
+ -0.13309073448181152,
1626
+ -0.4356442093849182,
1627
+ -0.09359504282474518,
1628
+ 0.12491375207901001,
1629
+ 0.1273895800113678,
1630
+ -0.013285938650369644,
1631
+ 0.10860960185527802,
1632
+ -0.08416366577148438,
1633
+ 0.007475573569536209,
1634
+ 0.07186521589756012,
1635
+ 0.048361897468566895,
1636
+ -0.09746435284614563,
1637
+ 0.15606394410133362,
1638
+ 0.11128077656030655,
1639
+ -0.17537395656108856,
1640
+ 0.13547363877296448,
1641
+ 0.2519581913948059,
1642
+ -0.19039009511470795,
1643
+ 0.2064056247472763,
1644
+ -0.05764784663915634,
1645
+ -0.023118387907743454,
1646
+ 0.055670104920864105,
1647
+ 0.33831262588500977,
1648
+ -0.09208041429519653,
1649
+ 0.10881999135017395,
1650
+ -0.2607620656490326,
1651
+ -0.34736698865890503,
1652
+ 0.0933496430516243,
1653
+ 0.1999269723892212,
1654
+ -0.28388985991477966,
1655
+ -0.18218298256397247,
1656
+ -0.1179126650094986,
1657
+ -0.13417461514472961,
1658
+ 0.0464155450463295,
1659
+ -0.27943533658981323,
1660
+ -0.1080189198255539,
1661
+ -0.0661550760269165,
1662
+ -0.24931040406227112,
1663
+ -0.1444808840751648,
1664
+ 0.13133633136749268,
1665
+ -0.21958422660827637,
1666
+ 0.2302013635635376,
1667
+ -0.19214127957820892,
1668
+ -0.3196294903755188,
1669
+ 0.23783531785011292,
1670
+ 0.2966155707836151,
1671
+ 0.10307872295379639,
1672
+ -0.20597875118255615,
1673
+ -0.05105344206094742,
1674
+ 0.015631254762411118,
1675
+ -0.0655721127986908,
1676
+ 0.33453911542892456,
1677
+ 0.2629266679286957,
1678
+ 0.11289032548666,
1679
+ -0.08845630288124084,
1680
+ 0.17829327285289764,
1681
+ -0.1097518727183342,
1682
+ -0.08545827865600586,
1683
+ 0.027511999011039734,
1684
+ -0.2990145683288574,
1685
+ -0.13676051795482635,
1686
+ -0.18382340669631958,
1687
+ -0.12994998693466187,
1688
+ 0.1138823851943016,
1689
+ 0.22908148169517517,
1690
+ -0.11691394448280334,
1691
+ -0.025476418435573578,
1692
+ -0.07549934834241867,
1693
+ -0.17598184943199158,
1694
+ 0.18278053402900696,
1695
+ 0.35202670097351074,
1696
+ -0.04526887089014053,
1697
+ 0.33658498525619507,
1698
+ 0.01019352674484253,
1699
+ 0.010009095072746277,
1700
+ 0.12912538647651672,
1701
+ 0.1387941986322403,
1702
+ -0.1506628543138504,
1703
+ 0.018344879150390625,
1704
+ -0.056643061339855194,
1705
+ 0.02181481570005417,
1706
+ 0.002180032432079315,
1707
+ 0.19787383079528809,
1708
+ -0.16953565180301666,
1709
+ 0.1027664840221405,
1710
+ 0.0725487619638443,
1711
+ 0.030590252950787544,
1712
+ 0.1927502304315567,
1713
+ -0.08467242121696472,
1714
+ 0.1697331666946411,
1715
+ 0.3454343378543854,
1716
+ -0.08811068534851074,
1717
+ 0.04990881681442261,
1718
+ 0.065883107483387,
1719
+ 0.014279961585998535,
1720
+ -0.01554810255765915,
1721
+ 0.009699434041976929,
1722
+ 0.04873518645763397,
1723
+ -0.18454328179359436,
1724
+ 0.045809146016836166,
1725
+ -0.2232266515493393,
1726
+ -0.32305341958999634,
1727
+ 0.07021032273769379,
1728
+ -0.10565163195133209,
1729
+ -0.16110511124134064,
1730
+ 0.06765598058700562,
1731
+ 0.28118109703063965,
1732
+ -0.24651262164115906,
1733
+ -0.41219693422317505,
1734
+ -0.33379876613616943,
1735
+ -0.1886943280696869,
1736
+ -0.15041962265968323,
1737
+ -0.4796498715877533,
1738
+ -0.2738741338253021,
1739
+ -0.15213260054588318,
1740
+ -0.6469641327857971,
1741
+ 0.019278522580862045,
1742
+ 0.17450889945030212,
1743
+ 0.1714034378528595,
1744
+ 0.1439822018146515,
1745
+ -0.14891044795513153,
1746
+ -0.1847931146621704,
1747
+ -0.08018745481967926,
1748
+ 0.5966050028800964,
1749
+ -0.21084071695804596,
1750
+ 0.2619308531284332,
1751
+ 0.02743557095527649,
1752
+ 0.16887028515338898,
1753
+ -0.2530401051044464,
1754
+ -0.20734834671020508,
1755
+ -0.11567963659763336,
1756
+ 0.15590953826904297,
1757
+ -0.05688796564936638,
1758
+ 0.07784479111433029,
1759
+ 0.03227890655398369,
1760
+ 0.017273180186748505,
1761
+ 0.141242116689682,
1762
+ 0.15898245573043823,
1763
+ 0.10986365377902985,
1764
+ 0.18469709157943726,
1765
+ -0.08128228783607483,
1766
+ -0.17100486159324646,
1767
+ -0.029384054243564606,
1768
+ -0.07189200818538666,
1769
+ 0.28656551241874695,
1770
+ -0.1209988072514534,
1771
+ 0.008082544431090355,
1772
+ 0.25417986512184143,
1773
+ -0.06466450542211533,
1774
+ -0.030464254319667816,
1775
+ 0.21584880352020264,
1776
+ -0.0021988973021507263,
1777
+ 0.21961244940757751,
1778
+ -0.1007116287946701,
1779
+ 0.16453982889652252,
1780
+ 0.1360696405172348,
1781
+ 0.06623882800340652,
1782
+ -0.010120876133441925,
1783
+ -0.012962136417627335,
1784
+ 0.3552597165107727,
1785
+ -0.24619446694850922,
1786
+ 0.1478002667427063,
1787
+ 0.010775126516819,
1788
+ -0.31277331709861755,
1789
+ -0.14862282574176788,
1790
+ -0.22686931490898132,
1791
+ -0.14606142044067383,
1792
+ 0.16656963527202606,
1793
+ 0.35751286149024963,
1794
+ 0.16310352087020874,
1795
+ -0.20620058476924896,
1796
+ 0.19538749754428864,
1797
+ 0.12675553560256958,
1798
+ 0.16548845171928406,
1799
+ 0.06667378544807434,
1800
+ -0.1810283362865448,
1801
+ -0.17808258533477783,
1802
+ 0.11969223618507385,
1803
+ -0.1397537738084793,
1804
+ 0.4354950487613678,
1805
+ 0.11433087289333344,
1806
+ -0.043014414608478546,
1807
+ -0.19497331976890564,
1808
+ -0.3901323974132538,
1809
+ -0.09690174460411072,
1810
+ 0.000148773193359375,
1811
+ 0.05485815554857254,
1812
+ 0.07199304550886154,
1813
+ 0.14612744748592377,
1814
+ 0.20525074005126953,
1815
+ 0.002373717725276947,
1816
+ -0.01968742161989212,
1817
+ 0.24779510498046875,
1818
+ -0.10944664478302002,
1819
+ -0.2614300847053528
1820
+ ]
1821
+ ],
1822
+ "expr-voice-5-f": [
1823
+ [
1824
+ 0.15433552861213684,
1825
+ -0.0927051454782486,
1826
+ -0.07185791432857513,
1827
+ -0.23380047082901,
1828
+ -0.2252129316329956,
1829
+ 0.07841833680868149,
1830
+ -0.12661391496658325,
1831
+ 0.23806966841220856,
1832
+ 0.11561117321252823,
1833
+ 0.20108476281166077,
1834
+ 0.024460673332214355,
1835
+ -0.20551784336566925,
1836
+ -0.18407952785491943,
1837
+ 0.16890937089920044,
1838
+ -0.003149561583995819,
1839
+ 0.39870545268058777,
1840
+ 0.6083824634552002,
1841
+ 0.10828369855880737,
1842
+ 0.046744197607040405,
1843
+ -0.3338724672794342,
1844
+ 0.018557310104370117,
1845
+ -0.06248883157968521,
1846
+ -0.12477779388427734,
1847
+ -0.048454560339450836,
1848
+ 0.01583963632583618,
1849
+ -0.23980045318603516,
1850
+ -0.018042966723442078,
1851
+ -0.11648998409509659,
1852
+ 0.2678447365760803,
1853
+ -0.16429097950458527,
1854
+ -0.12893672287464142,
1855
+ -0.1238522008061409,
1856
+ 0.052001141011714935,
1857
+ 0.0480656623840332,
1858
+ -0.21182577311992645,
1859
+ 0.47395485639572144,
1860
+ 0.022542081773281097,
1861
+ 0.1255103498697281,
1862
+ -0.20236197113990784,
1863
+ 0.07433711737394333,
1864
+ -0.1504518836736679,
1865
+ -0.11503425985574722,
1866
+ -0.2143837809562683,
1867
+ -0.07433293759822845,
1868
+ -0.007274288684129715,
1869
+ -0.26373374462127686,
1870
+ 0.020141204819083214,
1871
+ 0.2526334226131439,
1872
+ 0.23499131202697754,
1873
+ 0.04230155795812607,
1874
+ 0.05039888247847557,
1875
+ -0.02602149359881878,
1876
+ 0.08524496108293533,
1877
+ -0.12280339747667313,
1878
+ -0.06777091324329376,
1879
+ -0.09438847750425339,
1880
+ -0.04938860982656479,
1881
+ -0.08854954689741135,
1882
+ 0.20356541872024536,
1883
+ 0.16247616708278656,
1884
+ 0.17421764135360718,
1885
+ -0.06907235085964203,
1886
+ -0.40900593996047974,
1887
+ -0.12256970256567001,
1888
+ 0.17371439933776855,
1889
+ 0.21251538395881653,
1890
+ -0.09370216727256775,
1891
+ 0.11212453246116638,
1892
+ -0.04679333046078682,
1893
+ 0.07457767426967621,
1894
+ -0.11664113402366638,
1895
+ -0.12379281222820282,
1896
+ -0.15765440464019775,
1897
+ 0.14677894115447998,
1898
+ -0.03879360109567642,
1899
+ -0.07160334289073944,
1900
+ 0.26227521896362305,
1901
+ 0.2186981737613678,
1902
+ -0.20896540582180023,
1903
+ 0.20213370025157928,
1904
+ -0.2982761859893799,
1905
+ 0.005040749907493591,
1906
+ 0.2769654095172882,
1907
+ 0.3599247336387634,
1908
+ 0.0036788247525691986,
1909
+ 0.07898230105638504,
1910
+ -0.19184722006320953,
1911
+ -0.3300853967666626,
1912
+ 0.178404301404953,
1913
+ 0.3040274977684021,
1914
+ -0.17815113067626953,
1915
+ -0.0960398018360138,
1916
+ -0.15543952584266663,
1917
+ 0.00361555814743042,
1918
+ -0.1761748045682907,
1919
+ -0.24497342109680176,
1920
+ -0.17902934551239014,
1921
+ -0.2370295524597168,
1922
+ -0.24849268794059753,
1923
+ 0.011117503046989441,
1924
+ 0.1877269148826599,
1925
+ -0.29081636667251587,
1926
+ 0.2575216293334961,
1927
+ -0.1283322274684906,
1928
+ -0.2315579503774643,
1929
+ 0.19224917888641357,
1930
+ 0.35107287764549255,
1931
+ 0.05112697184085846,
1932
+ -0.19742262363433838,
1933
+ 0.25047731399536133,
1934
+ 0.15469320118427277,
1935
+ 0.18462881445884705,
1936
+ 0.22659239172935486,
1937
+ 0.21847453713417053,
1938
+ 0.03830372542142868,
1939
+ 0.049889177083969116,
1940
+ 0.403109073638916,
1941
+ -0.18187105655670166,
1942
+ -0.07955966889858246,
1943
+ -0.20730987191200256,
1944
+ -0.37410300970077515,
1945
+ -0.18806695938110352,
1946
+ -0.07151336967945099,
1947
+ 0.00987570732831955,
1948
+ 0.18018025159835815,
1949
+ 0.24453949928283691,
1950
+ -0.11931924521923065,
1951
+ 0.11770948767662048,
1952
+ -0.04423028603196144,
1953
+ -0.2156400978565216,
1954
+ 0.3522748351097107,
1955
+ -0.17554450035095215,
1956
+ -0.17933452129364014,
1957
+ 0.1288825422525406,
1958
+ -0.05711892992258072,
1959
+ 0.37886834144592285,
1960
+ 0.27972322702407837,
1961
+ -0.346394419670105,
1962
+ 0.17432355880737305,
1963
+ 0.20602759718894958,
1964
+ 0.1524522453546524,
1965
+ -0.02438986301422119,
1966
+ 0.08624280244112015,
1967
+ 0.19441623985767365,
1968
+ 0.05898942053318024,
1969
+ 0.05989654362201691,
1970
+ 0.46916264295578003,
1971
+ 0.16758668422698975,
1972
+ 0.11430920660495758,
1973
+ -0.08836935460567474,
1974
+ 0.03904008865356445,
1975
+ -0.11456585675477982,
1976
+ 0.16219046711921692,
1977
+ -0.1679726094007492,
1978
+ -0.15232473611831665,
1979
+ -0.0487201064825058,
1980
+ 0.16953538358211517,
1981
+ -0.3063428997993469,
1982
+ -0.13191843032836914,
1983
+ 0.08852715790271759,
1984
+ -0.1842697113752365,
1985
+ -0.04217272624373436,
1986
+ -0.32143980264663696,
1987
+ 0.12796451151371002,
1988
+ 0.31717127561569214,
1989
+ -0.001151442527770996,
1990
+ -0.0037750154733657837,
1991
+ 0.12950420379638672,
1992
+ -0.2225857377052307,
1993
+ -0.19517582654953003,
1994
+ -0.27178436517715454,
1995
+ -0.24240681529045105,
1996
+ -0.19334933161735535,
1997
+ -0.23421789705753326,
1998
+ -0.08010704815387726,
1999
+ -0.08827343583106995,
2000
+ 0.3072166442871094,
2001
+ 0.08895572274923325,
2002
+ 0.2308531105518341,
2003
+ 0.0888364166021347,
2004
+ 0.15903140604496002,
2005
+ -0.10392159223556519,
2006
+ -0.113443523645401,
2007
+ 0.10713990032672882,
2008
+ 0.6614207029342651,
2009
+ -0.2049807459115982,
2010
+ 0.286920428276062,
2011
+ -0.2368219643831253,
2012
+ 0.3354896306991577,
2013
+ -0.14339490234851837,
2014
+ -0.08006924390792847,
2015
+ -0.13345220685005188,
2016
+ -0.14533032476902008,
2017
+ 0.25803881883621216,
2018
+ 0.4005228579044342,
2019
+ 0.07188950479030609,
2020
+ -0.01516486331820488,
2021
+ 0.07124312222003937,
2022
+ 0.0014325901865959167,
2023
+ 0.08224979043006897,
2024
+ 0.00963311642408371,
2025
+ 0.046093158423900604,
2026
+ -0.10692545026540756,
2027
+ -0.07319261133670807,
2028
+ -0.10177847743034363,
2029
+ 0.4154365658760071,
2030
+ -0.10559909045696259,
2031
+ -0.07216191291809082,
2032
+ 0.3354503810405731,
2033
+ 0.024642042815685272,
2034
+ 0.01742631196975708,
2035
+ 0.2083512842655182,
2036
+ 0.006796203553676605,
2037
+ -0.005502916872501373,
2038
+ -0.13082699477672577,
2039
+ 0.045820459723472595,
2040
+ 0.0005837678909301758,
2041
+ 0.12939587235450745,
2042
+ -0.17182999849319458,
2043
+ -0.12280116975307465,
2044
+ -0.31829899549484253,
2045
+ -0.40535616874694824,
2046
+ -0.06713145226240158,
2047
+ 0.08299564570188522,
2048
+ -0.49099624156951904,
2049
+ 0.060252659022808075,
2050
+ -0.07642354816198349,
2051
+ -0.03798883408308029,
2052
+ 0.1290046125650406,
2053
+ -0.08449066430330276,
2054
+ 0.2217746526002884,
2055
+ -0.028821337968111038,
2056
+ 0.19382326304912567,
2057
+ -0.042574867606163025,
2058
+ 0.15908917784690857,
2059
+ 0.06668301671743393,
2060
+ 0.021537400782108307,
2061
+ -0.03310889005661011,
2062
+ 0.3488943576812744,
2063
+ 0.10929166525602341,
2064
+ 0.23791049420833588,
2065
+ -0.0798778384923935,
2066
+ 0.028840258717536926,
2067
+ 0.0899183601140976,
2068
+ 0.07882614433765411,
2069
+ -0.27045387029647827,
2070
+ 0.24069802463054657,
2071
+ 0.15239563584327698,
2072
+ 0.01660384237766266,
2073
+ 0.009450095705688,
2074
+ 0.1450836956501007,
2075
+ 0.3850732445716858,
2076
+ 0.042756158858537674,
2077
+ 0.16394974291324615,
2078
+ -0.11007612943649292,
2079
+ -0.0030880868434906006
2080
+ ]
2081
+ ]
2082
+ }
web/shell/persona.css CHANGED
@@ -103,6 +103,21 @@
103
  background: var(--p-paper-2); border: 1px solid var(--p-ink); padding: 8px 10px;
104
  }
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  @media (max-width: 768px) {
107
  .persona-view { flex-direction: column; }
108
  .persona-controls { width: 100%; border-right: 0; border-bottom: 2px solid var(--p-ink); }
 
103
  background: var(--p-paper-2); border: 1px solid var(--p-ink); padding: 8px 10px;
104
  }
105
 
106
+ /* ── TTS / voice controls (war-diary read-aloud) ───────────────────────────── */
107
+ .tts-bar { margin-top: 16px; }
108
+ .tts-auto-row {
109
+ display: flex; align-items: center; gap: 6px; margin-top: 6px;
110
+ font-family: var(--p-mono); font-size: 10px; letter-spacing: .04em; text-transform: uppercase; color: var(--p-muted); cursor: pointer;
111
+ }
112
+ .tts-auto { accent-color: var(--p-transmit); width: 14px; height: 14px; }
113
+ /* secondary (outline) button for "Read aloud" */
114
+ .persona-go-alt {
115
+ margin-top: 8px; color: var(--p-ink) !important; background: var(--p-card) !important;
116
+ box-shadow: 2px 2px 0 var(--p-ink);
117
+ }
118
+ .persona-go-alt:hover { background: var(--p-paper-2) !important; color: var(--p-ink) !important; }
119
+ .tts-status { min-height: 14px; }
120
+
121
  @media (max-width: 768px) {
122
  .persona-view { flex-direction: column; }
123
  .persona-controls { width: 100%; border-right: 0; border-bottom: 2px solid var(--p-ink); }
web/tts.js ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // TTS facade — mirrors runtime.js (the LLM facade). Picks the active TTS engine
2
+ // (Kokoro / Kitten / Web Speech) and voice, and exposes makeNarrator(): a streaming
3
+ // reader that speaks sentence-by-sentence so a war diary can narrate itself while the
4
+ // LLM is still writing. Panels + the TTS bar import only from here.
5
+ import { engine as kokoro } from '/web/ttsKokoro.js'
6
+ import { engine as kitten } from '/web/ttsKitten.js'
7
+ import { engine as webspeech } from '/web/ttsWebSpeech.js'
8
+ import { playSamples, stopAudio } from '/web/ttsAudio.js'
9
+ import { ensurePersistentStorage } from '/web/storage.js'
10
+
11
+ const ENGINES = [kokoro, kitten, webspeech]
12
+ let activeId = 'kokoro'
13
+ const voiceSel = {} // engineId -> chosen voice id
14
+
15
+ const eng = () => ENGINES.find((e) => e.id === activeId) || ENGINES[0]
16
+
17
+ export const listTtsEngines = () =>
18
+ ENGINES.map((e) => ({ id: e.id, label: e.label, available: e.available(), experimental: !!e.experimental }))
19
+ export const getTtsEngineId = () => activeId
20
+ export function setTtsEngine(id) { if (ENGINES.some((e) => e.id === id)) activeId = id }
21
+
22
+ export const listVoices = () => eng().listVoices()
23
+ export const currentVoiceId = () => (voiceSel[activeId] !== undefined ? voiceSel[activeId] : eng().defaultVoice)
24
+ export function setVoice(id) { voiceSel[activeId] = id }
25
+
26
+ export const ttsNeedsDownload = () => !!eng().needsDownload
27
+ export const ttsBackendLabel = () => eng().backendLabel()
28
+
29
+ export async function ensureTts(onProgress) {
30
+ if (eng().needsDownload) await ensurePersistentStorage()
31
+ return eng().ensure(onProgress)
32
+ }
33
+
34
+ // Speak text sentence-by-sentence. push() text as it streams; end() to flush the
35
+ // tail; stop() to abort. PCM engines pre-generate the next sentence while the current
36
+ // one plays; native engines (Web Speech) just speak each sentence in order.
37
+ export function makeNarrator({ onState } = {}) {
38
+ const engine = eng()
39
+ const voice = currentVoiceId()
40
+ let pending = '', sentences = [], closed = false, stopped = false, running = false
41
+ const SENT = /[\s\S]*?[.!?…]["')\]]*(?:\s+|$)/g
42
+ const wait = (ms) => new Promise((r) => setTimeout(r, ms))
43
+
44
+ function drain(force) {
45
+ SENT.lastIndex = 0
46
+ let m, last = 0
47
+ while ((m = SENT.exec(pending)) !== null) {
48
+ const s = m[0].trim()
49
+ if (s) sentences.push(s)
50
+ last = SENT.lastIndex
51
+ }
52
+ pending = pending.slice(last)
53
+ if (force && pending.trim()) { sentences.push(pending.trim()); pending = '' }
54
+ }
55
+
56
+ async function loop() {
57
+ running = true
58
+ onState && onState('speaking')
59
+ try {
60
+ if (engine.mode === 'native') {
61
+ while (!stopped) {
62
+ if (sentences.length) await engine.speak(sentences.shift(), voice)
63
+ else if (closed) break
64
+ else await wait(60)
65
+ }
66
+ } else {
67
+ const startNext = () => (sentences.length ? engine.synth(sentences.shift(), voice, {}) : null)
68
+ let synthP = null
69
+ while (!stopped) {
70
+ if (!synthP) synthP = startNext()
71
+ if (!synthP) { if (closed) break; await wait(60); continue }
72
+ let cur = null
73
+ try { cur = await synthP } catch { cur = null }
74
+ synthP = startNext() // pre-generate next while current plays
75
+ if (cur && !stopped) { try { await playSamples(cur.audio, cur.sampleRate) } catch { /* ignore */ } }
76
+ }
77
+ }
78
+ } finally {
79
+ running = false
80
+ onState && onState(stopped ? 'stopped' : 'done')
81
+ }
82
+ }
83
+
84
+ return {
85
+ push(text) { pending += text; drain(false); if (!running && !stopped) loop() },
86
+ end() { drain(true); closed = true; if (!running && !stopped) loop() },
87
+ stop() { stopped = true; sentences = []; pending = ''; if (engine.stop) engine.stop(); stopAudio() },
88
+ }
89
+ }
web/ttsAudio.js ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Shared audio output for the PCM TTS engines (Kokoro, Kitten). One AudioContext,
2
+ // one source at a time — the narrator awaits playSamples() per sentence so chunks
3
+ // play in order without overlap. Created lazily on first use (which happens after a
4
+ // user gesture, so resume() is allowed by autoplay policy).
5
+ let _ctx = null
6
+ let _cur = null
7
+
8
+ function ctx() {
9
+ if (!_ctx) _ctx = new (window.AudioContext || window.webkitAudioContext)()
10
+ return _ctx
11
+ }
12
+
13
+ export async function playSamples(float32, sampleRate) {
14
+ const ac = ctx()
15
+ if (ac.state === 'suspended') { try { await ac.resume() } catch { /* ignore */ } }
16
+ const buf = ac.createBuffer(1, float32.length, sampleRate)
17
+ buf.getChannelData(0).set(float32)
18
+ return new Promise((resolve) => {
19
+ const src = ac.createBufferSource()
20
+ src.buffer = buf
21
+ src.connect(ac.destination)
22
+ _cur = src
23
+ src.onended = () => { if (_cur === src) _cur = null; resolve() }
24
+ src.start()
25
+ })
26
+ }
27
+
28
+ export function stopAudio() {
29
+ try { if (_cur) _cur.stop() } catch { /* ignore */ }
30
+ _cur = null
31
+ }
web/ttsBar.js ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Voice/TTS picker for the war-diary panel: choose the TTS engine (Kokoro / Kitten /
2
+ // Web Speech — switchable so you can compare), a voice, and whether to auto-narrate
3
+ // while the diary streams. Mirrors modelBar.js. The play/stop button lives in the
4
+ // panel (it owns the diary text); this bar only drives the tts.js facade state.
5
+ import {
6
+ listTtsEngines, getTtsEngineId, setTtsEngine,
7
+ listVoices, currentVoiceId, setVoice,
8
+ ttsBackendLabel, ttsNeedsDownload,
9
+ } from '/web/tts.js'
10
+
11
+ function el(tag, props = {}, kids = []) {
12
+ const n = document.createElement(tag)
13
+ for (const [k, v] of Object.entries(props)) {
14
+ if (k === 'class') n.className = v
15
+ else if (k.startsWith('on') && typeof v === 'function') n.addEventListener(k.slice(2), v)
16
+ else if (v != null) n.setAttribute(k, v)
17
+ }
18
+ for (const kid of [].concat(kids)) if (kid != null) n.append(kid)
19
+ return n
20
+ }
21
+
22
+ export function mountTtsBar(host, { onChange } = {}) {
23
+ const engSel = el('select', { class: 'model-select engine-select' })
24
+ const voiceSel = el('select', { class: 'model-select' })
25
+ const auto = el('input', { type: 'checkbox', class: 'tts-auto' })
26
+ const autoWrap = el('label', { class: 'tts-auto-row' }, [auto, ' narrate as it writes'])
27
+ const info = el('div', { class: 'model-info' })
28
+ host.append(el('div', { class: 'model-bar tts-bar' }, [
29
+ el('label', { class: 'persona-label' }, '🔊 Voice (reads on your device)'),
30
+ engSel,
31
+ el('label', { class: 'persona-label' }, 'Voice'),
32
+ voiceSel, info, autoWrap,
33
+ ]))
34
+
35
+ engSel.replaceChildren(...listTtsEngines().map((e) =>
36
+ el('option', { value: e.id, ...(e.available ? {} : { disabled: 'disabled' }) },
37
+ `${e.label}${e.available ? '' : ' · n/a'}`)))
38
+ engSel.value = getTtsEngineId()
39
+
40
+ function renderVoices() {
41
+ const voices = listVoices()
42
+ voiceSel.replaceChildren(...(voices.length
43
+ ? voices.map((v) => el('option', { value: v.id }, v.label))
44
+ : [el('option', { value: '' }, 'default')]))
45
+ const cur = currentVoiceId()
46
+ if (voices.some((v) => v.id === cur)) voiceSel.value = cur
47
+ info.textContent = `${ttsBackendLabel()}${ttsNeedsDownload() ? ' · downloads on first use' : ' · no download'}`
48
+ }
49
+
50
+ engSel.addEventListener('change', () => { setTtsEngine(engSel.value); renderVoices(); onChange && onChange() })
51
+ voiceSel.addEventListener('change', () => { setVoice(voiceSel.value); onChange && onChange() })
52
+
53
+ // Web Speech voices populate asynchronously.
54
+ if (typeof speechSynthesis !== 'undefined') speechSynthesis.onvoiceschanged = () => renderVoices()
55
+
56
+ renderVoices()
57
+ return { autoNarrate: () => auto.checked, refresh: renderVoices }
58
+ }
web/ttsKitten.js ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // TTS engine: KittenTTS Nano (15M, ~24MB ONNX) — the smallest usable browser TTS.
2
+ // Pipeline (mirrors clowerweb/kitten-tts-web-demo): phonemize → map to token ids →
3
+ // ONNX run (input_ids/style/speed → waveform @ 24kHz). Runs on WASM for robustness
4
+ // (the WebGPU EP produces NaNs on some drivers). Experimental: depends on
5
+ // onnxruntime-web + phonemizer loading from CDN, so it degrades to an error if either
6
+ // fails. Model from HF; tokenizer + voice embeddings vendored under /web/kitten/.
7
+ const ORT_VER = '1.26.0'
8
+ const ORT_URL = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ORT_VER}/dist/ort.wasm.mjs`
9
+ const MODEL_URL = 'https://huggingface.co/KittenML/kitten-tts-nano-0.1/resolve/main/kitten_tts_nano_v0_1.onnx'
10
+ const SAMPLE_RATE = 24000
11
+
12
+ const VOICES = [
13
+ { id: 'expr-voice-2-f', label: 'Voice 2 · ♀' },
14
+ { id: 'expr-voice-2-m', label: 'Voice 2 · ♂' },
15
+ { id: 'expr-voice-3-f', label: 'Voice 3 · ♀' },
16
+ { id: 'expr-voice-3-m', label: 'Voice 3 · ♂' },
17
+ { id: 'expr-voice-4-f', label: 'Voice 4 · ♀' },
18
+ { id: 'expr-voice-4-m', label: 'Voice 4 · ♂' },
19
+ { id: 'expr-voice-5-f', label: 'Voice 5 · ♀' },
20
+ { id: 'expr-voice-5-m', label: 'Voice 5 · ♂' },
21
+ ]
22
+
23
+ let _ort = null, _session = null, _vocab = null, _voiceEmb = null, _phon = null, _p = null
24
+
25
+ async function ensure(onProgress) {
26
+ if (_session) return _session
27
+ if (_p) return _p
28
+ _p = (async () => {
29
+ _ort = await import(ORT_URL)
30
+ _ort.env.wasm.numThreads = 1 // HF Space lacks COOP/COEP → no SharedArrayBuffer
31
+ _ort.env.wasm.wasmPaths = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ORT_VER}/dist/`
32
+
33
+ const [tok, voices] = await Promise.all([
34
+ fetch('/web/kitten/tokenizer.json').then((r) => r.json()),
35
+ fetch('/web/kitten/voices.json').then((r) => r.json()),
36
+ ])
37
+ _vocab = tok.model.vocab
38
+ _voiceEmb = voices
39
+
40
+ const resp = await fetch(MODEL_URL)
41
+ const total = +(resp.headers.get('content-length') || 0)
42
+ let loaded = 0
43
+ const reader = resp.body.getReader()
44
+ const parts = []
45
+ for (;;) {
46
+ const { done, value } = await reader.read()
47
+ if (done) break
48
+ parts.push(value); loaded += value.length
49
+ if (onProgress && total) onProgress(loaded / total)
50
+ }
51
+ const bytes = new Uint8Array(loaded)
52
+ let off = 0
53
+ for (const p of parts) { bytes.set(p, off); off += p.length }
54
+
55
+ _session = await _ort.InferenceSession.create(bytes.buffer, {
56
+ executionProviders: [{ name: 'wasm', simd: true }],
57
+ })
58
+ return _session
59
+ })().catch((e) => { _p = null; throw e })
60
+ return _p
61
+ }
62
+
63
+ async function phonemes(text) {
64
+ if (!_phon) { const m = await import('https://esm.run/phonemizer@1.2.1'); _phon = m.phonemize }
65
+ const ph = await _phon(text, 'en-us')
66
+ return Array.isArray(ph) ? ph.join(' ') : String(ph)
67
+ }
68
+
69
+ async function synth(text, voice, { speed = 1 } = {}) {
70
+ const ph = await phonemes(text)
71
+ const ids = `$${ph}$`.split('').map((ch) => (_vocab[ch] != null ? _vocab[ch] : 0))
72
+ const emb = _voiceEmb[voice] || _voiceEmb[VOICES[0].id]
73
+ const inputs = {
74
+ input_ids: new _ort.Tensor('int64', BigInt64Array.from(ids.map((i) => BigInt(i))), [1, ids.length]),
75
+ style: new _ort.Tensor('float32', new Float32Array(emb[0]), [1, emb[0].length]),
76
+ speed: new _ort.Tensor('float32', new Float32Array([speed]), [1]),
77
+ }
78
+ const out = await _session.run(inputs)
79
+ const data = out.waveform.data
80
+ // Scrub NaNs to silence so a bad frame can't poison the whole clip.
81
+ const audio = new Float32Array(data.length)
82
+ for (let i = 0; i < data.length; i++) audio[i] = Number.isNaN(data[i]) ? 0 : data[i]
83
+ return { audio, sampleRate: SAMPLE_RATE }
84
+ }
85
+
86
+ export const engine = {
87
+ id: 'kitten',
88
+ label: 'Kitten TTS 15M · smallest (experimental)',
89
+ mode: 'pcm',
90
+ experimental: true,
91
+ needsDownload: true,
92
+ available: () => true,
93
+ listVoices: () => VOICES,
94
+ defaultVoice: 'expr-voice-2-f',
95
+ ensure, synth,
96
+ backendLabel: () => 'CPU (WASM)',
97
+ }
web/ttsKokoro.js ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // TTS engine: Kokoro-82M via kokoro-js (Transformers.js + ONNX, WebGPU/WASM).
2
+ // Best-quality model that runs 100% in the browser (Apache-2.0). Weights pull from
3
+ // huggingface.co like our LLM models; nothing touches the Space. mode 'pcm' → the
4
+ // narrator plays the returned Float32Array through the shared AudioContext.
5
+ import { KokoroTTS } from 'https://cdn.jsdelivr.net/npm/kokoro-js@1.2.1/+esm'
6
+
7
+ const MODEL_ID = 'onnx-community/Kokoro-82M-v1.0-ONNX'
8
+ // Curated subset of Kokoro's 54 voices (a = American, b = British; f/m).
9
+ const VOICES = [
10
+ { id: 'af_heart', label: 'Heart · US ♀' },
11
+ { id: 'af_bella', label: 'Bella · US ♀' },
12
+ { id: 'af_nicole', label: 'Nicole · US ♀' },
13
+ { id: 'am_michael', label: 'Michael · US ♂' },
14
+ { id: 'am_fenrir', label: 'Fenrir · US ♂' },
15
+ { id: 'bf_emma', label: 'Emma · UK ♀' },
16
+ { id: 'bm_george', label: 'George · UK ♂' },
17
+ { id: 'bm_lewis', label: 'Lewis · UK ♂' },
18
+ ]
19
+
20
+ let _tts = null, _p = null
21
+
22
+ async function ensure(onProgress) {
23
+ if (_tts) return _tts
24
+ if (_p) return _p
25
+ _p = (async () => {
26
+ _tts = await KokoroTTS.from_pretrained(MODEL_ID, {
27
+ dtype: (typeof navigator !== 'undefined' && navigator.gpu) ? 'fp32' : 'q8',
28
+ device: (typeof navigator !== 'undefined' && navigator.gpu) ? 'webgpu' : 'wasm',
29
+ progress_callback: (p) => {
30
+ if (onProgress && p && p.status === 'progress' && p.total) onProgress(p.loaded / p.total)
31
+ },
32
+ })
33
+ return _tts
34
+ })().catch((e) => { _p = null; throw e })
35
+ return _p
36
+ }
37
+
38
+ async function synth(text, voice, { speed = 1 } = {}) {
39
+ const out = await _tts.generate(text, { voice: voice || VOICES[0].id, speed })
40
+ return { audio: out.audio, sampleRate: out.sampling_rate }
41
+ }
42
+
43
+ export const engine = {
44
+ id: 'kokoro',
45
+ label: 'Kokoro 82M · best quality',
46
+ mode: 'pcm',
47
+ needsDownload: true,
48
+ available: () => true,
49
+ listVoices: () => VOICES,
50
+ defaultVoice: 'af_heart',
51
+ ensure, synth,
52
+ backendLabel: () => { try { return navigator.gpu ? '⚡ WebGPU' : 'CPU (WASM)' } catch { return 'CPU (WASM)' } },
53
+ }
web/ttsWebSpeech.js ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // TTS engine: Web Speech API (speechSynthesis). Zero download, instant — uses the
2
+ // OS/browser's built-in voices. Not a "model" (quality varies by platform, and on
3
+ // some platforms the voice is cloud-backed), but it's the no-wait fallback. mode
4
+ // 'native' → the engine speaks the sentence itself and resolves when it finishes.
5
+ const synth = () => (typeof window !== 'undefined' ? window.speechSynthesis : null)
6
+
7
+ const enVoices = () => {
8
+ const s = synth()
9
+ if (!s) return []
10
+ return s.getVoices()
11
+ .filter((v) => /^en\b|^en[-_]/i.test(v.lang))
12
+ .map((v) => ({ id: v.voiceURI, label: `${v.name} · ${v.lang}`, _v: v }))
13
+ }
14
+
15
+ let _voiceCache = []
16
+ function voices() {
17
+ const v = enVoices()
18
+ if (v.length) _voiceCache = v
19
+ return _voiceCache
20
+ }
21
+ const findVoice = (id) => (voices().find((x) => x.id === id) || {})._v || null
22
+
23
+ export const engine = {
24
+ id: 'webspeech',
25
+ label: 'Web Speech · built-in (no download)',
26
+ mode: 'native',
27
+ needsDownload: false,
28
+ available: () => !!synth(),
29
+ listVoices: () => voices(),
30
+ defaultVoice: '', // empty → browser default voice
31
+ ensure: async () => { /* nothing to load */ },
32
+ speak(text, voiceId) {
33
+ return new Promise((resolve) => {
34
+ const s = synth()
35
+ if (!s) return resolve()
36
+ const u = new SpeechSynthesisUtterance(text)
37
+ const v = findVoice(voiceId)
38
+ if (v) u.voice = v
39
+ u.onend = () => resolve()
40
+ u.onerror = () => resolve()
41
+ s.speak(u)
42
+ })
43
+ },
44
+ stop() { const s = synth(); if (s) s.cancel() },
45
+ backendLabel: () => 'OS voices',
46
+ }