echogarden 0.6.6 → 0.6.8

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/docs/Options.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Here is a detailed reference for the options accepted by the Echogarden API and CLI.
4
4
 
5
- Related resources:
5
+ **Related resources**:
6
6
  * [A comprehensive list of all supported engines](Engines.md)
7
7
  * [A quick guide for using the command line interface](CLI.md)
8
8
 
@@ -10,7 +10,7 @@ Related resources:
10
10
 
11
11
  Applicable to CLI commands: `speak`, `speak-file`, `speak-url`, `speak-wikipedia`.
12
12
 
13
- General:
13
+ **General**:
14
14
  * `engine`: identifier of the synthesis engine to use, such as `espeak` or `vits`.
15
15
  * `language`: language code ([ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)), like `en`, `fr`, `en-US`, `pt-BR`. Auto-detected if not set
16
16
  * `voice`: name of the voice to use. Can be a search string. Optional
@@ -23,11 +23,11 @@ General:
23
23
  * `sentenceEndPause`: pause duration (seconds) at end of sentence. Defaults to `0.75`
24
24
  * `segmentEndPause`: pause duration (seconds) at end of segment. Defaults to `1.0`
25
25
 
26
- Plain text processing:
26
+ **Plain text processing**:
27
27
  * `plainText.paragraphBreaks`: split to paragraphs based on single (`single`), or double (`double`) line breaks. Defaults to `double`
28
28
  * `plainText.whitespace`: determines how to process whitespace within paragraphs. Can be `preserve` (leave as is), `removeLineBreaks` (convert line breaks to spaces) or `collapse` (convert runs of whitespace characters, including line breaks, to a single space character). Defaults to `collapse`
29
29
 
30
- Post-processing:
30
+ **Post-processing**:
31
31
  * `postProcessing.normalizeAudio`: should normalize output audio. Defaults to `true`
32
32
  * `postProcessing.targetPeakDb`: target peak (decibels) for normalization. Defaults to `-3`
33
33
  * `postProcessing.maxIncreaseDb`: max gain increase (decibels) when performing normalization. Defaults to `30`
@@ -36,62 +36,62 @@ Post-processing:
36
36
  * `postProcessing.timePitchShiftingMethod`: method for time and pitch shifting. Can be `sonic` or `rubberband`. Defaults to `sonic`
37
37
  * `postProcessing.rubberband`: prefix for RubberBand options (TODO)
38
38
 
39
- Language detection:
39
+ **Language detection**:
40
40
  * `languageDetection`: prefix to provide custom options for language detection. Same options as detailed for text language detection, down below
41
41
 
42
- VITS:
42
+ **VITS**:
43
43
  * `vits.speakerId`: speaker ID, for VITS models that support multiple speakers. Optional
44
44
  * `vits.customLexiconPaths`: an array of custom lexicon file paths. Optional
45
45
 
46
- eSpeak-ng:
46
+ **eSpeak-ng**:
47
47
  * `espeak.rate`: speech rate, in eSpeak units. Overrides `speed` when set
48
48
  * `espeak.pitch`: pitch, in eSpeak units. Overrides `pitch` when set
49
49
  * `espeak.pitchRange`: pitch range, in eSpeak units. Overrides `pitchVariation` when set
50
50
 
51
- SAM:
51
+ **SAM**:
52
52
  * `sam.pitch`: pitch value, between `0`..`255`. Overrides `pitch` when set
53
53
  * `sam.speed`: speed value, between `0`..`255`. Overrides `speed` when set
54
54
  * `sam.mouth`: mouth value, between `0`..`255` (defaults to `128`)
55
55
  * `sam.throat`: throat value, between `0`..`255` (defaults to `128`)
56
56
 
