@reins-ai/voice 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/LICENSE +1 -1
- package/dist/cli.js +20 -14
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -3
- package/dist/config.js.map +1 -1
- package/dist/ear.d.ts +24 -9
- package/dist/ear.d.ts.map +1 -1
- package/dist/ear.js +24 -23
- package/dist/ear.js.map +1 -1
- package/dist/speak.d.ts +4 -1
- package/dist/speak.d.ts.map +1 -1
- package/dist/speak.js +14 -11
- package/dist/speak.js.map +1 -1
- package/dist/speech-check.d.ts.map +1 -1
- package/dist/speech-check.js +4 -2
- package/dist/speech-check.js.map +1 -1
- package/dist/stdout-guard.js +4 -2
- package/dist/stdout-guard.js.map +1 -1
- package/dist/stt.d.ts +4 -1
- package/dist/stt.d.ts.map +1 -1
- package/dist/stt.js +9 -6
- package/dist/stt.js.map +1 -1
- package/dist/turn.d.ts +4 -1
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +4 -2
- package/dist/turn.js.map +1 -1
- package/dist/vad.d.ts +1 -1
- package/dist/vad.d.ts.map +1 -1
- package/dist/vad.js +1 -2
- package/dist/vad.js.map +1 -1
- package/package.json +1 -1
package/LICENSE
CHANGED
package/dist/cli.js
CHANGED
|
@@ -20,7 +20,7 @@ catch (error) {
|
|
|
20
20
|
console.error(error.message);
|
|
21
21
|
process.exit(1);
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
/** --setup prepares everything for the first conversation and exits without starting the server. */
|
|
24
24
|
if (config.setup) {
|
|
25
25
|
console.error('Preparing the voice (the first time it downloads about 300 MB)…');
|
|
26
26
|
const ok = await runSetup(setupSteps(config));
|
|
@@ -35,20 +35,24 @@ if (process.platform === 'win32' && !device) {
|
|
|
35
35
|
process.exit(1);
|
|
36
36
|
}
|
|
37
37
|
console.error(`Microphone: ${device ?? 'system default'}`);
|
|
38
|
-
|
|
38
|
+
/** Whisper loads in the background: the server answers right away and listen waits for the model if needed. */
|
|
39
39
|
const transcriber = createWhisper({ model: config.model, language: config.language, cacheDir: config.cacheDir, device: config.device, log });
|
|
40
40
|
transcriber.then(() => console.error(`Whisper ready (${config.model}, ${config.device})`), (error) => console.error(`No puedo cargar Whisper: ${error.message}`));
|
|
41
|
-
|
|
41
|
+
/** Silero VAD (2 MB) separates human voice from noise before Whisper, in any language. */
|
|
42
42
|
const speechCheck = createSileroCheck({ cacheDir: config.dataDir });
|
|
43
43
|
speechCheck.then(() => console.error('Voice detector ready (Silero VAD)'), (error) => console.error(`No voice detector (Silero): ${error.message}`));
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
/**
|
|
45
|
+
* Smart Turn (8 MB) tells at every 0.3 s pause whether the user has finished, so there is no need to wait for 1.5 s of
|
|
46
|
+
* silence.
|
|
47
|
+
*/
|
|
46
48
|
const turnCheck = createTurnCheck({ cacheDir: config.dataDir });
|
|
47
49
|
turnCheck.then(() => console.error('End-of-turn detector ready (Smart Turn)'), (error) => console.error(`No end-of-turn detector (Smart Turn): ${error.message}`));
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Piper gives a natural voice, with the system voice as a fallback. Piper and the voice download in the background at
|
|
52
|
+
* startup.
|
|
53
|
+
*/
|
|
50
54
|
const system = createSpeaker({ lang: config.language });
|
|
51
|
-
|
|
55
|
+
/** The ear gets what is about to play, to tell the AI's echo from the voice of a user who interrupts it. */
|
|
52
56
|
const piper = config.tts === 'piper' ? createPiperSpeaker({ ...config, dataDir: config.dataDir, onLevel: (level, at, first) => ear?.playing(level, at, first) }) : undefined;
|
|
53
57
|
piper?.warm();
|
|
54
58
|
const speaker = async (text, language, signal) => {
|
|
@@ -66,10 +70,16 @@ const speaker = async (text, language, signal) => {
|
|
|
66
70
|
await system(text, language, signal);
|
|
67
71
|
log(`[voice] system · ${language ?? 'no language'} · ${Date.now() - started} ms · «${text}»`);
|
|
68
72
|
};
|
|
69
|
-
|
|
73
|
+
/** Speaking does not block: the AI keeps working while it plays, and each sentence waits for the previous one. */
|
|
70
74
|
const say = speechQueue(speaker, (error) => log(`[voice] could not speak: ${error.message}`));
|
|
71
|
-
|
|
75
|
+
/** The ear starts on the first listen, so the microphone only opens when there is a conversation. */
|
|
72
76
|
let ear;
|
|
77
|
+
/**
|
|
78
|
+
* The MCP server with `listen`, `speak` and `stop`. A short tone plays when a user sentence closes, so the user knows
|
|
79
|
+
* they were heard while the AI thinks, and the AI goes quiet at once when the user talks over it. `speak` returns right
|
|
80
|
+
* away (or, with `wait`, when playback ends) so the sentence plays while the AI goes on; the microphone stays open and
|
|
81
|
+
* the ear discards the echo of what is being said until playback ends.
|
|
82
|
+
*/
|
|
73
83
|
const server = createVoiceServer({
|
|
74
84
|
listen: async () => {
|
|
75
85
|
ear ??= new Ear({
|
|
@@ -77,9 +87,7 @@ const server = createVoiceServer({
|
|
|
77
87
|
transcriber: await transcriber,
|
|
78
88
|
speechCheck: await speechCheck.catch(() => undefined),
|
|
79
89
|
turnCheck: await turnCheck.catch(() => undefined),
|
|
80
|
-
// A short tone when a user sentence closes, so the user knows they were heard while the AI thinks.
|
|
81
90
|
onPhrase: createChime(config.ffplay),
|
|
82
|
-
// The user talks over the AI: it goes quiet at once.
|
|
83
91
|
onBargeIn: () => say.cancel(),
|
|
84
92
|
log,
|
|
85
93
|
});
|
|
@@ -87,8 +95,6 @@ const server = createVoiceServer({
|
|
|
87
95
|
},
|
|
88
96
|
stop: () => ear?.stop(),
|
|
89
97
|
interrupt: () => ear?.interrupt(),
|
|
90
|
-
// Returns right away (or, with wait, when playback ends) so the sentence plays while the AI goes on. The
|
|
91
|
-
// microphone stays open; the ear knows what is being said to discard its echo until playback ends.
|
|
92
98
|
speak: async (text, language, wait) => {
|
|
93
99
|
const done = ear?.saying(text);
|
|
94
100
|
const finished = say(text, language).finally(() => done?.());
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAoB,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAgB,WAAW,EAAE,MAAM,YAAY,CAAC;AACvG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,IAAI,MAAmB,CAAC;AACxB,IAAI,CAAC;IACH,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -23,8 +23,8 @@ export interface VoiceConfig {
|
|
|
23
23
|
setup: boolean;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
* Parses the command line. Throws an Error with the reason when an argument is invalid.
|
|
27
|
-
*
|
|
26
|
+
* Parses the command line. Throws an Error with the reason when an argument is invalid. When only `--ffmpeg` is given,
|
|
27
|
+
* `ffplay` is looked for next to it, since it ships with ffmpeg.
|
|
28
28
|
* @example
|
|
29
29
|
* parseConfig(['--language', 'es', '--verbose']);
|
|
30
30
|
*/
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwC,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAEpF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,MAAM,EAAE,aAAa,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,GAAG,EAAE,OAAO,GAAG,QAAQ,CAAC;IACxB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,OAAO,EAAE,OAAO,CAAC;IACjB,+FAA+F;IAC/F,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwC,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAEpF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,MAAM,EAAE,aAAa,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,GAAG,EAAE,OAAO,GAAG,QAAQ,CAAC;IACxB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,OAAO,EAAE,OAAO,CAAC;IACjB,+FAA+F;IAC/F,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAyCvD"}
|
package/dist/config.js
CHANGED
|
@@ -3,8 +3,8 @@ import { basename, dirname, join } from 'node:path';
|
|
|
3
3
|
import { parseArgs } from 'node:util';
|
|
4
4
|
import { DEFAULT_WHISPER_MODEL, defaultDevice } from './stt.js';
|
|
5
5
|
/**
|
|
6
|
-
* Parses the command line. Throws an Error with the reason when an argument is invalid.
|
|
7
|
-
*
|
|
6
|
+
* Parses the command line. Throws an Error with the reason when an argument is invalid. When only `--ffmpeg` is given,
|
|
7
|
+
* `ffplay` is looked for next to it, since it ships with ffmpeg.
|
|
8
8
|
* @example
|
|
9
9
|
* parseConfig(['--language', 'es', '--verbose']);
|
|
10
10
|
*/
|
|
@@ -43,7 +43,6 @@ export function parseConfig(args) {
|
|
|
43
43
|
tts: values.tts ?? 'piper',
|
|
44
44
|
...(values.voice ? { voice: values.voice } : {}),
|
|
45
45
|
ffmpeg,
|
|
46
|
-
// ffplay ships with ffmpeg, so it sits next to a given ffmpeg.
|
|
47
46
|
ffplay: values.ffplay ?? (values.ffmpeg ? join(dirname(ffmpeg), basename(ffmpeg).replace(/ffmpeg/i, 'ffplay')) : 'ffplay'),
|
|
48
47
|
cacheDir: join(dataDir, 'models'),
|
|
49
48
|
dataDir,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAsB,MAAM,UAAU,CAAC;AA0BpF;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC3B,IAAI;QACJ,OAAO,EAAE;YACP,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC3B;KACF,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,IAAI,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAClF,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,GAAG,wBAAwB,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,QAAQ,sCAAsC,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACtF,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,MAAM,mBAAmB,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAC;IACnD,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,qBAAqB;QAC5C,MAAM,EAAG,MAAM,CAAC,MAAoC,IAAI,aAAa,EAAE;QACvE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,EAAG,MAAM,CAAC,GAAsC,IAAI,OAAO;QAC9D,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/ear.d.ts
CHANGED
|
@@ -107,10 +107,14 @@ export declare class Ear {
|
|
|
107
107
|
private interruptedAI;
|
|
108
108
|
constructor(options: EarOptions);
|
|
109
109
|
/**
|
|
110
|
-
* Everything the user said since the last call, whole: waits for them to stop talking and for the rest to
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
110
|
+
* Everything the user said since the last call, whole: waits for them to stop talking and for the rest to be
|
|
111
|
+
* transcribed. It never gets stuck with endless background voice (a TV, a video): with something already understood,
|
|
112
|
+
* it returns at most SETTLE_MS later, and after maxWaitMs it returns whatever there is (or nothing). Anything still
|
|
113
|
+
* playing is not lost: it goes to the next listen.
|
|
114
|
+
*
|
|
115
|
+
* If another tool interrupts it, it returns without consuming what was heard, which is kept for the next listen. If
|
|
116
|
+
* the AI does not listen again soon, the conversation is over and the microphone closes. The AI is told it was cut off
|
|
117
|
+
* once, even if what cut it off never became a sentence.
|
|
114
118
|
*/
|
|
115
119
|
next(maxWaitMs?: number): Promise<string>;
|
|
116
120
|
/**
|
|
@@ -130,23 +134,34 @@ export declare class Ear {
|
|
|
130
134
|
interrupt(): void;
|
|
131
135
|
/** Ends the conversation: closes the microphone and clears everything pending. */
|
|
132
136
|
stop(): void;
|
|
137
|
+
/** If the microphone closes by itself, the next listen opens it again. */
|
|
133
138
|
private open;
|
|
139
|
+
/**
|
|
140
|
+
* No noise is learned while the AI talks: after a minute of reading, its echo passed for noise and the user's "stop"
|
|
141
|
+
* no longer crossed the threshold.
|
|
142
|
+
*/
|
|
134
143
|
private onAudio;
|
|
135
144
|
/**
|
|
136
|
-
* The user talks over the AI: it goes quiet, and the user's sentence starts here (what came before was the
|
|
137
|
-
*
|
|
145
|
+
* The user talks over the AI: it goes quiet, and the user's sentence starts here (what came before was the AI's
|
|
146
|
+
* voice, which the echo filter would discard along with the user's words).
|
|
138
147
|
*/
|
|
139
148
|
private bargeIn;
|
|
140
149
|
/**
|
|
141
|
-
* 0.3 s pause: Smart Turn tells whether the user has finished. If so and they are still quiet, the sentence
|
|
142
|
-
*
|
|
150
|
+
* 0.3 s pause: Smart Turn tells whether the user has finished. If so and they are still quiet, the sentence closes
|
|
151
|
+
* now instead of after 1.5 s. If they started talking again meanwhile, the answer is ignored. While the AI talks,
|
|
152
|
+
* what is heard is almost always its echo: the sentence closes when it stops talking.
|
|
143
153
|
*/
|
|
144
154
|
private checkTurn;
|
|
145
155
|
/** Closes the current sentence and prepares the next one; the detector keeps the room noise level. */
|
|
146
156
|
private endUtterance;
|
|
147
157
|
private log;
|
|
148
158
|
private aiSpeaking;
|
|
149
|
-
/**
|
|
159
|
+
/**
|
|
160
|
+
* Sentences are transcribed in order, one after another. A sentence that started while the AI was talking is almost
|
|
161
|
+
* always its echo, and is dropped if nearly all its words are the AI's, however short. If it is not the echo, the user
|
|
162
|
+
* is talking over the AI (their "stop" was not in what the AI said): this is the second way to cut the AI off, in case
|
|
163
|
+
* the microphone level check did not fire.
|
|
164
|
+
*/
|
|
150
165
|
private transcribe;
|
|
151
166
|
/**
|
|
152
167
|
* With fewer than `minWords` words it is never echo (a user's "yes"); 1 for what started while the AI was
|
package/dist/ear.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ear.d.ts","sourceRoot":"","sources":["../src/ear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAU,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAO,OAAO,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAiB,KAAK,UAAU,EAAiB,MAAM,UAAU,CAAC;AAEzE,eAAO,MAAM,WAAW,QAAS,CAAC;AAClC;;GAEG;AACH,eAAO,MAAM,cAAc,QAAS,CAAC;AACrC,yFAAyF;AACzF,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,mFAAmF;AACnF,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC;;GAEG;AACH,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,kGAAkG;AAClG,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC;;GAEG;AACH,eAAO,MAAM,SAAS,OAAQ,CAAC;AAC/B;;;GAGG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B;;;GAGG;AACH,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AAMxC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C;;;GAGG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAS7C;;GAEG;AACH,eAAO,MAAM,WAAW,uDAAuD,CAAC;AAchF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAgBD;;;;;GAKG;AACH,qBAAa,GAAG;IA+BF,OAAO,CAAC,QAAQ,CAAC,OAAO;IA9BpC,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAmB;IACnC;;;OAGG;IACH,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAc;IAC1B,oEAAoE;IACpE,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,OAAO,CAAK;IACpB,gEAAgE;IAChE,OAAO,CAAC,UAAU,CAAK;IACvB,kGAAkG;IAClG,OAAO,CAAC,WAAW,CAAK;IACxB,gGAAgG;IAChG,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,IAAI,CAAkB;IAC9B,8FAA8F;IAC9F,OAAO,CAAC,aAAa,CAAS;IAC9B,kEAAkE;IAClE,OAAO,CAAC,aAAa,CAAS;gBAED,OAAO,EAAE,UAAU;IAIhD
|
|
1
|
+
{"version":3,"file":"ear.d.ts","sourceRoot":"","sources":["../src/ear.ts"],"names":[],"mappings":"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"}
|
package/dist/ear.js
CHANGED
|
@@ -116,10 +116,14 @@ export class Ear {
|
|
|
116
116
|
this.vad = new VoiceDetector(options.vad);
|
|
117
117
|
}
|
|
118
118
|
/**
|
|
119
|
-
* Everything the user said since the last call, whole: waits for them to stop talking and for the rest to
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
119
|
+
* Everything the user said since the last call, whole: waits for them to stop talking and for the rest to be
|
|
120
|
+
* transcribed. It never gets stuck with endless background voice (a TV, a video): with something already understood,
|
|
121
|
+
* it returns at most SETTLE_MS later, and after maxWaitMs it returns whatever there is (or nothing). Anything still
|
|
122
|
+
* playing is not lost: it goes to the next listen.
|
|
123
|
+
*
|
|
124
|
+
* If another tool interrupts it, it returns without consuming what was heard, which is kept for the next listen. If
|
|
125
|
+
* the AI does not listen again soon, the conversation is over and the microphone closes. The AI is told it was cut off
|
|
126
|
+
* once, even if what cut it off never became a sentence.
|
|
123
127
|
*/
|
|
124
128
|
async next(maxWaitMs = MAX_WAIT_MS) {
|
|
125
129
|
clearTimeout(this.idleTimer);
|
|
@@ -143,11 +147,8 @@ export class Ear {
|
|
|
143
147
|
}
|
|
144
148
|
clearTimeout(timer);
|
|
145
149
|
clearTimeout(settleTimer);
|
|
146
|
-
// Another tool interrupted it: it returns without consuming what was heard, which is kept for the next
|
|
147
|
-
// listen.
|
|
148
150
|
if (interrupts !== this.interrupts)
|
|
149
151
|
return '';
|
|
150
|
-
// If the AI does not listen again soon, the conversation is over and the microphone does not stay open.
|
|
151
152
|
this.idleTimer = setTimeout(() => this.stop(), IDLE_CLOSE_MS);
|
|
152
153
|
if (this.failure) {
|
|
153
154
|
const reason = this.failure;
|
|
@@ -156,7 +157,6 @@ export class Ear {
|
|
|
156
157
|
}
|
|
157
158
|
let text = this.heard.map((h) => h.text).join(' ');
|
|
158
159
|
this.heard = [];
|
|
159
|
-
// The AI is told it was cut off once, even if what cut it off never became a sentence.
|
|
160
160
|
if (text && this.interruptedAI)
|
|
161
161
|
text = `${INTERRUPTED} ${text}`;
|
|
162
162
|
this.interruptedAI = false;
|
|
@@ -206,13 +206,13 @@ export class Ear {
|
|
|
206
206
|
this.vad = new VoiceDetector(this.options.vad);
|
|
207
207
|
this.wake();
|
|
208
208
|
}
|
|
209
|
+
/** If the microphone closes by itself, the next listen opens it again. */
|
|
209
210
|
open() {
|
|
210
211
|
if (this.mic)
|
|
211
212
|
return;
|
|
212
213
|
const mic = this.options.openMic();
|
|
213
214
|
this.mic = mic;
|
|
214
215
|
mic.onData((chunk) => this.onAudio(chunk));
|
|
215
|
-
// If the microphone closes by itself, the next listen opens it again.
|
|
216
216
|
mic.onExit((reason) => {
|
|
217
217
|
if (this.mic !== mic)
|
|
218
218
|
return;
|
|
@@ -221,6 +221,10 @@ export class Ear {
|
|
|
221
221
|
this.wake();
|
|
222
222
|
});
|
|
223
223
|
}
|
|
224
|
+
/**
|
|
225
|
+
* No noise is learned while the AI talks: after a minute of reading, its echo passed for noise and the user's "stop"
|
|
226
|
+
* no longer crossed the threshold.
|
|
227
|
+
*/
|
|
224
228
|
onAudio(chunk) {
|
|
225
229
|
if (!this.mic)
|
|
226
230
|
return;
|
|
@@ -234,8 +238,6 @@ export class Ear {
|
|
|
234
238
|
if (this.aiSpeaking() && this.gate.mic(rms(frame), Date.now(), this.vad.threshold))
|
|
235
239
|
this.bargeIn();
|
|
236
240
|
const was = this.speaking;
|
|
237
|
-
// No noise is learned while the AI talks: after a minute of reading, its echo passed for noise and the user's
|
|
238
|
-
// "stop" no longer crossed the threshold.
|
|
239
241
|
const state = this.vad.push(frame, !this.aiSpeaking());
|
|
240
242
|
this.speaking = state === 'speaking';
|
|
241
243
|
if (this.speaking && !was)
|
|
@@ -248,8 +250,8 @@ export class Ear {
|
|
|
248
250
|
this.leftover = bytes.subarray(offset);
|
|
249
251
|
}
|
|
250
252
|
/**
|
|
251
|
-
* The user talks over the AI: it goes quiet, and the user's sentence starts here (what came before was the
|
|
252
|
-
*
|
|
253
|
+
* The user talks over the AI: it goes quiet, and the user's sentence starts here (what came before was the AI's
|
|
254
|
+
* voice, which the echo filter would discard along with the user's words).
|
|
253
255
|
*/
|
|
254
256
|
bargeIn() {
|
|
255
257
|
this.log('the user is talking: cutting the AI off');
|
|
@@ -260,19 +262,18 @@ export class Ear {
|
|
|
260
262
|
said.until = Date.now() + ECHO_WINDOW_MS;
|
|
261
263
|
}
|
|
262
264
|
this.interruptedAI = true;
|
|
263
|
-
// From here on, the current sentence belongs to the user.
|
|
264
265
|
this.startedWithAI = false;
|
|
265
266
|
if (this.vad.current === 'speaking')
|
|
266
267
|
this.vad.keepLast(BARGE_KEEP_FRAMES);
|
|
267
268
|
this.options.onBargeIn?.();
|
|
268
269
|
}
|
|
269
270
|
/**
|
|
270
|
-
* 0.3 s pause: Smart Turn tells whether the user has finished. If so and they are still quiet, the sentence
|
|
271
|
-
*
|
|
271
|
+
* 0.3 s pause: Smart Turn tells whether the user has finished. If so and they are still quiet, the sentence closes
|
|
272
|
+
* now instead of after 1.5 s. If they started talking again meanwhile, the answer is ignored. While the AI talks,
|
|
273
|
+
* what is heard is almost always its echo: the sentence closes when it stops talking.
|
|
272
274
|
*/
|
|
273
275
|
checkTurn() {
|
|
274
276
|
const turnCheck = this.options.turnCheck;
|
|
275
|
-
// While the AI talks, what is heard is almost always its echo: the sentence closes when it stops talking.
|
|
276
277
|
if (!turnCheck || this.checkingTurn || this.vad.voicedMs < MIN_TURN_VOICED_MS || this.aiSpeaking())
|
|
277
278
|
return;
|
|
278
279
|
this.checkingTurn = true;
|
|
@@ -312,7 +313,12 @@ export class Ear {
|
|
|
312
313
|
aiSpeaking() {
|
|
313
314
|
return this.said.some((said) => said.until === Infinity);
|
|
314
315
|
}
|
|
315
|
-
/**
|
|
316
|
+
/**
|
|
317
|
+
* Sentences are transcribed in order, one after another. A sentence that started while the AI was talking is almost
|
|
318
|
+
* always its echo, and is dropped if nearly all its words are the AI's, however short. If it is not the echo, the user
|
|
319
|
+
* is talking over the AI (their "stop" was not in what the AI said): this is the second way to cut the AI off, in case
|
|
320
|
+
* the microphone level check did not fire.
|
|
321
|
+
*/
|
|
316
322
|
transcribe(audio, fromUser, voiced = Infinity, audioMs = Infinity) {
|
|
317
323
|
const generation = this.generation;
|
|
318
324
|
this.pending++;
|
|
@@ -327,8 +333,6 @@ export class Ear {
|
|
|
327
333
|
return this.log(`dropped (the microphone closed meanwhile): «${text}»`);
|
|
328
334
|
if (!text)
|
|
329
335
|
return this.log('Whisper returned no text');
|
|
330
|
-
// What started while the AI was talking is almost always its echo: it is dropped if nearly all its words are
|
|
331
|
-
// the AI's, however short.
|
|
332
336
|
if (this.isEcho(text, fromUser ? ECHO_MIN_WORDS : 1))
|
|
333
337
|
return this.log(`AI echo dropped: «${text}»`);
|
|
334
338
|
if (isRepetition(text))
|
|
@@ -337,9 +341,6 @@ export class Ear {
|
|
|
337
341
|
return this.log(`AI echo leftover dropped (${voiced} ms of voice in ${audioMs} ms): «${text}»`);
|
|
338
342
|
this.log(`heard: «${text}»`);
|
|
339
343
|
if (!fromUser) {
|
|
340
|
-
// It started while the AI was talking but is not its echo: the user is talking over it (their "stop" was not
|
|
341
|
-
// in what the AI said). This is the second way to cut the AI off, in case the microphone level check did not
|
|
342
|
-
// fire.
|
|
343
344
|
this.log('the user talked over the AI (by what they said)');
|
|
344
345
|
if (this.aiSpeaking())
|
|
345
346
|
this.bargeIn();
|
package/dist/ear.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ear.js","sourceRoot":"","sources":["../src/ear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,MAAM,UAAU,CAAC;AAI5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAkB,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzE,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC;AAClC;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,yFAAyF;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAChC,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAChC;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC;AACpC,kGAAkG;AAClG,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AACjC;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAC/B;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC;;;GAGG;AACH,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C;;GAEG;AACH,SAAS,YAAY,CAAC,IAAY,EAAE,QAAgB,EAAE,OAAe;IACnE,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACpD,OAAO,QAAQ,GAAG,uBAAuB,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,QAAQ,GAAG,OAAO,GAAG,yBAAyB,CAAC,CAAC;AAC7G,CAAC;AACD;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,oDAAoD,CAAC;AAEhF,MAAM,GAAG,GAAG,CAAC,KAAmB,EAAE,EAAE;IAClC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,MAAM,IAAI,KAAK;QAAE,GAAG,IAAI,MAAM,GAAG,MAAM,CAAC;IACnD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,oGAAoG;AACpG,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACvD,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AAClE,CAAC;AA+BD,uFAAuF;AACvF,SAAS,KAAK,CAAC,IAAY;IACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxE,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,GAAG;IA+Be;IA9BrB,GAAG,CAAkB;IACrB,GAAG,CAAgB;IACnB,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC;;;OAGG;IACK,KAAK,GAA0C,EAAE,CAAC;IAClD,OAAO,CAAqB;IAC5B,OAAO,GAAmB,EAAE,CAAC;IAC7B,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACjC,OAAO,GAAG,CAAC,CAAC;IACZ,QAAQ,GAAG,KAAK,CAAC;IACjB,IAAI,GAAW,EAAE,CAAC;IAC1B,oEAAoE;IAC5D,UAAU,GAAG,CAAC,CAAC;IACf,SAAS,CAA4C;IACrD,OAAO,GAAG,CAAC,CAAC;IACpB,gEAAgE;IACxD,UAAU,GAAG,CAAC,CAAC;IACvB,kGAAkG;IAC1F,WAAW,GAAG,CAAC,CAAC;IACxB,gGAAgG;IACxF,YAAY,GAAG,KAAK,CAAC;IACrB,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC9B,8FAA8F;IACtF,aAAa,GAAG,KAAK,CAAC;IAC9B,kEAAkE;IAC1D,aAAa,GAAG,KAAK,CAAC;IAE9B,YAA6B,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;QAC9C,IAAI,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,WAAW;QAChC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,IAAI,WAAsD,CAAC;QAC3D,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACpE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnD,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;oBAAE,MAAM;gBAChC,WAAW,KAAK,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,YAAY,CAAC,WAAW,CAAC,CAAC;QAC9B,uGAAuG;QACvG,UAAU;QACN,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAClD,wGAAwG;QACpG,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QACpB,uFAAuF;QACnF,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa;YAAE,IAAI,GAAG,GAAG,WAAW,IAAI,IAAI,EAAE,CAAC;QAChE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAAa,EAAE,EAAU,EAAE,KAAK,GAAG,KAAK;QAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAY;QACjB,MAAM,IAAI,GAAS,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,CAAC;YACjG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,UAAU;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QACxE,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,kFAAkF;IAClF,IAAI;QACF,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,IAAI;QACV,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,sEAAsE;QAClE,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YACpB,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG;gBAAE,OAAO;YAC7B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,8BAA8B,MAAM,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,KAAa;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,EAAE,CAAC;YACjE,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE;gBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;YAC9F,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YACnG,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;YAChC,8GAA8G;YAC9G,0CAA0C;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,QAAQ,GAAG,KAAK,KAAK,UAAU,CAAC;YACrC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG;gBAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAClE,IAAI,KAAK,KAAK,MAAM;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;iBACrC,IAAI,KAAK,KAAK,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,YAAY;gBAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3F,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACK,OAAO;QACb,IAAI,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;gBAAE,SAAS;YACtC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC9B,0DAA0D;QACtD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,UAAU;YAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACK,SAAS;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7C,0GAA0G;QACtG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,kBAAkB,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO;QAC3G,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAC3C,CAAC,WAAW,EAAE,EAAE;YACd,MAAM,KAAK,GAAG,EAAE,KAAK,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,YAAY,CAAC;YACjH,MAAM,OAAO,GAAG,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;YAC1E,IAAI,CAAC,GAAG,CAAC,eAAe,OAAO,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;YACxH,IAAI,KAAK,IAAI,WAAW,GAAG,aAAa;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAChE,CAAC,EACD,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAClE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,sGAAsG;IAC9F,YAAY;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QACjC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACtD,IAAI,MAAM,IAAI,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,iBAAiB,MAAM,eAAe,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/H,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YACzE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,QAAQ,MAAM,cAAc,CAAC,CAAC;YACjE,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,OAAe;QACzB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAEO,UAAU;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,6DAA6D;IACrD,UAAU,CAAC,KAAmB,EAAE,QAAiB,EAAE,MAAM,GAAG,QAAQ,EAAE,OAAO,GAAG,QAAQ;QAC9F,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACpD,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACnF,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;oBACtD,OAAO;gBACT,CAAC;gBACD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACvE,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;oBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,+CAA+C,IAAI,GAAG,CAAC,CAAC;gBAC5G,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;gBAC/D,6GAA6G;gBAC7G,2BAA2B;gBACnB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;gBACpG,IAAI,YAAY,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,gCAAgC,IAAI,GAAG,CAAC,CAAC;gBACjF,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;oBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,6BAA6B,MAAM,mBAAmB,OAAO,UAAU,IAAI,GAAG,CAAC,CAAC;gBACtJ,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACxB,6GAA6G;oBAC7G,6GAA6G;oBAC7G,QAAQ;oBACE,IAAI,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;oBAC5D,IAAI,IAAI,CAAC,UAAU,EAAE;wBAAE,IAAI,CAAC,OAAO,EAAE,CAAC;;wBACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBACjC,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;oBAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAClD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,GAAG,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAChH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,IAAY,EAAE,QAAQ,GAAG,cAAc;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ;YAAE,OAAO,KAAK,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,MAAM,EAAE,CAAC;YAC7D,OAAO,MAAM,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,IAAI;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,MAAM,EAAE,CAAC;IACzC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"ear.js","sourceRoot":"","sources":["../src/ear.ts"],"names":[],"mappings":"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"}
|
package/dist/speak.d.ts
CHANGED
|
@@ -18,7 +18,10 @@ export declare function createSpeaker({ lang, platform, run }?: {
|
|
|
18
18
|
platform?: NodeJS.Platform;
|
|
19
19
|
run?: RunCommand;
|
|
20
20
|
}): Speaker;
|
|
21
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Piper generates the audio (16-bit PCM) and ffplay plays it while it is generated. -probesize/-analyzeduration make it
|
|
23
|
+
* start at once, without analysing the audio first (~0.4 s saved).
|
|
24
|
+
*/
|
|
22
25
|
export declare function piperCommands({ piper, model, sampleRate, ffplay }: {
|
|
23
26
|
piper: string;
|
|
24
27
|
model: string;
|
package/dist/speak.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speak.d.ts","sourceRoot":"","sources":["../src/speak.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;
|
|
1
|
+
{"version":3,"file":"speak.d.ts","sourceRoot":"","sources":["../src/speak.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAeD,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CAUjG;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAaxF;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/F,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,QAA2B,EAAE,GAAgB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,UAAU,CAAA;CAAO,GAAG,OAAO,CAEpK;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;;;;;;;;;EAQvI;AAKD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,IAKhG,OAAO,MAAM,EAAE,YAAgB,UAYxC;AAkCD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,yGAAyG;IACzG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,oGAAoG;IACpG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,GAAG,OAAO,GAAG;IAAE,IAAI,IAAI,IAAI,CAAC;IAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAmCnL;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAe;WAGnE,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;;EAoBhE;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAKzD;AAED,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,UAAuB,GAAG,MAAM,IAAI,CAEpF"}
|
package/dist/speak.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import { chooseVoice, ensurePiper, ensureVoice, loadCatalog } from './piper.js';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* On Windows the text and the language go through environment variables, never inside the script, so nothing is
|
|
5
|
+
* interpreted.
|
|
6
|
+
*/
|
|
5
7
|
const WINDOWS_SCRIPT = [
|
|
6
8
|
'Add-Type -AssemblyName System.Speech',
|
|
7
9
|
'$s = New-Object System.Speech.Synthesis.SpeechSynthesizer',
|
|
@@ -23,9 +25,9 @@ export function speakCommand(platform, text, lang) {
|
|
|
23
25
|
return { command: 'say', args: [text] };
|
|
24
26
|
return { command: 'espeak-ng', args: [...(lang ? ['-v', lang] : []), text] };
|
|
25
27
|
}
|
|
28
|
+
/** Runs a command until it ends. When the user talks over it (`signal`), it stops and counts as finished. */
|
|
26
29
|
const runCommand = ({ command, args, env }, signal) => new Promise((resolve, reject) => {
|
|
27
30
|
const child = spawn(command, args, { env: { ...process.env, ...env }, stdio: ['ignore', 'ignore', 'pipe'], windowsHide: true });
|
|
28
|
-
// Cut off (the user talked): it stops and counts as finished.
|
|
29
31
|
signal?.addEventListener('abort', () => (child.kill(), resolve()), { once: true });
|
|
30
32
|
let stderr = '';
|
|
31
33
|
child.stderr.on('data', (chunk) => (stderr += chunk));
|
|
@@ -36,13 +38,15 @@ const runCommand = ({ command, args, env }, signal) => new Promise((resolve, rej
|
|
|
36
38
|
export function createSpeaker({ lang, platform = process.platform, run = runCommand } = {}) {
|
|
37
39
|
return (text, language, signal) => run(speakCommand(platform, text, (language ?? lang)?.slice(0, 2)), signal);
|
|
38
40
|
}
|
|
39
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* Piper generates the audio (16-bit PCM) and ffplay plays it while it is generated. -probesize/-analyzeduration make it
|
|
43
|
+
* start at once, without analysing the audio first (~0.4 s saved).
|
|
44
|
+
*/
|
|
40
45
|
export function piperCommands({ piper, model, sampleRate, ffplay }) {
|
|
41
46
|
return {
|
|
42
47
|
synth: { command: piper, args: ['--model', model, '--output-raw'] },
|
|
43
48
|
player: {
|
|
44
49
|
command: ffplay,
|
|
45
|
-
// -probesize/-analyzeduration make it start at once, without analysing the audio first (~0.4 s saved).
|
|
46
50
|
args: ['-hide_banner', '-loglevel', 'error', '-nodisp', '-autoexit', '-probesize', '32', '-analyzeduration', '0', '-f', 's16le', '-ar', String(sampleRate), '-ch_layout', 'mono', '-'],
|
|
47
51
|
},
|
|
48
52
|
};
|
|
@@ -74,15 +78,16 @@ export function pcmLevels(sampleRate, onLevel) {
|
|
|
74
78
|
};
|
|
75
79
|
}
|
|
76
80
|
/**
|
|
77
|
-
* Runs Piper → ffplay with the text and resolves when playback ends (so the echo window ends at the right
|
|
78
|
-
*
|
|
81
|
+
* Runs Piper → ffplay with the text and resolves when playback ends (so the echo window ends at the right time) or when
|
|
82
|
+
* it is cut off, in which case both processes stop and it counts as finished. Piper reads one sentence per line from
|
|
83
|
+
* stdin and reports its progress on stderr, which is ignored; ffplay closing early must not crash the process.
|
|
79
84
|
*/
|
|
80
85
|
function playWithPiper(commands, text, { sampleRate, onLevel, signal }) {
|
|
81
86
|
return new Promise((resolve, reject) => {
|
|
82
87
|
const synth = spawn(commands.synth.command, commands.synth.args, { stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true });
|
|
83
88
|
const player = spawn(commands.player.command, commands.player.args, { stdio: ['pipe', 'ignore', 'pipe'], windowsHide: true });
|
|
84
89
|
let stderr = '';
|
|
85
|
-
synth.stderr.on('data', () => { });
|
|
90
|
+
synth.stderr.on('data', () => { });
|
|
86
91
|
player.stderr.on('data', (chunk) => (stderr += chunk));
|
|
87
92
|
const fail = (error) => {
|
|
88
93
|
synth.kill();
|
|
@@ -94,11 +99,9 @@ function playWithPiper(commands, text, { sampleRate, onLevel, signal }) {
|
|
|
94
99
|
synth.stdout.pipe(player.stdin);
|
|
95
100
|
if (onLevel)
|
|
96
101
|
synth.stdout.on('data', pcmLevels(sampleRate, onLevel));
|
|
97
|
-
player.stdin.on('error', () => { });
|
|
98
|
-
// Cut off (the user talked): both processes stop and it counts as finished.
|
|
102
|
+
player.stdin.on('error', () => { });
|
|
99
103
|
signal?.addEventListener('abort', () => (synth.kill(), player.kill(), resolve()), { once: true });
|
|
100
104
|
player.on('close', (code) => (code === 0 ? resolve() : reject(new Error(stderr.trim() || `ffplay exited with code ${code}`))));
|
|
101
|
-
// Piper reads one sentence per line from stdin.
|
|
102
105
|
synth.stdin.end(`${text.replace(/\s+/g, ' ').trim()}\n`);
|
|
103
106
|
});
|
|
104
107
|
}
|
package/dist/speak.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speak.js","sourceRoot":"","sources":["../src/speak.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,OAAO,EAAgB,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9F
|
|
1
|
+
{"version":3,"file":"speak.js","sourceRoot":"","sources":["../src/speak.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech-check.d.ts","sourceRoot":"","sources":["../src/speech-check.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAErD,oFAAoF;AACpF,eAAO,MAAM,MAAM;;;;CAIlB,CAAC;AAQF,8EAA8E;AAC9E,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"speech-check.d.ts","sourceRoot":"","sources":["../src/speech-check.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAErD,oFAAoF;AACpF,eAAO,MAAM,MAAM;;;;CAIlB,CAAC;AAQF,8EAA8E;AAC9E,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CA2B9H"}
|
package/dist/speech-check.js
CHANGED
|
@@ -28,12 +28,14 @@ export async function createSileroCheck({ cacheDir, fetchImpl }) {
|
|
|
28
28
|
const session = await InferenceSession.create(model);
|
|
29
29
|
const sr = new Tensor('int64', BigInt64Array.from([16000n]), []);
|
|
30
30
|
return {
|
|
31
|
+
/**
|
|
32
|
+
* Stops as soon as there is enough voice: each step waits its turn in ONNX Runtime behind Whisper or Smart Turn, so
|
|
33
|
+
* going through the whole sentence could take tens of seconds.
|
|
34
|
+
*/
|
|
31
35
|
async hasSpeech(audio) {
|
|
32
36
|
let state = new Tensor('float32', new Float32Array(2 * 128), [2, 1, 128]);
|
|
33
37
|
let context = new Float32Array(CONTEXT);
|
|
34
38
|
const probabilities = [];
|
|
35
|
-
// Stops as soon as there is enough voice: each step waits its turn in ONNX Runtime behind Whisper or Smart
|
|
36
|
-
// Turn, so going through the whole sentence could take tens of seconds.
|
|
37
39
|
for (let i = 0; i + CHUNK <= audio.length && speechMs(probabilities) < MIN_SPEECH_MS; i += CHUNK) {
|
|
38
40
|
const chunk = audio.subarray(i, i + CHUNK);
|
|
39
41
|
const input = new Float32Array(CONTEXT + CHUNK);
|
package/dist/speech-check.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech-check.js","sourceRoot":"","sources":["../src/speech-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAc,MAAM,eAAe,CAAC;AAErD,oFAAoF;AACpF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,EAAE,mHAAmH;IACxH,MAAM,EAAE,kEAAkE;IAC1E,IAAI,EAAE,OAAO;CACd,CAAC;AAEF;;;GAGG;AACH,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,8EAA8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAUjC,uEAAuE;AACvE,MAAM,UAAU,QAAQ,CAAC,aAAuB;IAC9C,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AACjF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA2C;IACtG,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACxG,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,MAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAElE,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,KAAK;YACnB,IAAI,KAAK,GAAW,IAAI,MAAM,CAAC,SAAS,EAAE,IAAI,YAAY,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAClF,IAAI,OAAO,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,aAAa,GAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"speech-check.js","sourceRoot":"","sources":["../src/speech-check.ts"],"names":[],"mappings":"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"}
|
package/dist/stdout-guard.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* stdout is the MCP channel, so every log from any library goes to stderr. This module is imported first in cli.ts so
|
|
3
|
+
* it applies before anything else loads.
|
|
4
|
+
*/
|
|
3
5
|
console.log = console.error;
|
|
4
6
|
console.info = console.error;
|
|
5
7
|
console.warn = console.error;
|
package/dist/stdout-guard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdout-guard.js","sourceRoot":"","sources":["../src/stdout-guard.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stdout-guard.js","sourceRoot":"","sources":["../src/stdout-guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;AAC5B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;AAC7B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;AAC7B,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC"}
|
package/dist/stt.d.ts
CHANGED
|
@@ -26,6 +26,9 @@ export declare const defaultDevice: (platform?: NodeJS.Platform) => WhisperDevic
|
|
|
26
26
|
* not detect it (without a language it assumes English and "transcribes" by translating), so it is done here.
|
|
27
27
|
*/
|
|
28
28
|
export declare function mostLikelyLanguage(logits: Pick<Tensor, 'dims' | 'data'>, langToId: Record<string, number>): string;
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Local Whisper with transformers.js. The model is downloaded once; afterwards everything works offline. The first
|
|
31
|
+
* sentence on the graphics card is much slower (it compiles its kernels), so that cost is paid at startup.
|
|
32
|
+
*/
|
|
30
33
|
export declare function createWhisper(options: WhisperOptions): Promise<Transcriber>;
|
|
31
34
|
//# sourceMappingURL=stt.d.ts.map
|
package/dist/stt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stt.d.ts","sourceRoot":"","sources":["../src/stt.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAE3G,OAAO,EAAE,KAAK,GAAG,EAAU,MAAM,UAAU,CAAC;AAE5C,sBAAsB;AACtB,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClD;AAED,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,iCAAiC,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC;AAE1C,0FAA0F;AAC1F,eAAO,MAAM,aAAa,GAAI,WAAU,MAAM,CAAC,QAA2B,KAAG,aAAuD,CAAC;AAOrI;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAUlH;AAED
|
|
1
|
+
{"version":3,"file":"stt.d.ts","sourceRoot":"","sources":["../src/stt.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAE3G,OAAO,EAAE,KAAK,GAAG,EAAU,MAAM,UAAU,CAAC;AAE5C,sBAAsB;AACtB,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClD;AAED,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,iCAAiC,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC;AAE1C,0FAA0F;AAC1F,eAAO,MAAM,aAAa,GAAI,WAAU,MAAM,CAAC,QAA2B,KAAG,aAAuD,CAAC;AAOrI;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAUlH;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAiBjF"}
|
package/dist/stt.js
CHANGED
|
@@ -20,7 +20,10 @@ export function mostLikelyLanguage(logits, langToId) {
|
|
|
20
20
|
}
|
|
21
21
|
return best;
|
|
22
22
|
}
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Local Whisper with transformers.js. The model is downloaded once; afterwards everything works offline. The first
|
|
25
|
+
* sentence on the graphics card is much slower (it compiles its kernels), so that cost is paid at startup.
|
|
26
|
+
*/
|
|
24
27
|
export async function createWhisper(options) {
|
|
25
28
|
const log = options.log ?? silent;
|
|
26
29
|
const device = options.device ?? 'cpu';
|
|
@@ -36,13 +39,16 @@ export async function createWhisper(options) {
|
|
|
36
39
|
transcriber = await loadWhisper(options, 'cpu', log);
|
|
37
40
|
used = 'cpu';
|
|
38
41
|
}
|
|
39
|
-
// The first sentence on the graphics card is much slower (it compiles its kernels), so that cost is paid at
|
|
40
|
-
// startup.
|
|
41
42
|
const started = Date.now();
|
|
42
43
|
await transcriber.transcribe(new Float32Array(16_000));
|
|
43
44
|
log(`[whisper] ready on ${used} (${Date.now() - started} ms warm-up)`);
|
|
44
45
|
return transcriber;
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Loads Whisper on a device. With a fixed language, it only transcribes. Otherwise it detects the language and
|
|
49
|
+
* transcribes with a single encoder pass (the slowest part) through an internal transformers.js function, which is why
|
|
50
|
+
* that package's version is pinned; the public path would encode twice.
|
|
51
|
+
*/
|
|
46
52
|
async function loadWhisper({ model = DEFAULT_WHISPER_MODEL, language, cacheDir }, device, log) {
|
|
47
53
|
env.cacheDir = cacheDir;
|
|
48
54
|
const asr = (await pipeline('automatic-speech-recognition', model, { dtype: 'q8', device }));
|
|
@@ -54,11 +60,8 @@ async function loadWhisper({ model = DEFAULT_WHISPER_MODEL, language, cacheDir }
|
|
|
54
60
|
log(`[whisper] ${lang} · ${Date.now() - started} ms`);
|
|
55
61
|
return (Array.isArray(output) ? output.map((o) => o.text).join(' ') : output.text).trim();
|
|
56
62
|
};
|
|
57
|
-
// A fixed language is not detected.
|
|
58
63
|
if (language)
|
|
59
64
|
return { transcribe: (audio) => transcribeIn(audio, language) };
|
|
60
|
-
// Detects and transcribes with a single encoder pass (the slowest part). Uses an internal transformers.js
|
|
61
|
-
// function (version pinned in package.json); without it, the public path encodes twice.
|
|
62
65
|
const model_ = asr.model;
|
|
63
66
|
return {
|
|
64
67
|
async transcribe(audio) {
|
package/dist/stt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stt.js","sourceRoot":"","sources":["../src/stt.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAE3G,OAAO,EAAY,MAAM,EAAE,MAAM,UAAU,CAAC;AAO5C,yFAAyF;AACzF,MAAM,CAAC,MAAM,qBAAqB,GAAG,8BAA8B,CAAC;AAiBpE,0FAA0F;AAC1F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAA4B,OAAO,CAAC,QAAQ,EAAiB,EAAE,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAOrI;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAqC,EAAE,QAAgC;IACxG,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAoB,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAC/C,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC;IACtB,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,IAAI,GAAG,CAAC,EAAE,CAAE,GAAG,KAAK;YAAE,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"stt.js","sourceRoot":"","sources":["../src/stt.ts"],"names":[],"mappings":"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"}
|
package/dist/turn.d.ts
CHANGED
|
@@ -20,7 +20,10 @@ export interface TurnCheck {
|
|
|
20
20
|
* variance 1, as the Whisper feature extractor does with do_normalize.
|
|
21
21
|
*/
|
|
22
22
|
export declare function prepareTurnAudio(audio: Float32Array): Float32Array;
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Smart Turn: downloaded once to cacheDir and run locally in a few tens of milliseconds. Its input is the same Whisper
|
|
25
|
+
* log-mel (80 bands), for 8 s instead of 30.
|
|
26
|
+
*/
|
|
24
27
|
export declare function createTurnCheck({ cacheDir, fetchImpl }: {
|
|
25
28
|
cacheDir: string;
|
|
26
29
|
fetchImpl?: Fetch;
|
package/dist/turn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn.d.ts","sourceRoot":"","sources":["../src/turn.ts"],"names":[],"mappings":"AAKA,OAAO,EAAY,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAErD,sGAAsG;AACtG,eAAO,MAAM,UAAU;;;;CAItB,CAAC;AAKF,yFAAyF;AACzF,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAChD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAYlE;AAED
|
|
1
|
+
{"version":3,"file":"turn.d.ts","sourceRoot":"","sources":["../src/turn.ts"],"names":[],"mappings":"AAKA,OAAO,EAAY,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAErD,sGAAsG;AACtG,eAAO,MAAM,UAAU;;;;CAItB,CAAC;AAKF,yFAAyF;AACzF,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAChD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAYlE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAsB1H"}
|
package/dist/turn.js
CHANGED
|
@@ -33,11 +33,13 @@ export function prepareTurnAudio(audio) {
|
|
|
33
33
|
out[i] = (out[i] - mean) * scale;
|
|
34
34
|
return out;
|
|
35
35
|
}
|
|
36
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Smart Turn: downloaded once to cacheDir and run locally in a few tens of milliseconds. Its input is the same Whisper
|
|
38
|
+
* log-mel (80 bands), for 8 s instead of 30.
|
|
39
|
+
*/
|
|
37
40
|
export async function createTurnCheck({ cacheDir, fetchImpl }) {
|
|
38
41
|
const model = await download(SMART_TURN.url, join(cacheDir, 'smart-turn', 'smart-turn-v3.2-cpu.onnx'), SMART_TURN, fetchImpl);
|
|
39
42
|
const session = await InferenceSession.create(model);
|
|
40
|
-
// The same Whisper log-mel (80 bands), for 8 s instead of 30.
|
|
41
43
|
const features = new WhisperFeatureExtractor({
|
|
42
44
|
feature_size: 80,
|
|
43
45
|
sampling_rate: 16_000,
|
package/dist/turn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn.js","sourceRoot":"","sources":["../src/turn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAc,MAAM,eAAe,CAAC;AAErD,sGAAsG;AACtG,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,2HAA2H;IAChI,MAAM,EAAE,kEAAkE;IAC1E,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,+DAA+D;AAC/D,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AACjC,yFAAyF;AACzF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAWjC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrF,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,IAAI,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;IACnB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IACvE,OAAO,GAAG,CAAC;AACb,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"turn.js","sourceRoot":"","sources":["../src/turn.ts"],"names":[],"mappings":"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"}
|
package/dist/vad.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ export declare class VoiceDetector {
|
|
|
40
40
|
get voicedMs(): number;
|
|
41
41
|
/**
|
|
42
42
|
* `learnNoise` is false while the AI talks: its echo is not room noise, and learning it would make the user
|
|
43
|
-
* inaudible.
|
|
43
|
+
* inaudible. When the microphone opens, the first 0.3 s only measure the room noise.
|
|
44
44
|
*/
|
|
45
45
|
push(frame: Float32Array, learnNoise?: boolean): VadState;
|
|
46
46
|
/** The whole sentence, including the chunk from before the start. */
|
package/dist/vad.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vad.d.ts","sourceRoot":"","sources":["../src/vad.ts"],"names":[],"mappings":"AAEA,0CAA0C;AAC1C,eAAO,MAAM,aAAa,QAA4B,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+FAA+F;IAC/F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAevD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAuB;IACzC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,MAAM,CAAsB;gBAExB,OAAO,GAAE,UAAe;IAYpC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,OAAO,IAAI,QAAQ,CAEtB;IAED,8EAA8E;IAC9E,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,sFAAsF;IACtF,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,UAAO,GAAG,QAAQ;
|
|
1
|
+
{"version":3,"file":"vad.d.ts","sourceRoot":"","sources":["../src/vad.ts"],"names":[],"mappings":"AAEA,0CAA0C;AAC1C,eAAO,MAAM,aAAa,QAA4B,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+FAA+F;IAC/F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAevD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAuB;IACzC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,MAAM,CAAsB;gBAExB,OAAO,GAAE,UAAe;IAYpC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,OAAO,IAAI,QAAQ,CAEtB;IAED,8EAA8E;IAC9E,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,sFAAsF;IACtF,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,UAAO,GAAG,QAAQ;IAgCtD,qEAAqE;IACrE,SAAS,IAAI,YAAY;IAUzB,gGAAgG;IAChG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM9B,gEAAgE;IAChE,IAAI,IAAI,IAAI;CAOb"}
|
package/dist/vad.js
CHANGED
|
@@ -54,13 +54,12 @@ export class VoiceDetector {
|
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
56
|
* `learnNoise` is false while the AI talks: its echo is not room noise, and learning it would make the user
|
|
57
|
-
* inaudible.
|
|
57
|
+
* inaudible. When the microphone opens, the first 0.3 s only measure the room noise.
|
|
58
58
|
*/
|
|
59
59
|
push(frame, learnNoise = true) {
|
|
60
60
|
if (this.state === 'done')
|
|
61
61
|
return this.state;
|
|
62
62
|
const energy = rms(frame);
|
|
63
|
-
// When the microphone opens, the first 0.3 s only measure the room noise.
|
|
64
63
|
if (this.calibrated < CALIBRATION_FRAMES) {
|
|
65
64
|
this.calibrated++;
|
|
66
65
|
this.noise += (energy - this.noise) / this.calibrated;
|
package/dist/vad.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vad.js","sourceRoot":"","sources":["../src/vad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;AAqBvD,MAAM,GAAG,GAAG,CAAC,KAAmB,EAAE,EAAE;IAClC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,MAAM,IAAI,KAAK;QAAE,GAAG,IAAI,MAAM,GAAG,MAAM,CAAC;IACnD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,iGAAiG;AACjG,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,0FAA0F;AAC1F,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;GAGG;AACH,MAAM,OAAO,aAAa;IACP,CAAC,CAAuB;IACjC,KAAK,GAAa,SAAS,CAAC;IAC5B,KAAK,GAAG,CAAC,CAAC;IACV,UAAU,GAAG,CAAC,CAAC;IACf,IAAI,GAAG,CAAC,CAAC;IACT,KAAK,GAAG,CAAC,CAAC;IACV,YAAY,GAAG,CAAC,CAAC;IACR,OAAO,GAAmB,EAAE,CAAC;IACtC,MAAM,GAAmB,EAAE,CAAC;IAEpC,YAAY,UAAsB,EAAE;QAClC,IAAI,CAAC,CAAC,GAAG;YACP,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,GAAG,aAAa,CAAC;YACzD,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,CAAC;YACd,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,8EAA8E;IAC9E,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,sFAAsF;IACtF,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,KAAmB,EAAE,UAAU,GAAG,IAAI;QACzC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"vad.js","sourceRoot":"","sources":["../src/vad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;AAqBvD,MAAM,GAAG,GAAG,CAAC,KAAmB,EAAE,EAAE;IAClC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,MAAM,IAAI,KAAK;QAAE,GAAG,IAAI,MAAM,GAAG,MAAM,CAAC;IACnD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,iGAAiG;AACjG,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,0FAA0F;AAC1F,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;GAGG;AACH,MAAM,OAAO,aAAa;IACP,CAAC,CAAuB;IACjC,KAAK,GAAa,SAAS,CAAC;IAC5B,KAAK,GAAG,CAAC,CAAC;IACV,UAAU,GAAG,CAAC,CAAC;IACf,IAAI,GAAG,CAAC,CAAC;IACT,KAAK,GAAG,CAAC,CAAC;IACV,YAAY,GAAG,CAAC,CAAC;IACR,OAAO,GAAmB,EAAE,CAAC;IACtC,MAAM,GAAmB,EAAE,CAAC;IAEpC,YAAY,UAAsB,EAAE;QAClC,IAAI,CAAC,CAAC,GAAG;YACP,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,GAAG,aAAa,CAAC;YACzD,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,CAAC;YACd,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,8EAA8E;IAC9E,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,sFAAsF;IACtF,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,KAAmB,EAAE,UAAU,GAAG,IAAI;QACzC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,kBAAkB,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YACtD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QACrC,IAAI,UAAU;YAAE,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAEtG,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,aAAa;gBAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;gBACxB,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;gBAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI;YAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QAClG,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,qEAAqE;IACrE,SAAS;QACP,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACzB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,gGAAgG;IAChG,QAAQ,CAAC,MAAc;QACrB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM;YAAE,OAAO;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,gEAAgE;IAChE,IAAI;QACF,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;CACF"}
|
package/package.json
CHANGED