@yomiscript/kokoro 0.1.0 → 0.1.2

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 CHANGED
@@ -4,7 +4,10 @@ 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. A
9
+ moraic `ɴ` before a mora without an onset (千円あれば) is spoken 1.5 times and that vowel 1.25 times as long as
10
+ Kokoro predicts, which otherwise runs them together (`lengthen`, D30; none with `original`).
8
11
  - `Engine(ort, loadBytes)`: the ONNX engine, for onnxruntime-web (browser; `W16`, fp16 weights) or onnxruntime-node
9
12
  (`FP32`, identical to the original). `nodeEngine({ dir, model, download })` from `@yomiscript/kokoro/node`; with `download: KOKORO_MODELS_URL`, missing
10
13
  files are downloaded into `dir` once.
package/dist/engine.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { InferenceSession, Tensor } from "onnxruntime-common";
2
2
  import { type Plan, type PlannedSection } from "./plan.ts";
3
- import type { LoadBytes } from "@yomiscript/core";
3
+ import { type LoadBytes } from "@yomiscript/core";
4
4
  export type { LoadBytes };
5
5
  /** the parts of onnxruntime this engine uses (onnxruntime-web and onnxruntime-node both have them) */
6
6
  export interface Ort {
@@ -49,5 +49,7 @@ export declare class Engine {
49
49
  f0new: Float32Array;
50
50
  dur: number[];
51
51
  }>;
52
+ /** the F0 the decoder gets: the YomiScript's values put into the engine's own (Japanese: render_ja.ts, D28) */
53
+ private pitch;
52
54
  synth(ys: string, pitch?: PitchMode): Promise<Synthesis>;
53
55
  }
package/dist/engine.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { plan } from "./plan.js";
2
2
  import { f0Override, join } from "./render.js";
3
+ import { f0Japanese } from "./render_ja.js";
4
+ import { isJa } from "@yomiscript/core";
3
5
  export const FP32 = {}, W16 = { enc: "_w16", f0n: "_w16", dec: "_w16" };
