echogarden 0.11.21 → 0.12.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/dist/api/API.d.ts +1 -0
- package/dist/api/API.js +1 -0
- package/dist/api/API.js.map +1 -1
- package/dist/api/GlobalOptions.d.ts +6 -0
- package/dist/api/GlobalOptions.js +17 -0
- package/dist/api/GlobalOptions.js.map +1 -0
- package/dist/audio/AudioUtilities.d.ts +4 -4
- package/dist/audio/AudioUtilities.js +27 -28
- package/dist/audio/AudioUtilities.js.map +1 -1
- package/dist/audio/SoxPath.js +18 -17
- package/dist/audio/SoxPath.js.map +1 -1
- package/dist/codecs/FFMpegTranscoder.js +45 -13
- package/dist/codecs/FFMpegTranscoder.js.map +1 -1
- package/dist/synthesis/VitsTTS.js +68 -0
- package/dist/synthesis/VitsTTS.js.map +1 -1
- package/dist/utilities/PackageManager.js +60 -38
- package/dist/utilities/PackageManager.js.map +1 -1
- package/dist/utilities/Utilities.js +4 -0
- package/dist/utilities/Utilities.js.map +1 -1
- package/dist/utilities/WasmMemoryManager.d.ts +1 -1
- package/docs/API.md +25 -0
- package/docs/Engines.md +1 -1
- package/docs/Tasklist.md +2 -2
- package/package.json +6 -7
- package/src/api/API.ts +1 -0
- package/src/api/GlobalOptions.ts +25 -0
- package/src/audio/AudioUtilities.ts +29 -29
- package/src/audio/SoxPath.ts +24 -17
- package/src/codecs/FFMpegTranscoder.ts +43 -14
- package/src/synthesis/VitsTTS.ts +72 -0
- package/src/utilities/PackageManager.ts +68 -44
- package/src/utilities/Utilities.ts +5 -0
|
@@ -6,6 +6,7 @@ import { Logger } from "../utilities/Logger.js"
|
|
|
6
6
|
import { commandExists, logToStderr } from "../utilities/Utilities.js"
|
|
7
7
|
import path from "node:path"
|
|
8
8
|
import { loadPackage } from "../utilities/PackageManager.js"
|
|
9
|
+
import { getGlobalOption } from "../api/GlobalOptions.js"
|
|
9
10
|
|
|
10
11
|
const log = logToStderr
|
|
11
12
|
|
|
@@ -147,25 +148,53 @@ function buildCommandLineArguments(inputFilename: string, outputOptions: FFMpegO
|
|
|
147
148
|
}
|
|
148
149
|
|
|
149
150
|
async function getFFMpegExecutablePath() {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
151
|
+
// If a global option set for the path, use it
|
|
152
|
+
if (getGlobalOption('ffmpegPath')) {
|
|
153
|
+
return getGlobalOption('ffmpegPath')
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// If an 'ffmpeg' command exist in system path, use it
|
|
157
|
+
if (await commandExists('ffmpeg')) {
|
|
158
|
+
return 'ffmpeg'
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Otherwise, download and use an internal ffmpeg package
|
|
162
|
+
const platform = process.platform
|
|
163
|
+
const arch = process.arch
|
|
164
|
+
|
|
165
|
+
let packageName: string
|
|
166
|
+
|
|
167
|
+
if (platform === 'win32' && arch === 'x64') {
|
|
168
|
+
packageName = 'ffmpeg-6.0-win32-x64'
|
|
169
|
+
} else if (platform === 'win32' && arch === 'ia32') {
|
|
170
|
+
packageName = 'ffmpeg-6.0-win32-ia32'
|
|
171
|
+
} else if (platform === 'darwin' && arch === 'x64') {
|
|
172
|
+
packageName = 'ffmpeg-6.0-darwin-x64'
|
|
173
|
+
} else if (platform === 'darwin' && arch === 'arm64') {
|
|
174
|
+
packageName = 'ffmpeg-6.0-darwin-arm64'
|
|
175
|
+
} else if (platform === 'linux' && arch === 'x64') {
|
|
176
|
+
packageName = 'ffmpeg-6.0-linux-x64'
|
|
177
|
+
} else if (platform === 'linux' && arch === 'ia32') {
|
|
178
|
+
packageName = 'ffmpeg-6.0-linux-ia32'
|
|
179
|
+
} else if (platform === 'linux' && arch === 'arm64') {
|
|
180
|
+
packageName = 'ffmpeg-6.0-linux-arm64'
|
|
181
|
+
} else if (platform === 'linux' && arch === 'arm') {
|
|
182
|
+
packageName = 'ffmpeg-6.0-linux-arm'
|
|
183
|
+
} else if (platform === 'freebsd' && arch === 'x64') {
|
|
184
|
+
packageName = 'ffmpeg-6.0-freebsd-x64'
|
|
185
|
+
} else {
|
|
186
|
+
return undefined
|
|
154
187
|
}
|
|
155
|
-
/* else if (process.platform == "darwin" && process.arch == "x64") {
|
|
156
|
-
const ffmpegPackagePath = await loadPackage("ffmpeg-6.0-macos64")
|
|
157
188
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
const ffmpegPackagePath = await loadPackage("ffmpeg-6.0-linux-amd64")
|
|
189
|
+
const ffmpegPackagePath = await loadPackage(packageName)
|
|
190
|
+
|
|
191
|
+
let filename = packageName
|
|
162
192
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
return "ffmpeg"
|
|
193
|
+
if (platform === 'win32') {
|
|
194
|
+
filename += '.exe'
|
|
166
195
|
}
|
|
167
196
|
|
|
168
|
-
return
|
|
197
|
+
return path.join(ffmpegPackagePath, filename)
|
|
169
198
|
}
|
|
170
199
|
|
|
171
200
|
export function getDefaultFFMpegOptionsForSpeech(fileExtension: string, customBitrate?: number) {
|
package/src/synthesis/VitsTTS.ts
CHANGED
|
@@ -293,6 +293,12 @@ export const voiceList: SynthesisVoice[] = [
|
|
|
293
293
|
languages: ["de-DE", "de"],
|
|
294
294
|
gender: "male",
|
|
295
295
|
},
|
|
296
|
+
{
|
|
297
|
+
name: "de_DE-mls-medium",
|
|
298
|
+
languages: ["de-DE", "de"],
|
|
299
|
+
gender: "unknown",
|
|
300
|
+
speakerCount: 236
|
|
301
|
+
},
|
|
296
302
|
|
|
297
303
|
{
|
|
298
304
|
name: "el_GR-rapunzelina-low",
|
|
@@ -353,6 +359,12 @@ export const voiceList: SynthesisVoice[] = [
|
|
|
353
359
|
languages: ["en-GB", "en"],
|
|
354
360
|
gender: "female",
|
|
355
361
|
},
|
|
362
|
+
{
|
|
363
|
+
name: "en_GB-cori-high",
|
|
364
|
+
languages: ["en-GB", "en"],
|
|
365
|
+
gender: "female",
|
|
366
|
+
},
|
|
367
|
+
|
|
356
368
|
|
|
357
369
|
{
|
|
358
370
|
name: "en_US-amy-low",
|
|
@@ -443,6 +455,21 @@ export const voiceList: SynthesisVoice[] = [
|
|
|
443
455
|
languages: ["en-US", "en"],
|
|
444
456
|
gender: "female",
|
|
445
457
|
},
|
|
458
|
+
{
|
|
459
|
+
name: "en_US-kristin-medium",
|
|
460
|
+
languages: ["en-US", "en"],
|
|
461
|
+
gender: "female",
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
name: "en_US-ljspeech-high",
|
|
465
|
+
languages: ["en-US", "en"],
|
|
466
|
+
gender: "female",
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
name: "en_US-ljspeech-medium",
|
|
470
|
+
languages: ["en-US", "en"],
|
|
471
|
+
gender: "female",
|
|
472
|
+
},
|
|
446
473
|
|
|
447
474
|
{
|
|
448
475
|
name: "es_ES-carlfm-x_low",
|
|
@@ -476,6 +503,23 @@ export const voiceList: SynthesisVoice[] = [
|
|
|
476
503
|
languages: ["es-MX", "es"],
|
|
477
504
|
gender: "male",
|
|
478
505
|
},
|
|
506
|
+
{
|
|
507
|
+
name: "es_MX-claude-high",
|
|
508
|
+
languages: ["es-MX", "es"],
|
|
509
|
+
gender: "female",
|
|
510
|
+
},
|
|
511
|
+
|
|
512
|
+
{
|
|
513
|
+
name: "fa_IR-amir-medium",
|
|
514
|
+
languages: ["fa_IR", "fa"],
|
|
515
|
+
gender: "male",
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
name: "fa_IR-gyro-medium",
|
|
519
|
+
languages: ["fa_IR", "fa"],
|
|
520
|
+
gender: "male",
|
|
521
|
+
},
|
|
522
|
+
|
|
479
523
|
|
|
480
524
|
{
|
|
481
525
|
name: "fi_FI-harri-low",
|
|
@@ -514,6 +558,17 @@ export const voiceList: SynthesisVoice[] = [
|
|
|
514
558
|
gender: "unknown",
|
|
515
559
|
speakerCount: 2
|
|
516
560
|
},
|
|
561
|
+
{
|
|
562
|
+
name: "fr_FR-mls-medium",
|
|
563
|
+
languages: ["fr-FR", "fr"],
|
|
564
|
+
gender: "unknown",
|
|
565
|
+
speakerCount: 125
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
name: "fr_FR-tom-medium",
|
|
569
|
+
languages: ["fr-FR", "fr"],
|
|
570
|
+
gender: "male",
|
|
571
|
+
},
|
|
517
572
|
|
|
518
573
|
{
|
|
519
574
|
name: "hu_HU-anna-medium",
|
|
@@ -605,6 +660,12 @@ export const voiceList: SynthesisVoice[] = [
|
|
|
605
660
|
languages: ["nl-NL", "nl"],
|
|
606
661
|
gender: "female",
|
|
607
662
|
},
|
|
663
|
+
{
|
|
664
|
+
name: "nl_NL-mls-medium",
|
|
665
|
+
languages: ["nl-NL", "nl"],
|
|
666
|
+
gender: "unknown",
|
|
667
|
+
speakerCount: 52,
|
|
668
|
+
},
|
|
608
669
|
|
|
609
670
|
{
|
|
610
671
|
name: "nl_BE-nathalie-x_low",
|
|
@@ -705,6 +766,12 @@ export const voiceList: SynthesisVoice[] = [
|
|
|
705
766
|
gender: "female",
|
|
706
767
|
},
|
|
707
768
|
|
|
769
|
+
{
|
|
770
|
+
name: "sl_SI-artur-medium",
|
|
771
|
+
languages: ["sl_SI", "sl"],
|
|
772
|
+
gender: "male",
|
|
773
|
+
},
|
|
774
|
+
|
|
708
775
|
{
|
|
709
776
|
name: "sr_RS-serbski_institut-medium",
|
|
710
777
|
languages: ["sr-RS", "sr"],
|
|
@@ -734,6 +801,11 @@ export const voiceList: SynthesisVoice[] = [
|
|
|
734
801
|
languages: ["tr-TR", "tr"],
|
|
735
802
|
gender: "male",
|
|
736
803
|
},
|
|
804
|
+
{
|
|
805
|
+
name: "tr_TR-fettah-medium",
|
|
806
|
+
languages: ["tr-TR", "tr"],
|
|
807
|
+
gender: "male",
|
|
808
|
+
},
|
|
737
809
|
|
|
738
810
|
{
|
|
739
811
|
name: "uk_UA-lada-x_low",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import { downloadAndExtractTarball } from
|
|
3
|
-
import { getAppDataDir, getAppTempDir, ensureDir, existsSync, remove } from
|
|
4
|
-
import { appName } from
|
|
5
|
-
import { GaxiosOptions } from
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
import { downloadAndExtractTarball } from './FileDownloader.js'
|
|
3
|
+
import { getAppDataDir, getAppTempDir, ensureDir, existsSync, remove } from './FileSystem.js'
|
|
4
|
+
import { appName } from '../api/Common.js'
|
|
5
|
+
import { GaxiosOptions } from 'gaxios'
|
|
6
6
|
|
|
7
7
|
export async function loadPackage(packageName: string) {
|
|
8
8
|
packageName = resolveToVersionedPackageNameIfNeeded(packageName)
|
|
@@ -48,7 +48,7 @@ export async function removePackage(packageName: string) {
|
|
|
48
48
|
export async function ensureAndGetPackagesDir() {
|
|
49
49
|
const dataPath = getAppDataDir(appName)
|
|
50
50
|
|
|
51
|
-
const packagesPath = path.join(dataPath,
|
|
51
|
+
const packagesPath = path.join(dataPath, 'packages')
|
|
52
52
|
|
|
53
53
|
await ensureDir(packagesPath)
|
|
54
54
|
|
|
@@ -75,45 +75,69 @@ export function resolveVersionTagForUnversionedPackageName(unversionedPackageNam
|
|
|
75
75
|
return packageVersionTagResolutionLookup[unversionedPackageName] || defaultVersionTag
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
const basePackageUrl =
|
|
78
|
+
const basePackageUrl = 'https://huggingface.co/echogarden/echogarden-packages/resolve/main/'
|
|
79
79
|
|
|
80
|
-
const defaultVersionTag =
|
|
80
|
+
const defaultVersionTag = '20230718'
|
|
81
81
|
|
|
82
82
|
const packageVersionTagResolutionLookup: { [packageName: string]: string } = {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
83
|
+
'sox-14.4.2-linux-minimal': '20230802',
|
|
84
|
+
|
|
85
|
+
'vits-de_DE-thorsten_emotional-medium': '20230808',
|
|
86
|
+
'vits-en_GB-semaine-medium': '20230808',
|
|
87
|
+
'vits-fr_FR-upmc-medium': '20230808',
|
|
88
|
+
'vits-lb_LU-marylux-medium': '20230808',
|
|
89
|
+
'vits-ro_RO-mihai-medium': '20230808',
|
|
90
|
+
'vits-sr_RS-serbski_institut-medium': '20230808',
|
|
91
|
+
'vits-tr_TR-dfki-medium': '20230808',
|
|
92
|
+
|
|
93
|
+
'vits-cs_CZ-jirka-medium': '20230824',
|
|
94
|
+
'vits-de_DE-thorsten-high': '20230824',
|
|
95
|
+
'vits-hu_HU-anna-medium': '20230824',
|
|
96
|
+
'vits-pt_PT-tugao-medium': '20230824',
|
|
97
|
+
'vits-sk_SK-lili-medium': '20230824',
|
|
98
|
+
'vits-tr_TR-fahrettin-medium': '20230824',
|
|
99
|
+
|
|
100
|
+
'vits-ar_JO-kareem-medium': '20231022',
|
|
101
|
+
'vits-cs_CZ-jirka-low': '20231022',
|
|
102
|
+
'vits-en_US-hfc_male-medium': '20231022',
|
|
103
|
+
'vits-en_US-libritts_r-medium': '20231022',
|
|
104
|
+
'vits-hu_HU-imre-medium': '20231022',
|
|
105
|
+
'vits-pl_PL-mc_speech-medium': '20231022',
|
|
106
|
+
|
|
107
|
+
'whisper-tiny': '20231126',
|
|
108
|
+
'whisper-tiny.en': '20231126',
|
|
109
|
+
'whisper-base': '20231126',
|
|
110
|
+
'whisper-base.en': '20231126',
|
|
111
|
+
'whisper-small': '20231126',
|
|
112
|
+
'whisper-small.en': '20231126',
|
|
113
|
+
'whisper-medium': '20231126',
|
|
114
|
+
'whisper-medium.en': '20231126',
|
|
115
|
+
'whisper-large-v3': '20231126',
|
|
116
|
+
|
|
117
|
+
'vits-ar_JO-kareem-low': '20231126',
|
|
118
|
+
'vits-en_US-hfc_female-medium': '20231126',
|
|
119
|
+
|
|
120
|
+
'ffmpeg-6.0-win32-x64': '20240316',
|
|
121
|
+
'ffmpeg-6.0-win32-ia32': '20240316',
|
|
122
|
+
'ffmpeg-6.0-darwin-x64': '20240316',
|
|
123
|
+
'ffmpeg-6.0-darwin-arm64': '20240316',
|
|
124
|
+
'ffmpeg-6.0-linux-x64': '20240316',
|
|
125
|
+
'ffmpeg-6.0-linux-ia32': '20240316',
|
|
126
|
+
'ffmpeg-6.0-linux-arm64': '20240316',
|
|
127
|
+
'ffmpeg-6.0-linux-arm': '20240316',
|
|
128
|
+
'ffmpeg-6.0-freebsd-x64': '20240316',
|
|
129
|
+
|
|
130
|
+
'vits-de_DE-mls-medium': '20240316',
|
|
131
|
+
'vits-en_GB-cori-high': '20240316',
|
|
132
|
+
'vits-en_US-kristin-medium': '20240316',
|
|
133
|
+
'vits-en_US-ljspeech-high': '20240316',
|
|
134
|
+
'vits-en_US-ljspeech-medium': '20240316',
|
|
135
|
+
'vits-es_MX-claude-high': '20240316',
|
|
136
|
+
'vits-fa_IR-amir-medium': '20240316',
|
|
137
|
+
'vits-fa_IR-gyro-medium': '20240316',
|
|
138
|
+
'vits-fr_FR-mls-medium': '20240316',
|
|
139
|
+
'vits-fr_FR-tom-medium': '20240316',
|
|
140
|
+
'vits-nl_NL-mls-medium': '20240316',
|
|
141
|
+
'vits-sl_SI-artur-medium': '20240316',
|
|
142
|
+
'vits-tr_TR-fettah-medium': '20240316',
|
|
119
143
|
}
|
|
@@ -6,6 +6,7 @@ import { RandomGenerator } from './RandomGenerator.js'
|
|
|
6
6
|
import { randomUUID, randomBytes } from 'node:crypto'
|
|
7
7
|
import { Logger } from './Logger.js'
|
|
8
8
|
import chalk from 'chalk'
|
|
9
|
+
import { shouldCancelCurrentTask } from '../server/Worker.js'
|
|
9
10
|
|
|
10
11
|
const log = logToStderr
|
|
11
12
|
|
|
@@ -588,6 +589,10 @@ export async function runOperationWithRetries<R>(
|
|
|
588
589
|
|
|
589
590
|
return result
|
|
590
591
|
} catch (e: any) {
|
|
592
|
+
if (shouldCancelCurrentTask()) {
|
|
593
|
+
throw new Error("Canceled")
|
|
594
|
+
}
|
|
595
|
+
|
|
591
596
|
logger.setAsActiveLogger()
|
|
592
597
|
|
|
593
598
|
logger.logTitledMessage(`Error`, e.message, chalk.redBright)
|