@christianriedl/utils 1.0.95 → 1.0.97

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,17 +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>;
12
4
  static voices: SpeechSynthesisVoice[];
13
5
  static getSpeechSynthesizeVoices(): Promise<SpeechSynthesisVoice[]>;
14
- 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>;
15
7
  static speechTranscribe(language?: string, retStop?: IStop): Promise<SpeechRecognitionResult>;
16
8
  static playAudio(audioData: ArrayBuffer, onEnd?: () => void): Promise<IStop>;
9
+ static getSpeechService(): ISpeechService;
17
10
  }
package/dist/audio.js CHANGED
@@ -57,36 +57,36 @@ export class Audio {
57
57
  });
58
58
  return promise;
59
59
  }
60
- static async speechSynthesize(text, voiceName, language, rate, pitch, onEnd, onStateChange, onError) {
60
+ static async speechSynthesize(text, params) {
61
61
  let voice;
62
62
  const synth = window.speechSynthesis;
63
63
  const utterance = new SpeechSynthesisUtterance();
64
64
  utterance.text = text;
65
- if (voiceName || language) {
65
+ if (params.voiceName || params.language) {
66
66
  const voices = await Audio.getSpeechSynthesizeVoices();
67
- 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);
68
68
  utterance.voice = voice ? voice : null;
69
69
  }
70
- if (rate)
70
+ if (params.rate)
71
71
  utterance.rate = 1;
72
- if (pitch)
72
+ if (params.pitch)
73
73
  utterance.pitch = 1;
74
- if (language)
74
+ if (params.language)
75
75
  utterance.lang = "language";
76
- if (onEnd || onStateChange) {
76
+ if (params.onEnd || params.onStateChange) {
77
77
  utterance.onend = (ev) => {
78
- onEnd?.();
79
- onStateChange?.();
78
+ params.onEnd?.();
79
+ params.onStateChange?.();
80
80
  };
81
81
  }
82
- if (onStateChange) {
83
- utterance.onpause = (ev) => onStateChange();
84
- utterance.onresume = (ev) => onStateChange();
85
- 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();
86
86
  }
87
- if (onError) {
87
+ if (params.onError) {
88
88
  utterance.onerror = (ev) => {
89
- onError(ev.error);
89
+ params.onError(ev.error);
90
90
  };
91
91
  }
92
92
  synth.speak(utterance);
@@ -94,8 +94,8 @@ export class Audio {
94
94
  stop: () => {
95
95
  if (synth.pending || synth.speaking) {
96
96
  synth.cancel();
97
- onEnd?.();
98
- onStateChange?.();
97
+ params.onEnd?.();
98
+ params.onStateChange?.();
99
99
  }
100
100
  },
101
101
  pause: () => {
@@ -159,5 +159,17 @@ export class Audio {
159
159
  get running() { return !ended; }
160
160
  };
161
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
+ }
162
174
  }
163
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 getOpenAISymbol: 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 getOpenAISymbol = Symbol('get-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,eAAe,GAAiC,MAAM,CAAC,YAAY,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.95",
3
+ "version": "1.0.97",
4
4
  "description": "Interfaces, local storage, service worker, configuration, application state",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,48 @@
1
+ <script setup lang="ts">
2
+ import { inject, ref, toRef, computed } from 'vue';
3
+ import { appStateSymbol, appConfigSymbol, getOpenAISymbol, IOpenAIService, ICompleteData, ESize } from '@christianriedl/utils';
4
+ import Microphone from '@christianriedl/utils/src/components/Microphone.vue';
5
+
6
+ const props = defineProps<{ prompt: string }>();
7
+
8
+ const getOpenAI = inject(getOpenAISymbol)!;
9
+ const openAI = getOpenAI();
10
+ const appState = inject(appStateSymbol)!;
11
+ const appConfig = inject(appConfigSymbol)!;
12
+ const question = toRef(props, "prompt");
13
+ const replyLines = ref<string[]>([]);
14
+ const qcols = computed(() => appState.size.value >= ESize.md ? 11 : 10);
15
+
16
+ async function onComplete() {
17
+ replyLines.value = [ "WAITING ..." ];
18
+ const answer = await openAI.complete(question.value);
19
+ if (answer && answer.choices && answer.choices.length > 0) {
20
+ replyLines.value = answer.choices[0].split('\n');
21
+ }
22
+ else {
23
+ replyLines.value = [ "NO CORRECT ANSWER" ];
24
+ }
25
+ }
26
+ function onResult(result: SpeechRecognitionResult) {
27
+ question.value = result.item(0).transcript;
28
+ }
29
+
30
+ </script>
31
+
32
+ <template>
33
+ <v-container fluid class="bg-office">
34
+ <v-row dense align="center" class="font-weight-bold">
35
+ <v-col :cols="qcols">
36
+ <v-text-field name="subject" type="text" v-model="question" density="compact" hide-details></v-text-field>
37
+ </v-col>
38
+ <v-col :cols="12 - qcols">
39
+ <v-btn @click="onComplete">AI</v-btn>
40
+ <microphone lang="de" @result="onResult"></microphone>
41
+ </v-col>
42
+ </v-row>
43
+ <v-row v-for="(line, index) in replyLines" :key=index dense align="center">
44
+ <v-col cols="12">{{line}}</v-col>
45
+ </v-row>
46
+ </v-container>
47
+ </template>
48
+
@@ -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
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
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 = await Audio.speechSynthesize(text.value, voiceName.value, props.language, rate.value, pitch.value,
27
- () => {
28
- ended.value = true
29
- },
30
- () => {
31
- paused.value = pause.paused;
32
- ended.value = !pause.running;
33
- });
35
+ pause = await Audio.speechSynthesize(text.value, params);
34
36
  }
35
37
  }
36
38