@christianriedl/utils 1.0.94 → 1.0.96

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/dist/audio.d.ts CHANGED
@@ -1,16 +1,10 @@
1
- export interface IStop {
2
- stop(): void;
3
- running: boolean;
4
- }
5
- export interface IPause extends IStop {
6
- resume(): void;
7
- pause(): void;
8
- paused: boolean;
9
- }
1
+ import { IStop, IPause, ISpeechService, SpeechSynthesisParams } from './iAudio';
10
2
  export declare class Audio {
11
3
  static recordAudio(endThreshold: number, onEnd: (blob: Blob) => void, onStateChange?: () => void, onError?: (e: string) => void): Promise<IPause>;
4
+ static voices: SpeechSynthesisVoice[];
12
5
  static getSpeechSynthesizeVoices(): Promise<SpeechSynthesisVoice[]>;
13
- static speechSynthesize(text: string, voiceName?: string, language?: string, rate?: number, pitch?: number, onEnd?: () => void, onStateChange?: () => void, onError?: (e: string) => void): Promise<IPause>;
6
+ static speechSynthesize(text: string, params: SpeechSynthesisParams): Promise<IPause>;
14
7
  static speechTranscribe(language?: string, retStop?: IStop): Promise<SpeechRecognitionResult>;
15
8
  static playAudio(audioData: ArrayBuffer, onEnd?: () => void): Promise<IStop>;
9
+ static getSpeechService(): ISpeechService;
16
10
  }
package/dist/audio.js CHANGED
@@ -41,53 +41,62 @@ export class Audio {
41
41
  get running() { return recorder.state == 'recording'; }
42
42
  };
43
43
  }
44
+ static voices;
44
45
  static getSpeechSynthesizeVoices() {
45
46
  const synth = window.speechSynthesis;
46
47
  var promise = new Promise(function (resolve, reject) {
47
- synth.onvoiceschanged = (ev) => {
48
- const voices = synth.getVoices();
49
- resolve(voices);
50
- };
48
+ if (Audio.voices) {
49
+ resolve(Audio.voices);
50
+ }
51
+ else {
52
+ synth.onvoiceschanged = (ev) => {
53
+ Audio.voices = synth.getVoices();
54
+ resolve(Audio.voices);
55
+ };
56
+ }
51
57
  });
52
58
  return promise;
53
59
  }
