echogarden 3.1.0 → 3.2.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/data/lexicons/heteronyms.en.json +1 -1
- package/data/lexicons/words.en.json +32 -0
- package/dist/api/Synthesis.js +2 -2
- package/dist/api/Synthesis.js.map +1 -1
- package/dist/encodings/Ascii.d.ts +1 -3
- package/dist/encodings/Ascii.d.ts.map +1 -1
- package/dist/encodings/Ascii.js +13 -9
- package/dist/encodings/Ascii.js.map +1 -1
- package/dist/encodings/Base64.d.ts.map +1 -1
- package/dist/encodings/Base64.js +9 -0
- package/dist/encodings/Base64.js.map +1 -1
- package/dist/encodings/Hex.d.ts.map +1 -1
- package/dist/encodings/Hex.js +11 -2
- package/dist/encodings/Hex.js.map +1 -1
- package/dist/encodings/LEB128.d.ts +1 -15
- package/dist/encodings/LEB128.d.ts.map +1 -1
- package/dist/encodings/LEB128.js +1 -247
- package/dist/encodings/LEB128.js.map +1 -1
- package/dist/encodings/Utf16.d.ts +1 -3
- package/dist/encodings/Utf16.d.ts.map +1 -1
- package/dist/encodings/Utf16.js +13 -9
- package/dist/encodings/Utf16.js.map +1 -1
- package/dist/encodings/Utf32.d.ts.map +1 -1
- package/dist/encodings/Utf32.js +6 -0
- package/dist/encodings/Utf32.js.map +1 -1
- package/dist/encodings/Utf8.d.ts +9 -5
- package/dist/encodings/Utf8.d.ts.map +1 -1
- package/dist/encodings/Utf8.js +36 -78
- package/dist/encodings/Utf8.js.map +1 -1
- package/dist/nlp/Segmentation.d.ts.map +1 -1
- package/dist/nlp/Segmentation.js +4 -1
- package/dist/nlp/Segmentation.js.map +1 -1
- package/dist/nlp/TextNormalizer.js +8 -1
- package/dist/nlp/TextNormalizer.js.map +1 -1
- package/dist/synthesis/AzureCognitiveServicesTTS.js +1 -1
- package/dist/synthesis/AzureCognitiveServicesTTS.js.map +1 -1
- package/dist/synthesis/EspeakTTS.js +1 -1
- package/dist/synthesis/EspeakTTS.js.map +1 -1
- package/dist/synthesis/MicrosoftEdgeTTS.js +1 -1
- package/dist/synthesis/MicrosoftEdgeTTS.js.map +1 -1
- package/dist/utilities/FileSystem.d.ts +12 -7
- package/dist/utilities/FileSystem.d.ts.map +1 -1
- package/dist/utilities/FileSystem.js +196 -79
- package/dist/utilities/FileSystem.js.map +1 -1
- package/dist/utilities/FileWriter.d.ts +1 -0
- package/dist/utilities/FileWriter.d.ts.map +1 -1
- package/dist/utilities/FileWriter.js +8 -1
- package/dist/utilities/FileWriter.js.map +1 -1
- package/dist/utilities/ObjectUtilities.d.ts.map +1 -1
- package/dist/utilities/ObjectUtilities.js +15 -13
- package/dist/utilities/ObjectUtilities.js.map +1 -1
- package/dist/utilities/PackageManager.js +2 -2
- package/dist/utilities/PackageManager.js.map +1 -1
- package/dist/utilities/PathUtilities.d.ts +1 -0
- package/dist/utilities/PathUtilities.d.ts.map +1 -1
- package/dist/utilities/PathUtilities.js +18 -0
- package/dist/utilities/PathUtilities.js.map +1 -1
- package/dist/utilities/StringUtilities.d.ts.map +1 -1
- package/dist/utilities/StringUtilities.js.map +1 -1
- package/package.json +8 -7
- package/src/api/Synthesis.ts +2 -2
- package/src/encodings/Ascii.ts +14 -10
- package/src/encodings/Base64.ts +9 -0
- package/src/encodings/Hex.ts +11 -2
- package/src/encodings/Utf16.ts +14 -10
- package/src/encodings/Utf32.ts +6 -0
- package/src/encodings/Utf8.ts +45 -82
- package/src/nlp/Segmentation.ts +5 -1
- package/src/nlp/TextNormalizer.ts +12 -1
- package/src/synthesis/AzureCognitiveServicesTTS.ts +1 -1
- package/src/synthesis/EspeakTTS.ts +1 -1
- package/src/synthesis/MicrosoftEdgeTTS.ts +1 -1
- package/src/utilities/FileSystem.ts +224 -85
- package/src/utilities/FileWriter.ts +11 -1
- package/src/utilities/ObjectUtilities.ts +19 -15
- package/src/utilities/PackageManager.ts +2 -2
- package/src/utilities/PathUtilities.ts +19 -0
- package/src/utilities/StringUtilities.ts +0 -2
- package/src/encodings/HtmlEscape.ts +0 -39
- package/src/encodings/LEB128.ts +0 -362
- package/src/utilities/StringBuilder.ts +0 -45
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PathUtilities.d.ts","sourceRoot":"","sources":["../../src/utilities/PathUtilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAA;AACrC,OAAO,KAAK,OAAO,MAAM,UAAU,CAAA;AAGnC,wBAAgB,gBAAgB,WAI/B;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,UAE1D;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,UAQzD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,UAiB5C;AAED,wBAAgB,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,UAE1C;AAED,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,UAE7C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,UAEzC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,eAEzC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,UAEvC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,UAEtC;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,UAE3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,uBAErC"}
|
|
1
|
+
{"version":3,"file":"PathUtilities.d.ts","sourceRoot":"","sources":["../../src/utilities/PathUtilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAA;AACrC,OAAO,KAAK,OAAO,MAAM,UAAU,CAAA;AAGnC,wBAAgB,gBAAgB,WAI/B;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,UAE1D;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,UAQzD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,UAiB5C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,UAiB5C;AAED,wBAAgB,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,UAE1C;AAED,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,UAE7C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,UAEzC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,eAEzC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,UAEvC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,UAEtC;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,UAE3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,uBAErC"}
|
|
@@ -33,6 +33,24 @@ export function getAppTempDir(appName) {
|
|
|
33
33
|
}
|
|
34
34
|
return tempDir;
|
|
35
35
|
}
|
|
36
|
+
export function getAppDataDir(appName) {
|
|
37
|
+
let dataDir;
|
|
38
|
+
const platform = process.platform;
|
|
39
|
+
const homeDir = os.homedir();
|
|
40
|
+
if (platform == 'win32') {
|
|
41
|
+
dataDir = joinPath(homeDir, 'AppData', 'Local', appName);
|
|
42
|
+
}
|
|
43
|
+
else if (platform == 'darwin') {
|
|
44
|
+
dataDir = joinPath(homeDir, 'Library', 'Application Support', appName);
|
|
45
|
+
}
|
|
46
|
+
else if (platform == 'linux') {
|
|
47
|
+
dataDir = joinPath(homeDir, '.local', 'share', appName);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
throw new Error(`Unsupport platform ${platform}`);
|
|
51
|
+
}
|
|
52
|
+
return dataDir;
|
|
53
|
+
}
|
|
36
54
|
export function joinPath(...paths) {
|
|
37
55
|
return NodePath.join(...paths);
|
|
38
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PathUtilities.js","sourceRoot":"","sources":["../../src/utilities/PathUtilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAA;AACrC,OAAO,KAAK,OAAO,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAE7B,MAAM,UAAU,gBAAgB;IAC/B,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAE3E,OAAO,WAAW,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,YAAoB;IAC1D,OAAO,WAAW,CAAC,gBAAgB,EAAE,EAAE,YAAY,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACzD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAEpD,IAAI,kBAAkB,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAA;IACV,CAAC;IAED,OAAO,QAAQ,CAAC,SAAS,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC5C,IAAI,OAAe,CAAA;IAEnB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IACjC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;IAE5B,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;QACzB,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACjE,CAAC;SAAM,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACjC,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC1D,CAAC;SAAM,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;QAChC,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC/C,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,OAAO,CAAA;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG,KAAe;IAC1C,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAG,KAAe;IAC7C,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACvC,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACtC,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,QAAgB;IAC3D,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"PathUtilities.js","sourceRoot":"","sources":["../../src/utilities/PathUtilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StringUtilities.d.ts","sourceRoot":"","sources":["../../src/utilities/StringUtilities.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StringUtilities.d.ts","sourceRoot":"","sources":["../../src/utilities/StringUtilities.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAE9D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAU7D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAQ9D;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAAE,gBAAgB,SAAM,UAEnI;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAAE,gBAAgB,SAAM,UAElH;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAU/E;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW,SAAM,UAEhF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM;;;EAmBxC;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,WAQnD;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAyCzF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;;;EAyClE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,gBAkBnD;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAcvG;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAQnG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StringUtilities.js","sourceRoot":"","sources":["../../src/utilities/StringUtilities.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StringUtilities.js","sourceRoot":"","sources":["../../src/utilities/StringUtilities.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "echogarden",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.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": "MIT AND GPL-3.0",
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
"echogarden": "./dist/cli/CLILauncher.js"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@aws-sdk/client-polly": "~3.
|
|
56
|
-
"@aws-sdk/client-transcribe-streaming": "~3.
|
|
55
|
+
"@aws-sdk/client-polly": "~3.1106.0",
|
|
56
|
+
"@aws-sdk/client-transcribe-streaming": "~3.1106.0",
|
|
57
57
|
"@echogarden/audio-io": "~0.4.2",
|
|
58
58
|
"@echogarden/fasttext-wasm": "~0.1.0",
|
|
59
59
|
"@echogarden/flite-wasi": "~0.1.1",
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
"@mozilla/readability": "~0.6.0",
|
|
72
72
|
"chalk": "~6.0.0",
|
|
73
73
|
"command-exists": "~1.2.9",
|
|
74
|
+
"easier-http-request": "~0.1.0",
|
|
74
75
|
"fs-extra": "~11.4.0",
|
|
75
76
|
"graceful-fs": "~4.2.11",
|
|
76
77
|
"html-to-text": "~10.0.0",
|
|
@@ -83,16 +84,16 @@
|
|
|
83
84
|
"onnxruntime-node": "~1.21.1",
|
|
84
85
|
"openai": "~7.4.0",
|
|
85
86
|
"quick-json5": "~0.4.3",
|
|
86
|
-
"easier-http-request": "~0.1.0",
|
|
87
87
|
"regexp-composer": "~0.4.0",
|
|
88
88
|
"sam-js": "~0.3.1",
|
|
89
|
+
"standard-html-escaper": "~0.2.1",
|
|
89
90
|
"strip-ansi": "~7.2.0",
|
|
90
91
|
"tar": "~7.5.22",
|
|
91
92
|
"tiktoken": "~1.0.22",
|
|
92
93
|
"tinyld": "~1.3.4",
|
|
93
94
|
"wasm-feature-detect": "~1.8.0",
|
|
94
95
|
"wasm-heap-manager": "~0.4.0",
|
|
95
|
-
"ws": "~8.21.
|
|
96
|
+
"ws": "~8.21.3",
|
|
96
97
|
"wtf_wikipedia": "~10.4.2"
|
|
97
98
|
},
|
|
98
99
|
"peerDependencies": {
|
|
@@ -115,9 +116,9 @@
|
|
|
115
116
|
"@echogarden/gnuspeech-wasm": "~0.3.0",
|
|
116
117
|
"@types/fs-extra": "~11.0.4",
|
|
117
118
|
"@types/graceful-fs": "~4.1.9",
|
|
118
|
-
"@types/jsdom": "~
|
|
119
|
+
"@types/jsdom": "~30.0.0",
|
|
119
120
|
"@types/msgpack-lite": "~0.1.12",
|
|
120
|
-
"@types/node": "~26.
|
|
121
|
+
"@types/node": "~26.2.0",
|
|
121
122
|
"@types/ws": "~8.18.1",
|
|
122
123
|
"ts-json-schema-generator": "~2.9.0",
|
|
123
124
|
"typescript": "~7.0.2"
|
package/src/api/Synthesis.ts
CHANGED
|
@@ -15,7 +15,7 @@ import { type RubberbandOptions } from '../dsp/Rubberband.js'
|
|
|
15
15
|
import { loadLexiconsForLanguage } from '../nlp/Lexicon.js'
|
|
16
16
|
|
|
17
17
|
import { Timeline, TimelineEntry, addTimeOffsetToTimeline, multiplyTimelineByFactor } from '../utilities/Timeline.js'
|
|
18
|
-
import {
|
|
18
|
+
import { ensureDir, existsSync, isFileIsUpToDate, readAndParseJsonFile, writeFileSafe } from '../utilities/FileSystem.js'
|
|
19
19
|
import { formatLanguageCodeWithName, getShortLanguageCode, normalizeLanguageCode, defaultDialectForLanguageCode, normalizeIdentifierToLanguageCode } from '../utilities/Locale.js'
|
|
20
20
|
import { loadPackage } from '../utilities/PackageManager.js'
|
|
21
21
|
import { EngineMetadata, appName } from './Common.js'
|
|
@@ -27,7 +27,7 @@ import { type DeepgramTTSOptions } from '../synthesis/DeepgramTTS.js'
|
|
|
27
27
|
import { OnnxExecutionProvider } from '../utilities/OnnxUtilities.js'
|
|
28
28
|
import { simplifyPunctuationCharacters } from '../nlp/TextNormalizer.js'
|
|
29
29
|
import { convertHtmlToText } from '../utilities/StringUtilities.js'
|
|
30
|
-
import { joinPath, resolvePath } from '../utilities/PathUtilities.js'
|
|
30
|
+
import { getAppDataDir, joinPath, resolvePath } from '../utilities/PathUtilities.js'
|
|
31
31
|
import { Timer } from '../utilities/Timer.js'
|
|
32
32
|
|
|
33
33
|
/////////////////////////////////////////////////////////////////////////////////////////////
|
package/src/encodings/Ascii.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { EncodeIntoResult } from './TextEncodingsCommon.js'
|
|
2
2
|
|
|
3
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
4
|
+
// ASCII encoding
|
|
5
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
3
6
|
export function encodeAscii(asciiString: string) {
|
|
4
7
|
const charCount = asciiString.length
|
|
5
8
|
|
|
@@ -30,31 +33,32 @@ export function encodeAsciiInto(asciiString: string, resultBuffer: Uint8Array):
|
|
|
30
33
|
return { read: len, written: len }
|
|
31
34
|
}
|
|
32
35
|
|
|
36
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
37
|
+
// ASCII decoding
|
|
38
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
33
39
|
export function decodeAscii(encodedString: Uint8Array) {
|
|
34
40
|
const maxChunkLength = 2 ** 24
|
|
35
41
|
|
|
36
|
-
const
|
|
42
|
+
const chunkedAsciiDecoder = new ChunkedAsciiDecoder()
|
|
43
|
+
|
|
44
|
+
let resultString = ''
|
|
37
45
|
|
|
38
46
|
for (let offset = 0; offset < encodedString.length; offset += maxChunkLength) {
|
|
39
|
-
const
|
|
47
|
+
const asciiChunk = encodedString.subarray(offset, offset + maxChunkLength)
|
|
48
|
+
const stringChunk = chunkedAsciiDecoder.writeChunk(asciiChunk)
|
|
40
49
|
|
|
41
|
-
|
|
50
|
+
resultString += stringChunk
|
|
42
51
|
}
|
|
43
52
|
|
|
44
|
-
return
|
|
53
|
+
return resultString
|
|
45
54
|
}
|
|
46
55
|
|
|
47
56
|
export class ChunkedAsciiDecoder {
|
|
48
|
-
private str = ''
|
|
49
57
|
private readonly textDecoder = new TextDecoder('windows-1252')
|
|
50
58
|
|
|
51
59
|
writeChunk(chunk: Uint8Array) {
|
|
52
60
|
const decodedChunk = this.textDecoder.decode(chunk, { stream: true })
|
|
53
61
|
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
toString() {
|
|
58
|
-
return this.str
|
|
62
|
+
return decodedChunk
|
|
59
63
|
}
|
|
60
64
|
}
|
package/src/encodings/Base64.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { decodeAscii } from './Ascii.js'
|
|
2
2
|
|
|
3
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
4
|
+
// Base64 encoding
|
|
5
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
3
6
|
export function encodeBase64(inputBytes: Uint8Array,
|
|
4
7
|
paddingCharacter: string | undefined = '=',
|
|
5
8
|
charCodeMap?: Uint8Array): string {
|
|
@@ -88,6 +91,9 @@ export function encodeBase64AsAsciiBuffer(
|
|
|
88
91
|
return charCodes.subarray(0, writeOffset)
|
|
89
92
|
}
|
|
90
93
|
|
|
94
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
95
|
+
// Base64 decoding
|
|
96
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
91
97
|
export function decodeBase64(
|
|
92
98
|
base64String: string,
|
|
93
99
|
outputBuffer?: Uint8Array,
|
|
@@ -153,5 +159,8 @@ export function decodeBase64(
|
|
|
153
159
|
return outputBuffer.subarray(0, writeOffset)
|
|
154
160
|
}
|
|
155
161
|
|
|
162
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
163
|
+
// Lookup tables
|
|
164
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
156
165
|
export const defaultBase64CharCodeMap: Uint8Array = new Uint8Array([65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47])
|
|
157
166
|
export const defaultBase64ReverseCharCodeMap: Uint8Array = new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 255, 255, 255, 255])
|
package/src/encodings/Hex.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { decodeAscii } from
|
|
1
|
+
import { decodeAscii } from './Ascii.js'
|
|
2
2
|
|
|
3
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
4
|
+
// Hexadecimal encoding
|
|
5
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
3
6
|
export function encodeHex(buffer: Uint8Array) {
|
|
4
7
|
const asciiBuffer = encodeHexAsAsciiBuffer(buffer)
|
|
5
8
|
|
|
@@ -27,11 +30,14 @@ export function encodeHexAsAsciiBuffer(buffer: Uint8Array) {
|
|
|
27
30
|
return charCodes
|
|
28
31
|
}
|
|
29
32
|
|
|
33
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
34
|
+
// Hexadecimal decoding
|
|
35
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
30
36
|
export function decodeHex(hexString: string) {
|
|
31
37
|
const hexLength = hexString.length
|
|
32
38
|
|
|
33
39
|
if (hexLength % 2 !== 0) {
|
|
34
|
-
throw new Error(`Hexadecimal string doesn't have an even number of characters
|
|
40
|
+
throw new Error(`Hexadecimal string doesn't have an even number of characters.`)
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
const buffer = new Uint8Array(hexLength / 2)
|
|
@@ -63,5 +69,8 @@ function hexCharCodeToValue(hexCharCode: number) {
|
|
|
63
69
|
}
|
|
64
70
|
}
|
|
65
71
|
|
|
72
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
73
|
+
// Lookup tables
|
|
74
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
66
75
|
const hexCharLookup: string[] = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
|
|
67
76
|
const hexCharCodeLookup = new Uint8Array([48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102])
|
package/src/encodings/Utf16.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { EncodeIntoResult } from "./TextEncodingsCommon.js"
|
|
2
2
|
|
|
3
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
4
|
+
// UTF-16 Encoding
|
|
5
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
3
6
|
export function encodeUtf16(text: string) {
|
|
4
7
|
const resultArray = new Uint16Array(text.length)
|
|
5
8
|
|
|
@@ -22,31 +25,32 @@ export function encodeUtf16Into(text: string, resultBuffer: Uint16Array): Encode
|
|
|
22
25
|
return { read: len, written: len }
|
|
23
26
|
}
|
|
24
27
|
|
|
28
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
29
|
+
// UTF-16 Decoding
|
|
30
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
25
31
|
export function decodeUtf16(encodedString: Uint16Array) {
|
|
26
32
|
const maxChunkLength = 2 ** 24
|
|
27
33
|
|
|
28
|
-
const
|
|
34
|
+
const chunkedUtf16Decoder = new ChunkedUtf16Decoder()
|
|
35
|
+
|
|
36
|
+
let resultString = ''
|
|
29
37
|
|
|
30
38
|
for (let offset = 0; offset < encodedString.length; offset += maxChunkLength) {
|
|
31
|
-
const
|
|
39
|
+
const utf16Chunk = encodedString.subarray(offset, offset + maxChunkLength)
|
|
40
|
+
const stringChunk = chunkedUtf16Decoder.writeChunk(utf16Chunk)
|
|
32
41
|
|
|
33
|
-
|
|
42
|
+
resultString += stringChunk
|
|
34
43
|
}
|
|
35
44
|
|
|
36
|
-
return
|
|
45
|
+
return resultString
|
|
37
46
|
}
|
|
38
47
|
|
|
39
48
|
export class ChunkedUtf16Decoder {
|
|
40
|
-
private str = ''
|
|
41
49
|
private readonly textDecoder = new TextDecoder('utf-16le')
|
|
42
50
|
|
|
43
51
|
writeChunk(chunk: Uint16Array) {
|
|
44
52
|
const decodedChunk = this.textDecoder.decode(chunk, { stream: true })
|
|
45
53
|
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
toString() {
|
|
50
|
-
return this.str
|
|
54
|
+
return decodedChunk
|
|
51
55
|
}
|
|
52
56
|
}
|
package/src/encodings/Utf32.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { EncodeIntoResult } from "./TextEncodingsCommon.js"
|
|
2
2
|
|
|
3
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
4
|
+
// UTF-32 Encoding
|
|
5
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
3
6
|
export function encodeUtf32(text: string) {
|
|
4
7
|
const resultArray = new Uint32Array(text.length * 2)
|
|
5
8
|
|
|
@@ -33,6 +36,9 @@ export function encodeUtf32Into(text: string, resultBuffer: Uint32Array): Encode
|
|
|
33
36
|
return { read: readOffset, written: writeOffset }
|
|
34
37
|
}
|
|
35
38
|
|
|
39
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
40
|
+
// UTF-32 Decoding
|
|
41
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
36
42
|
export function decodeUtf32(encodedString: Uint32Array) {
|
|
37
43
|
let result = ''
|
|
38
44
|
|
package/src/encodings/Utf8.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { EncodeIntoResult } from
|
|
1
|
+
import { EncodeIntoResult } from './TextEncodingsCommon.js'
|
|
2
2
|
|
|
3
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
4
|
+
// UTF-8 Encoding
|
|
5
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
3
6
|
export function encodeUtf8(text: string) {
|
|
4
7
|
const textEncoder = new TextEncoder()
|
|
5
8
|
|
|
@@ -14,104 +17,64 @@ export function encodeUtf8Into(text: string, outputArray: Uint8Array): EncodeInt
|
|
|
14
17
|
return result
|
|
15
18
|
}
|
|
16
19
|
|
|
17
|
-
export
|
|
18
|
-
|
|
20
|
+
export class ChunkedUtf8Encoder {
|
|
21
|
+
private readonly textEncoder = new TextEncoder()
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
private pendingHighSurrogate = ''
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
writeChunk(stringChunk: string): Uint8Array {
|
|
26
|
+
if (this.pendingHighSurrogate !== '') {
|
|
27
|
+
stringChunk = this.pendingHighSurrogate + stringChunk
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
this.pendingHighSurrogate = ''
|
|
30
|
+
}
|
|
27
31
|
|
|
28
|
-
|
|
29
|
-
}
|
|
32
|
+
const lastCodeUnit = stringChunk.charCodeAt(stringChunk.length - 1)
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
private readonly textDecoder = new TextDecoder('utf-8')
|
|
34
|
+
if (lastCodeUnit >= 0xD800 && lastCodeUnit <= 0xDBFF) {
|
|
35
|
+
this.pendingHighSurrogate = stringChunk[stringChunk.length - 1]
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
stringChunk = stringChunk.substring(0, stringChunk.length - 1)
|
|
38
|
+
}
|
|
37
39
|
|
|
38
|
-
this.
|
|
40
|
+
return this.textEncoder.encode(stringChunk)
|
|
39
41
|
}
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
finalize(): Uint8Array {
|
|
44
|
+
const result = this.textEncoder.encode(this.pendingHighSurrogate)
|
|
45
|
+
|
|
46
|
+
this.pendingHighSurrogate = ''
|
|
47
|
+
|
|
48
|
+
return result
|
|
43
49
|
}
|
|
44
50
|
}
|
|
45
51
|
|
|
46
|
-
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
function
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
} else if (charCode <= 0xffff) {
|
|
62
|
-
outputArray[writeOffset++] = 0xe0 | (charCode >>> 12)
|
|
63
|
-
outputArray[writeOffset++] = 0x80 | ((charCode >>> 6) & 63)
|
|
64
|
-
outputArray[writeOffset++] = 0x80 | (charCode & 63)
|
|
65
|
-
} else if (charCode <= 0x10ffff) {
|
|
66
|
-
outputArray[writeOffset++] = 0xf0 | (charCode >>> 18)
|
|
67
|
-
outputArray[writeOffset++] = 0x80 | ((charCode >>> 12) & 63)
|
|
68
|
-
outputArray[writeOffset++] = 0x80 | ((charCode >>> 6) & 63)
|
|
69
|
-
outputArray[writeOffset++] = 0x80 | (charCode & 63)
|
|
70
|
-
|
|
71
|
-
readOffset++
|
|
72
|
-
}
|
|
52
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
53
|
+
// UTF-8 Decoding
|
|
54
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
55
|
+
export function decodeUtf8(utf8Bytes: Uint8Array) {
|
|
56
|
+
const maxChunkLength = 2 ** 24
|
|
57
|
+
|
|
58
|
+
const chunkedUtf8Decoder = new ChunkedUtf8Decoder()
|
|
59
|
+
|
|
60
|
+
let resultString = ''
|
|
61
|
+
|
|
62
|
+
for (let offset = 0; offset < utf8Bytes.length; offset += maxChunkLength) {
|
|
63
|
+
const utf8Chunk = utf8Bytes.subarray(offset, offset + maxChunkLength)
|
|
64
|
+
const stringChunk = chunkedUtf8Decoder.writeChunk(utf8Chunk)
|
|
65
|
+
|
|
66
|
+
resultString += stringChunk
|
|
73
67
|
}
|
|
74
68
|
|
|
75
|
-
return
|
|
69
|
+
return resultString
|
|
76
70
|
}
|
|
77
71
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
let readOffset = 0
|
|
82
|
-
|
|
83
|
-
while (readOffset < utf8Bytes.length) {
|
|
84
|
-
const leadByte = utf8Bytes[readOffset++]
|
|
85
|
-
|
|
86
|
-
let outputCodePoint: number
|
|
87
|
-
|
|
88
|
-
if (leadByte >>> 7 === 0) {
|
|
89
|
-
outputCodePoint = leadByte
|
|
90
|
-
} else if (leadByte >>> 5 === 6) {
|
|
91
|
-
outputCodePoint =
|
|
92
|
-
(leadByte & 31) << 6 |
|
|
93
|
-
(utf8Bytes[readOffset++] & 63)
|
|
94
|
-
} else if (leadByte >>> 4 === 14) {
|
|
95
|
-
outputCodePoint =
|
|
96
|
-
(leadByte & 15) << 12 |
|
|
97
|
-
(utf8Bytes[readOffset++] & 63) << 6 |
|
|
98
|
-
(utf8Bytes[readOffset++] & 63)
|
|
99
|
-
} else if (leadByte >>> 3 === 30) {
|
|
100
|
-
outputCodePoint =
|
|
101
|
-
(leadByte & 7) << 18 |
|
|
102
|
-
(utf8Bytes[readOffset++] & 63) << 12 |
|
|
103
|
-
(utf8Bytes[readOffset++] & 63) << 6 |
|
|
104
|
-
(utf8Bytes[readOffset++] & 63)
|
|
105
|
-
} else {
|
|
106
|
-
throw new Error(`Invalid UTF-8 stream: An invalid lead byte value encountered at position ${readOffset}`)
|
|
107
|
-
}
|
|
72
|
+
export class ChunkedUtf8Decoder {
|
|
73
|
+
private readonly textDecoder = new TextDecoder('utf-8')
|
|
108
74
|
|
|
109
|
-
|
|
110
|
-
|
|
75
|
+
writeChunk(chunk: Uint8Array) {
|
|
76
|
+
const decodedChunk = this.textDecoder.decode(chunk, { stream: true })
|
|
111
77
|
|
|
112
|
-
|
|
113
|
-
throw new Error(`UTF-8 decoding failed. Byte sequence is truncated.`)
|
|
78
|
+
return decodedChunk
|
|
114
79
|
}
|
|
115
|
-
|
|
116
|
-
return decodedString
|
|
117
80
|
}
|
package/src/nlp/Segmentation.ts
CHANGED
|
@@ -22,7 +22,11 @@ const includesEmojiSequencePattern = anyOf(
|
|
|
22
22
|
)
|
|
23
23
|
const includesEmojiSequenceRegExp = buildRegExp(includesEmojiSequencePattern)
|
|
24
24
|
|
|
25
|
-
const symbolWordsList = [
|
|
25
|
+
const symbolWordsList = [
|
|
26
|
+
'$', '€', '¢', '£', '¥', '©', '®', '™', '%', '&', '#', '~', '@', '+', '±', '÷',
|
|
27
|
+
'/', '\\', '^', '*', '×', '=', '≈', '¼', '½', '¾', '→', '≤', '≥', '∞'
|
|
28
|
+
]
|
|
29
|
+
|
|
26
30
|
const includesSymbolWordPattern = anyOf(...symbolWordsList)
|
|
27
31
|
const includesSymbolWordRegExp = buildRegExp(includesSymbolWordPattern)
|
|
28
32
|
|
|
@@ -31,7 +31,7 @@ export function getNormalizedFragmentsForSpeech(
|
|
|
31
31
|
|
|
32
32
|
//const isWordPrecedingAYear = wordsPrecedingAYear.includes(lowerCaseWord)
|
|
33
33
|
const isWordPrecedingAYear =
|
|
34
|
-
|
|
34
|
+
isAllLettersOrApostropheRegExp.test(lowerCaseWord) || isSpecialCharacterBeforeYear
|
|
35
35
|
|
|
36
36
|
const followedByFourDigitYearPattern = fourDigitYearRegExp.test(nextNonWhitespaceWord)
|
|
37
37
|
|
|
@@ -284,3 +284,14 @@ const fourDigitYearRangeRegExp = buildRegExp(fourDigitYearRangePattern)
|
|
|
284
284
|
|
|
285
285
|
const isAllLettersPattern = [inputStart, oneOrMore(unicodeProperty('Letter')), inputEnd]
|
|
286
286
|
const isAllLettersRegExp = buildRegExp(isAllLettersPattern)
|
|
287
|
+
|
|
288
|
+
const isAllLettersOrApostrophePattern = [
|
|
289
|
+
inputStart,
|
|
290
|
+
|
|
291
|
+
unicodeProperty('Letter'),
|
|
292
|
+
zeroOrMore(anyOf(unicodeProperty('Letter'), `'`)),
|
|
293
|
+
|
|
294
|
+
inputEnd,
|
|
295
|
+
]
|
|
296
|
+
|
|
297
|
+
const isAllLettersOrApostropheRegExp = buildRegExp(isAllLettersOrApostrophePattern)
|
|
@@ -6,7 +6,7 @@ import { Logger } from '../utilities/Logger.js'
|
|
|
6
6
|
import { Timeline } from '../utilities/Timeline.js'
|
|
7
7
|
import { RawAudio, getRawAudioDuration } from '../audio/AudioUtilities.js'
|
|
8
8
|
import { concatUint8Arrays } from '../utilities/Utilities.js'
|
|
9
|
-
import { escapeHtml } from '
|
|
9
|
+
import { escapeHtml } from 'standard-html-escaper'
|
|
10
10
|
import { SynthesisCallbacks } from '../api/Synthesis.js'
|
|
11
11
|
|
|
12
12
|
export async function synthesize(
|
|
@@ -9,7 +9,7 @@ import { Lexicon, tryGetFirstLexiconSubstitution } from '../nlp/Lexicon.js'
|
|
|
9
9
|
import { phonemizeSentence } from '../nlp/EspeakPhonemizer.js'
|
|
10
10
|
import { Timeline, TimelineEntry } from '../utilities/Timeline.js'
|
|
11
11
|
import { extendDeep } from '../utilities/ObjectUtilities.js'
|
|
12
|
-
import { escapeHtml } from '
|
|
12
|
+
import { escapeHtml } from 'standard-html-escaper'
|
|
13
13
|
import * as TextSegmentation from '@echogarden/text-segmentation'
|
|
14
14
|
|
|
15
15
|
import { OperationCallbacks, SynthesisCallbacks } from '../api/API.js'
|
|
@@ -8,7 +8,7 @@ import { concatUint8Arrays, getRandomHexString, logToStderr, sha256AsHex } from
|
|
|
8
8
|
import { RawAudio, getEmptyRawAudio, getRawAudioDuration } from '../audio/AudioUtilities.js'
|
|
9
9
|
import { Timer } from '../utilities/Timer.js'
|
|
10
10
|
import { decodeUtf8, encodeUtf8 } from '../encodings/Utf8.js'
|
|
11
|
-
import { escapeHtml } from '
|
|
11
|
+
import { escapeHtml } from 'standard-html-escaper'
|
|
12
12
|
import { requestHttp } from 'easier-http-request'
|
|
13
13
|
import { VoiceListRequestCallbacks, SynthesisCallbacks } from '../api/API.js'
|
|
14
14
|
|