echogarden 2.2.1 → 2.3.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.
@@ -0,0 +1,127 @@
1
+ import { request } from 'gaxios';
2
+ import * as FFMpegTranscoder from '../codecs/FFMpegTranscoder.js';
3
+ import { Logger } from '../utilities/Logger.js';
4
+ import { logToStderr } from '../utilities/Utilities.js';
5
+ import { extendDeep } from '../utilities/ObjectUtilities.js';
6
+ const log = logToStderr;
7
+ export async function synthesize(text, modelId, options) {
8
+ const logger = new Logger();
9
+ logger.start('Request synthesis from Deepgram');
10
+ options = extendDeep(defaultDeepgramTTSOptions, options);
11
+ let response;
12
+ try {
13
+ response = await request({
14
+ url: `https://api.deepgram.com/v1/speak`,
15
+ params: {
16
+ model: modelId,
17
+ encoding: 'mp3',
18
+ bit_rate: 48000,
19
+ },
20
+ method: 'POST',
21
+ headers: {
22
+ 'Content-Type': 'application/json',
23
+ 'Authorization': `Token ${options.apiKey}`,
24
+ },
25
+ data: {
26
+ text,
27
+ },
28
+ responseType: 'arraybuffer'
29
+ });
30
+ }
31
+ catch (e) {
32
+ const response = e.response;
33
+ if (response) {
34
+ logger.log(`Request failed with status code ${response.status}`);
35
+ if (response.data) {
36
+ logger.log(`Server responded with:`);
37
+ logger.log(response.data);
38
+ }
39
+ }
40
+ throw e;
41
+ }
42
+ logger.start('Decode synthesized audio');
43
+ const rawAudio = await FFMpegTranscoder.decodeToChannels(new Uint8Array(response.data));
44
+ logger.end();
45
+ return { rawAudio };
46
+ }
47
+ export async function getVoiceList() {
48
+ return voiceList;
49
+ }
50
+ export const defaultDeepgramTTSOptions = {
51
+ apiKey: undefined,
52
+ };
53
+ export const voiceList = [
54
+ {
55
+ name: 'Asteria',
56
+ deepgramModelId: 'aura-asteria-en',
57
+ languages: ['en-US', 'en'],
58
+ gender: 'female',
59
+ },
60
+ {
61
+ name: 'Luna',
62
+ deepgramModelId: 'aura-luna-en',
63
+ languages: ['en-US', 'en'],
64
+ gender: 'female',
65
+ },
66
+ {
67
+ name: 'Stella',
68
+ deepgramModelId: 'aura-stella-en',
69
+ languages: ['en-US', 'en'],
70
+ gender: 'female',
71
+ },
72
+ {
73
+ name: 'Athena',
74
+ deepgramModelId: 'aura-athena-en',
75
+ languages: ['en-GB', 'en'],
76
+ gender: 'female',
77
+ },
78
+ {
79
+ name: 'Hera',
80
+ deepgramModelId: 'aura-hera-en',
81
+ languages: ['en-US', 'en'],
82
+ gender: 'female',
83
+ },
84
+ {
85
+ name: 'Orion',
86
+ deepgramModelId: 'aura-orion-en',
87
+ languages: ['en-US', 'en'],
88
+ gender: 'male',
89
+ },
90
+ {
91
+ name: 'Arcas',
92
+ deepgramModelId: 'aura-arcas-en',
93
+ languages: ['en-US', 'en'],
94
+ gender: 'male',
95
+ },
96
+ {
97
+ name: 'Perseus',
98
+ deepgramModelId: 'aura-perseus-en',
99
+ languages: ['en-US', 'en'],
100
+ gender: 'male',
101
+ },
102
+ {
103
+ name: 'Angus',
104
+ deepgramModelId: 'aura-angus-en',
105
+ languages: ['en-US', 'en'],
106
+ gender: 'male',
107
+ },
108
+ {
109
+ name: 'Orpheus',
110
+ deepgramModelId: 'aura-orpheus-en',
111
+ languages: ['en-US', 'en'],
112
+ gender: 'male',
113
+ },
114
+ {
115
+ name: 'Helios',
116
+ deepgramModelId: 'aura-helios-en',
117
+ languages: ['en-US', 'en'],
118
+ gender: 'male',
119
+ },
120
+ {
121
+ name: 'Zeus',
122
+ deepgramModelId: 'aura-zeus-en',
123
+ languages: ['en-US', 'en'],
124
+ gender: 'male',
125
+ },
126
+ ];
127
+ //# sourceMappingURL=DeepgramTTS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeepgramTTS.js","sourceRoot":"","sources":["../../src/synthesis/DeepgramTTS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,KAAK,gBAAgB,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAE5D,MAAM,GAAG,GAAG,WAAW,CAAA;AAEvB,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,OAA2B;IAC1F,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;IAC3B,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;IAE/C,OAAO,GAAG,UAAU,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAA;IAExD,IAAI,QAA6B,CAAA;IAEjC,IAAI,CAAC;QACJ,QAAQ,GAAG,MAAM,OAAO,CAAM;YAC7B,GAAG,EAAE,mCAAmC;YAExC,MAAM,EAAE;gBACP,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,KAAK;aACf;YAED,MAAM,EAAE,MAAM;YAEd,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,SAAS,OAAO,CAAC,MAAM,EAAE;aAC1C;YAED,IAAI,EAAE;gBACL,IAAI;aACJ;YAED,YAAY,EAAE,aAAa;SAC3B,CAAC,CAAA;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAA;QAE3B,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,mCAAmC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YAEhE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;gBACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;QACF,CAAC;QAED,MAAM,CAAC,CAAA;IACR,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACxC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAEvF,MAAM,CAAC,GAAG,EAAE,CAAA;IAEZ,OAAO,EAAE,QAAQ,EAAE,CAAA;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,OAAO,SAAS,CAAA;AACjB,CAAC;AAMD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACxC,MAAM,EAAE,SAAS;CACjB,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAqB;IAC1C;QACC,IAAI,EAAE,SAAS;QACf,eAAe,EAAE,iBAAiB;QAClC,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,QAAQ;KAChB;IACD;QACC,IAAI,EAAE,MAAM;QACZ,eAAe,EAAE,cAAc;QAC/B,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,QAAQ;KAChB;IACD;QACC,IAAI,EAAE,QAAQ;QACd,eAAe,EAAE,gBAAgB;QACjC,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,QAAQ;KAChB;IACD;QACC,IAAI,EAAE,QAAQ;QACd,eAAe,EAAE,gBAAgB;QACjC,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,QAAQ;KAChB;IACD;QACC,IAAI,EAAE,MAAM;QACZ,eAAe,EAAE,cAAc;QAC/B,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,QAAQ;KAChB;IACD;QACC,IAAI,EAAE,OAAO;QACb,eAAe,EAAE,eAAe;QAChC,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,MAAM;KACd;IACD;QACC,IAAI,EAAE,OAAO;QACb,eAAe,EAAE,eAAe;QAChC,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,MAAM;KACd;IACD;QACC,IAAI,EAAE,SAAS;QACf,eAAe,EAAE,iBAAiB;QAClC,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,MAAM;KACd;IACD;QACC,IAAI,EAAE,OAAO;QACb,eAAe,EAAE,eAAe;QAChC,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,MAAM;KACd;IACD;QACC,IAAI,EAAE,SAAS;QACf,eAAe,EAAE,iBAAiB;QAClC,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,MAAM;KACd;IACD;QACC,IAAI,EAAE,QAAQ;QACd,eAAe,EAAE,gBAAgB;QACjC,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,MAAM;KACd;IACD;QACC,IAAI,EAAE,MAAM;QACZ,eAAe,EAAE,cAAc;QAC/B,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1B,MAAM,EAAE,MAAM;KACd;CACD,CAAA"}
@@ -1,23 +1,29 @@
1
1
  import { SynthesisVoice } from '../api/API.js';
