@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Oussama Yaagoub
3
+ Copyright (c) 2026 Sanoriva
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
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
- // --setup prepares everything for the first conversation and exits without starting the server.
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
- // Whisper loads in the background: the server answers right away and listen waits for the model if needed.
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
- // Silero VAD (2 MB) separates human voice from noise before Whisper, in any language.
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
- // Smart Turn (8 MB) tells at every 0.3 s pause whether the user has finished, so there is no need to wait for
45
- // 1.5 s of silence.
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
- // Piper gives a natural voice, with the system voice as a fallback. Piper and the voice download in the
49
- // background at startup.
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
- // The ear gets what is about to play, to tell the AI's echo from the voice of a user who interrupts it.
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
- // Speaking does not block: the AI keeps working while it plays, and each sentence waits for the previous one.
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
- // The ear starts on the first listen, so the microphone only opens when there is a conversation.
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":"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"}
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
  */
@@ -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,CA0CvD"}
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,
@@ -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;QACV,+DAA+D;QAC3D,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1H,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACjC,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK;KAC7B,CAAC;AACJ,CAAC"}
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;QACN,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1H,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACjC,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK;KAC7B,CAAC;AACJ,CAAC"}
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
- * be transcribed. It never gets stuck with endless background voice (a TV, a video): with something already
112
- * understood, it returns at most SETTLE_MS later, and after maxWaitMs it returns whatever there is (or
113
- * nothing). Anything still playing is not lost: it goes to the next listen.
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
- * AI's voice, which the echo filter would discard along with the user's words).
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
- * closes now instead of after 1.5 s. If they started talking again meanwhile, the answer is ignored.
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
- /** Sentences are transcribed in order, one after another. */
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":"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"}
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
- * be transcribed. It never gets stuck with endless background voice (a TV, a video): with something already
121
- * understood, it returns at most SETTLE_MS later, and after maxWaitMs it returns whatever there is (or
122
- * nothing). Anything still playing is not lost: it goes to the next listen.
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
- * AI's voice, which the echo filter would discard along with the user's words).
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
- * closes now instead of after 1.5 s. If they started talking again meanwhile, the answer is ignored.
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
- /** Sentences are transcribed in order, one after another. */
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
- /** Piper generates the audio (16-bit PCM) and ffplay plays it while it is generated. */
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;
@@ -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;AAaD,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,wFAAwF;AACxF,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;;;;;;;;;EASvI;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;AAmCD,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"}
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
- // On Windows the text and the language go through environment variables, never inside the script, so nothing
4
- // is interpreted.
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
- /** Piper generates the audio (16-bit PCM) and ffplay plays it while it is generated. */
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
- * time) or when it is cut off.
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', () => { }); // Piper reports its progress here
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', () => { }); // ffplay closing early must not crash the process
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":"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"}
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,CAyB9H"}
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"}
@@ -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);
@@ -1 +1 @@
1
- {"version":3,"file":"speech-check.js","sourceRoot":"","sources":["../src/speech-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"speech-check.js","sourceRoot":"","sources":["../src/speech-check.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- // stdout is the MCP channel, so every log from any library goes to stderr. This module is imported first in
2
- // cli.ts so it applies before anything else loads.
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;
@@ -1 +1 @@
1
- {"version":3,"file":"stdout-guard.js","sourceRoot":"","sources":["../src/stdout-guard.ts"],"names":[],"mappings":"AAAA,4GAA4G;AAC5G,mDAAmD;AACnD,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"}
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
- /** Local Whisper with transformers.js. The model is downloaded once; afterwards everything works offline. */
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,6GAA6G;AAC7G,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBjF"}
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
- /** Local Whisper with transformers.js. The model is downloaded once; afterwards everything works offline. */
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":"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"}
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
- /** Smart Turn: downloaded once to cacheDir and run locally in a few tens of milliseconds. */
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;
@@ -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,6FAA6F;AAC7F,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,CAuB1H"}
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
- /** Smart Turn: downloaded once to cacheDir and run locally in a few tens of milliseconds. */
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":"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"}
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;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA2C;IACpG,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,0BAA0B,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC9H,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAAC;QAC3C,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,MAAM;QACrB,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,GAAG;QACV,YAAY,EAAE,OAAO;QACrB,SAAS,EAAE,OAAO;QAClB,aAAa,EAAE,OAAO,GAAG,GAAG;KAC7B,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;IAEvC,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,KAAK;YAClB,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAA+D,CAAC;YACnI,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/G,OAAQ,MAAM,CAAC,MAAM,CAAY,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC;QACtD,CAAC;KACF,CAAC;AACJ,CAAC"}
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;IAiCtD,qEAAqE;IACrE,SAAS,IAAI,YAAY;IAUzB,gGAAgG;IAChG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM9B,gEAAgE;IAChE,IAAI,IAAI,IAAI;CAOb"}
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":"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"}
1
+ {"version":3,"file":"vad.js","sourceRoot":"","sources":["../src/vad.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reins-ai/voice",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Local voice for the user's AI: an MCP server with listen (microphone + Whisper) and speak (Piper), in any language.",
5
5
  "license": "MIT",
6
6
  "author": "Sanoriva",