@kongyo2/kongyoroid 1.0.0 → 2.0.0
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 +233 -0
- package/dist/cache.d.ts +32 -7
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +138 -9
- package/dist/cache.js.map +1 -1
- package/dist/cli/flags.d.ts +270 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +240 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/help.d.ts +11 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +336 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli.js +598 -232
- package/dist/cli.js.map +1 -1
- package/dist/errors.d.ts +43 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +56 -3
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +59 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -14
- package/dist/index.js.map +1 -1
- package/dist/io.d.ts +11 -0
- package/dist/io.d.ts.map +1 -1
- package/dist/io.js +149 -5
- package/dist/io.js.map +1 -1
- package/dist/kongyoroid.d.ts +237 -10
- package/dist/kongyoroid.d.ts.map +1 -1
- package/dist/kongyoroid.js +777 -86
- package/dist/kongyoroid.js.map +1 -1
- package/dist/limits.d.ts +5 -0
- package/dist/limits.d.ts.map +1 -1
- package/dist/limits.js +6 -1
- package/dist/limits.js.map +1 -1
- package/dist/request.d.ts +1 -0
- package/dist/request.d.ts.map +1 -1
- package/dist/request.js +102 -15
- package/dist/request.js.map +1 -1
- package/dist/schema.d.ts +3 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +271 -68
- package/dist/schema.js.map +1 -1
- package/dist/song/mml.d.ts +15 -0
- package/dist/song/mml.d.ts.map +1 -0
- package/dist/song/mml.js +184 -0
- package/dist/song/mml.js.map +1 -0
- package/dist/song/pitch.d.ts.map +1 -0
- package/dist/{pitch.js → song/pitch.js} +1 -1
- package/dist/song/pitch.js.map +1 -0
- package/dist/song/score.d.ts +92 -0
- package/dist/song/score.d.ts.map +1 -0
- package/dist/song/score.js +454 -0
- package/dist/song/score.js.map +1 -0
- package/dist/synth/acoustics.d.ts +27 -0
- package/dist/synth/acoustics.d.ts.map +1 -0
- package/dist/synth/acoustics.js +608 -0
- package/dist/synth/acoustics.js.map +1 -0
- package/dist/synth/analysis.d.ts +22 -0
- package/dist/synth/analysis.d.ts.map +1 -0
- package/dist/synth/analysis.js +170 -0
- package/dist/synth/analysis.js.map +1 -0
- package/dist/synth/engine.d.ts +115 -0
- package/dist/synth/engine.d.ts.map +1 -0
- package/dist/synth/engine.js +223 -0
- package/dist/synth/engine.js.map +1 -0
- package/dist/synth/filters.d.ts +60 -0
- package/dist/synth/filters.d.ts.map +1 -0
- package/dist/synth/filters.js +166 -0
- package/dist/synth/filters.js.map +1 -0
- package/dist/synth/glottal.d.ts +20 -0
- package/dist/synth/glottal.d.ts.map +1 -0
- package/dist/synth/glottal.js +76 -0
- package/dist/synth/glottal.js.map +1 -0
- package/dist/synth/phonemes.d.ts +42 -0
- package/dist/synth/phonemes.d.ts.map +1 -0
- package/dist/synth/phonemes.js +311 -0
- package/dist/synth/phonemes.js.map +1 -0
- package/dist/synth/plan.d.ts +127 -0
- package/dist/synth/plan.d.ts.map +1 -0
- package/dist/synth/plan.js +81 -0
- package/dist/synth/plan.js.map +1 -0
- package/dist/synth/prosody.d.ts +30 -0
- package/dist/synth/prosody.d.ts.map +1 -0
- package/dist/synth/prosody.js +46 -0
- package/dist/synth/prosody.js.map +1 -0
- package/dist/synth/random.d.ts +15 -0
- package/dist/synth/random.d.ts.map +1 -0
- package/dist/synth/random.js +59 -0
- package/dist/synth/random.js.map +1 -0
- package/dist/synth/renderer.d.ts +77 -0
- package/dist/synth/renderer.d.ts.map +1 -0
- package/dist/synth/renderer.js +343 -0
- package/dist/synth/renderer.js.map +1 -0
- package/dist/synth/song.d.ts +30 -0
- package/dist/synth/song.d.ts.map +1 -0
- package/dist/synth/song.js +453 -0
- package/dist/synth/song.js.map +1 -0
- package/dist/synth/speech.d.ts +49 -0
- package/dist/synth/speech.d.ts.map +1 -0
- package/dist/synth/speech.js +354 -0
- package/dist/synth/speech.js.map +1 -0
- package/dist/synth/stream.d.ts +26 -0
- package/dist/synth/stream.d.ts.map +1 -0
- package/dist/synth/stream.js +67 -0
- package/dist/synth/stream.js.map +1 -0
- package/dist/synth/textstream.d.ts +35 -0
- package/dist/synth/textstream.d.ts.map +1 -0
- package/dist/synth/textstream.js +127 -0
- package/dist/synth/textstream.js.map +1 -0
- package/dist/synth/voice.d.ts +64 -0
- package/dist/synth/voice.d.ts.map +1 -0
- package/dist/synth/voice.js +208 -0
- package/dist/synth/voice.js.map +1 -0
- package/dist/text/dictionary.d.ts +50 -0
- package/dist/text/dictionary.d.ts.map +1 -0
- package/dist/text/dictionary.js +0 -0
- package/dist/text/dictionary.js.map +1 -0
- package/dist/text/frontend.d.ts +34 -0
- package/dist/text/frontend.d.ts.map +1 -0
- package/dist/text/frontend.js +550 -0
- package/dist/text/frontend.js.map +1 -0
- package/dist/text/lexicon.d.ts +10 -0
- package/dist/text/lexicon.d.ts.map +1 -0
- package/dist/text/lexicon.js +763 -0
- package/dist/text/lexicon.js.map +1 -0
- package/dist/{mora.d.ts → text/mora.d.ts} +15 -3
- package/dist/text/mora.d.ts.map +1 -0
- package/dist/{mora.js → text/mora.js} +87 -9
- package/dist/text/mora.js.map +1 -0
- package/dist/text/normalize.d.ts +34 -0
- package/dist/text/normalize.d.ts.map +1 -0
- package/dist/text/normalize.js +496 -0
- package/dist/text/normalize.js.map +1 -0
- package/dist/text/notation.d.ts +32 -0
- package/dist/text/notation.d.ts.map +1 -0
- package/dist/text/notation.js +182 -0
- package/dist/text/notation.js.map +1 -0
- package/dist/text/reading.d.ts +52 -0
- package/dist/text/reading.d.ts.map +1 -0
- package/dist/text/reading.js +32 -0
- package/dist/text/reading.js.map +1 -0
- package/dist/text/sentences.d.ts +10 -0
- package/dist/text/sentences.d.ts.map +1 -0
- package/dist/text/sentences.js +84 -0
- package/dist/text/sentences.js.map +1 -0
- package/dist/{text.d.ts → text/split.d.ts} +2 -2
- package/dist/text/split.d.ts.map +1 -0
- package/dist/{text.js → text/split.js} +2 -2
- package/dist/text/split.js.map +1 -0
- package/dist/types.d.ts +58 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +4 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +5 -1
- package/dist/version.js.map +1 -1
- package/dist/voicevox/client.d.ts +1 -1
- package/dist/voicevox/client.d.ts.map +1 -1
- package/dist/voicevox/dictionary.js +1 -1
- package/dist/voicevox/dictionary.js.map +1 -1
- package/dist/voicevox/song.js +1 -1
- package/dist/voicevox/song.js.map +1 -1
- package/dist/voicevox/speech.d.ts +1 -0
- package/dist/voicevox/speech.d.ts.map +1 -1
- package/dist/voicevox/speech.js +8 -2
- package/dist/voicevox/speech.js.map +1 -1
- package/docs/cli.md +251 -0
- package/examples/batch.jsonl +4 -3
- package/examples/builtin/dictionary.json +7 -0
- package/examples/builtin/song-compact.json +13 -0
- package/examples/builtin/song-mml.json +9 -0
- package/examples/builtin/song-notes.json +25 -0
- package/examples/builtin/speech-dictionary.json +9 -0
- package/examples/builtin/speech-kana.json +7 -0
- package/examples/builtin/speech.json +7 -0
- package/package.json +11 -3
- package/dist/formant.d.ts +0 -34
- package/dist/formant.d.ts.map +0 -1
- package/dist/formant.js +0 -622
- package/dist/formant.js.map +0 -1
- package/dist/mora.d.ts.map +0 -1
- package/dist/mora.js.map +0 -1
- package/dist/notation.d.ts +0 -15
- package/dist/notation.d.ts.map +0 -1
- package/dist/notation.js +0 -114
- package/dist/notation.js.map +0 -1
- package/dist/pitch.d.ts.map +0 -1
- package/dist/pitch.js.map +0 -1
- package/dist/score.d.ts +0 -37
- package/dist/score.d.ts.map +0 -1
- package/dist/score.js +0 -166
- package/dist/score.js.map +0 -1
- package/dist/text.d.ts.map +0 -1
- package/dist/text.js.map +0 -1
- package/examples/song-notes.json +0 -24
- /package/dist/{pitch.d.ts → song/pitch.d.ts} +0 -0
- /package/examples/{song.json → voicevox/song.json} +0 -0
- /package/examples/{speech-kana.json → voicevox/speech-kana.json} +0 -0
- /package/examples/{speech.json → voicevox/speech.json} +0 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
export class Resonator {
|
|
2
|
+
a = 1;
|
|
3
|
+
b = 0;
|
|
4
|
+
c = 0;
|
|
5
|
+
y1 = 0;
|
|
6
|
+
y2 = 0;
|
|
7
|
+
frequency = 0;
|
|
8
|
+
bandwidth = 0;
|
|
9
|
+
tune(frequency, bandwidth, sampleRate) {
|
|
10
|
+
if (frequency === this.frequency && bandwidth === this.bandwidth)
|
|
11
|
+
return;
|
|
12
|
+
this.frequency = frequency;
|
|
13
|
+
this.bandwidth = bandwidth;
|
|
14
|
+
const limited = Math.min(frequency, sampleRate * 0.47);
|
|
15
|
+
const r = Math.exp((-Math.PI * bandwidth) / sampleRate);
|
|
16
|
+
this.c = -r * r;
|
|
17
|
+
this.b = 2 * r * Math.cos((2 * Math.PI * limited) / sampleRate);
|
|
18
|
+
this.a = 1 - this.b - this.c;
|
|
19
|
+
}
|
|
20
|
+
step(x) {
|
|
21
|
+
const y = this.a * x + this.b * this.y1 + this.c * this.y2;
|
|
22
|
+
this.y2 = this.y1;
|
|
23
|
+
this.y1 = y;
|
|
24
|
+
return y;
|
|
25
|
+
}
|
|
26
|
+
reset() {
|
|
27
|
+
this.y1 = 0;
|
|
28
|
+
this.y2 = 0;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class AntiResonator {
|
|
32
|
+
a = 1;
|
|
33
|
+
b = 0;
|
|
34
|
+
c = 0;
|
|
35
|
+
x1 = 0;
|
|
36
|
+
x2 = 0;
|
|
37
|
+
frequency = 0;
|
|
38
|
+
bandwidth = 0;
|
|
39
|
+
tune(frequency, bandwidth, sampleRate) {
|
|
40
|
+
if (frequency === this.frequency && bandwidth === this.bandwidth)
|
|
41
|
+
return;
|
|
42
|
+
this.frequency = frequency;
|
|
43
|
+
this.bandwidth = bandwidth;
|
|
44
|
+
const limited = Math.min(frequency, sampleRate * 0.47);
|
|
45
|
+
const r = Math.exp((-Math.PI * bandwidth) / sampleRate);
|
|
46
|
+
const c = -r * r;
|
|
47
|
+
const b = 2 * r * Math.cos((2 * Math.PI * limited) / sampleRate);
|
|
48
|
+
const a = 1 - b - c;
|
|
49
|
+
this.a = 1 / a;
|
|
50
|
+
this.b = -b / a;
|
|
51
|
+
this.c = -c / a;
|
|
52
|
+
}
|
|
53
|
+
step(x) {
|
|
54
|
+
const y = this.a * x + this.b * this.x1 + this.c * this.x2;
|
|
55
|
+
this.x2 = this.x1;
|
|
56
|
+
this.x1 = x;
|
|
57
|
+
return y;
|
|
58
|
+
}
|
|
59
|
+
reset() {
|
|
60
|
+
this.x1 = 0;
|
|
61
|
+
this.x2 = 0;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export class OnePole {
|
|
65
|
+
coefficient = 0;
|
|
66
|
+
y1 = 0;
|
|
67
|
+
setCutoff(hz, sampleRate) {
|
|
68
|
+
this.coefficient = Math.exp((-2 * Math.PI * hz) / sampleRate);
|
|
69
|
+
}
|
|
70
|
+
setTimeConstant(seconds, sampleRate) {
|
|
71
|
+
this.coefficient = seconds <= 0 ? 0 : Math.exp(-1 / (seconds * sampleRate));
|
|
72
|
+
}
|
|
73
|
+
step(x) {
|
|
74
|
+
this.y1 = x + this.coefficient * (this.y1 - x);
|
|
75
|
+
return this.y1;
|
|
76
|
+
}
|
|
77
|
+
get value() {
|
|
78
|
+
return this.y1;
|
|
79
|
+
}
|
|
80
|
+
reset(value = 0) {
|
|
81
|
+
this.y1 = value;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export class DcBlocker {
|
|
85
|
+
r;
|
|
86
|
+
x1 = 0;
|
|
87
|
+
y1 = 0;
|
|
88
|
+
constructor(cutoffHz, sampleRate) {
|
|
89
|
+
this.r = Math.exp((-2 * Math.PI * cutoffHz) / sampleRate);
|
|
90
|
+
}
|
|
91
|
+
step(x) {
|
|
92
|
+
const y = x - this.x1 + this.r * this.y1;
|
|
93
|
+
this.x1 = x;
|
|
94
|
+
this.y1 = y;
|
|
95
|
+
return y;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export class HighPass {
|
|
99
|
+
r;
|
|
100
|
+
x1 = 0;
|
|
101
|
+
y1 = 0;
|
|
102
|
+
constructor(cutoffHz, sampleRate) {
|
|
103
|
+
this.r = Math.exp((-2 * Math.PI * cutoffHz) / sampleRate);
|
|
104
|
+
}
|
|
105
|
+
step(x) {
|
|
106
|
+
const y = this.r * (this.y1 + x - this.x1);
|
|
107
|
+
this.x1 = x;
|
|
108
|
+
this.y1 = y;
|
|
109
|
+
return y;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export function smoothingCoefficient(tauSeconds, hopSamples, sampleRate) {
|
|
113
|
+
if (tauSeconds <= 0)
|
|
114
|
+
return 1;
|
|
115
|
+
return 1 - Math.exp(-hopSamples / (tauSeconds * sampleRate));
|
|
116
|
+
}
|
|
117
|
+
export class HalfBandDecimator {
|
|
118
|
+
taps;
|
|
119
|
+
history;
|
|
120
|
+
position = 0;
|
|
121
|
+
constructor(taps = 31) {
|
|
122
|
+
const coefficients = new Float64Array(taps);
|
|
123
|
+
const center = (taps - 1) / 2;
|
|
124
|
+
let sum = 0;
|
|
125
|
+
for (let index = 0; index < taps; index++) {
|
|
126
|
+
const n = index - center;
|
|
127
|
+
const sinc = n === 0 ? 0.5 : Math.sin((Math.PI * n) / 2) / (Math.PI * n);
|
|
128
|
+
const window = 0.42 - 0.5 * Math.cos((2 * Math.PI * index) / (taps - 1)) + 0.08 * Math.cos((4 * Math.PI * index) / (taps - 1));
|
|
129
|
+
coefficients[index] = sinc * window;
|
|
130
|
+
sum += sinc * window;
|
|
131
|
+
}
|
|
132
|
+
for (let index = 0; index < taps; index++)
|
|
133
|
+
coefficients[index] = (coefficients[index] ?? 0) / sum;
|
|
134
|
+
this.taps = coefficients;
|
|
135
|
+
this.history = new Float64Array(taps);
|
|
136
|
+
}
|
|
137
|
+
push(sample) {
|
|
138
|
+
this.history[this.position] = sample;
|
|
139
|
+
this.position = (this.position + 1) % this.history.length;
|
|
140
|
+
}
|
|
141
|
+
output() {
|
|
142
|
+
const length = this.history.length;
|
|
143
|
+
let acc = 0;
|
|
144
|
+
let index = this.position;
|
|
145
|
+
for (let k = 0; k < length; k++) {
|
|
146
|
+
index = index === 0 ? length - 1 : index - 1;
|
|
147
|
+
acc += (this.taps[k] ?? 0) * (this.history[index] ?? 0);
|
|
148
|
+
}
|
|
149
|
+
return acc;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export function dbToGain(db) {
|
|
153
|
+
return db <= -120 ? 0 : 10 ** (db / 20);
|
|
154
|
+
}
|
|
155
|
+
export function gainToDb(gain) {
|
|
156
|
+
return gain <= 0 ? -120 : 20 * Math.log10(gain);
|
|
157
|
+
}
|
|
158
|
+
export function softLimit(x, knee = 0.85) {
|
|
159
|
+
const magnitude = Math.abs(x);
|
|
160
|
+
if (magnitude <= knee)
|
|
161
|
+
return x;
|
|
162
|
+
const excess = (magnitude - knee) / (1 - knee);
|
|
163
|
+
const limited = knee + (1 - knee) * Math.tanh(excess);
|
|
164
|
+
return x < 0 ? -limited : limited;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/synth/filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface LfShape {
|
|
2
|
+
readonly te: number;
|
|
3
|
+
readonly tp: number;
|
|
4
|
+
readonly ta: number;
|
|
5
|
+
readonly alpha: number;
|
|
6
|
+
readonly epsilon: number;
|
|
7
|
+
readonly omega: number;
|
|
8
|
+
readonly e0: number;
|
|
9
|
+
readonly returnTail: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function rdToTimingRatios(rd: number): {
|
|
12
|
+
readonly ra: number;
|
|
13
|
+
readonly rk: number;
|
|
14
|
+
readonly rg: number;
|
|
15
|
+
};
|
|
16
|
+
export declare function solveLfShape(rd: number): LfShape;
|
|
17
|
+
export declare function lfDerivative(shape: LfShape, phase: number): number;
|
|
18
|
+
export declare function lfShapeFor(rd: number): LfShape;
|
|
19
|
+
export declare function lfOpenPhaseWeight(shape: LfShape, phase: number): number;
|
|
20
|
+
//# sourceMappingURL=glottal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glottal.d.ts","sourceRoot":"","sources":["../../src/synth/glottal.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAM9G;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAuChD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlE;AAKD,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAQ9C;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export function rdToTimingRatios(rd) {
|
|
2
|
+
const clamped = Math.min(2.7, Math.max(0.3, rd));
|
|
3
|
+
const ra = (-1 + 4.8 * clamped) / 100;
|
|
4
|
+
const rk = (22.4 + 11.8 * clamped) / 100;
|
|
5
|
+
const rg = rk / (4 * ((0.11 * clamped) / (0.5 + 1.2 * rk) - ra));
|
|
6
|
+
return { ra: Math.max(0.005, ra), rk, rg };
|
|
7
|
+
}
|
|
8
|
+
export function solveLfShape(rd) {
|
|
9
|
+
const { ra, rk, rg } = rdToTimingRatios(rd);
|
|
10
|
+
const tp = 1 / (2 * rg);
|
|
11
|
+
const te = tp * (1 + rk);
|
|
12
|
+
const ta = ra;
|
|
13
|
+
const tc = 1;
|
|
14
|
+
const omega = Math.PI / tp;
|
|
15
|
+
const tail = tc - te;
|
|
16
|
+
let epsilon = 1 / ta;
|
|
17
|
+
for (let iteration = 0; iteration < 60; iteration++) {
|
|
18
|
+
const next = (1 - Math.exp(-epsilon * tail)) / ta;
|
|
19
|
+
if (Math.abs(next - epsilon) < 1e-9 * Math.max(1, epsilon)) {
|
|
20
|
+
epsilon = next;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
epsilon = next;
|
|
24
|
+
}
|
|
25
|
+
const returnTail = Math.exp(-epsilon * tail);
|
|
26
|
+
const returnArea = (1 / (epsilon * ta)) * ((1 - returnTail) / epsilon - tail * returnTail);
|
|
27
|
+
const theta = omega * te;
|
|
28
|
+
const sinTheta = Math.sin(theta);
|
|
29
|
+
const cosTheta = Math.cos(theta);
|
|
30
|
+
const openArea = (alpha) => {
|
|
31
|
+
const expo = Math.exp(alpha * te);
|
|
32
|
+
const numerator = expo * (alpha * sinTheta - omega * cosTheta) + omega;
|
|
33
|
+
return -numerator / ((alpha * alpha + omega * omega) * expo * sinTheta);
|
|
34
|
+
};
|
|
35
|
+
let low = -200;
|
|
36
|
+
let high = 200;
|
|
37
|
+
let alpha = 0;
|
|
38
|
+
for (let iteration = 0; iteration < 100; iteration++) {
|
|
39
|
+
alpha = (low + high) / 2;
|
|
40
|
+
const value = openArea(alpha);
|
|
41
|
+
if (value > returnArea)
|
|
42
|
+
low = alpha;
|
|
43
|
+
else
|
|
44
|
+
high = alpha;
|
|
45
|
+
if (high - low < 1e-8)
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
const e0 = -1 / (Math.exp(alpha * te) * sinTheta);
|
|
49
|
+
return { te, tp, ta, alpha, epsilon, omega, e0, returnTail };
|
|
50
|
+
}
|
|
51
|
+
export function lfDerivative(shape, phase) {
|
|
52
|
+
if (phase < shape.te) {
|
|
53
|
+
return shape.e0 * Math.exp(shape.alpha * phase) * Math.sin(shape.omega * phase);
|
|
54
|
+
}
|
|
55
|
+
const tail = Math.exp(-shape.epsilon * (phase - shape.te));
|
|
56
|
+
return -(tail - shape.returnTail) / (shape.epsilon * shape.ta);
|
|
57
|
+
}
|
|
58
|
+
const SHAPE_CACHE_STEPS = 48;
|
|
59
|
+
const shapeCache = new Array(SHAPE_CACHE_STEPS + 1).fill(undefined);
|
|
60
|
+
export function lfShapeFor(rd) {
|
|
61
|
+
const clamped = Math.min(2.7, Math.max(0.3, rd));
|
|
62
|
+
const slot = Math.round(((clamped - 0.3) / 2.4) * SHAPE_CACHE_STEPS);
|
|
63
|
+
const cached = shapeCache[slot];
|
|
64
|
+
if (cached !== undefined)
|
|
65
|
+
return cached;
|
|
66
|
+
const shape = solveLfShape(0.3 + (slot / SHAPE_CACHE_STEPS) * 2.4);
|
|
67
|
+
shapeCache[slot] = shape;
|
|
68
|
+
return shape;
|
|
69
|
+
}
|
|
70
|
+
export function lfOpenPhaseWeight(shape, phase) {
|
|
71
|
+
if (phase >= shape.te)
|
|
72
|
+
return 0;
|
|
73
|
+
const rise = shape.tp;
|
|
74
|
+
return phase < rise ? phase / rise : 1 - (phase - rise) / (shape.te - rise);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=glottal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glottal.js","sourceRoot":"","sources":["../../src/synth/glottal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Consonant, Phoneme, Vowel } from "../text/mora.ts";
|
|
2
|
+
export type PhonemeKind = "vowel" | "devoiced" | "nasal" | "moraic-nasal" | "stop" | "fricative" | "affricate" | "glide" | "flap" | "closure" | "silence";
|
|
3
|
+
export interface FricationSpec {
|
|
4
|
+
readonly f1: number;
|
|
5
|
+
readonly bw1: number;
|
|
6
|
+
readonly g1: number;
|
|
7
|
+
readonly f2: number;
|
|
8
|
+
readonly bw2: number;
|
|
9
|
+
readonly g2: number;
|
|
10
|
+
readonly hp: number;
|
|
11
|
+
}
|
|
12
|
+
export interface PhonemeSpec {
|
|
13
|
+
readonly kind: PhonemeKind;
|
|
14
|
+
readonly voiced: boolean;
|
|
15
|
+
readonly f: readonly [number, number, number];
|
|
16
|
+
readonly bw: readonly [number, number, number];
|
|
17
|
+
readonly av: number;
|
|
18
|
+
readonly duration: number;
|
|
19
|
+
readonly locus: readonly [number, number, number] | null;
|
|
20
|
+
readonly transition: number;
|
|
21
|
+
readonly fric: FricationSpec | null;
|
|
22
|
+
readonly af: number;
|
|
23
|
+
readonly closure: number;
|
|
24
|
+
readonly burst: number;
|
|
25
|
+
readonly aspiration: number;
|
|
26
|
+
readonly palatal: boolean;
|
|
27
|
+
readonly labial: boolean;
|
|
28
|
+
readonly nasalZero: number;
|
|
29
|
+
}
|
|
30
|
+
export declare const PHONEMES: Readonly<Record<Phoneme, PhonemeSpec>>;
|
|
31
|
+
export declare const VOWEL_PHONEMES: readonly Vowel[];
|
|
32
|
+
export declare function isVowelPhoneme(phoneme: Phoneme): phoneme is "a" | "i" | "u" | "e" | "o";
|
|
33
|
+
export declare function isConsonantPhoneme(phoneme: Phoneme): phoneme is Consonant;
|
|
34
|
+
export declare function isVoicedSustain(phoneme: Phoneme): boolean;
|
|
35
|
+
export declare const VOICELESS_CONSONANTS: ReadonlySet<Phoneme>;
|
|
36
|
+
export type MoraicNasalPlace = "bilabial" | "alveolar" | "velar" | "uvular";
|
|
37
|
+
export declare function moraicNasalPlace(next: Phoneme | undefined): MoraicNasalPlace;
|
|
38
|
+
export declare const MORAIC_NASAL_TARGETS: Readonly<Record<MoraicNasalPlace, {
|
|
39
|
+
readonly f: readonly [number, number, number];
|
|
40
|
+
readonly zero: number;
|
|
41
|
+
}>>;
|
|
42
|
+
//# sourceMappingURL=phonemes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phonemes.d.ts","sourceRoot":"","sources":["../../src/synth/phonemes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEjE,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,UAAU,GACV,OAAO,GACP,cAAc,GACd,MAAM,GACN,WAAW,GACX,WAAW,GACX,OAAO,GACP,MAAM,GACN,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAyOD,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CA8C3D,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,SAAS,KAAK,EAA8B,CAAC;AAE1E,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAEvF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,SAAS,CAGzE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAGzD;AAED,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,OAAO,CAepD,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,gBAAgB,CAkC5E;AAED,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CACzC,MAAM,CAAC,gBAAgB,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAMnG,CAAC"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
const NO_FRIC = null;
|
|
2
|
+
function vowel(f, duration = 0.1) {
|
|
3
|
+
return {
|
|
4
|
+
kind: "vowel",
|
|
5
|
+
voiced: true,
|
|
6
|
+
f,
|
|
7
|
+
bw: [70, 100, 160],
|
|
8
|
+
av: 0,
|
|
9
|
+
duration,
|
|
10
|
+
locus: null,
|
|
11
|
+
transition: 0.05,
|
|
12
|
+
fric: NO_FRIC,
|
|
13
|
+
af: -120,
|
|
14
|
+
closure: 0,
|
|
15
|
+
burst: 0,
|
|
16
|
+
aspiration: 0,
|
|
17
|
+
palatal: false,
|
|
18
|
+
labial: false,
|
|
19
|
+
nasalZero: 0,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function devoiced(base) {
|
|
23
|
+
return { ...base, kind: "devoiced", voiced: false, av: -120, duration: 0.06, bw: [150, 220, 300] };
|
|
24
|
+
}
|
|
25
|
+
function nasal(f, zero, duration, kind = "nasal") {
|
|
26
|
+
return {
|
|
27
|
+
kind,
|
|
28
|
+
voiced: true,
|
|
29
|
+
f,
|
|
30
|
+
bw: [110, 260, 320],
|
|
31
|
+
av: -10,
|
|
32
|
+
duration,
|
|
33
|
+
locus: [f[0], f[1], f[2]],
|
|
34
|
+
transition: 0.035,
|
|
35
|
+
fric: NO_FRIC,
|
|
36
|
+
af: -120,
|
|
37
|
+
closure: 0,
|
|
38
|
+
burst: 0,
|
|
39
|
+
aspiration: 0,
|
|
40
|
+
palatal: false,
|
|
41
|
+
labial: false,
|
|
42
|
+
nasalZero: zero,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function stop(locus, fric, voiced, closure, burst, aspiration, af) {
|
|
46
|
+
return {
|
|
47
|
+
kind: "stop",
|
|
48
|
+
voiced,
|
|
49
|
+
f: locus,
|
|
50
|
+
bw: [120, 160, 220],
|
|
51
|
+
av: voiced ? -16 : -120,
|
|
52
|
+
duration: closure + burst + aspiration,
|
|
53
|
+
locus,
|
|
54
|
+
transition: 0.035,
|
|
55
|
+
fric,
|
|
56
|
+
af,
|
|
57
|
+
closure,
|
|
58
|
+
burst,
|
|
59
|
+
aspiration,
|
|
60
|
+
palatal: false,
|
|
61
|
+
labial: false,
|
|
62
|
+
nasalZero: 0,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function fricative(locus, fric, voiced, duration, af, kind = "fricative", closure = 0) {
|
|
66
|
+
return {
|
|
67
|
+
kind,
|
|
68
|
+
voiced,
|
|
69
|
+
f: locus,
|
|
70
|
+
bw: [120, 160, 220],
|
|
71
|
+
av: voiced ? -9 : -120,
|
|
72
|
+
duration,
|
|
73
|
+
locus,
|
|
74
|
+
transition: 0.04,
|
|
75
|
+
fric,
|
|
76
|
+
af,
|
|
77
|
+
closure,
|
|
78
|
+
burst: 0,
|
|
79
|
+
aspiration: 0,
|
|
80
|
+
palatal: false,
|
|
81
|
+
labial: false,
|
|
82
|
+
nasalZero: 0,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function glide(f, duration) {
|
|
86
|
+
return {
|
|
87
|
+
kind: "glide",
|
|
88
|
+
voiced: true,
|
|
89
|
+
f,
|
|
90
|
+
bw: [90, 130, 200],
|
|
91
|
+
av: -2.5,
|
|
92
|
+
duration,
|
|
93
|
+
locus: f,
|
|
94
|
+
transition: 0.045,
|
|
95
|
+
fric: NO_FRIC,
|
|
96
|
+
af: -120,
|
|
97
|
+
closure: 0,
|
|
98
|
+
burst: 0,
|
|
99
|
+
aspiration: 0,
|
|
100
|
+
palatal: false,
|
|
101
|
+
labial: false,
|
|
102
|
+
nasalZero: 0,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
const FRIC_S = { f1: 6200, bw1: 1300, g1: 1, f2: 8600, bw2: 2200, g2: 0.55, hp: 3200 };
|
|
106
|
+
const FRIC_SH = { f1: 3300, bw1: 650, g1: 1, f2: 4900, bw2: 1300, g2: 0.5, hp: 1800 };
|
|
107
|
+
const FRIC_HY = { f1: 3600, bw1: 800, g1: 1, f2: 5200, bw2: 1400, g2: 0.4, hp: 2400 };
|
|
108
|
+
const FRIC_F = { f1: 1300, bw1: 1000, g1: 1, f2: 3800, bw2: 2200, g2: 0.45, hp: 500 };
|
|
109
|
+
const FRIC_H = { f1: 1200, bw1: 900, g1: 1, f2: 2600, bw2: 1400, g2: 0.6, hp: 300 };
|
|
110
|
+
const BURST_K = { f1: 1700, bw1: 600, g1: 1, f2: 2700, bw2: 900, g2: 0.7, hp: 500 };
|
|
111
|
+
const BURST_KY = { f1: 3000, bw1: 700, g1: 1, f2: 4000, bw2: 1000, g2: 0.6, hp: 900 };
|
|
112
|
+
const BURST_T = { f1: 4200, bw1: 1600, g1: 1, f2: 6200, bw2: 2200, g2: 0.7, hp: 1500 };
|
|
113
|
+
const BURST_P = { f1: 900, bw1: 800, g1: 1, f2: 2200, bw2: 1800, g2: 0.45, hp: 200 };
|
|
114
|
+
const A = vowel([700, 1150, 2450]);
|
|
115
|
+
const I = vowel([290, 2250, 3000]);
|
|
116
|
+
const U = vowel([320, 1250, 2250]);
|
|
117
|
+
const E = vowel([480, 1850, 2500]);
|
|
118
|
+
const O = vowel([480, 800, 2400]);
|
|
119
|
+
const SILENCE = {
|
|
120
|
+
kind: "silence",
|
|
121
|
+
voiced: false,
|
|
122
|
+
f: [500, 1500, 2500],
|
|
123
|
+
bw: [200, 200, 200],
|
|
124
|
+
av: -120,
|
|
125
|
+
duration: 0.08,
|
|
126
|
+
locus: null,
|
|
127
|
+
transition: 0.02,
|
|
128
|
+
fric: NO_FRIC,
|
|
129
|
+
af: -120,
|
|
130
|
+
closure: 0,
|
|
131
|
+
burst: 0,
|
|
132
|
+
aspiration: 0,
|
|
133
|
+
palatal: false,
|
|
134
|
+
labial: false,
|
|
135
|
+
nasalZero: 0,
|
|
136
|
+
};
|
|
137
|
+
const CLOSURE = { ...SILENCE, kind: "closure", duration: 0.09 };
|
|
138
|
+
const K = stop([250, 1800, 2400], BURST_K, false, 0.05, 0.012, 0.028, 6);
|
|
139
|
+
const G = stop([220, 1800, 2400], BURST_K, true, 0.042, 0.01, 0.008, 3);
|
|
140
|
+
const T = stop([250, 1750, 2650], BURST_T, false, 0.045, 0.01, 0.022, 5);
|
|
141
|
+
const D = stop([220, 1750, 2650], BURST_T, true, 0.04, 0.009, 0.006, 2);
|
|
142
|
+
const P = stop([250, 850, 2300], BURST_P, false, 0.055, 0.01, 0.015, 2);
|
|
143
|
+
const B = stop([220, 850, 2300], BURST_P, true, 0.045, 0.009, 0.005, -2);
|
|
144
|
+
const S = fricative([300, 1750, 2650], FRIC_S, false, 0.095, 0);
|
|
145
|
+
const SH = fricative([280, 2100, 2800], FRIC_SH, false, 0.095, 4.5);
|
|
146
|
+
const Z = fricative([260, 1750, 2650], FRIC_S, true, 0.078, -6, "fricative", 0.02);
|
|
147
|
+
const J = fricative([260, 2100, 2800], FRIC_SH, true, 0.08, -1, "affricate", 0.03);
|
|
148
|
+
const CH = fricative([280, 2100, 2800], FRIC_SH, false, 0.1, 4.5, "affricate", 0.04);
|
|
149
|
+
const TS = fricative([300, 1750, 2650], FRIC_S, false, 0.1, 0, "affricate", 0.04);
|
|
150
|
+
const H = fricative([450, 1400, 2500], FRIC_H, false, 0.07, -8);
|
|
151
|
+
const HY = fricative([300, 2200, 2900], FRIC_HY, false, 0.075, 3);
|
|
152
|
+
const F = fricative([320, 1100, 2300], FRIC_F, false, 0.08, 7);
|
|
153
|
+
const V = fricative([300, 1100, 2300], FRIC_F, true, 0.065, 1);
|
|
154
|
+
const N_ALVEOLAR = nasal([270, 1450, 2350], 1500, 0.055);
|
|
155
|
+
const M = nasal([260, 1050, 2200], 1000, 0.06);
|
|
156
|
+
const Y = glide([260, 2200, 2900], 0.05);
|
|
157
|
+
const W = glide([300, 720, 2250], 0.05);
|
|
158
|
+
const R = {
|
|
159
|
+
kind: "flap",
|
|
160
|
+
voiced: true,
|
|
161
|
+
f: [380, 1450, 2400],
|
|
162
|
+
bw: [100, 140, 220],
|
|
163
|
+
av: -8,
|
|
164
|
+
duration: 0.03,
|
|
165
|
+
locus: [380, 1450, 2400],
|
|
166
|
+
transition: 0.02,
|
|
167
|
+
fric: NO_FRIC,
|
|
168
|
+
af: -120,
|
|
169
|
+
closure: 0,
|
|
170
|
+
burst: 0,
|
|
171
|
+
aspiration: 0,
|
|
172
|
+
palatal: false,
|
|
173
|
+
labial: false,
|
|
174
|
+
nasalZero: 0,
|
|
175
|
+
};
|
|
176
|
+
function palatal(base, fric) {
|
|
177
|
+
const locus = base.locus === null
|
|
178
|
+
? [base.f[0], Math.max(base.f[1], 2100), Math.max(base.f[2], 2900)]
|
|
179
|
+
: [base.locus[0], Math.max(base.locus[1], 2100), Math.max(base.locus[2], 2900)];
|
|
180
|
+
return {
|
|
181
|
+
...base,
|
|
182
|
+
f: locus,
|
|
183
|
+
locus,
|
|
184
|
+
palatal: true,
|
|
185
|
+
duration: base.duration + 0.02,
|
|
186
|
+
...(fric === undefined ? {} : { fric }),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
function labial(base) {
|
|
190
|
+
const locus = base.locus === null
|
|
191
|
+
? [base.f[0], Math.min(base.f[1], 900), base.f[2]]
|
|
192
|
+
: [base.locus[0], Math.min(base.locus[1], 900), base.locus[2]];
|
|
193
|
+
return { ...base, f: locus, locus, labial: true, duration: base.duration + 0.02 };
|
|
194
|
+
}
|
|
195
|
+
export const PHONEMES = {
|
|
196
|
+
a: A,
|
|
197
|
+
i: I,
|
|
198
|
+
u: U,
|
|
199
|
+
e: E,
|
|
200
|
+
o: O,
|
|
201
|
+
A: devoiced(A),
|
|
202
|
+
I: devoiced(I),
|
|
203
|
+
U: devoiced(U),
|
|
204
|
+
E: devoiced(E),
|
|
205
|
+
O: devoiced(O),
|
|
206
|
+
N: nasal([280, 1200, 2300], 1200, 0.09, "moraic-nasal"),
|
|
207
|
+
cl: CLOSURE,
|
|
208
|
+
pau: SILENCE,
|
|
209
|
+
k: K,
|
|
210
|
+
ky: palatal(K, BURST_KY),
|
|
211
|
+
kw: labial(K),
|
|
212
|
+
g: G,
|
|
213
|
+
gy: palatal(G, { ...BURST_KY, g1: 0.8 }),
|
|
214
|
+
gw: labial(G),
|
|
215
|
+
t: T,
|
|
216
|
+
ty: palatal(T),
|
|
217
|
+
d: D,
|
|
218
|
+
dy: palatal(D),
|
|
219
|
+
p: P,
|
|
220
|
+
py: palatal(P),
|
|
221
|
+
b: B,
|
|
222
|
+
by: palatal(B),
|
|
223
|
+
s: S,
|
|
224
|
+
sh: SH,
|
|
225
|
+
z: Z,
|
|
226
|
+
j: J,
|
|
227
|
+
ch: CH,
|
|
228
|
+
ts: TS,
|
|
229
|
+
h: H,
|
|
230
|
+
hy: HY,
|
|
231
|
+
f: F,
|
|
232
|
+
v: V,
|
|
233
|
+
n: N_ALVEOLAR,
|
|
234
|
+
ny: palatal(N_ALVEOLAR),
|
|
235
|
+
m: M,
|
|
236
|
+
my: palatal(M),
|
|
237
|
+
r: R,
|
|
238
|
+
ry: palatal(R),
|
|
239
|
+
y: Y,
|
|
240
|
+
w: W,
|
|
241
|
+
};
|
|
242
|
+
export const VOWEL_PHONEMES = ["a", "i", "u", "e", "o"];
|
|
243
|
+
export function isVowelPhoneme(phoneme) {
|
|
244
|
+
return phoneme === "a" || phoneme === "i" || phoneme === "u" || phoneme === "e" || phoneme === "o";
|
|
245
|
+
}
|
|
246
|
+
export function isConsonantPhoneme(phoneme) {
|
|
247
|
+
const kind = PHONEMES[phoneme].kind;
|
|
248
|
+
return kind !== "vowel" && kind !== "devoiced" && kind !== "moraic-nasal" && kind !== "closure" && kind !== "silence";
|
|
249
|
+
}
|
|
250
|
+
export function isVoicedSustain(phoneme) {
|
|
251
|
+
const kind = PHONEMES[phoneme].kind;
|
|
252
|
+
return kind === "vowel" || kind === "nasal" || kind === "moraic-nasal" || kind === "glide";
|
|
253
|
+
}
|
|
254
|
+
export const VOICELESS_CONSONANTS = new Set([
|
|
255
|
+
"k",
|
|
256
|
+
"ky",
|
|
257
|
+
"kw",
|
|
258
|
+
"s",
|
|
259
|
+
"sh",
|
|
260
|
+
"t",
|
|
261
|
+
"ty",
|
|
262
|
+
"ch",
|
|
263
|
+
"ts",
|
|
264
|
+
"h",
|
|
265
|
+
"hy",
|
|
266
|
+
"f",
|
|
267
|
+
"p",
|
|
268
|
+
"py",
|
|
269
|
+
]);
|
|
270
|
+
export function moraicNasalPlace(next) {
|
|
271
|
+
switch (next) {
|
|
272
|
+
case "m":
|
|
273
|
+
case "my":
|
|
274
|
+
case "p":
|
|
275
|
+
case "py":
|
|
276
|
+
case "b":
|
|
277
|
+
case "by":
|
|
278
|
+
return "bilabial";
|
|
279
|
+
case "n":
|
|
280
|
+
case "ny":
|
|
281
|
+
case "t":
|
|
282
|
+
case "ty":
|
|
283
|
+
case "d":
|
|
284
|
+
case "dy":
|
|
285
|
+
case "r":
|
|
286
|
+
case "ry":
|
|
287
|
+
case "s":
|
|
288
|
+
case "sh":
|
|
289
|
+
case "z":
|
|
290
|
+
case "j":
|
|
291
|
+
case "ch":
|
|
292
|
+
case "ts":
|
|
293
|
+
return "alveolar";
|
|
294
|
+
case "k":
|
|
295
|
+
case "ky":
|
|
296
|
+
case "kw":
|
|
297
|
+
case "g":
|
|
298
|
+
case "gy":
|
|
299
|
+
case "gw":
|
|
300
|
+
return "velar";
|
|
301
|
+
default:
|
|
302
|
+
return "uvular";
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
export const MORAIC_NASAL_TARGETS = {
|
|
306
|
+
bilabial: { f: [260, 1050, 2200], zero: 1000 },
|
|
307
|
+
alveolar: { f: [270, 1450, 2350], zero: 1500 },
|
|
308
|
+
velar: { f: [280, 1900, 2500], zero: 2300 },
|
|
309
|
+
uvular: { f: [280, 1150, 2300], zero: 1200 },
|
|
310
|
+
};
|
|
311
|
+
//# sourceMappingURL=phonemes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phonemes.js","sourceRoot":"","sources":["../../src/synth/phonemes.ts"],"names":[],"mappings":"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"}
|