57
- SAPI:
57
+ **SAPI**:
58
58
  * `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
59
59
 
60
- Microsoft Speech Platform:
60
+ **Microsoft Speech Platform**:
61
61
  * `msspeech.rate`: same units and effects as the SAPI speech rate
62
62
 
63
- Coqui Server:
63
+ **Coqui Server**:
64
64
  * `coquiServer.serverUrl`: server URL
65
65
  * `coquiServer.speakerId`: speaker ID (if applicable)
66
66
 
67
- Google Cloud:
67
+ **Google Cloud**:
68
68
  * `googleCloud.apiKey`: API key (required)
69
69
  * `googleCloud.pitchDeltaSemitones`: pitch delta in semitones. Overrides `pitch` when set
70
70
  * `googleCloud.customVoice.model`: name of custom voice
71
71
  * `googleCloud.customVoice.reportedUsage`: reported usage of custom voice
72
72
 
73
- Azure Cognitive Services:
73
+ **Azure Cognitive Services**:
74
74
  * `microsoftAzure.subscriptionKey`: subscription key (required)
75
75
  * `microsoftAzure.serviceRegion`: service region (required)
76
76
  * `microsoftAzure.pitchDeltaHz`: pitch delta in Hz. Overrides `pitch` when set
77
77
 
78
- Amazon Polly:
78
+ **Amazon Polly**:
79
79
  * `amazonPolly.region`: region (required)
80
80
  * `amazonPolly.accessKeyId`: access key ID (required)
81
81
  * `amazonPolly.secretAccessKey`: secret access key (required)
82
82
  * `amazonPolly.pollyEngine`: Amazon Polly engine kind, can be `standard` or `neural`. Defaults to `neural`
83
83
  * `amazonPolly.lexiconNames`: An array of lexicon names. Optional
84
84
 
85
- Elevenlabs:
85
+ **Elevenlabs**:
86
86
  * `elevenLabs.apiKey`: API key (required)
87
87
  * `elevenLabs.modelId`: Model identifier. Defaults to `eleven_monolingual_v1`
88
88
  * `elevenLabs.stability`: stability. Defaults to `0.5`
89
89
  * `elevenLabs.similarityBoost`: similarity boost. Defaults to `0.5`
90
90
 
91
- Google Translate:
91
+ **Google Translate**:
92
92
  * `googleTranslate.tld`: top level domain to to connect to. Can change the dialect for a small number or voices. For example `us` gives American English for `en`, while `com` gives British English for `en`. Defaults to `us`
93
93
 
94
- Microsoft Edge:
94
+ **Microsoft Edge**:
95
95
  * `microsoftEdge.trustedClientToken`: trusted client token (required). A special token required to use the service
96
96
  * `microsoftEdge.pitchDeltaHz`: pitch delta in Hz. Overrides `pitch` when set
97
97
 
@@ -99,31 +99,31 @@ Microsoft Edge:
99
99
 
100
100
  Applicable to CLI command: `transcribe`.
101
101
 
102
- General:
102
+ **General**:
103
103
  * `engine`: identifier of the recognition engine to use, such as `whisper` or `vosk`
104
104
  * `language`: language code ([ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)) for the audio, like `en`, `fr`, `de`. Auto-detected if not set
105
105
 
106
- Whisper:
106
+ **Whisper**:
107
107
  * `whisper.model`: selects which Whisper model to use. Can be `tiny`, `tiny.en`, `base`, `base.en`, `small`, `small.en`, `medium`, `medium.en`, `large` (same as `large-v2`), `large-v1`, `large-v2`. Defaults to `tiny`
108
108
 
109
- Vosk:
109
+ **Vosk**:
110
110
  * `vosk.modelPath`: path to the Vosk model to be used
111
111
 
112
- Silero:
112
+ **Silero**:
113
113
  * `silero.modelPath`: path to a Silero model. Note that latest `en`, `de`, `fr` and `uk` models are automatically installed when needed based on the selected language. This should only be used to manually specify a different model, otherwise specify `language` instead
114
114
 
115
- Google Cloud:
115
+ **Google Cloud**:
116
116
  * `googleCloud.apiKey`: Google Cloud API key (required)
117
117
  * `googleCloud.alternativeLanguageCodes`: An array of alternative language codes. Optional
118
118
  * `googleCloud.profanityFilter`: censor profanity. Defaults to `false`
119
119
  * `googleCloud.autoPunctuation`: add punctuation automatically. Defaults to `true`
120
120
  * `googleCloud.useEnhancedModel`: use enhanced model. Defaults to `true`
121
121
 
122
- Azure Cognitive Services:
122
+ **Azure Cognitive Services**:
123
123
  * `azureCognitiveServices.subscriptionKey`: subscription key (required)
124
124
  * `azureCognitiveServices.serviceRegion`: service region (required)
125
125
 
126
- Amazon Transcribe:
126
+ **Amazon Transcribe**:
127
127
  * `amazonTranscribe.region`: region (required)
128
128
  * `amazonTranscribe.accessKeyId`: access key ID (required)
129
129
  * `amazonTranscribe.secretAccessKey`: secret access key (required)
@@ -132,14 +132,14 @@ Amazon Transcribe:
132
132
 
133
133
  Applicable to CLI command: `align`.
134
134
 
135
- General:
135
+ **General**:
136
136
  * `method`: what alignment algorithm to use, can be `dtw`, `dtw-ra` or `whisper`. Defaults to `dtw`
137
137
  * `language`: language code for the audio and transcript ([ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)), like `en`, `fr`, `en-US`, `pt-BR`. Auto-detected from transcript if not set
138
138
 
139
- DTW:
139
+ **DTW**:
140
140
  * `dtw.windowDuration`: time duration (in seconds) of the Sakoe-Chiba window when performing DTW alignment. Defaults to `120`. If your audio is longer than two minutes, consider increasing this value for better results. Note that a higher value would consume quadratically larger amounts of memory. A value of `600` (10 minutes) would already require several Gigabytes of memory when the audio duration is 10 minutes or greater.
141
141
 
142
- DTW-RA only:
142
+ **DTW-RA only**:
143
143
  * `dtw.recognition`: prefix for providing custom recognition options when using `dtw-ra` method, for example: setting `dtw.recognition.engine = silero`
144
144
  * `dtw.phoneAlignmentMethod`: algorithm to use when aligning phones: can either be set to `dtw` or `interpolate`. Defaults to `dtw`
145
145
 
@@ -147,12 +147,12 @@ DTW-RA only:
147
147
 
148
148
  Applicable to CLI command: `translate-speech`.
149
149
 
150
- General:
150
+ **General**:
151
151
  * `engine`: only `whisper` supported
152
152
  * `sourceLanguage`: the source language code for the input speech. Auto-detected if not set
153
153
  * `targetLanguage`: the target language code for the output speech. Only `en` supported at this time.
154
154
 
155
- Whisper:
155
+ **Whisper**:
156
156
  * `whisper.model`: Whisper model to use (multilingual engines only). Defaults to `tiny`
157
157
 
158
158
  ## Language detection
@@ -176,25 +176,25 @@ Applicable to CLI command: `detect-text-langauge`.
176
176
 
177
177
  Applicable to CLI command: `detect-voice-activity`.
178
178
 
179
- General:
179
+ **General**:
180
180
  * `engine`: VAD engine to use. Can be `webrtc`, `silero` or `rnnoise`. Defaults to `webrtc`
181
181
  * `activityThreshold`: minimum predicted probability for determining a frame as having speech activity. Defaults to `0.5`
182
182
 
183
- WebRTC:
183
+ **WebRTC**:
184
184
  * `webrtc.frameDuration`: WebRTC frame duration (ms). Can be `10`, `20` or `30`. Defaults to `30`
185
185
  * `webrtc.mode`: WebRTC mode (aggressiveness). Can be `0`, `1`, `2` or `3`. Defaults to `1`
186
186
 
187
- Silero:
187
+ **Silero**:
188
188
  * `silero.frameDuration`: Silero frame duration (ms). Can be `30`, `60` or `90`. Defaults to `90`
189
189
 
190
190
  ## Speech denoising
191
191
 
192
192
  Applicable to CLI command: `denoise`.
193
193
 
194
- General:
194
+ **General**:
195
195
  * `engine`: can only be `rnnoise`
196
196
 
197
- Postprocessing:
197
+ **Postprocessing**:
198
198
  * `postProcessing.normalizeAudio`: should normalize output audio. Defaults to `false`
199
199
  * `postProcessing.targetPeakDb`: target peak (decibels) for normalization. Defaults to `-3`
200
200
  * `postProcessing.maxIncreaseDb`: max gain increase (decibels) when performing normalization. Defaults to `30`
@@ -204,6 +204,13 @@ Postprocessing:
204
204
 
205
205
  Applicable to CLI command: `list-voices`.
206
206
 
207
+ **General**
207
208
  * `language`: language code to filter by (optional)
208
209
  * `voice`: name or name pattern to filter by (optional)
209
210
  * `voiceGender`: gender to filter by (optional)
211
+
212
+ Also accepted are engine-specific options that may be required in order to retrieve the voice list, especially for cloud engines. Examples:
213
+ * `googleCloud.apiKey`
214
+ * `microsoftAzure.subscriptionKey`, `microsoftAzure.serviceRegion`
215
+ * `amazonPolly.region`, `amazonPolly.accessKeyId`, `amazonPolly.secretAccessKey`
216
+ * `elevenLabs.apiKey`, `elevenLabs.modelId`
package/docs/Tasklist.md CHANGED
@@ -42,14 +42,13 @@
42
42
  * Minimum size when iterating text nodes to get handle
43
43
 
44
44
  ### Worker
45
- * Optionally omit unnecessary data from the response (decoded input, segment data, etc.)
46
- * Support compressed audio in response
47
45
  * Add cancelation checks in more operations
46
+ * Optionally omit unnecessary data from the response (decoded input, segment data, etc.)
48
47
  * Support more operations
48
+ * Support compressed audio in response
49
49
 
50
50
  ### CLI
51
51
  * Colors in log messages
52
- * Find a way to ensure that a user who typed `align audio.mp3 transcript.txt` and then changed to `transcribe audio.mp3 transcript.txt` won't accidently overwrite their transcript file. Simple solution, but possibly not the best solution: `align audio.mp3 --reference=transcript.txt`. Other solution: on `transcribe` and `translate-speech`, ask if output file already exist or require an `--overwrite` flag to ensure that the user intended to overwrite the existing file.
53
52
  * Restrict input media file extensions to a set list to avoid cases where an output media file would be overwritten due to user error
54
53
  * Mode to print IPA words when speaking
55
54
  * Show a message when a new version is available
@@ -58,7 +57,7 @@
58
57
  * Option to set audio output device
59
58
  * Print available synthesis voices when no voice matches (or suggest near matches)
60
59
  * `transcribe` may also accept `http://` and `https://` URLs and pull the remote media file
