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.
- package/README.md +1 -1
- package/data/schemas/options.json +27 -2
- package/dist/api/Synthesis.d.ts +5 -2
- package/dist/api/Synthesis.js +36 -7
- package/dist/api/Synthesis.js.map +1 -1
- package/dist/recognition/DeepgramSTT.d.ts +3 -2
- package/dist/recognition/DeepgramSTT.js +54 -27
- package/dist/recognition/DeepgramSTT.js.map +1 -1
- package/dist/synthesis/DeepgramTTS.d.ts +15 -0
- package/dist/synthesis/DeepgramTTS.js +127 -0
- package/dist/synthesis/DeepgramTTS.js.map +1 -0
- package/dist/synthesis/ElevenLabsTTS.d.ts +8 -2
- package/dist/synthesis/ElevenLabsTTS.js +91 -33
- package/dist/synthesis/ElevenLabsTTS.js.map +1 -1
- package/dist/utilities/ObjectUtilities.js +6 -1
- package/dist/utilities/ObjectUtilities.js.map +1 -1
- package/dist/utilities/WasmMemoryManager.d.ts +1 -1
- package/docs/Engines.md +2 -1
- package/docs/Options.md +13 -2
- package/docs/Tasklist.md +0 -1
- package/package.json +1 -1
- package/src/api/Synthesis.ts +58 -10
- package/src/recognition/DeepgramSTT.ts +66 -29
- package/src/synthesis/DeepgramTTS.ts +149 -0
- package/src/synthesis/ElevenLabsTTS.ts +109 -32
- package/src/utilities/ObjectUtilities.ts +30 -13
|
@@ -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
|
-
|
|
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
|
|
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,
|
|
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: '
|
|
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
|
|
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
|
|
60
|
-
const voices =
|
|
61
|
-
const
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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 (
|
|
80
|
-
supportedLanguages.push('en'
|
|
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:
|
|
111
|
+
name: elevenLabsVoice.name,
|
|
87
112
|
languages: supportedLanguages,
|
|
88
113
|
gender,
|
|
89
|
-
elevenLabsVoiceId:
|
|
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
|
|
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":"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;
|
|
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
|
|
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":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAS,EAAE,SAAc;IACnD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAEjC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO,SAAS,CAAA;IACjB,CAAC;IAED,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;IAC3C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,OAAO,cAAc,CAAA;IACtB,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,SAAQ;QACT,CAAC;QAED,SAAS,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;IAChF,CAAC;IAED,OAAO,SAAS,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,GAAM;IACrC,OAAO,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,GAAM;IAClC,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACxB,CAAC;AAED,SAAS,KAAK,CAAI,GAAM,EAAE,IAAI,GAAG,IAAI,EAAE,cAAqB,EAAE;IAC7D,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;
|
|
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> |
|
|
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
|
-
* [
|
|
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,
|
|
217
|
-
* `
|
|
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.
|
|
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",
|
package/src/api/Synthesis.ts
CHANGED
|
@@ -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
|
|
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.
|
|
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,
|
|
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' | '
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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: '
|
|
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
|
},
|