2
- export declare function synthesize(text: string, voiceId: string, modelId: string, options: ElevenLabsTTSOptions): Promise<{
2
+ import { Timeline } from '../utilities/Timeline.js';
3
+ export declare function synthesize(text: string, voiceId: string, language: string, options: ElevenLabsTTSOptions): Promise<{
3
4
  rawAudio: {
4
5
  audioChannels: Float32Array<ArrayBufferLike>[];
5
6
  sampleRate: number;
6
7
  };
8
+ timeline: Timeline | undefined;
7
9
  }>;
8
10
  export declare function getVoiceList(apiKey: string): Promise<SynthesisVoice[]>;
9
11
  export interface ElevenLabsTTSOptions {
10
12
  apiKey?: string;
13
+ modelId?: string;
11
14
  stability?: number;
12
15
  similarityBoost?: number;
13
16
  style?: number;
14
17
  useSpeakerBoost?: boolean;
18
+ seed?: number;
15
19
  }
16
20
  export declare const defaultElevenLabsTTSOptions: {
17
21
  apiKey: undefined;
22
+ modelId: string;
18
23
  stability: number;
19
24
  similarityBoost: number;
20
25
  style: number;
21
26
  useSpeakerBoost: boolean;
27
+ seed: undefined;
22
28
  };
23
- export declare const supporteMultilingualLanguages: string[];
29
+ export declare const supportedLanguagesInMultilingualModels: string[];
@@ -3,31 +3,37 @@ import * as FFMpegTranscoder from '../codecs/FFMpegTranscoder.js';
3
3
  import { Logger } from '../utilities/Logger.js';
4
4
  import { logToStderr } from '../utilities/Utilities.js';
5
5
  import { extendDeep } from '../utilities/ObjectUtilities.js';
6
+ import { decodeBase64 } from '../encodings/Base64.js';
7
+ import { isWordOrSymbolWord, splitToWords } from '../nlp/Segmentation.js';
6
8
  const log = logToStderr;
7
- export async function synthesize(text, voiceId, modelId, options) {
9
+ export async function synthesize(text, voiceId, language, options) {
8
10
  const logger = new Logger();
9
11
  logger.start('Request synthesis from ElevenLabs');
10
12
  options = extendDeep(defaultElevenLabsTTSOptions, options);
11
13
  let response;
12
14
  try {
13
15
  response = await request({
14
- url: `https://api.elevenlabs.io/v1/text-to-speech/${voiceId}`,
16
+ url: `https://api.elevenlabs.io/v1/text-to-speech/${voiceId}/with-timestamps`,
15
17
  method: 'POST',
16
18
  headers: {
17
19
  'accept': 'audio/mpeg',
18
20
  'xi-api-key': options.apiKey,
19
21
  },
22
+ params: {
23
+ output_format: 'mp3_44100_64',
24
+ },
20
25
  data: {
21
26
  text,
22
- model_id: modelId,
27
+ model_id: options.modelId,
23
28
  voice_setting: {
24
29
  stability: options.stability,
25
30
  similarity_boost: options.similarityBoost,
26
31
  style: options.style,
27
- use_speaker_boost: options.useSpeakerBoost
28
- }
32
+ use_speaker_boost: options.useSpeakerBoost,
33
+ },
34
+ seed: options.seed
29
35
  },
30
- responseType: 'arraybuffer'
36
+ responseType: 'json'
31
37
  });
32
38
  }
33
39
  catch (e) {
@@ -42,9 +48,32 @@ export async function synthesize(text, voiceId, modelId, options) {
42
48
  throw e;
43
49
  }
44
50
  logger.start('Decode synthesized audio');
45
- const rawAudio = await FFMpegTranscoder.decodeToChannels(new Uint8Array(response.data));
51
+ const audioData = decodeBase64(response.data.audio_base64);
52
+ const rawAudio = await FFMpegTranscoder.decodeToChannels(audioData);
53
+ let timeline;
54
+ const characters = response.data.alignment?.characters;
55
+ const characterStartTimes = response.data.alignment?.character_start_times_seconds;
56
+ const characterEndTimes = response.data.alignment?.character_end_times_seconds;
57
+ if (characters && characterStartTimes && characterEndTimes) {
58
+ logger.start('Create timeline from returned character timings');
59
+ const referenceText = characters.join('');
60
+ const words = (await splitToWords(referenceText, language)).filter(w => isWordOrSymbolWord(w));
61
+ timeline = [];
62
+ let offset = 0;
63
+ for (const word of words) {
64
+ const wordStartIndex = referenceText.indexOf(word, offset);
65
+ const wordEndIndex = wordStartIndex + word.length;
66
+ timeline.push({
67
+ type: 'word',
68
+ text: word,
69
+ startTime: characterStartTimes[wordStartIndex],
70
+ endTime: characterEndTimes[wordEndIndex] ?? characterEndTimes[wordEndIndex - 1]
71
+ });
72
+ offset = wordEndIndex;
73
+ }
74
+ }
46
75
  logger.end();
47
- return { rawAudio };
76
+ return { rawAudio, timeline };
48
77
  }
49
78
  export async function getVoiceList(apiKey) {
50
79
  const response = await request({
@@ -56,48 +85,77 @@ export async function getVoiceList(apiKey) {
56
85
  },
57
86
  responseType: 'json'
58
87
  });
59
- const elevenlabsVoices = response.data.voices;
60
- const voices = elevenlabsVoices.map(elevenlabsVoice => {
61
- const modelId = elevenlabsVoice?.high_quality_base_model_ids?.[0] ?? 'eleven_monolingual_v1';
62
- const accent = elevenlabsVoice?.labels?.accent;
63
- const gender = elevenlabsVoice?.labels?.gender ?? 'unknown';
88
+ const elevenLabsVoices = response.data.voices;
89
+ const voices = elevenLabsVoices.map(elevenLabsVoice => {
90
+ const gender = elevenLabsVoice?.labels?.gender ?? 'unknown';
64
91
  const supportedLanguages = [];
65
- if (accent) {
66
- if (accent.startsWith('american')) {
67
- supportedLanguages.push('en-US');
68
- }
69
- else if (accent.startsWith('british')) {
70
- supportedLanguages.push('en-GB');
71
- }
72
- else if (accent === 'irish') {
73
- supportedLanguages.push('en-IE');
74
- }
75
- else if (accent == 'australian') {
76
- supportedLanguages.push('en-AU');
77
- }
92
+ let accent = elevenLabsVoice?.labels?.accent;
93
+ accent = accent?.toLowerCase() ?? '';
94
+ if (accent.startsWith('american')) {
95
+ supportedLanguages.push('en-US');
96
+ }
97
+ else if (accent.startsWith('british')) {
98
+ supportedLanguages.push('en-GB');
99
+ }
100
+ else if (accent === 'irish') {
101
+ supportedLanguages.push('en-IE');
78
102
  }
79
- if (modelId.includes('multilingual')) {
80
- supportedLanguages.push('en', ...supporteMultilingualLanguages);
103
+ else if (accent == 'australian') {
104
+ supportedLanguages.push('en-AU');
81
105
  }
82
106
  else {
83
107
  supportedLanguages.push('en');
84
108
  }
109
+ supportedLanguages.push(...supportedLanguagesInMultilingualModels);
85
110
  return {
86
- name: elevenlabsVoice.name,
111
+ name: elevenLabsVoice.name,
87
112
  languages: supportedLanguages,
88
113
  gender,
89
- elevenLabsVoiceId: elevenlabsVoice.voice_id,
90
- elevenLabsModelId: modelId
114
+ elevenLabsVoiceId: elevenLabsVoice.voice_id,
91
115
  };
92
116
  });
93
117
  return voices;
94
118
  }
95
119
  export const defaultElevenLabsTTSOptions = {
96
120
  apiKey: undefined,
121
+ modelId: 'eleven_multilingual_v2',
97
122
  stability: 0.5,
98
123
  similarityBoost: 0.5,
99
124
  style: 0,
100
- useSpeakerBoost: true
125
+ useSpeakerBoost: true,
126
+ seed: undefined,
101
127
  };
102
- export const supporteMultilingualLanguages = ['zh', 'ko', 'nl', 'tr', 'sv', 'id', 'tl', 'ja', 'uk', 'el', 'cs', 'fi', 'ro', 'ru', 'da', 'bg', 'ms', 'sk', 'hr', 'ar', 'ta', 'pl', 'de', 'es', 'fr', 'it', 'hi', 'pt'];
128
+ export const supportedLanguagesInMultilingualModels = [
129
+ 'ja',
130
+ 'zh',
131
+ 'de',
132
+ 'hi',
133
+ 'fr',
134
+ 'ko',
135
+ 'pt',
136
+ 'it',
137
+ 'es',
138
+ 'id',
139
+ 'nl',
140
+ 'tr',
141
+ 'fil',
142
+ 'pl',
143
+ 'sv',
144
+ 'bg',
145
+ 'ro',
146
+ 'ar',
147
+ 'cs',
148
+ 'el',
149
+ 'fi',
150
+ 'hr',
151
+ 'ms',
152
+ 'sk',
153
+ 'da',
154
+ 'ta',
155
+ 'uk',
156
+ 'ru',
157
+ 'hu',
158
+ 'no',
159
+ 'vi',
160
+ ];
103
161
  //# sourceMappingURL=ElevenLabsTTS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ElevenLabsTTS.js","sourceRoot":"","sources":["../../src/synthesis/ElevenLabsTTS.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ElevenLabsTTS.js","sourceRoot":"","sources":["../../src/synthesis/ElevenLabsTTS.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ export function deepClone(val) {
22
22
  return clone(val, true);
23
23
  }
24
24
  function clone(val, deep = true, seenObjects = []) {
25
- if (val == null || typeof val !== 'object') {
25
+ if (val === undefined || val === null || typeof val !== 'object') {
26
26
  return val;
27
27
  }
28
28
  const obj = val;
@@ -95,6 +95,11 @@ function clone(val, deep = true, seenObjects = []) {
95
95
  clonedArray.set(obj);
96
96
  return clonedArray;
97
97
  }
98
+ case '[object BigInt64Array]': {
99
+ const clonedArray = new BigInt64Array(obj.length);
100
+ clonedArray.set(obj);
101
+ return clonedArray;
102
+ }
98
103
  case '[object Date]': {
99
104
  return new Date(obj.valueOf());
100
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectUtilities.js","sourceRoot":"","sources":["../../src/utilities/ObjectUtilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObjectUtilities.js","sourceRoot":"","sources":["../../src/utilities/ObjectUtilities.ts"],"names":[],"mappings":"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"}
@@ -109,7 +109,7 @@ declare abstract class TypedArrayRef<T extends TypedArray> {
109
109
  constructor(ptr: number, length: number, manager: WasmMemoryManager);
110
110
  get view(): T;
111
111
  protected abstract getView(): T;
112
- slice(start?: number, end?: number): Uint8Array<ArrayBuffer> | Int8Array<ArrayBuffer> | Float32Array<ArrayBuffer> | Int16Array<ArrayBuffer> | Int32Array<ArrayBuffer> | Float64Array<ArrayBuffer> | Uint8ClampedArray<ArrayBuffer> | Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;
112
+ slice(start?: number, end?: number): Uint8Array<ArrayBuffer> | Int32Array<ArrayBuffer> | Float32Array<ArrayBuffer> | Float64Array<ArrayBuffer> | Int8Array<ArrayBuffer> | Int16Array<ArrayBuffer> | Uint8ClampedArray<ArrayBuffer> | Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;
113
113
  get address(): number;
114
114
  clear(): this;
115
115
  free(): void;
package/docs/Engines.md CHANGED
@@ -35,7 +35,8 @@ These are commercial services that require a subscription and an API key to use:
35
35
  * [Azure Cognitive Services](https://azure.microsoft.com/en-us/products/ai-services/text-to-speech/) (`microsoft-azure`)
36
36
  * [Amazon Polly](https://aws.amazon.com/polly/) (`amazon-polly`)
37
37
  * [OpenAI Cloud Platform](https://platform.openai.com/) (`openai-cloud`)
38
- * [Elevenlabs](https://elevenlabs.io/) (`elevenlabs`)
38
+ * [ElevenLabs](https://elevenlabs.io/) (`elevenlabs`)
39
+ * [Deepgram](https://deepgram.com/) (`deepgram`)
39
40
 
40
41
  **Cloud services (unofficial)**:
41
42
 
package/docs/Options.md CHANGED
@@ -65,6 +65,10 @@ Applies to CLI operations: `speak`, `speak-file`, `speak-url`, `speak-wikipedia`
65
65
  * `sam.mouth`: mouth value, between `0`..`255` (defaults to `128`)
66
66
  * `sam.throat`: throat value, between `0`..`255` (defaults to `128`)
67
67
 
68
+ **Gnuspeech**
69
+ * `gnuspeech.tempo`: controls speech rate. Defaults to the value of the general `speed` option (`1.0` by default)
70
+ * `gnuspeech.controlRate`: control rate. Defaults to `250.0`
71
+
68
72
  **SAPI**:
69
73
  * `sapi.rate`: SAPI speech rate, in its native units. An integer number between `-10` and `10`. Setting `speed` would apply time stretching instead. The two options can be used together
70
74
 
@@ -103,8 +107,15 @@ Applies to CLI operations: `speak`, `speak-file`, `speak-url`, `speak-wikipedia`
103
107
 
104
108
  **Elevenlabs**:
105
109
  * `elevenLabs.apiKey`: API key (required)
110
+ * `elevenLabs.modelId`: model ID. See [this page](https://elevenlabs.io/docs/models) for an up-to-date list of available models. Defaults to `eleven_multilingual_v2`
106
111
  * `elevenLabs.stability`: stability. Defaults to `0.5`
107
112
  * `elevenLabs.similarityBoost`: similarity boost. Defaults to `0.5`
113
+ * `elevenLabs.style`: style. Defaults to `0`
114
+ * `elevenLabs.useSpeakerBoost`: use speaker boost. Defaults to `true`
115
+ * `elevenLabs.seed`: seed for generation. Integer value that can make the generation predictable. Optional
116
+
117
+ **Deepgram**:
118
+ * `deepgram.apiKey`: API key (required)
108
119
 
109
120
  **Google Translate**:
110
121
  * `googleTranslate.tld`: top level domain to connect to. Can change the dialect for a small number of voices. For example `us` gives American English for `en`, while `com` gives British English for `en`. Defaults to `us`
@@ -213,8 +224,8 @@ Applies to CLI operation: `transcribe`, API method: `recognize`
213
224
 
214
225
  **Deepgram**:
215
226
  * `deepgram.apiKey`: API key (required)
216
- * `deepgram.model`: model to use, defaults to `whisper-large`. All the models can be found here: https://developers.deepgram.com/docs/model
217
- * `language`: specify language code (global option). If not provided, Deepgram will auto-detect the language
227
+ * `deepgram.model`: model to use. Can be any model the server supports, like `nova-3`, `nova-2`, `nova`, `enhanced`, `base` or `whisper` (see model list [here](https://developers.deepgram.com/docs/model)). Defaults to `nova-3`
228
+ * `deepgram.punctuate`: request to add punctuation and capitalization to the resulting transcript. Defaults to `true`
218
229
 
219
230
  ## Speech-to-transcript alignment
220
231
 
package/docs/Tasklist.md CHANGED
@@ -247,7 +247,6 @@
247
247
  ## Possible new engines or platforms
248
248
 
249
249
  * [PlayHT](https://play.ht/) speech synthesis cloud service
250
- * [Deepgram](https://deepgram.com/) cloud text-to-speech API
251
250
  * [Assembly AI](https://www.assemblyai.com/) cloud speech recognition API
252
251
  * [Picovoice Orca](https://github.com/Picovoice/orca) local text-to-speech
253
252
  * Coqui STT server connection
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "echogarden",
3
- "version": "2.2.1",
3
+ "version": "2.3.0",
4
4
  "description": "An easy-to-use speech toolset. Includes tools for synthesis, recognition, alignment, speech translation, language detection, source separation and more.",
5
5
  "author": "Rotem Dan",
6
6
  "license": "GPL-3.0",
@@ -22,6 +22,7 @@ import { type SubtitlesConfig } from '../subtitles/Subtitles.js'
22
22
  import { type EspeakOptions } from '../synthesis/EspeakTTS.js'
23
23
  import { type OpenAICloudTTSOptions } from '../synthesis/OpenAICloudTTS.js'
24
24
  import { type ElevenLabsTTSOptions } from '../synthesis/ElevenLabsTTS.js'
25
+ import { type DeepgramTTSOptions } from '../synthesis/DeepgramTTS.js'
25
26
  import { OnnxExecutionProvider } from '../utilities/OnnxUtilities.js'
26
27
  import { simplifyPunctuationCharacters } from '../nlp/TextNormalizer.js'
27
28
  import { convertHtmlToText } from '../utilities/StringUtilities.js'
@@ -808,23 +809,50 @@ async function synthesizeSegment(text: string, options: SynthesisOptions) {
808
809
 
809
810
  case 'elevenlabs': {
810
811
  if (inputIsSSML) {
811
- throw new Error(`The Elevenlabs engine doesn't support SSML inputs`)
812
+ throw new Error(`The ElevenLabs engine doesn't support SSML inputs`)
812
813
  }
813
814
 
814
815
  const ElevenLabsTTS = await import('../synthesis/ElevenLabsTTS.js')
815
816
 
816
- const engineOptions = options.elevenlabs!
817
+ const engineOptions = options.elevenLabs!
817
818
 
818
819
  if (!engineOptions.apiKey) {
819
820
  throw new Error(`No ElevenLabs API key provided`)
820
821
  }
821
822
 
822
823
  const voiceId = (selectedVoice as any)['elevenLabsVoiceId']
823
- const modelId = (selectedVoice as any)['elevenLabsModelId']
824
824
 
825
825
  logger.end()
826
826
 
827
- const { rawAudio } = await ElevenLabsTTS.synthesize(text, voiceId, modelId, engineOptions)
827
+ const { rawAudio, timeline: outTimeline } = await ElevenLabsTTS.synthesize(text, voiceId, language, engineOptions)
828
+
829
+ synthesizedAudio = rawAudio
830
+ timeline = outTimeline
831
+
832
+ shouldPostprocessSpeed = true
833
+ shouldPostprocessPitch = true
834
+
835
+ break
836
+ }
837
+
838
+ case 'deepgram': {
839
+ if (inputIsSSML) {
840
+ throw new Error(`The Deepgram engine doesn't support SSML inputs`)
841
+ }
842
+
843
+ const DeepgramTTS = await import('../synthesis/DeepgramTTS.js')
844
+
845
+ const engineOptions = options.deepgram!
846
+
847
+ if (!engineOptions.apiKey) {
848
+ throw new Error(`No Deepgram API key provided`)
849
+ }
850
+
851
+ const modelId = selectedVoice.deepgramModelId
852
+
853
+ logger.end()
854
+
855
+ const { rawAudio } = await DeepgramTTS.synthesize(text, modelId, engineOptions)
828
856
 
829
857
  synthesizedAudio = rawAudio
830
858
 
@@ -1071,8 +1099,8 @@ export type SynthesisEngine =
1071
1099
  'vits' | 'kokoro' | 'pico' | 'flite' | 'gnuspeech' |
1072
1100
  'espeak' | 'sam' | 'sapi' | 'msspeech' | 'coqui-server' |
1073
1101
  'google-cloud' | 'microsoft-azure' | 'amazon-polly' |
1074
- 'openai-cloud' | 'elevenlabs' | 'google-translate' |
1075
- 'microsoft-edge' | 'streamlabs-polly'
1102
+ 'openai-cloud' | 'elevenlabs' | 'deepgram' |
1103
+ 'google-translate' | 'microsoft-edge' | 'streamlabs-polly'
1076
1104
 
1077
1105
  export type TimePitchShiftingMethod = 'sonic' | 'rubberband'
1078
1106
 
@@ -1198,7 +1226,9 @@ export interface SynthesisOptions {
1198
1226
 
1199
1227
  openAICloud?: OpenAICloudTTSOptions
1200
1228
 
1201
- elevenlabs?: ElevenLabsTTSOptions,
1229
+ elevenLabs?: ElevenLabsTTSOptions,
1230
+
1231
+ deepgram?: DeepgramTTSOptions
1202
1232
 
1203
1233
  googleTranslate?: {
1204
1234
  tld?: string
@@ -1340,7 +1370,10 @@ export const defaultSynthesisOptions: SynthesisOptions = {
1340
1370
  openAICloud: {
1341
1371
  },
1342
1372
 
1343
- elevenlabs: {
1373
+ elevenLabs: {
1374
+ },
1375
+
1376
+ deepgram: {
1344
1377
  },
1345
1378
 
1346
1379
  googleTranslate: {
@@ -1595,7 +1628,7 @@ export async function requestVoiceList(options: VoiceListRequestOptions): Promis
1595
1628
  case 'elevenlabs': {
1596
1629
  const ElevenLabsTTS = await import('../synthesis/ElevenLabsTTS.js')
1597
1630
 
1598
- const engineOptions = options.elevenlabs!
1631
+ const engineOptions = options.elevenLabs!
1599
1632
 
1600
1633
  const apiKey = engineOptions.apiKey
1601
1634
 
@@ -1608,6 +1641,14 @@ export async function requestVoiceList(options: VoiceListRequestOptions): Promis
1608
1641
  break
1609
1642
  }
1610
1643
 
1644
+ case 'deepgram': {
1645
+ const DeepgramTTS = await import('../synthesis/DeepgramTTS.js')
1646
+
1647
+ voiceList = DeepgramTTS.voiceList
1648
+
1649
+ break
1650
+ }
1651
+
1611
1652
  case 'google-translate': {
1612
1653
  const GoogleTranslateTTS = await import('../synthesis/GoogleTranslateTTS.js')
1613
1654
 
@@ -1800,6 +1841,7 @@ export interface SynthesisVoice {
1800
1841
  gender: VoiceGender
1801
1842
  speakerCount?: number
1802
1843
  packageName?: string
1844
+ [key: string]: any
1803
1845
  }
1804
1846
 
1805
1847
  export type VoiceGender = 'male' | 'female' | 'unknown'
@@ -1891,7 +1933,13 @@ export const synthesisEngines: EngineMetadata[] = [
1891
1933
  },
1892
1934
  {
1893
1935
  id: 'elevenlabs',
1894
- name: 'Elevenlabs',
1936
+ name: 'ElevenLabs',
1937
+ description: 'A generative AI text-to-speech cloud service.',
1938
+ type: 'cloud'
1939
+ },
1940
+ {
1941
+ id: 'deepgram',
1942
+ name: 'Deepgram',
1895
1943
  description: 'A generative AI text-to-speech cloud service.',
1896
1944
  type: 'cloud'
1897
1945
  },