61
- * Use a file type detector like `file-type` that uses magic numbers to detect the type of a binary file regardless of its extension. This would help giving better error messages when the given file type is wrong.
60
+ * Make enum options case-insensitive if possible
62
61
  * Consider adding the input text offset to each segment, sentence and word in the resulting timeline with respect to the original file (even if it is, say, an HTML or captions file)
63
62
  * Add phone playback support
64
63
  * More fine-grained intermediate progress report for operations
@@ -66,7 +65,7 @@
66
65
  * Multiple configuration files in `--config=..` taking precedence by order
67
66
  * Support comments in the JSON configuration file
68
67
  * Generate JSON configuration file schema
69
- * Make enum options case-insensitive if possible
68
+ * Use a file type detector like `file-type` that uses magic numbers to detect the type of a binary file regardless of its extension. This would help giving better error messages when the given file type is wrong.
70
69
 
71
70
  ### CLI / `speak`
72
71
  * Add support for sentence templates, like `echogarden speak-file text.txt /parts/[sentence].wav`.
@@ -85,7 +84,7 @@
85
84
  * Support filters
86
85
 
87
86
  ### CLI / New commands
88
- * `list-engines`: List available engines for a particular command, like `list-engines speak`
87
+ * `speak-youtube`: To speak the subtitles of a YouTube video
89
88
  * `play-with-captions`: Preview captions in terminal