4
6
  export class Engine {
5
7
  V = {};
@@ -45,7 +47,7 @@ export class Engine {
45
47
  const k = (sec.ps ?? "x".repeat(L - 1)).length - 1; // voice-pack entry as in KPipeline: pack[len(ps)-1]
46
48
  const ref = new T("float32", V.slice(k * 256, (k + 1) * 256), [1, 256]);
47
49
  const r1 = await this.enc.run({ ids: new T("int64", BigInt64Array.from(sec.ids.map(BigInt)), [1, L]), ref });
48
- const dur = Array.from(r1.dur.data, Number);
50
+ const dur = Array.from(r1.dur.data, Number).map((d, i) => Math.round(d * (sec.lengthen[sec.uid[i]] ?? 1)));
49
51
  const Tn = dur.reduce((a, b) => a + b, 0);
50
52
  const expand = (t) => {
51
53
  const C = t.dims[1], src = t.data, out = new Float32Array(C * Tn);
@@ -65,10 +67,16 @@ export class Engine {
65
67
  async synthSection(sec, pitch = "values") {
66
68
  const T = this.ort.Tensor;
67
69
  const { ref, dur, t_en, f0, N } = await this.predict(sec);
68
- const F = pitch === "engine" ? Float32Array.from(f0) : f0Override(f0, sec.uid, dur, sec.U);
70
+ const F = pitch === "engine" ? Float32Array.from(f0) : this.pitch(sec, f0, dur);
69
71
  const r3 = await this.dec.run({ asr: t_en, F0: new T("float32", F, [1, F.length]), N, ref });
70
72
  return { audio: Float32Array.from(r3.audio.data), f0: Float32Array.from(f0), f0new: F, dur };
71
73
  }
74
+ /** the F0 the decoder gets: the YomiScript's values put into the engine's own (Japanese: render_ja.ts, D28) */
75
+ pitch(sec, f0, dur) {
76
+ if (!isJa(sec.lang))
77
+ return f0Override(f0, sec.uid, dur, sec.U);
78
+ return f0Japanese(f0, sec.uid, dur, sec.U, sec.toks.map((t) => t.kind === "unit"));
79
+ }
72
80
  async synth(ys, pitch = "values") {
73
81
  const P = plan(ys);
74
82
  const outs = [];
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/dist/plan.d.ts CHANGED
@@ -8,15 +8,21 @@ export interface PlannedSection {
8
8
  lang: string;
9
9
  text: string;
10
10
  voice: string;
11
- /** the phoneme string the original Kokoro would get */
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) */
15
15
  uid: number[];
16
16
  U: PlanUnit[];
17
17
  toks: Token[];
18
+ /** how much longer each unit is spoken than Kokoro predicts (1: as predicted; D30) */
19
+ lengthen: number[];
18
20
  }
19
21
  export type Plan = PlannedSection[] & {
20
22
  src: string;
21
23
  };
22
- export declare function plan(ys: string): Plan;
24
+ export interface PlanOptions {
25
+ /** Japanese punctuation as the original Kokoro gets it (D22), for the parity checks */
26
+ original?: boolean;
27
+ }
28
+ 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) writes them: 。 and 、 leave only the word space
168
- if (t.kind === "space" || t.kind === "pause")
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")
@@ -199,8 +202,24 @@ export function voiceFor(top, l, x) {
199
202
  return voiceOf(l);
200
203
  return `${voiceOf(top)}+${voiceOf(l)}@${BLEND}`;
201
204
  }
205
+ /** a moraic ɴ before a mora without an onset (千円あれば, 原因, 恋愛), and that vowel: Kokoro runs them together */
206
+ const N_BEFORE_VOWEL = 1.5, VOWEL_AFTER_N = 1.25;
207
+ function lengthening(toks, ja) {
208
+ // per unit (D30); none outside Japanese or for the original
209
+ const out = toks.map(() => 1);
210
+ if (!ja)
211
+ return out;
212
+ toks.forEach((t, k) => {
213
+ const n = toks[k + 1];
214
+ if (t.kind !== "unit" || t.mk !== "N" || n?.kind !== "unit" || n.mk !== "mora" || n.on)
215
+ return;
216
+ out[k] = N_BEFORE_VOWEL;
217
+ out[k + 1] = VOWEL_AFTER_N;
218
+ });
219
+ return out;
220
+ }
202
221
  // plan: sections with Kokoro ids + units (no ONNX); used for parity tests and synthesis
203
- export function plan(ys) {
222
+ export function plan(ys, opts = {}) {
204
223
  const Y = parse(ys);
205
224
  const P = Y.sections.map((sec) => {
206
225
  const foreign = isJa(sec.lang) && !isJa(Y.top);
@@ -208,7 +227,7 @@ export function plan(ys) {
208
227
  for (const t of sec.toks) {
209
228
  if (t.kind === "bound")
210
229
  continue;
211
- U.push([kokoroPhonemes(sec.lang, t, foreign), t.kind === "unit" && t.f0 ? [...t.f0] : null, t.ph]);
230
+ U.push([kokoroPhonemes(sec.lang, t, foreign, opts.original ?? false), t.kind === "unit" && t.f0 ? [...t.f0] : null, t.ph]);
212
231
  toks.push(t);
213
232
  }
214
233
  const ids = [0], uid = [-1];
@@ -222,7 +241,8 @@ export function plan(ys) {
222
241
  ids.push(0);
223
242
  uid.push(-1);
224
243
  const ps = U.map((u) => u[0]).join("");
225
- return { lang: sec.lang, text: sec.text, voice: voiceFor(Y.top, sec.lang, sec.text), ps, ids, uid, U, toks };
244
+ const lengthen = lengthening(toks, isJa(sec.lang) && !opts.original);
245
+ return { lang: sec.lang, text: sec.text, voice: voiceFor(Y.top, sec.lang, sec.text), ps, ids, uid, U, toks, lengthen };
226
246
  });
227
247
  return Object.assign(P, { src: Y.ys });
228
248
  }
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
- // 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++) fu.push(uid[l]);
10
- });
11
- fu.length = Math.min(fu.length, n);
12
- return fu;
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
- // a unit's contour c (points spread evenly) at position x in [0, 1]
16
- if (c.length === 1) return c[0];
17
- const pos = x * (c.length - 1),
18
- a = Math.min(Math.floor(pos), c.length - 2);
19
- return c[a] + (c[a + 1] - c[a]) * (pos - a);
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
- // semitone target per frame from the units' values, lowered by dstep per phrase (declination)
23
- const st = new Float64Array(n).fill(NaN);
24
- U.forEach(([, c, ph], k) => {
25
- if (c === null) return;
26
- const fr = [];
27
- for (let i = 0; i < fu.length; i++) if (fu[i] === k) fr.push(i);
28
- fr.forEach((i, j) => (st[i] = valueAt(c, fr.length > 1 ? j / (fr.length - 1) : 0) - dstep * ph));
29
- });
30
- return st;
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
- // values are relative: each phrase keeps its shape and takes the mean level of the engine's own F0 there
34
- const n = f0.length,
35
- lo = Array.from(f0, (v) => Math.log2(Math.max(v, 1)) * 12);
36
- const phr = Array.from({ length: n }, (_, i) => (i < fu.length && fu[i] >= 0 ? U[fu[i]][2] : -1));
37
- const ok = Array.from({ length: n }, (_, i) => !isNaN(st[i]) && f0[i] > 60);
38
- const tgt = new Float64Array(n).fill(NaN);
39
- for (const ph of new Set(phr.filter((_, i) => ok[i]))) {
40
- const sel = [];
41
- for (let i = 0; i < n; i++) if (ok[i] && phr[i] === ph) sel.push(i);
42
- const ms = mean(sel.map((i) => st[i])),
43
- ml = mean(sel.map((i) => lo[i]));
44
- for (const i of sel) tgt[i] = st[i] - ms + ml;
45
- }
46
- return tgt;
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
- // fill the frames between targets linearly, and hold the first / last target outside them
50
- const n = tgt.length,
51
- full = new Float64Array(n);
52
- let q = 0;
53
- for (let i = 0; i < n; i++) {
54
- if (i <= xs[0]) full[i] = tgt[xs[0]];
55
- else if (i >= xs[xs.length - 1]) full[i] = tgt[xs[xs.length - 1]];
56
- else {
57
- while (xs[q + 1] < i) q++;
58
- const a = xs[q],
59
- b = xs[q + 1];
60
- full[i] = tgt[a] + ((tgt[b] - tgt[a]) * (i - a)) / (b - a);
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
- const n = full.length,
67
- h = smooth >> 1,
68
- sm = new Float64Array(n);
69
- for (let i = 0; i < n; i++) {
70
- let s = 0;
71
- for (let j = -h; j <= h; j++) s += full[Math.min(n - 1, Math.max(0, i + j))];
72
- sm[i] = s / smooth;
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
- const fu = unitFrames(uid, dur, f0.length);
79
- const tgt = anchorPhrases(frameTargets(fu, U, f0.length, dstep), f0, fu, U);
80
- const xs = [];
81
- for (let i = 0; i < f0.length; i++) if (!isNaN(tgt[i])) xs.push(i);
82
- if (!xs.length) return Float32Array.from(f0);
83
- const sm = movingAverage(interpolate(tgt, xs), smooth);
84
- return Float32Array.from(f0, (v, i) => (isNaN(tgt[i]) ? v : 2 ** (sm[i] / 12)));
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
- let i0 = -1,
89
- i1 = -1;
90
- for (let i = 0; i < a.length; i++)
91
- if (Math.abs(a[i]) > th) {
92
- if (i0 < 0) i0 = i;
93
- i1 = i;
94
- }
95
- if (i0 < 0) return a;
96
- return a.slice(lead ? Math.max(i0 - 240, 0) : 0, Math.min(a.length, i1 + 480));
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
- const tgt = rms(P[0]);
101
- let out = Float32Array.from(trim(P[0], false));
102
- const n = Math.round(0.015 * SR),
103
- gap = Math.round(0.06 * SR);
104
- for (const p0 of P.slice(1)) {
105
- const g = tgt / Math.max(rms(p0), 1e-6);
106
- const p = Float32Array.from(trim(p0), (v) => v * g);
107
- for (let i = 0; i < n && i < out.length; i++) out[out.length - n + i] *= 1 - i / (n - 1);
108
- for (let i = 0; i < n && i < p.length; i++) p[i] *= i / (n - 1);
109
- const o = new Float32Array(out.length + gap + p.length);
110
- o.set(out);
111
- o.set(p, out.length + gap);
112
- out = o;
113
- }
114
- let mx = 0;
115
- for (const v of out) mx = Math.max(mx, Math.abs(v));
116
- const k = Math.max(1, mx / 0.95);
117
- return out.map((v) => v / k);
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
- const b = new ArrayBuffer(44 + a.length * 2),
122
- d = new DataView(b);
123
- const w = (o, s) => [...s].forEach((c, i) => d.setUint8(o + i, c.charCodeAt(0)));
124
- w(0, "RIFF");
125
- d.setUint32(4, 36 + a.length * 2, true);
126
- w(8, "WAVE");
127
- w(12, "fmt ");
128
- d.setUint32(16, 16, true);
129
- d.setUint16(20, 1, true);
130
- d.setUint16(22, 1, true);
131
- d.setUint32(24, sr, true);
132
- d.setUint32(28, sr * 2, true);
133
- d.setUint16(32, 2, true);
134
- d.setUint16(34, 16, true);
135
- w(36, "data");
136
- d.setUint32(40, a.length * 2, true);
137
- a.forEach((v, i) => d.setInt16(44 + i * 2, Math.max(-1, Math.min(1, v)) * 32767, true));
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
@@ -0,0 +1,3 @@
1
+ import type { PlanUnit } from "./plan.ts";
2
+ /** the engine's F0 with the Japanese section's values put in (isMora: which units are morae) */
3
+ export declare function f0Japanese(f0: ArrayLike<number>, uid: number[], dur: number[], U: PlanUnit[], isMora: boolean[], smooth?: number): Float32Array;
@@ -0,0 +1,84 @@
1
+ function charFrames(dur) {
2
+ // the F0 frames of each id (2 frames per duration step)
3
+ const out = [];
4
+ let t = 0;
5
+ for (const d of dur) {
6
+ out.push([t, t + d * 2]);
7
+ t += d * 2;
8
+ }
9
+ return out;
10
+ }
11
+ function voicedSpan(f0, a, b) {
12
+ // the voiced frames of [a, b), or all of it when none is (a final mora's duration also covers the silence after it)
13
+ let va = -1, vb = -1;
14
+ for (let i = a; i < Math.min(b, f0.length); i++)
15
+ if (f0[i] > 60) {
16
+ if (va < 0)
17
+ va = i;
18
+ vb = i + 1;
19
+ }
20
+ return va < 0 ? [a, b] : [va, vb];
21
+ }
22
+ function points(f0, uid, dur, U, isMora) {
23
+ const fr = charFrames(dur), P = [];
24
+ let run = 0;
25
+ U.forEach(([, c], k) => {
26
+ if (!c) {
27
+ if (isMora[k])
28
+ run++;
29
+ return;
30
+ }
31
+ const idx = uid.flatMap((u, l) => (u === k ? [l] : []));
32
+ if (!idx.length)
33
+ return;
34
+ const [a, b] = voicedSpan(f0, fr[idx[0]][0], fr[idx[idx.length - 1]][1]), vs = c.length === 1 ? [c[0], c[0]] : c;
35
+ vs.forEach((v, j) => P.push({ x: Math.min(f0.length - 1, a + 0.5 + ((b - a - 1) * j) / (vs.length - 1)), v, run }));
36
+ });
37
+ return P;
38
+ }
39
+ function targets(P, n, shift) {
40
+ // straight lines between the points of a run, the first / last value held before / after them; NaN between runs
41
+ const tgt = new Float64Array(n).fill(NaN);
42
+ let q = 0;
43
+ for (let i = 0; i < n; i++) {
44
+ while (q < P.length - 2 && P[q + 1].x < i)
45
+ q++;
46
+ const [p, r] = [P[q], P[q + 1] ?? P[q]];
47
+ if (i <= P[0].x)
48
+ tgt[i] = P[0].v;
49
+ else if (i >= P[P.length - 1].x)
50
+ tgt[i] = P[P.length - 1].v;
51
+ else if (p.run === r.run)
52
+ tgt[i] = p.v + ((r.v - p.v) * (i - p.x)) / Math.max(r.x - p.x, 1e-6);
53
+ tgt[i] += shift;
54
+ }
55
+ return tgt;
56
+ }
57
+ function smoothed(tgt, smooth) {
58
+ // a triangular window of `smooth` frames over the frames that have a target
59
+ const n = tgt.length, h = smooth >> 1, out = new Float64Array(n).fill(NaN);
60
+ for (let i = 0; i < n; i++) {
61
+ if (isNaN(tgt[i]))
62
+ continue;
63
+ let s = 0, w = 0;
64
+ for (let j = -h; j <= h; j++) {
65
+ const v = tgt[Math.min(n - 1, Math.max(0, i + j))];
66
+ if (!isNaN(v))
67
+ [s, w] = [s + (h + 1 - Math.abs(j)) * v, w + h + 1 - Math.abs(j)];
68
+ }
69
+ out[i] = s / w;
70
+ }
71
+ return out;
72
+ }
73
+ /** the engine's F0 with the Japanese section's values put in (isMora: which units are morae) */
74
+ export function f0Japanese(f0, uid, dur, U, isMora, smooth = 7) {
75
+ const P = points(f0, uid, dur, U, isMora);
76
+ if (!P.length)
77
+ return Float32Array.from(f0);
78
+ // the level: the engine's mean at the voiced points against the values' mean
79
+ const at = P.filter((p) => f0[Math.round(p.x)] > 60), st = (v) => Math.log2(Math.max(v, 1)) * 12, mean = (a) => a.reduce((s, v) => s + v, 0) / Math.max(a.length, 1);
80
+ const shift = mean(at.map((p) => st(f0[Math.round(p.x)]))) - mean(P.map((p) => p.v));
81
+ const sm = smoothed(targets(P, f0.length, shift), smooth);
82
+ return Float32Array.from(f0, (v, i) => (v > 60 && !isNaN(sm[i]) ? 2 ** (sm[i] / 12) : v));
83
+ }
84
+ //# sourceMappingURL=render_ja.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render_ja.js","sourceRoot":"","sources":["../src/render_ja.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yomiscript/kokoro",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Kokoro-82M Katarite: YomiScript -> Kokoro input -> audio (onnxruntime-web w16 in the browser, onnxruntime-node fp32 in Node)",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -35,7 +35,7 @@
35
35
  "prepack": "yarn --cwd ../.. build && node ../../tools/prepack.mjs"
36
36
  },
37
37
  "dependencies": {
38
- "@yomiscript/core": "^0.1.0",
38
+ "@yomiscript/core": "^0.1.2",
39
39
  "onnxruntime-common": "1.22.0"
40
40
  },
41
41
  "peerDependencies": {