speechstate 2.0.0-beta.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.org CHANGED
@@ -121,7 +121,7 @@ Example action:
121
121
  DM -> SS : PREPARE
122
122
  SS -> DM : ASRTTS_READY
123
123
  hnote across: Speech Synthesis
124
- DM -> SS : LISTEN
124
+ DM -> SS : SPEAK
125
125
  activate SS
126
126
  SS --> DM : TTS_STARTED
127
127
  return SPEAK_COMPLETE
package/dist/asr.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"asr.d.ts","sourceRoot":"","sources":["../src/asr.ts"],"names":[],"mappings":";AAcA,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,YAAO;CACR;AACD,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,YAAO;CACR;AAED,KAAK,QAAQ,GACT;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QACL,MAAM,EAAE,mBAAmB,CAAC;QAC5B,cAAc,EAAE,mBAAmB,CAAC;KACrC,CAAC;CACH,GACD;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE;QAAE,cAAc,EAAE,mBAAmB,CAAA;KAAE,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AAE5C,UAAU,UAAW,SAAQ,OAAO;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED,UAAU,OAAO;IACf,yBAAyB,EAAE,MAAM,CAAC;IAClC,wBAAwB,EAAE,MAAM,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,sBAAsB,CAAC;IAClD,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;CACrD;AAED,eAAO,MAAM,UAAU;;;;;eAiF8C,MAAM;;;;;;;;;;;;;;;;;;;;eAAN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;eAAN,MAAM;;;;;;;;;mBA0RzE,CAAC"}
1
+ {"version":3,"file":"asr.d.ts","sourceRoot":"","sources":["../src/asr.ts"],"names":[],"mappings":";AAcA,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,YAAO;CACR;AACD,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,YAAO;CACR;AAED,KAAK,QAAQ,GACT;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QACL,MAAM,EAAE,mBAAmB,CAAC;QAC5B,cAAc,EAAE,mBAAmB,CAAC;KACrC,CAAC;CACH,GACD;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE;QAAE,cAAc,EAAE,mBAAmB,CAAA;KAAE,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AAE5C,UAAU,UAAW,SAAQ,OAAO;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED,UAAU,OAAO;IACf,yBAAyB,EAAE,MAAM,CAAC;IAClC,wBAAwB,EAAE,MAAM,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,sBAAsB,CAAC;IAClD,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;CACrD;AAED,eAAO,MAAM,UAAU;;;;;eAiF8C,MAAM;;;;;;;;;;;;;;;;;;;;eAAN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;eAAN,MAAM;;;;;;;;;mBA6RzE,CAAC"}
package/dist/asr.js CHANGED
@@ -193,6 +193,9 @@ exports.asrMachine = (0, xstate_1.setup)({
193
193
  CONTROL: {
194
194
  target: "Pause",
195
195
  },
196
+ STOP: {
197
+ target: "Ready",
198
+ },
196
199
  NOINPUT: {
197
200
  actions: (0, xstate_1.sendParent)({ type: "ASR_NOINPUT" }),
198
201
  target: "Ready",
package/dist/index.js~ ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.speechstate = void 0;
4
+ var speechstate_1 = require("./speechstate");
5
+ Object.defineProperty(exports, "speechstate", { enumerable: true, get: function () { return speechstate_1.speechstate; } });
@@ -1 +1 @@
1
- {"version":3,"file":"speechstate.d.ts","sourceRoot":"","sources":["../src/speechstate.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC5E,UAAU,SAAS;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,wDAAwD;AACxD,KAAK,YAAY,GACb;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEnD,uCAAuC;AACvC,KAAK,aAAa,GACd;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC;AAEhE,KAAK,YAAY,GACb;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1B,KAAK,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;AAE3D,QAAA,MAAM,WAAW,odA6PhB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"speechstate.d.ts","sourceRoot":"","sources":["../src/speechstate.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC5E,UAAU,SAAS;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,wDAAwD;AACxD,KAAK,YAAY,GACb;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEnD,uCAAuC;AACvC,KAAK,aAAa,GACd;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC;AAEhE,KAAK,YAAY,GACb;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1B,KAAK,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;AAE3D,QAAA,MAAM,WAAW,odAqThB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -14,6 +14,9 @@ const speechstate = (0, xstate_1.createMachine)({
14
14
  states: {
15
15
  AsrTtsSpawner: {
16
16
  initial: "Idle",
17
+ on: {
18
+ STOP: { target: ".Stopped", actions: (0, xstate_1.assign)({ audioContext: null }) },
19
+ },
17
20
  states: {
18
21
  Idle: { on: { PREPARE: "CreateAudioContext" } },
19
22
  CreateAudioContext: {
@@ -31,6 +34,7 @@ const speechstate = (0, xstate_1.createMachine)({
31
34
  (0, xstate_1.assign)({
32
35
  ttsRef: ({ context, spawn }) => {
33
36
  return spawn(tts_1.ttsMachine, {
37
+ id: "ttsRef",
34
38
  input: {
35
39
  ttsDefaultVoice: context.settings.ttsDefaultVoice,
36
40
  audioContext: context.audioContext,
@@ -42,6 +46,7 @@ const speechstate = (0, xstate_1.createMachine)({
42
46
  (0, xstate_1.assign)({
43
47
  asrRef: ({ context, spawn }) => {
44
48
  return spawn(asr_1.asrMachine, {
49
+ id: "asrRef",
45
50
  input: {
46
51
  asrDefaultCompleteTimeout: context.settings.asrDefaultCompleteTimeout,
47
52
  asrDefaultNoInputTimeout: context.settings.asrDefaultNoInputTimeout,
@@ -55,12 +60,19 @@ const speechstate = (0, xstate_1.createMachine)({
55
60
  },
56
61
  }),
57
62
  ],
63
+ exit: [
64
+ (0, xstate_1.stopChild)("ttsRef"),
65
+ (0, xstate_1.stopChild)("asrRef"),
66
+ (0, xstate_1.assign)({ ttsRef: undefined, asrRef: undefined }),
67
+ ],
58
68
  after: {
59
69
  300000: {
60
70
  target: "Spawn",
71
+ reenter: true,
61
72
  },
62
73
  },
63
74
  },
75
+ Stopped: {},
64
76
  },
65
77
  },
66
78
  AsrTtsManager: {
@@ -86,10 +98,14 @@ const speechstate = (0, xstate_1.createMachine)({
86
98
  ],
87
99
  target: ".Ready",
88
100
  },
101
+ STOP: ".Stopped",
89
102
  },
90
103
  states: {
91
- Initialize: {},
104
+ Initialize: {
105
+ meta: { view: "not-ready" },
106
+ },
92
107
  PreReady: {
108
+ meta: { view: "not-ready" },
93
109
  on: {
94
110
  TTS_READY: {
95
111
  actions: () => console.debug("[TTS→SpSt] TTS_READY"),
@@ -109,6 +125,7 @@ const speechstate = (0, xstate_1.createMachine)({
109
125
  ],
110
126
  states: {
111
127
  Idle: {
128
+ meta: { view: "idle" },
112
129
  on: {
113
130
  LISTEN: { target: "WaitForRecogniser" },
114
131
  SPEAK: [
@@ -119,6 +136,7 @@ const speechstate = (0, xstate_1.createMachine)({
119
136
  },
120
137
  },
121
138
  Speaking: {
139
+ initial: "Proceed",
122
140
  entry: [
123
141
  ({ event }) => console.debug("[SpSt→TTS] SPEAK", event.value),
124
142
  ({ context, event }) => context.ttsRef.send({
@@ -127,15 +145,8 @@ const speechstate = (0, xstate_1.createMachine)({
127
145
  }),
128
146
  ],
129
147
  on: {
130
- CONTROL: {
131
- actions: [
132
- () => console.debug("[SpSt→TTS] CONTROL"),
133
- ({ context }) => context.ttsRef.send({
134
- type: "CONTROL",
135
- }),
136
- ],
137
- },
138
148
  STOP: {
149
+ target: "#speechstate.AsrTtsManager.Stopped",
139
150
  actions: [
140
151
  () => console.debug("[SpSt→TTS] STOP"),
141
152
  ({ context }) => context.ttsRef.send({
@@ -157,8 +168,39 @@ const speechstate = (0, xstate_1.createMachine)({
157
168
  ],
158
169
  },
159
170
  },
171
+ states: {
172
+ Proceed: {
173
+ meta: { view: "speaking" },
174
+ on: {
175
+ CONTROL: {
176
+ target: "Paused",
177
+ actions: [
178
+ () => console.debug("[SpSt→TTS] CONTROL"),
179
+ ({ context }) => context.ttsRef.send({
180
+ type: "CONTROL",
181
+ }),
182
+ ],
183
+ },
184
+ },
185
+ },
186
+ Paused: {
187
+ meta: { view: "speaking-paused" },
188
+ on: {
189
+ CONTROL: {
190
+ target: "Proceed",
191
+ actions: [
192
+ () => console.debug("[SpSt→TTS] CONTROL"),
193
+ ({ context }) => context.ttsRef.send({
194
+ type: "CONTROL",
195
+ }),
196
+ ],
197
+ },
198
+ },
199
+ },
200
+ },
160
201
  },
161
202
  WaitForRecogniser: {
203
+ meta: { view: "idle" },
162
204
  entry: [
163
205
  ({ event }) => console.debug("[SpSt→ASR] START", event.value),
164
206
  ({ context, event }) => context.asrRef.send({
@@ -177,8 +219,10 @@ const speechstate = (0, xstate_1.createMachine)({
177
219
  },
178
220
  },
179
221
  Recognising: {
222
+ meta: { view: "recognising" },
180
223
  on: {
181
224
  CONTROL: {
225
+ /** TODO go to paused state? */
182
226
  actions: [
183
227
  () => console.debug("[SpSt→ASR] CONTROL"),
184
228
  ({ context }) => context.asrRef.send({
@@ -186,6 +230,15 @@ const speechstate = (0, xstate_1.createMachine)({
186
230
  }),
187
231
  ],
188
232
  },
233
+ STOP: {
234
+ target: "#speechstate.AsrTtsManager.Stopped",
235
+ actions: [
236
+ () => console.debug("[SpSt→ASR] STOP"),
237
+ ({ context }) => context.asrRef.send({
238
+ type: "STOP",
239
+ }),
240
+ ],
241
+ },
189
242
  RECOGNISED: {
190
243
  actions: [
191
244
  ({ event }) => console.debug("[ASR→SpSt] RECOGNISED", event.value, event.nluValue),
@@ -201,7 +254,8 @@ const speechstate = (0, xstate_1.createMachine)({
201
254
  },
202
255
  },
203
256
  },
204
- Fail: {},
257
+ Fail: { meta: { view: "error" } },
258
+ Stopped: { meta: { view: "stopped" } },
205
259
  },
206
260
  },
207
261
  },
package/dist/tts.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { AzureCredentials, Agenda } from "./types";
1
+ import { AzureSpeechCredentials, Agenda } from "./types";
2
2
  interface MySpeechSynthesisUtterance extends SpeechSynthesisUtterance {
3
3
  new (s: string): any;
4
4
  }
5
5
  interface TTSInit {
6
6
  audioContext: AudioContext;
7
- azureCredentials: string | AzureCredentials;
7
+ azureCredentials: string | AzureSpeechCredentials;
8
8
  ttsDefaultVoice: string;
9
9
  }
10
10
  interface TTSContext extends TTSInit {
@@ -14,6 +14,8 @@ interface TTSContext extends TTSInit {
14
14
  wsaVoice?: SpeechSynthesisVoice;
15
15
  wsaUtt?: MySpeechSynthesisUtterance;
16
16
  agenda?: Agenda;
17
+ buffer?: string;
18
+ utteranceFromStream?: string;
17
19
  }
18
20
  type TTSEvent = {
19
21
  type: "PREPARE";
@@ -34,9 +36,85 @@ type TTSEvent = {
34
36
  value: Agenda;
35
37
  } | {
36
38
  type: "TTS_STARTED";
39
+ } | {
40
+ type: "STREAMING_CHUNK";
41
+ value: string;
42
+ } | {
43
+ type: "STREAMING_DONE";
37
44
  } | {
38
45
  type: "SPEAK_COMPLETE";
39
46
  };
40
- export declare const ttsMachine: import("xstate").StateMachine<TTSContext, TTSEvent, Record<string, import("xstate").AnyActorRef>, import("xstate").ProvidedActor, import("xstate").ParameterizedObject, import("xstate").ParameterizedObject, string, import("xstate").StateValue, string, TTSInit, {}, import("xstate").ResolveTypegenMeta<import("xstate").TypegenDisabled, TTSEvent, import("xstate").ProvidedActor, import("xstate").ParameterizedObject, import("xstate").ParameterizedObject, string, string>>;
47
+ export declare const ttsMachine: import("xstate").StateMachine<TTSContext, TTSEvent, {
48
+ [x: string]: import("xstate").ActorRef<import("xstate").CallbackSnapshot<{}>, import("xstate").EventObject> | import("xstate").ActorRef<import("xstate").PromiseSnapshot<string, any>, {
49
+ [k: string]: unknown;
50
+ type: string;
51
+ }> | import("xstate").ActorRef<import("xstate").CallbackSnapshot<Agenda>, import("xstate").EventObject>;
52
+ }, {
53
+ src: "getToken";
54
+ logic: import("xstate").PromiseActorLogic<string, any>;
55
+ id: string;
56
+ } | {
57
+ src: "createEventsFromStream";
58
+ logic: import("xstate").CallbackActorLogic<import("xstate").EventObject, Agenda>;
59
+ id: string;
60
+ } | {
61
+ src: "ponyfill";
62
+ logic: import("xstate").CallbackActorLogic<import("xstate").EventObject, {}>;
63
+ id: string;
64
+ } | {
65
+ src: "start";
66
+ logic: import("xstate").CallbackActorLogic<import("xstate").EventObject, {}>;
67
+ id: string;
68
+ }, {
69
+ type: "ttsStop";
70
+ params: unknown;
71
+ } | {
72
+ type: "addFiller";
73
+ params: {};
74
+ }, {
75
+ type: "bufferContainsUtterancePartReadyToBeSpoken";
76
+ params: unknown;
77
+ } | {
78
+ type: "bufferIsNonEmpty";
79
+ params: unknown;
80
+ }, "FILLER_DELAY", "GetToken" | "Fail" | "Ponyfill" | {
81
+ Ready?: "Idle" | {
82
+ BufferedSpeaker?: Required<{
83
+ Buffer?: "BufferIdle" | "Buffering" | "BufferingDone";
84
+ Speaker?: "SpeakingIdle" | "PrepareSpeech" | {
85
+ Speak?: "Go" | "Paused";
86
+ };
87
+ }>;
88
+ Speaking?: "Go" | "Paused";
89
+ };
90
+ }, string, TTSInit, {}, import("xstate").ResolveTypegenMeta<import("xstate").TypegenDisabled, TTSEvent, {
91
+ src: "getToken";
92
+ logic: import("xstate").PromiseActorLogic<string, any>;
93
+ id: string;
94
+ } | {
95
+ src: "createEventsFromStream";
96
+ logic: import("xstate").CallbackActorLogic<import("xstate").EventObject, Agenda>;
97
+ id: string;
98
+ } | {
99
+ src: "ponyfill";
100
+ logic: import("xstate").CallbackActorLogic<import("xstate").EventObject, {}>;
101
+ id: string;
102
+ } | {
103
+ src: "start";
104
+ logic: import("xstate").CallbackActorLogic<import("xstate").EventObject, {}>;
105
+ id: string;
106
+ }, {
107
+ type: "ttsStop";
108
+ params: unknown;
109
+ } | {
110
+ type: "addFiller";
111
+ params: {};
112
+ }, {
113
+ type: "bufferContainsUtterancePartReadyToBeSpoken";
114
+ params: unknown;
115
+ } | {
116
+ type: "bufferIsNonEmpty";
117
+ params: unknown;
118
+ }, "FILLER_DELAY", string>>;
41
119
  export {};
42
120
  //# sourceMappingURL=tts.d.ts.map
package/dist/tts.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tts.d.ts","sourceRoot":"","sources":["../src/tts.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEnD,UAAU,0BAA2B,SAAQ,wBAAwB;IACnE,KAAK,CAAC,EAAE,MAAM,OAAE;CACjB;AAED,UAAU,OAAO;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC5C,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,UAAW,SAAQ,OAAO;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,QAAQ,GACT;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QACL,MAAM,EAAE,eAAe,CAAC;QACxB,MAAM,EAAE,0BAA0B,CAAC;KACpC,CAAC;CACH,GACD;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B,eAAO,MAAM,UAAU,sdA+KtB,CAAC"}
1
+ {"version":3,"file":"tts.d.ts","sourceRoot":"","sources":["../src/tts.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEzD,UAAU,0BAA2B,SAAQ,wBAAwB;IACnE,KAAK,CAAC,EAAE,MAAM,OAAE;CACjB;AAED,UAAU,OAAO;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,sBAAsB,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,UAAW,SAAQ,OAAO;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,KAAK,QAAQ,GACT;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QACL,MAAM,EAAE,eAAe,CAAC;QACxB,MAAM,EAAE,0BAA0B,CAAC;KACpC,CAAC;CACH,GACD;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAI/B,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA6arB,CAAC"}
package/dist/tts.js CHANGED
@@ -5,13 +5,107 @@ const xstate_1 = require("xstate");
5
5
  const getToken_1 = require("./getToken");
6
6
  const TextToSpeech_1 = require("web-speech-cognitive-services/lib/SpeechServices/TextToSpeech");
7
7
  const REGION = "northeurope";
8
- exports.ttsMachine = (0, xstate_1.createMachine)({
9
- id: "tts",
8
+ const UTTERANCE_CHUNK_REGEX = /(^.*([!?]+|([.,]+\s)))/;
9
+ exports.ttsMachine = (0, xstate_1.setup)({
10
10
  types: {},
11
+ actions: {
12
+ ttsStop: ({ context }) => {
13
+ context.wsaTTS.cancel();
14
+ },
15
+ addFiller: (0, xstate_1.assign)(({ context }) => {
16
+ const spaceIndex = context.buffer.lastIndexOf(" ");
17
+ return {
18
+ buffer: context.buffer.substring(0, spaceIndex) +
19
+ " um," +
20
+ context.buffer.substring(spaceIndex),
21
+ };
22
+ }),
23
+ },
24
+ actors: {
25
+ getToken: getToken_1.getToken,
26
+ createEventsFromStream: (0, xstate_1.fromCallback)(({ sendBack, input }) => {
27
+ const eventSource = new EventSource(input.stream);
28
+ eventSource.addEventListener("STREAMING_DONE", (_event) => {
29
+ console.log("received streaming done - closing event stream");
30
+ sendBack({ type: "STREAMING_DONE" });
31
+ eventSource.close();
32
+ });
33
+ eventSource.addEventListener("STREAMING_RESET", (_event) => {
34
+ console.log("received streaming reset");
35
+ });
36
+ eventSource.addEventListener("STREAMING_CHUNK", (event) => {
37
+ console.log("received streaming chunk:", event);
38
+ sendBack({ type: "STREAMING_CHUNK", value: event.data });
39
+ });
40
+ }),
41
+ ponyfill: (0, xstate_1.fromCallback)(({ sendBack, input }) => {
42
+ const ponyfill = (0, TextToSpeech_1.default)({
43
+ audioContext: input.audioContext,
44
+ credentials: {
45
+ region: REGION, // TODO
46
+ authorizationToken: input.azureAuthorizationToken,
47
+ },
48
+ });
49
+ const { speechSynthesis, SpeechSynthesisUtterance } = ponyfill;
50
+ const tts = speechSynthesis;
51
+ const ttsUtterance = SpeechSynthesisUtterance;
52
+ tts.addEventListener("voiceschanged", () => {
53
+ const voices = tts.getVoices();
54
+ if (voices.length > 0) {
55
+ console.debug("[TTS] READY");
56
+ sendBack({
57
+ type: "READY",
58
+ value: { wsaTTS: tts, wsaUtt: ttsUtterance },
59
+ });
60
+ }
61
+ else {
62
+ console.error("[TTS] No voices available");
63
+ sendBack({ type: "ERROR" });
64
+ }
65
+ });
66
+ }),
67
+ start: (0, xstate_1.fromCallback)(({ sendBack, input }) => {
68
+ if (["", " "].includes(input.utterance)) {
69
+ console.debug("[TTS] SPEAK: ", input.utterance);
70
+ input.wsaTTS.speak("");
71
+ }
72
+ else {
73
+ console.debug("[TTS] SPEAK: ", input.utterance);
74
+ const content = wrapSSML(input.utterance, input.voice, input.ttsLexicon, 1); // todo speech rate;
75
+ const utterance = new input.wsaUtt(content);
76
+ utterance.addEventListener("start", () => {
77
+ sendBack({ type: "TTS_STARTED" });
78
+ console.debug("[TTS] TTS_STARTED");
79
+ });
80
+ utterance.addEventListener("end", () => {
81
+ sendBack({ type: "SPEAK_COMPLETE" });
82
+ console.debug("[TTS] SPEAK_COMPLETE");
83
+ });
84
+ input.wsaTTS.speak(utterance);
85
+ }
86
+ }),
87
+ },
88
+ guards: {
89
+ bufferContainsUtterancePartReadyToBeSpoken: ({ context }) => {
90
+ const m = context.buffer.match(UTTERANCE_CHUNK_REGEX);
91
+ return !!m;
92
+ },
93
+ bufferIsNonEmpty: ({ context }) => {
94
+ return !!context.buffer;
95
+ },
96
+ },
97
+ delays: {
98
+ FILLER_DELAY: ({ context }) => {
99
+ return context.agenda.fillerDelay;
100
+ },
101
+ },
102
+ }).createMachine({
103
+ id: "tts",
11
104
  context: ({ input }) => ({
12
105
  ttsDefaultVoice: input.ttsDefaultVoice || "en-US-DavisNeural",
13
106
  audioContext: input.audioContext,
14
107
  azureCredentials: input.azureCredentials,
108
+ buffer: "",
15
109
  }),
16
110
  initial: "GetToken",
17
111
  on: {
@@ -33,9 +127,197 @@ exports.ttsMachine = (0, xstate_1.createMachine)({
33
127
  states: {
34
128
  Idle: {
35
129
  on: {
36
- SPEAK: {
37
- target: "Speaking",
38
- actions: (0, xstate_1.assign)({ agenda: ({ event }) => event.value }),
130
+ SPEAK: [
131
+ {
132
+ target: "BufferedSpeaker",
133
+ guard: ({ event }) => !!event.value.stream,
134
+ actions: (0, xstate_1.assign)({
135
+ agenda: ({ event }) => event.value.fillerDelay
136
+ ? event.value
137
+ : Object.assign(Object.assign({}, event.value), { fillerDelay: 500 }),
138
+ }),
139
+ },
140
+ {
141
+ target: "Speaking",
142
+ actions: (0, xstate_1.assign)({ agenda: ({ event }) => event.value }),
143
+ },
144
+ ],
145
+ },
146
+ },
147
+ BufferedSpeaker: {
148
+ type: "parallel",
149
+ invoke: {
150
+ id: "createEventsFromStream",
151
+ src: "createEventsFromStream",
152
+ input: ({ context }) => context.agenda,
153
+ },
154
+ on: {
155
+ STOP: {
156
+ target: "Idle",
157
+ },
158
+ SPEAK_COMPLETE: [
159
+ {
160
+ guard: (0, xstate_1.stateIn)("#BufferingDone"),
161
+ target: "Idle",
162
+ actions: [(0, xstate_1.sendParent)({ type: "SPEAK_COMPLETE" })],
163
+ },
164
+ ],
165
+ },
166
+ states: {
167
+ Buffer: {
168
+ initial: "BufferIdle",
169
+ states: {
170
+ BufferIdle: {
171
+ id: "BufferIdle",
172
+ entry: [
173
+ ({ event }) => console.debug("=== Entry BufferIdle", event),
174
+ ],
175
+ on: {
176
+ STREAMING_CHUNK: {
177
+ actions: [
178
+ ({ event }) => console.debug("=================STREAMING_CHUNK: BufferIdle => Buffering", event),
179
+ ],
180
+ target: "Buffering",
181
+ },
182
+ },
183
+ },
184
+ Buffering: {
185
+ id: "Buffering",
186
+ on: {
187
+ STREAMING_CHUNK: [
188
+ {
189
+ actions: [
190
+ ({ event }) => console.debug("=================STREAMING_CHUNK: Buffering => Buffering", event),
191
+ ],
192
+ target: "Buffering",
193
+ reenter: true,
194
+ },
195
+ ],
196
+ STREAMING_DONE: [
197
+ {
198
+ target: "BufferingDone",
199
+ actions: [
200
+ ({ event }) => console.debug("=================STREAMING_DONE: Buffering => BufferingDone", event),
201
+ ],
202
+ },
203
+ ],
204
+ },
205
+ entry: [
206
+ ({ event }) => console.debug("=== Entry Buffering", event),
207
+ (0, xstate_1.assign)({
208
+ buffer: ({ context, event }) => context.buffer + event.value,
209
+ }),
210
+ ],
211
+ },
212
+ BufferingDone: {
213
+ entry: [
214
+ ({ event }) => console.debug("=== Entry BufferingDone", event),
215
+ ],
216
+ id: "BufferingDone",
217
+ },
218
+ },
219
+ },
220
+ Speaker: {
221
+ initial: "SpeakingIdle",
222
+ states: {
223
+ SpeakingIdle: {
224
+ entry: [
225
+ ({ event }) => console.debug("=== Entry SpeakingIdle", event),
226
+ ],
227
+ always: [
228
+ {
229
+ target: "Speak",
230
+ guard: (0, xstate_1.stateIn)("#BufferingDone"),
231
+ actions: [
232
+ ({ event }) => console.debug("========== in BufferingDone: SpeakingIdle => Speak", event),
233
+ (0, xstate_1.assign)({
234
+ utteranceFromStream: ({ context }) => context.buffer,
235
+ }),
236
+ (0, xstate_1.assign)({
237
+ buffer: "",
238
+ }),
239
+ ],
240
+ },
241
+ {
242
+ target: "PrepareSpeech",
243
+ guard: "bufferContainsUtterancePartReadyToBeSpoken",
244
+ },
245
+ ],
246
+ after: {
247
+ FILLER_DELAY: {
248
+ target: "SpeakingIdle",
249
+ reenter: true,
250
+ actions: "addFiller",
251
+ guard: ({ context }) => context.buffer.includes(" "),
252
+ },
253
+ },
254
+ },
255
+ PrepareSpeech: {
256
+ entry: [
257
+ ({ event }) => console.debug("=== Entry PrepareSpeech", event),
258
+ (0, xstate_1.assign)(({ context }) => {
259
+ let utterancePart;
260
+ let restOfBuffer;
261
+ const match = context.buffer.match(UTTERANCE_CHUNK_REGEX);
262
+ utterancePart = match[0];
263
+ restOfBuffer = context.buffer.substring(utterancePart.length);
264
+ return {
265
+ buffer: restOfBuffer,
266
+ utteranceFromStream: utterancePart,
267
+ };
268
+ }),
269
+ ],
270
+ always: [
271
+ {
272
+ target: "Speak",
273
+ },
274
+ ],
275
+ },
276
+ Speak: {
277
+ entry: [
278
+ ({ event }) => console.debug("=== Entry Speak", event),
279
+ ],
280
+ initial: "Go",
281
+ on: {
282
+ TTS_STARTED: {
283
+ actions: (0, xstate_1.sendParent)({ type: "TTS_STARTED" }),
284
+ },
285
+ SPEAK_COMPLETE: [
286
+ {
287
+ guard: (0, xstate_1.stateIn)("#Buffering"),
288
+ target: "SpeakingIdle",
289
+ },
290
+ {
291
+ guard: "bufferIsNonEmpty",
292
+ target: "SpeakingIdle",
293
+ },
294
+ ],
295
+ },
296
+ states: {
297
+ Go: {
298
+ invoke: {
299
+ src: "start",
300
+ input: ({ context }) => ({
301
+ wsaTTS: context.wsaTTS,
302
+ wsaUtt: context.wsaUtt,
303
+ ttsLexicon: context.ttsLexicon,
304
+ voice: context.agenda.voice || context.ttsDefaultVoice,
305
+ utterance: context.utteranceFromStream,
306
+ }),
307
+ },
308
+ on: {
309
+ CONTROL: "Paused",
310
+ },
311
+ exit: "ttsStop",
312
+ },
313
+ Paused: {
314
+ on: {
315
+ CONTROL: "Go",
316
+ },
317
+ },
318
+ },
319
+ },
320
+ },
39
321
  },
40
322
  },
41
323
  },
@@ -113,61 +395,6 @@ exports.ttsMachine = (0, xstate_1.createMachine)({
113
395
  },
114
396
  },
115
397
  },
116
- }, {
117
- actions: {
118
- ttsStop: ({ context }) => {
119
- context.wsaTTS.cancel();
120
- },
121
- },
122
- actors: {
123
- getToken: getToken_1.getToken,
124
- ponyfill: (0, xstate_1.fromCallback)(({ sendBack, input }) => {
125
- const ponyfill = (0, TextToSpeech_1.default)({
126
- audioContext: input.audioContext,
127
- credentials: {
128
- region: REGION, // TODO
129
- authorizationToken: input.azureAuthorizationToken,
130
- },
131
- });
132
- const { speechSynthesis, SpeechSynthesisUtterance } = ponyfill;
133
- const tts = speechSynthesis;
134
- const ttsUtterance = SpeechSynthesisUtterance;
135
- tts.addEventListener("voiceschanged", () => {
136
- const voices = tts.getVoices();
137
- if (voices.length > 0) {
138
- console.debug("[TTS] READY");
139
- sendBack({
140
- type: "READY",
141
- value: { wsaTTS: tts, wsaUtt: ttsUtterance },
142
- });
143
- }
144
- else {
145
- console.error("[TTS] No voices available");
146
- sendBack({ type: "ERROR" });
147
- }
148
- });
149
- }),
150
- start: (0, xstate_1.fromCallback)(({ sendBack, input }) => {
151
- if (["", " "].includes(input.utterance)) {
152
- console.debug("[TTS] SPEAK: ", input.utterance);
153
- input.wsaTTS.speak("");
154
- }
155
- else {
156
- console.debug("[TTS] SPEAK: ", input.utterance);
157
- const content = wrapSSML(input.utterance, input.voice, input.ttsLexicon, 1); // todo speech rate;
158
- const utterance = new input.wsaUtt(content);
159
- utterance.addEventListener("start", () => {
160
- sendBack({ type: "TTS_STARTED" });
161
- console.debug("[TTS] TTS_STARTED");
162
- });
163
- utterance.addEventListener("end", () => {
164
- sendBack({ type: "SPEAK_COMPLETE" });
165
- console.debug("[TTS] SPEAK_COMPLETE");
166
- });
167
- input.wsaTTS.speak(utterance);
168
- }
169
- }),
170
- },
171
398
  });
172
399
  const wrapSSML = (text, voice, lexicon, speechRate) => {
173
400
  let content = `<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US"><voice name="${voice}">`;
package/dist/types.d.ts CHANGED
@@ -25,7 +25,8 @@ export interface Settings {
25
25
  export interface Agenda {
26
26
  utterance: string;
27
27
  voice?: string;
28
- stream?: ReadableStream<string>;
28
+ stream?: string;
29
+ fillerDelay?: number;
29
30
  }
30
31
  export interface Hypothesis {
31
32
  utterance: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,sBAAsB;CAAG;AAEnE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;IACrE,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,GAAG,wBAAwB,CAAC;CAC1C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,sBAAsB;CAAG;AAEnE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;IACrE,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,GAAG,wBAAwB,CAAC;CAC1C"}
package/package.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "speechstate",
3
- "version": "2.0.0-beta.7",
3
+ "version": "2.0.0",
4
4
  "license": "GPL-3.0",
5
5
  "homepage": "http://localhost/speechstate",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
- "files": ["/dist"],
8
+ "files": [
9
+ "/dist"
10
+ ],
9
11
  "dependencies": {
10
12
  "@statelyai/inspect": "^0.2.3",
11
13
  "microsoft-cognitiveservices-speech-sdk": "^1.31.0",
@@ -18,10 +20,17 @@
18
20
  "test": "jest --silent=false"
19
21
  },
20
22
  "eslintConfig": {
21
- "extends": ["react-app", "react-app/jest"]
23
+ "extends": [
24
+ "react-app",
25
+ "react-app/jest"
26
+ ]
22
27
  },
23
28
  "browserslist": {
24
- "production": [">0.2%", "not dead", "not op_mini all"],
29
+ "production": [
30
+ ">0.2%",
31
+ "not dead",
32
+ "not op_mini all"
33
+ ],
25
34
  "development": [
26
35
  "last 1 chrome version",
27
36
  "last 1 firefox version",
package/README.plantuml DELETED
@@ -1,3 +0,0 @@
1
- @startuml
2
- Bob -> Alice : Hello World!
3
- @enduml
package/README.png DELETED
Binary file