90
89
  * `play-with-timeline`: Preview timeline in terminal
91
90
  * `captions-to-text`, `captions-to-timeline`, `srt-to-vtt`, `vtt-to-srt`
@@ -94,22 +93,23 @@
94
93
  * `phonemize-text`
95
94
  * `normalize-text`
96
95
  * `remove-nonspeech`
97
- * `speak-youtube`: To speak the subtitles of a YouTube video
98
96
 
99
97
  ### API
100
98
  * Option to control logging verbosity
101
- * Accept full language names as language identifiers
102
99
  * Add support to accept caption options in API and CLI
103
100
  * Retry on error when connecting to cloud providers, including WebSocket disconnection with `microsoft-edge` (already supported by `gaxios`, not sure about `ws` - decide on default setting)
101
+ * Accept full language names as language identifiers
104
102
  * Validate timelines to ensure timestamps are always increasing, no -1 timestamps or timestamps over the time of the audio, no sentences without words, etc. and correct if needed
105
- * Time/pitch shifting for recognition and alignment results
106
103
  * Add support for phrases in timelines
104
+ * Time/pitch shifting for recognition and alignment results
107
105
  * Accept voice list caching options in `SynthesisOptions`
108
106
 
109
- ### Language detection
110
- * Deploy and add the new language detection model
107
+ ### Speech Language detection
111
108
  * When using Whisper for language detection of speech, apply it to the entire audio, not just the first 30 seconds
