@yomiscript/kokoro 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/plan.d.ts +6 -2
- package/dist/plan.js +11 -8
- package/dist/plan.js.map +1 -1
- package/dist/render.js +121 -111
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,8 @@ The Kokoro-82M Katarite: YomiScript -> Kokoro's phoneme string and ids -> ONNX (
|
|
|
4
4
|
Given a YomiScript written by the original Kokoro front end, it hands Kokoro exactly what the original pipeline does
|
|
5
5
|
(D21, D22; `eval/kokoro_parity`).
|
|
6
6
|
|
|
7
|
-
- `plan(ys)`: what Kokoro is given, per language section (no ONNX).
|
|
7
|
+
- `plan(ys)`: what Kokoro is given, per language section (no ONNX). Japanese ` ‖ ` and an inner `↘` become `,` and `.`
|
|
8
|
+
as in English, so Kokoro pauses there (D26); `plan(ys, { original: true })` drops them as the original does.
|
|
8
9
|
- `Engine(ort, loadBytes)`: the ONNX engine, for onnxruntime-web (browser; `W16`, fp16 weights) or onnxruntime-node
|
|
9
10
|
(`FP32`, identical to the original). `nodeEngine({ dir, model, download })` from `@yomiscript/kokoro/node`; with `download: KOKORO_MODELS_URL`, missing
|
|
10
11
|
files are downloaded into `dir` once.
|
package/dist/plan.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface PlannedSection {
|
|
|
8
8
|
lang: string;
|
|
9
9
|
text: string;
|
|
10
10
|
voice: string;
|
|
11
|
-
/** the phoneme string
|
|
11
|
+
/** the phoneme string Kokoro is given */
|
|
12
12
|
ps: string;
|
|
13
13
|
ids: number[];
|
|
14
14
|
/** the unit index of each id (-1 for BOS / EOS) */
|
|
@@ -19,4 +19,8 @@ export interface PlannedSection {
|
|
|
19
19
|
export type Plan = PlannedSection[] & {
|
|
20
20
|
src: string;
|
|
21
21
|
};
|
|
22
|
-
export
|
|
22
|
+
export interface PlanOptions {
|
|
23
|
+
/** Japanese punctuation as the original Kokoro gets it (D22), for the parity checks */
|
|
24
|
+
original?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function plan(ys: string, opts?: PlanOptions): Plan;
|
package/dist/plan.js
CHANGED
|
@@ -163,12 +163,15 @@ function enSyl(x, gb) {
|
|
|
163
163
|
}
|
|
164
164
|
return x;
|
|
165
165
|
}
|
|
166
|
-
function jaPhonemes(t, foreign) {
|
|
167
|
-
// as Kokoro's Japanese front end (misaki Cutlet)
|
|
168
|
-
|
|
166
|
+
function jaPhonemes(t, foreign, original) {
|
|
167
|
+
// ‖ and an inner ↘ as in English (', ' and '.', D26); original: as Kokoro's Japanese front end (misaki Cutlet)
|
|
168
|
+
// writes them, 。 and 、 leave only the word space (D22)
|
|
169
|
+
if (t.kind === "space")
|
|
169
170
|
return " ";
|
|
171
|
+
if (t.kind === "pause")
|
|
172
|
+
return original ? " " : ", ";
|
|
170
173
|
if (t.kind === "end" || t.kind === "punct")
|
|
171
|
-
return t.sym === "." && (t.kind === "end" || t.sent) ? "" : (t.sym ?? "");
|
|
174
|
+
return t.sym === "." && (t.kind === "end" || (original && t.sent)) ? "" : (t.sym ?? "");
|
|
172
175
|
let p = t.ipa ?? "";
|
|
173
176
|
if (t.mk === "mora")
|
|
174
177
|
p = jaKokoro(t.on ?? "", t.v ?? "");
|
|
@@ -176,9 +179,9 @@ function jaPhonemes(t, foreign) {
|
|
|
176
179
|
p = "ʔ";
|
|
177
180
|
return foreign ? [...p].map((c) => FOREIGN_JA[c] ?? c).join("") : p;
|
|
178
181
|
}
|
|
179
|
-
function kokoroPhonemes(lang, t, foreign) {
|
|
182
|
+
function kokoroPhonemes(lang, t, foreign, original) {
|
|
180
183
|
if (isJa(lang))
|
|
181
|
-
return jaPhonemes(t, foreign);
|
|
184
|
+
return jaPhonemes(t, foreign, original);
|
|
182
185
|
if (t.kind === "space")
|
|
183
186
|
return " ";
|
|
184
187
|
if (t.kind === "pause")
|
|
@@ -200,7 +203,7 @@ export function voiceFor(top, l, x) {
|
|
|
200
203
|
return `${voiceOf(top)}+${voiceOf(l)}@${BLEND}`;
|
|
201
204
|
}
|
|
202
205
|
// plan: sections with Kokoro ids + units (no ONNX); used for parity tests and synthesis
|
|
203
|
-
export function plan(ys) {
|
|
206
|
+
export function plan(ys, opts = {}) {
|
|
204
207
|
const Y = parse(ys);
|
|
205
208
|
const P = Y.sections.map((sec) => {
|
|
206
209
|
const foreign = isJa(sec.lang) && !isJa(Y.top);
|
|
@@ -208,7 +211,7 @@ export function plan(ys) {
|
|
|
208
211
|
for (const t of sec.toks) {
|
|
209
212
|
if (t.kind === "bound")
|
|
210
213
|
continue;
|
|
211
|
-
U.push([kokoroPhonemes(sec.lang, t, foreign), t.kind === "unit" && t.f0 ? [...t.f0] : null, t.ph]);
|
|
214
|
+
U.push([kokoroPhonemes(sec.lang, t, foreign, opts.original ?? false), t.kind === "unit" && t.f0 ? [...t.f0] : null, t.ph]);
|
|
212
215
|
toks.push(t);
|
|
213
216
|
}
|
|
214
217
|
const ids = [0], uid = [-1];
|
package/dist/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
package/dist/render.js
CHANGED
|
@@ -3,138 +3,148 @@
|
|
|
3
3
|
import { SR } from "./plan.js";
|
|
4
4
|
const mean = (a) => a.reduce((s, v) => s + v, 0) / a.length;
|
|
5
5
|
function unitFrames(uid, dur, n) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
// the unit index of each F0 frame (2 frames per duration step), -1 for BOS / EOS
|
|
7
|
+
const fu = [];
|
|
8
|
+
dur.forEach((d, l) => {
|
|
9
|
+
for (let r = 0; r < d * 2; r++)
|
|
10
|
+
fu.push(uid[l]);
|
|
11
|
+
});
|
|
12
|
+
fu.length = Math.min(fu.length, n);
|
|
13
|
+
return fu;
|
|
13
14
|
}
|
|
14
15
|
function valueAt(c, x) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
a = Math.min(Math.floor(pos), c.length - 2);
|
|
19
|
-
|
|
16
|
+
// a unit's contour c (points spread evenly) at position x in [0, 1]
|
|
17
|
+
if (c.length === 1)
|
|
18
|
+
return c[0];
|
|
19
|
+
const pos = x * (c.length - 1), a = Math.min(Math.floor(pos), c.length - 2);
|
|
20
|
+
return c[a] + (c[a + 1] - c[a]) * (pos - a);
|
|
20
21
|
}
|
|
21
22
|
function frameTargets(fu, U, n, dstep) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
// semitone target per frame from the units' values, lowered by dstep per phrase (declination)
|
|
24
|
+
const st = new Float64Array(n).fill(NaN);
|
|
25
|
+
U.forEach(([, c, ph], k) => {
|
|
26
|
+
if (c === null)
|
|
27
|
+
return;
|
|
28
|
+
const fr = [];
|
|
29
|
+
for (let i = 0; i < fu.length; i++)
|
|
30
|
+
if (fu[i] === k)
|
|
31
|
+
fr.push(i);
|
|
32
|
+
fr.forEach((i, j) => (st[i] = valueAt(c, fr.length > 1 ? j / (fr.length - 1) : 0) - dstep * ph));
|
|
33
|
+
});
|
|
34
|
+
return st;
|
|
31
35
|
}
|
|
32
36
|
function anchorPhrases(st, f0, fu, U) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
37
|
+
// values are relative: each phrase keeps its shape and takes the mean level of the engine's own F0 there
|
|
38
|
+
const n = f0.length, lo = Array.from(f0, (v) => Math.log2(Math.max(v, 1)) * 12);
|
|
39
|
+
const phr = Array.from({ length: n }, (_, i) => (i < fu.length && fu[i] >= 0 ? U[fu[i]][2] : -1));
|
|
40
|
+
const ok = Array.from({ length: n }, (_, i) => !isNaN(st[i]) && f0[i] > 60);
|
|
41
|
+
const tgt = new Float64Array(n).fill(NaN);
|
|
42
|
+
for (const ph of new Set(phr.filter((_, i) => ok[i]))) {
|
|
43
|
+
const sel = [];
|
|
44
|
+
for (let i = 0; i < n; i++)
|
|
45
|
+
if (ok[i] && phr[i] === ph)
|
|
46
|
+
sel.push(i);
|
|
47
|
+
const ms = mean(sel.map((i) => st[i])), ml = mean(sel.map((i) => lo[i]));
|
|
48
|
+
for (const i of sel)
|
|
49
|
+
tgt[i] = st[i] - ms + ml;
|
|
50
|
+
}
|
|
51
|
+
return tgt;
|
|
47
52
|
}
|
|
48
53
|
function interpolate(tgt, xs) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
// fill the frames between targets linearly, and hold the first / last target outside them
|
|
55
|
+
const n = tgt.length, full = new Float64Array(n);
|
|
56
|
+
let q = 0;
|
|
57
|
+
for (let i = 0; i < n; i++) {
|
|
58
|
+
if (i <= xs[0])
|
|
59
|
+
full[i] = tgt[xs[0]];
|
|
60
|
+
else if (i >= xs[xs.length - 1])
|
|
61
|
+
full[i] = tgt[xs[xs.length - 1]];
|
|
62
|
+
else {
|
|
63
|
+
while (xs[q + 1] < i)
|
|
64
|
+
q++;
|
|
65
|
+
const a = xs[q], b = xs[q + 1];
|
|
66
|
+
full[i] = tgt[a] + ((tgt[b] - tgt[a]) * (i - a)) / (b - a);
|
|
67
|
+
}
|
|
61
68
|
}
|
|
62
|
-
|
|
63
|
-
return full;
|
|
69
|
+
return full;
|
|
64
70
|
}
|
|
65
71
|
function movingAverage(full, smooth) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return sm;
|
|
72
|
+
const n = full.length, h = smooth >> 1, sm = new Float64Array(n);
|
|
73
|
+
for (let i = 0; i < n; i++) {
|
|
74
|
+
let s = 0;
|
|
75
|
+
for (let j = -h; j <= h; j++)
|
|
76
|
+
s += full[Math.min(n - 1, Math.max(0, i + j))];
|
|
77
|
+
sm[i] = s / smooth;
|
|
78
|
+
}
|
|
79
|
+
return sm;
|
|
75
80
|
}
|
|
76
81
|
// the engine's F0 with the YomiScript's pitch values put in (frames without a value keep the engine's F0)
|
|
77
82
|
export function f0Override(f0, uid, dur, U, smooth = 5, dstep = 0.6) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
const fu = unitFrames(uid, dur, f0.length);
|
|
84
|
+
const tgt = anchorPhrases(frameTargets(fu, U, f0.length, dstep), f0, fu, U);
|
|
85
|
+
const xs = [];
|
|
86
|
+
for (let i = 0; i < f0.length; i++)
|
|
87
|
+
if (!isNaN(tgt[i]))
|
|
88
|
+
xs.push(i);
|
|
89
|
+
if (!xs.length)
|
|
90
|
+
return Float32Array.from(f0);
|
|
91
|
+
const sm = movingAverage(interpolate(tgt, xs), smooth);
|
|
92
|
+
return Float32Array.from(f0, (v, i) => (isNaN(tgt[i]) ? v : 2 ** (sm[i] / 12)));
|
|
85
93
|
}
|
|
86
94
|
const rms = (a) => Math.sqrt(a.reduce((s, v) => s + v * v, 0) / a.length);
|
|
87
95
|
function trim(a, lead = true, th = 0.01) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
let i0 = -1, i1 = -1;
|
|
97
|
+
for (let i = 0; i < a.length; i++)
|
|
98
|
+
if (Math.abs(a[i]) > th) {
|
|
99
|
+
if (i0 < 0)
|
|
100
|
+
i0 = i;
|
|
101
|
+
i1 = i;
|
|
102
|
+
}
|
|
103
|
+
if (i0 < 0)
|
|
104
|
+
return a;
|
|
105
|
+
return a.slice(lead ? Math.max(i0 - 240, 0) : 0, Math.min(a.length, i1 + 480));
|
|
97
106
|
}
|
|
98
107
|
// the audio of several sections as one: trimmed, level-matched, crossfaded, with a short gap
|
|
99
108
|
export function join(P) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
109
|
+
const tgt = rms(P[0]);
|
|
110
|
+
let out = Float32Array.from(trim(P[0], false));
|
|
111
|
+
const n = Math.round(0.015 * SR), gap = Math.round(0.06 * SR);
|
|
112
|
+
for (const p0 of P.slice(1)) {
|
|
113
|
+
const g = tgt / Math.max(rms(p0), 1e-6);
|
|
114
|
+
const p = Float32Array.from(trim(p0), (v) => v * g);
|
|
115
|
+
for (let i = 0; i < n && i < out.length; i++)
|
|
116
|
+
out[out.length - n + i] *= 1 - i / (n - 1);
|
|
117
|
+
for (let i = 0; i < n && i < p.length; i++)
|
|
118
|
+
p[i] *= i / (n - 1);
|
|
119
|
+
const o = new Float32Array(out.length + gap + p.length);
|
|
120
|
+
o.set(out);
|
|
121
|
+
o.set(p, out.length + gap);
|
|
122
|
+
out = o;
|
|
123
|
+
}
|
|
124
|
+
let mx = 0;
|
|
125
|
+
for (const v of out)
|
|
126
|
+
mx = Math.max(mx, Math.abs(v));
|
|
127
|
+
const k = Math.max(1, mx / 0.95);
|
|
128
|
+
return out.map((v) => v / k);
|
|
118
129
|
}
|
|
119
130
|
// 16-bit mono WAV
|
|
120
131
|
export function wav(a, sr = SR) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
return b;
|
|
132
|
+
const b = new ArrayBuffer(44 + a.length * 2), d = new DataView(b);
|
|
133
|
+
const w = (o, s) => [...s].forEach((c, i) => d.setUint8(o + i, c.charCodeAt(0)));
|
|
134
|
+
w(0, "RIFF");
|
|
135
|
+
d.setUint32(4, 36 + a.length * 2, true);
|
|
136
|
+
w(8, "WAVE");
|
|
137
|
+
w(12, "fmt ");
|
|
138
|
+
d.setUint32(16, 16, true);
|
|
139
|
+
d.setUint16(20, 1, true);
|
|
140
|
+
d.setUint16(22, 1, true);
|
|
141
|
+
d.setUint32(24, sr, true);
|
|
142
|
+
d.setUint32(28, sr * 2, true);
|
|
143
|
+
d.setUint16(32, 2, true);
|
|
144
|
+
d.setUint16(34, 16, true);
|
|
145
|
+
w(36, "data");
|
|
146
|
+
d.setUint32(40, a.length * 2, true);
|
|
147
|
+
a.forEach((v, i) => d.setInt16(44 + i * 2, Math.max(-1, Math.min(1, v)) * 32767, true));
|
|
148
|
+
return b;
|
|
139
149
|
}
|
|
140
|
-
//# sourceMappingURL=render.js.map
|
|
150
|
+
//# sourceMappingURL=render.js.map
|
package/package.json
CHANGED