54
- static async speechSynthesize(text, voiceName, language, rate, pitch, onEnd, onStateChange, onError) {
60
+ static async speechSynthesize(text, params) {
55
61
  let voice;
56
62
  const synth = window.speechSynthesis;
57
63
  const utterance = new SpeechSynthesisUtterance();
58
64
  utterance.text = text;
59
- if (voiceName || language) {
65
+ if (params.voiceName || params.language) {
60
66
  const voices = await Audio.getSpeechSynthesizeVoices();
61
- const voice = voiceName ? voices.find((v) => v.name == voiceName) : voices.find((v) => v.lang == language);
67
+ const voice = params.voiceName ? voices.find((v) => v.name == params.voiceName) : voices.find((v) => v.lang == params.language);
62
68
  utterance.voice = voice ? voice : null;
63
69
  }
64
- if (rate)
70
+ if (params.rate)
65
71
  utterance.rate = 1;
66
- if (pitch)
72
+ if (params.pitch)
67
73
  utterance.pitch = 1;
68
- if (language)
74
+ if (params.language)
69
75
  utterance.lang = "language";
70
- if (onEnd) {
76
+ if (params.onEnd || params.onStateChange) {
71
77
  utterance.onend = (ev) => {
72
- onEnd();
73
- onStateChange?.();
78
+ params.onEnd?.();
79
+ params.onStateChange?.();
74
80
  };
75
81
  }
76
- if (onStateChange) {
77
- utterance.onpause = (ev) => onStateChange();
78
- utterance.onresume = (ev) => onStateChange();
79
- utterance.onstart = (ev) => onStateChange();
82
+ if (params.onStateChange) {
83
+ utterance.onpause = (ev) => params.onStateChange();
84
+ utterance.onresume = (ev) => params.onStateChange();
85
+ utterance.onstart = (ev) => params.onStateChange();
80
86
  }
81
- if (onError) {
87
+ if (params.onError) {
82
88
  utterance.onerror = (ev) => {
83
- onError(ev.error);
89
+ params.onError(ev.error);
84
90
  };
85
91
  }
86
92
  synth.speak(utterance);
87
93
  return {
88
94
  stop: () => {
89
- if (synth.pending || synth.speaking)
95
+ if (synth.pending || synth.speaking) {
90
96
  synth.cancel();
97
+ params.onEnd?.();
98
+ params.onStateChange?.();
99
+ }
91
100
  },
92
101
  pause: () => {
93
102
  if (!synth.paused)
@@ -150,5 +159,17 @@ export class Audio {
150
159
  get running() { return !ended; }
151
160
  };
152
161
  }
162
+ static getSpeechService() {
163
+ const service = {
164
+ transcribe: async (retStop, language) => {
165
+ const result = await Audio.speechTranscribe(language, retStop);
166
+ return result.item(0).transcript;
167
+ },
168
+ synthesize: (text, params) => {
169
+ return Audio.speechSynthesize(text, params);
170
+ }
171
+ };
172
+ return service;
173
+ }
153
174
  }
154
175
  //# sourceMappingURL=audio.js.map
package/dist/audio.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface IStop {
2
+ stop(): void;
3
+ running: boolean;
4
+ }
5
+ export interface IPause extends IStop {
6
+ resume(): void;
7
+ pause(): void;
8
+ paused: boolean;
9
+ }
10
+ export interface SpeechSynthesisParams {
11
+ voiceName?: string;
12
+ language?: string;
13
+ rate?: number;
14
+ pitch?: number;
15
+ onEnd?: () => void;
16
+ onStateChange?: () => void;
17
+ onError?: (e: string) => void;
18
+ }
19
+ export interface ISpeechService {
20
+ transcribe(retStop: IStop, language?: string): Promise<string>;
21
+ synthesize(text: string, params: SpeechSynthesisParams): Promise<IStop>;
22
+ }
package/dist/iAudio.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=iAudio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iAudio.js","sourceRoot":"","sources":["../src/iAudio.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { InjectionKey } from 'vue';
2
+ import { ISpeechService } from './iAudio';
3
+ export declare const openAISymbol: InjectionKey<IOpenAIService>;
4
+ export interface ICompleteData {
5
+ choices: string[];
6
+ }
7
+ export interface IOpenAIService extends ISpeechService {
8
+ complete(prompt: string): Promise<ICompleteData>;
9
+ }
@@ -0,0 +1,2 @@
1
+ export const openAISymbol = Symbol('openai');
2
+ //# sourceMappingURL=iOpenAI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iOpenAI.js","sourceRoot":"","sources":["../src/iOpenAI.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,YAAY,GAAiC,MAAM,CAAC,QAAQ,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,8 @@ export * from './types';
2
2
  export * from './iLogger';
3
3
  export * from './iMarshal';
4
4
  export * from './iStatistics';
5
+ export * from './iAudio';
6
+ export * from './iOpenAI';
5
7
  export * from './helper';
6
8
  export * from './localStorage';
7
9
  export * from './dummyStorage';
package/dist/index.js CHANGED
@@ -2,6 +2,8 @@ export * from './types';
2
2
  export * from './iLogger';
3
3
  export * from './iMarshal';
4
4
  export * from './iStatistics';
5
+ export * from './iAudio';
6
+ export * from './iOpenAI';
5
7
  export * from './helper';
6
8
  export * from './localStorage';
7
9
  export * from './dummyStorage';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAqB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAqB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@christianriedl/utils",
3
- "version": "1.0.94",
3
+ "version": "1.0.96",
4
4
  "description": "Interfaces, local storage, service worker, configuration, application state",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,20 +1,29 @@
1
1
  <script setup lang="ts">
2
2
  import { ref, watch, inject, toRef, onMounted } from 'vue'
3
- import { Audio, appConfigSymbol, IPause } from '@christianriedl/utils';
3
+ import { Audio, SpeechInterfaceParams, appConfigSymbol, IPause } from '@christianriedl/utils';
4
4
 
5
- const props = defineProps<{ text: string, language?: string, autoStart?: boolean }>();
5
+ const props = defineProps<{ text: string, language?: string, autostart?: boolean }>();
6
6
 
7
7
  const appConfig = inject(appConfigSymbol)!;
8
8
  const text = toRef(props, "text");
9
- const voiceName = ref(appConfig.localStorage.getItemString("ttsVoice", ""));
10
- const pitch = ref(appConfig.localStorage.getItemNumber("ttsPitch", 10) / 10);
11
- const rate = ref(appConfig.localStorage.getItemNumber("ttsRate", 10) / 10);
12
9
  const voice = ref<SpeechSynthesisVoice>(undefined as unknown as SpeechSynthesisVoice)
13
10
  const voices = ref<SpeechSynthesisVoice[]>([])
14
11
  const configure = ref(false);
15
12
  const paused = ref(false);
16
- const ended = ref(false);
13
+ const ended = ref(true);
17
14
  let pause: IPause;
15
+ const params: SpeechInterfaceParams = {
16
+ voiceName: appConfig.localStorage.getItemString("ttsVoice", ""),
17
+ pitch: appConfig.localStorage.getItemNumber("ttsPitch", 10) / 10,
18
+ rate: appConfig.localStorage.getItemNumber("ttsRate", 10) / 10,
19
+ onEnd: () => {
20
+ ended.value = true
21
+ },
22
+ onStateChange: () => {
23
+ paused.value = pause.paused;
24
+ ended.value = !pause.running;
25
+ }
26
+ }
18
27
 
19
28
  async function onPlay() {
20
29
  if (pause && pause.paused) {
@@ -23,14 +32,7 @@
23
32
  }
24
33
  else {
25
34
  paused.value = ended.value = false;
26
- pause = Audio.speechSynthesize(text.value, voiceName.value, props.language, rate.value, pitch.value,
27
- () => {
28
- ended.value = true
29
- },
30
- () => {
31
- paused.value = pause.pause;
32
- ended.value = !pause.running;
33
- });
35
+ pause = await Audio.speechSynthesize(text.value, params);
34
36
  }
35
37
  }
36
38
 
@@ -59,7 +61,7 @@
59
61
  voices.value = await Audio.getSpeechSynthesizeVoices();
60
62
  }
61
63
  }
62
- if (props.autoStart) {
64
+ if (props.autostart) {
63
65
  watch(text, text => { if (text) onPlay(); });
64
66
  }
65
67
  </script>
@@ -67,7 +69,7 @@
67
69
  <template>
68
70
  <v-row dense>
69
71
  <v-col cols="12">
70
- <v-btn v-if="speech.status.value == 'play'" @click.stop="onPause">
72
+ <v-btn v-if="!paused && !ended" @click.stop="onPause">
71
73
  <v-icon icon="$pause" />
72
74
  </v-btn>
73
75
  <v-btn v-else @click.stop="onPlay">