112
109
 
110
+ ### Text Language detection
111
+ * Deploy and add the new language detection model
112
+
113
113
  ### Segmentation
114
114
  * Split long words
115
115
  * See if it's possible to reliably use eSpeak as a segmentation engine
@@ -130,14 +130,12 @@
130
130
  * Ensure abbreviations like "Ph.d" or names like are segmented and read correctly (why doesn't `cldr` treat it as a word? Maybe it's not getting the right parameters, or it's not included in the list?) and "C#"
131
131
  * Find way to manually reset voice list cache
132
132
  * When synthesized text isn't pre-split to sentences, apply sentence splits by using the existing method to convert the output of word timelines to sentence/segment timelines
133
- * Log full language of selected voice (it may have a different dialect than expected)
134
- * Add partial SSML support for all engines. In particular, allow changing language or voice using the `<voice>` and `<lang>` tags, `<say-as>` and `<phoneme>` where possible.
135
133
  * Some `sapi` voices and `msspeech` languages output phones that are converted to Microsoft alphabet, not IPA symbols. Try to see if these can be translated to IPA
136
134
  * Decide whether asterisk `*` should be spoken when using `speak-url` or `speak-wikipedia`
137
- * Decide what to do with `«` and `»` punctuation characters (guillemets) when parsing and playing
135
+ * Add partial SSML support for all engines. In particular, allow changing language or voice using the `<voice>` and `<lang>` tags, `<say-as>` and `<phoneme>` where possible.
138
136
  * Try to remove reliance on `()` after `.` character hack in `EspeakTTS.synthesizeFragments`.
139
137
  * eSpeak IPA output puts stress marks on vowels, not syllables - which is the standard for IPA. Consider how to make a conversion to and from these two approaches (possibly detect it automatically).
140
- * Investigate if `espeak` can be made to correctly support phonemizing and pronouncing the dot character like in `object.key`
138
+ * Investigate if eSpeak can be made to correctly support phonemizing and pronouncing the dot character like in `object.key`
141
139
  * Speaker-specific voice option
142
140
  * Decide if `msspeech` engine should be selected if available. This would require attempting to load a matching voice, and falling back if it is not installed
143
141
  * Option to disable alignment
@@ -156,12 +154,15 @@
156
154
  * Try to use entity recognition to detect years, dates, currencies etc., which would disambiguate cases where it is not clear, like "in 1993" in "She was born in 1993" and "It searched in 1993 websites"
157
155
  * Option to add POS tags to timeline, if available
158
156
 
159
- ### VITS
157
+ ### Synthesis / VITS
160
158
  * Allow to limit how many models are cached in memory
161
159
  * Custom model paths (decide how to implement)
162
160
  * Pull voice list from JSON file, or based on URL? Is that a good idea?
163
161
  * Add speaker names to voice list somehow
164
162
 
163
+ ### Synthesis / Azure Cognitive Services
164
+ * Currently, when input is set to be SSML, it is wrapped in a `<speak>` tag. Handle the case where the user made their own document wrapped with a `<speak>` tag as well. Currently it may send invalid input to Azure
165
+
165
166
  ### Recognition
166
167
  * Add confidence to each recognized word, if available
167
168
  * Show alternatives when playing in the CLI. Clear current line and rewrite already printed text for alternatives during the speech recognition process
@@ -171,13 +172,15 @@
171
172
  ### Recognition / Whisper
172
173
  * When using `dtw-ra` alignment, pass the transcript as a prompt. Remove some of the initial transcript based on what has been detected (try to find the best matching initial segment between the transcript and recognized text, and remove it at each recognition window).
173
174
  * During language detection, if file is more than 30s, run the detection over all the segments and average the resulting probability distributions, consider how to handle very short segments
175
+ * Log individual tokens to the terminal as they are being decoded from the model
176
+ * Add sampling and temperature support to decoder
174
177
  * Timestamps extracted from cross-attention are still not as accurate as what the official Python implementation gets. Try to see if you can make them better.
175
178
  * Cache last model
176
179
  * Integrate speech language detection into the recognition itself, so it is done efficiently when the language is not known
177
180
  * Bring back option to use eSpeak DTW based alignment on segments, as an alternative approach
178
181
  * The segment output can be use to split to segment files, otherwise it is possible to try to guess using the pause lengths or voice activity detection
179
182
  * Way to specify model size, such that the English-only/multilingual would be auto selection for sizes other than `tiny`?
180
- * Accept custom prompt as through an option
183
+ * Accept custom prompt through an option
181
184
 
182
185
  ### Alignment
183
186
  * Warn when input is larger than DTW window (this can also happen when synthesizing SSML, which can't be split to segments)
@@ -240,7 +243,7 @@
240
243
  * Live vosk alternatives events
241
244
  * Implement beam search for Whisper decoder
242
245
  * Implement beam search for Silero decoder
243
- * Investigate exporting Whisper models to 16-bit and 8-bit quantized ONNX
246
+ * Investigate exporting Whisper models to 16-bit quantized ONNX or a mix of 16-bit and 32-bits
244
247
 
245
248
  ### Web
246
249
  * Web based frontend UI to the server
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "echogarden",
3
- "version": "0.6.6",
3
+ "version": "0.6.8",
4
4
  "description": "An integrated speech system, providing a range of synthesis, recognition and other processing tools designed to be directly accessible to end-users.",
5
5
  "author": "Rotem Dan",
6
6
  "license": "GPL-3.0-only",
@@ -92,6 +92,7 @@
92
92
  "ndarray-ops": "^1.2.2",
93
93
  "onnxruntime-node": "^1.15.1",
94
94
  "sam-js": "^0.2.1",
95
+ "strip-ansi": "^7.1.0",
95
96
  "tar": "^6.1.15",
96
97
  "tinyld": "^1.3.4",
97
98
  "ws": "^8.13.0",