echogarden 0.12.2 → 1.0.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 +15 -14
- package/data/schemas/options.json +398 -111
- package/dist/alignment/DTWMfccSequenceAlignment.d.ts +1 -1
- package/dist/alignment/DTWMfccSequenceAlignment.js +8 -8
- package/dist/alignment/DTWSequenceAlignment.d.ts +1 -1
- package/dist/alignment/DTWSequenceAlignment.js +1 -1
- package/dist/alignment/DTWSequenceAlignmentWindowed.d.ts +1 -1
- package/dist/alignment/DTWSequenceAlignmentWindowed.js +2 -2
- package/dist/alignment/LevenshteinSequenceAlignment.d.ts +1 -1
- package/dist/alignment/LevenshteinSequenceAlignment.js +1 -1
- package/dist/alignment/SpeechAlignment.d.ts +9 -10
- package/dist/alignment/SpeechAlignment.js +136 -105
- package/dist/alignment/SpeechAlignment.js.map +1 -1
- package/dist/api/API.d.ts +13 -12
- package/dist/api/API.js +14 -13
- package/dist/api/API.js.map +1 -1
- package/dist/api/APIOptions.d.ts +5 -4
- package/dist/api/Alignment.d.ts +15 -9
- package/dist/api/Alignment.js +88 -74
- package/dist/api/Alignment.js.map +1 -1
- package/dist/api/Common.js +1 -1
- package/dist/api/Denoising.d.ts +6 -6
- package/dist/api/Denoising.js +23 -23
- package/dist/api/Denoising.js.map +1 -1
- package/dist/api/LanguageDetection.d.ts +19 -12
- package/dist/api/LanguageDetection.js +88 -38
- package/dist/api/LanguageDetection.js.map +1 -1
- package/dist/api/Recognition.d.ts +16 -6
- package/dist/api/Recognition.js +129 -55
- package/dist/api/Recognition.js.map +1 -1
- package/dist/api/SourceSeparation.d.ts +17 -0
- package/dist/api/SourceSeparation.js +61 -0
- package/dist/api/SourceSeparation.js.map +1 -0
- package/dist/api/Synthesis.d.ts +18 -18
- package/dist/api/Synthesis.js +191 -164
- package/dist/api/Synthesis.js.map +1 -1
- package/dist/api/Translation.d.ts +19 -8
- package/dist/api/Translation.js +132 -35
- package/dist/api/Translation.js.map +1 -1
- package/dist/api/Vad.d.ts +10 -5
- package/dist/api/Vad.js +76 -38
- package/dist/api/Vad.js.map +1 -1
- package/dist/audio/AudioBufferConversion.d.ts +1 -1
- package/dist/audio/AudioBufferConversion.js +4 -4
- package/dist/audio/AudioPlayer.d.ts +1 -1
- package/dist/audio/AudioPlayer.js +26 -26
- package/dist/audio/AudioPlayer.js.map +1 -1
- package/dist/audio/AudioRecorder.d.ts +1 -1
- package/dist/audio/AudioRecorder.js +5 -5
- package/dist/audio/AudioUtilities.d.ts +13 -9
- package/dist/audio/AudioUtilities.js +86 -24
- package/dist/audio/AudioUtilities.js.map +1 -1
- package/dist/cli/CLI.d.ts +3 -3
- package/dist/cli/CLI.js +271 -162
- package/dist/cli/CLI.js.map +1 -1
- package/dist/cli/CLIConfigFile.js +8 -8
- package/dist/cli/CLILauncher.js +6 -6
- package/dist/cli/CLIOptionsSchema.js +2 -2
- package/dist/cli/CLIParser.js +5 -5
- package/dist/cli/CLIStarter.js +4 -4
- package/dist/codecs/FFMpegTranscoder.d.ts +2 -2
- package/dist/codecs/FFMpegTranscoder.js +37 -37
- package/dist/codecs/FFMpegTranscoder.js.map +1 -1
- package/dist/codecs/TIMITCodec.js +5 -5
- package/dist/codecs/WaveCodec.d.ts +1 -1
- package/dist/codecs/WaveCodec.js +22 -22
- package/dist/denoising/RNNoise.d.ts +1 -1
- package/dist/denoising/RNNoise.js +9 -9
- package/dist/dsp/BiquadFilter.d.ts +3 -2
- package/dist/dsp/BiquadFilter.js +18 -11
- package/dist/dsp/BiquadFilter.js.map +1 -1
- package/dist/dsp/DecayingPeakEstimator.d.ts +16 -0
- package/dist/dsp/DecayingPeakEstimator.js +23 -0
- package/dist/dsp/DecayingPeakEstimator.js.map +1 -0
- package/dist/dsp/FFT.d.ts +8 -4
- package/dist/dsp/FFT.js +76 -30
- package/dist/dsp/FFT.js.map +1 -1
- package/dist/dsp/KWeightingFilter.d.ts +9 -0
- package/dist/dsp/KWeightingFilter.js +40 -0
- package/dist/dsp/KWeightingFilter.js.map +1 -0
- package/dist/dsp/LoudnessEstimator.d.ts +21 -0
- package/dist/dsp/LoudnessEstimator.js +47 -0
- package/dist/dsp/LoudnessEstimator.js.map +1 -0
- package/dist/dsp/MFCC.d.ts +2 -2
- package/dist/dsp/MFCC.js +15 -15
- package/dist/dsp/MelSpectogram.d.ts +1 -1
- package/dist/dsp/MelSpectogram.js +6 -6
- package/dist/dsp/Rubberband.d.ts +11 -11
- package/dist/dsp/Rubberband.js +27 -27
- package/dist/dsp/Sonic.d.ts +1 -1
- package/dist/dsp/Sonic.js +3 -3
- package/dist/dsp/SpeexResampler.d.ts +1 -1
- package/dist/dsp/SpeexResampler.js +2 -2
- package/dist/math/VectorMath.d.ts +12 -8
- package/dist/math/VectorMath.js +35 -32
- package/dist/math/VectorMath.js.map +1 -1
- package/dist/nlp/ChineseSegmentation.js +2 -2
- package/dist/nlp/CompromiseNLP.js +3 -3
- package/dist/nlp/EspeakPhonemizer.js +30 -30
- package/dist/nlp/IPA.js +20 -20
- package/dist/nlp/JapaneseSegmentation.js +6 -6
- package/dist/nlp/Lexicon.d.ts +1 -1
- package/dist/nlp/Lexicon.js +7 -7
- package/dist/nlp/Segmentation.d.ts +3 -0
- package/dist/nlp/Segmentation.js +21 -14
- package/dist/nlp/Segmentation.js.map +1 -1
- package/dist/nlp/TextNormalizer.js +16 -16
- package/dist/recognition/AmazonTranscribeSTT.d.ts +2 -2
- package/dist/recognition/AmazonTranscribeSTT.js +13 -14
- package/dist/recognition/AmazonTranscribeSTT.js.map +1 -1
- package/dist/recognition/AzureCognitiveServicesSTT.js +5 -6
- package/dist/recognition/AzureCognitiveServicesSTT.js.map +1 -1
- package/dist/recognition/GoogleCloudSTT.d.ts +3 -3
- package/dist/recognition/GoogleCloudSTT.js +18 -18
- package/dist/recognition/OpenAICloudSTT.d.ts +19 -0
- package/dist/recognition/OpenAICloudSTT.js +81 -0
- package/dist/recognition/OpenAICloudSTT.js.map +1 -0
- package/dist/recognition/SileroSTT.d.ts +2 -2
- package/dist/recognition/SileroSTT.js +25 -25
- package/dist/recognition/VoskSTT.d.ts +2 -2
- package/dist/recognition/VoskSTT.js +8 -8
- package/dist/recognition/WhisperCppSTT.d.ts +88 -0
- package/dist/recognition/WhisperCppSTT.js +332 -0
- package/dist/recognition/WhisperCppSTT.js.map +1 -0
- package/dist/recognition/WhisperSTT.d.ts +49 -25
- package/dist/recognition/WhisperSTT.js +626 -481
- package/dist/recognition/WhisperSTT.js.map +1 -1
- package/dist/server/Client.d.ts +1 -1
- package/dist/server/Client.js +22 -22
- package/dist/server/Server.js +9 -9
- package/dist/server/Server.js.map +1 -1
- package/dist/server/Worker.d.ts +22 -22
- package/dist/server/Worker.js +36 -36
- package/dist/server/Worker.js.map +1 -1
- package/dist/server/WorkerStarter.js +2 -2
- package/dist/source-separation/MDXNetSourceSeparation.d.ts +11 -0
- package/dist/source-separation/MDXNetSourceSeparation.js +161 -0
- package/dist/source-separation/MDXNetSourceSeparation.js.map +1 -0
- package/dist/speech-language-detection/SileroLanguageDetection.d.ts +1 -1
- package/dist/speech-language-detection/SileroLanguageDetection.js +7 -7
- package/dist/subtitles/Subtitles.d.ts +10 -0
- package/dist/subtitles/Subtitles.js +2 -2
- package/dist/subtitles/Subtitles.js.map +1 -1
- package/dist/synthesis/AwsPollyTTS.d.ts +1 -1
- package/dist/synthesis/AwsPollyTTS.js +12 -12
- package/dist/synthesis/AzureCognitiveServicesTTS.js +7 -7
- package/dist/synthesis/CoquiServerTTS.js +10 -10
- package/dist/synthesis/CoquiServerTTS.js.map +1 -1
- package/dist/synthesis/ElevenlabsTTS.d.ts +23 -0
- package/dist/synthesis/ElevenlabsTTS.js +103 -0
- package/dist/synthesis/ElevenlabsTTS.js.map +1 -0
- package/dist/synthesis/EspeakTTS.d.ts +6 -5
- package/dist/synthesis/EspeakTTS.js +81 -69
- package/dist/synthesis/EspeakTTS.js.map +1 -1
- package/dist/synthesis/FliteTTS.d.ts +3 -3
- package/dist/synthesis/FliteTTS.js +154 -154
- package/dist/synthesis/FliteTTS.js.map +1 -1
- package/dist/synthesis/GoogleCloudTTS.d.ts +3 -3
- package/dist/synthesis/GoogleCloudTTS.js +17 -17
- package/dist/synthesis/GoogleCloudTTS.js.map +1 -1
- package/dist/synthesis/GoogleTranslateTTS.d.ts +1 -1
- package/dist/synthesis/GoogleTranslateTTS.js +103 -103
- package/dist/synthesis/MicrosoftEdgeTTS.d.ts +2 -2
- package/dist/synthesis/MicrosoftEdgeTTS.js +74 -74
- package/dist/synthesis/OpenAICloudTTS.d.ts +13 -0
- package/dist/synthesis/OpenAICloudTTS.js +169 -0
- package/dist/synthesis/OpenAICloudTTS.js.map +1 -0
- package/dist/synthesis/SamTTS.js +3 -3
- package/dist/synthesis/SapiTTS.d.ts +3 -3
- package/dist/synthesis/SapiTTS.js +26 -26
- package/dist/synthesis/StreamlabsPollyTTS.d.ts +2 -2
- package/dist/synthesis/StreamlabsPollyTTS.js +27 -27
- package/dist/synthesis/SvoxPicoTTS.d.ts +2 -2
- package/dist/synthesis/SvoxPicoTTS.js +65 -65
- package/dist/synthesis/SvoxPicoTTS.js.map +1 -1
- package/dist/synthesis/VitsTTS.d.ts +3 -3
- package/dist/synthesis/VitsTTS.js +378 -378
- package/dist/synthesis/VitsTTS.js.map +1 -1
- package/dist/tests/Test.js +2 -2
- package/dist/utilities/Compression.d.ts +5 -0
- package/dist/utilities/Compression.js +29 -13
- package/dist/utilities/Compression.js.map +1 -1
- package/dist/utilities/FileDownloader.d.ts +1 -1
- package/dist/utilities/FileDownloader.js +16 -16
- package/dist/utilities/FileSystem.js +7 -7
- package/dist/utilities/Locale.d.ts +7 -7
- package/dist/utilities/Locale.js +15 -15
- package/dist/utilities/Logger.js +3 -3
- package/dist/utilities/ObjectUtilities.js +19 -19
- package/dist/utilities/OpenPromise.js +2 -2
- package/dist/utilities/OpenPromise.js.map +1 -1
- package/dist/utilities/PackageManager.js +31 -0
- package/dist/utilities/PackageManager.js.map +1 -1
- package/dist/utilities/PathUtilities.js +8 -8
- package/dist/utilities/RandomGenerator.js +2 -2
- package/dist/utilities/SmoothEstimator.d.ts +8 -0
- package/dist/utilities/SmoothEstimator.js +25 -0
- package/dist/utilities/SmoothEstimator.js.map +1 -0
- package/dist/utilities/TarballMaker.js +8 -8
- package/dist/utilities/Timeline.d.ts +3 -2
- package/dist/utilities/Timeline.js +11 -11
- package/dist/utilities/Timeline.js.map +1 -1
- package/dist/utilities/Timer.js +4 -4
- package/dist/utilities/Utilities.d.ts +4 -0
- package/dist/utilities/Utilities.js +38 -15
- package/dist/utilities/Utilities.js.map +1 -1
- package/dist/utilities/WasmMemoryManager.js +7 -7
- package/dist/utilities/WebReader.js +23 -23
- package/dist/utilities/WikipediaReader.js +2 -2
- package/dist/voice-activity-detection/AdaptiveGateVAD.d.ts +28 -0
- package/dist/voice-activity-detection/AdaptiveGateVAD.js +138 -0
- package/dist/voice-activity-detection/AdaptiveGateVAD.js.map +1 -0
- package/dist/voice-activity-detection/SileroVAD.d.ts +1 -1
- package/dist/voice-activity-detection/SileroVAD.js +5 -5
- package/dist/voice-activity-detection/SileroVAD.js.map +1 -1
- package/dist/voice-activity-detection/WebRtcVAD.d.ts +1 -1
- package/dist/voice-activity-detection/WebRtcVAD.js +4 -4
- package/docs/API.md +29 -11
- package/docs/CLI.md +31 -7
- package/docs/Contributing.md +38 -0
- package/docs/Development.md +93 -19
- package/docs/Engines.md +28 -16
- package/docs/Licenses.md +4 -1
- package/docs/Options.md +158 -78
- package/docs/Releases.md +262 -0
- package/docs/Server.md +7 -7
- package/docs/Tasklist.md +95 -76
- package/docs/Technical.md +4 -4
- package/package.json +13 -14
- package/src/alignment/DTWMfccSequenceAlignment.ts +9 -9
- package/src/alignment/DTWSequenceAlignment.ts +2 -2
- package/src/alignment/DTWSequenceAlignmentWindowed.ts +3 -3
- package/src/alignment/LevenshteinSequenceAlignment.ts +2 -2
- package/src/alignment/SpeechAlignment.ts +204 -119
- package/src/api/API.ts +14 -13
- package/src/api/APIOptions.ts +12 -11
- package/src/api/Alignment.ts +147 -90
- package/src/api/Common.ts +1 -1
- package/src/api/Denoising.ts +28 -28
- package/src/api/LanguageDetection.ts +135 -48
- package/src/api/Recognition.ts +198 -59
- package/src/api/SourceSeparation.ts +99 -0
- package/src/api/Synthesis.ts +217 -181
- package/src/api/Translation.ts +193 -40
- package/src/api/Vad.ts +110 -41
- package/src/audio/AudioBufferConversion.ts +4 -4
- package/src/audio/AudioPlayer.ts +27 -27
- package/src/audio/AudioRecorder.ts +5 -5
- package/src/audio/AudioUtilities.ts +107 -24
- package/src/cli/CLI.ts +313 -164
- package/src/cli/CLIConfigFile.ts +8 -8
- package/src/cli/CLILauncher.ts +6 -6
- package/src/cli/CLIOptionsSchema.ts +2 -2
- package/src/cli/CLIParser.ts +5 -5
- package/src/cli/CLIStarter.ts +4 -4
- package/src/codecs/FFMpegTranscoder.ts +38 -38
- package/src/codecs/TIMITCodec.ts +5 -5
- package/src/codecs/WaveCodec.ts +22 -22
- package/src/denoising/RNNoise.ts +9 -9
- package/src/dsp/BiquadFilter.ts +19 -11
- package/src/dsp/DecayingPeakEstimator.ts +35 -0
- package/src/dsp/FFT.ts +103 -35
- package/src/dsp/KWeightingFilter.ts +43 -0
- package/src/dsp/LoudnessEstimator.ts +74 -0
- package/src/dsp/MFCC.ts +15 -15
- package/src/dsp/MelSpectogram.ts +7 -7
- package/src/dsp/Rubberband.ts +38 -38
- package/src/dsp/Sonic.ts +4 -4
- package/src/dsp/SpeexResampler.ts +2 -2
- package/src/math/VectorMath.ts +42 -33
- package/src/nlp/ChineseSegmentation.ts +3 -3
- package/src/nlp/CompromiseNLP.ts +3 -3
- package/src/nlp/EspeakPhonemizer.ts +30 -30
- package/src/nlp/IPA.ts +20 -20
- package/src/nlp/JapaneseSegmentation.ts +6 -6
- package/src/nlp/Lexicon.ts +8 -8
- package/src/nlp/Segmentation.ts +23 -14
- package/src/nlp/TextNormalizer.ts +16 -16
- package/src/recognition/AmazonTranscribeSTT.ts +16 -17
- package/src/recognition/AzureCognitiveServicesSTT.ts +8 -6
- package/src/recognition/GoogleCloudSTT.ts +21 -21
- package/src/recognition/OpenAICloudSTT.ts +142 -0
- package/src/recognition/SileroSTT.ts +26 -26
- package/src/recognition/VoskSTT.ts +10 -10
- package/src/recognition/WhisperCppSTT.ts +555 -0
- package/src/recognition/WhisperSTT.ts +760 -507
- package/src/server/Client.ts +23 -23
- package/src/server/Server.ts +9 -9
- package/src/server/Worker.ts +53 -53
- package/src/server/WorkerStarter.ts +2 -2
- package/src/source-separation/MDXNetSourceSeparation.ts +228 -0
- package/src/speech-language-detection/SileroLanguageDetection.ts +8 -8
- package/src/subtitles/Subtitles.ts +3 -3
- package/src/synthesis/AwsPollyTTS.ts +14 -14
- package/src/synthesis/AzureCognitiveServicesTTS.ts +10 -10
- package/src/synthesis/CoquiServerTTS.ts +10 -10
- package/src/synthesis/ElevenlabsTTS.ts +137 -0
- package/src/synthesis/EspeakTTS.ts +90 -71
- package/src/synthesis/FliteTTS.ts +157 -157
- package/src/synthesis/GoogleCloudTTS.ts +19 -19
- package/src/synthesis/GoogleTranslateTTS.ts +104 -104
- package/src/synthesis/MicrosoftEdgeTTS.ts +80 -80
- package/src/synthesis/OpenAICloudTTS.ts +196 -0
- package/src/synthesis/SamTTS.ts +3 -3
- package/src/synthesis/SapiTTS.ts +29 -29
- package/src/synthesis/StreamlabsPollyTTS.ts +29 -29
- package/src/synthesis/SvoxPicoTTS.ts +67 -67
- package/src/synthesis/VitsTTS.ts +380 -380
- package/src/tests/Test.ts +4 -4
- package/src/utilities/Compression.ts +34 -13
- package/src/utilities/FileDownloader.ts +19 -19
- package/src/utilities/FileSystem.ts +7 -7
- package/src/utilities/Locale.ts +22 -22
- package/src/utilities/Logger.ts +4 -4
- package/src/utilities/ObjectUtilities.ts +19 -19
- package/src/utilities/OpenPromise.ts +2 -2
- package/src/utilities/PackageManager.ts +40 -0
- package/src/utilities/PathUtilities.ts +8 -8
- package/src/utilities/RandomGenerator.ts +3 -3
- package/src/utilities/SmoothEstimator.ts +35 -0
- package/src/utilities/TarballMaker.ts +9 -9
- package/src/utilities/Timeline.ts +15 -13
- package/src/utilities/Timer.ts +4 -4
- package/src/utilities/Utilities.ts +49 -15
- package/src/utilities/WasmMemoryManager.ts +7 -7
- package/src/utilities/WebReader.ts +23 -23
- package/src/utilities/WikipediaReader.ts +2 -2
- package/src/voice-activity-detection/AdaptiveGateVAD.ts +202 -0
- package/src/voice-activity-detection/SileroVAD.ts +5 -5
- package/src/voice-activity-detection/WebRtcVAD.ts +5 -5
- package/dist/synthesis/ElevenLabsTTS.d.ts +0 -8
- package/dist/synthesis/ElevenLabsTTS.js +0 -82
- package/dist/synthesis/ElevenLabsTTS.js.map +0 -1
- package/src/synthesis/ElevenLabsTTS.ts +0 -104
package/docs/Releases.md
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# Release notes
|
|
2
|
+
|
|
3
|
+
## `1.0.0` (April 4, 2024)
|
|
4
|
+
|
|
5
|
+
**New features**:
|
|
6
|
+
* Add support for [`whisper.cpp`](https://github.com/ggerganov/whisper.cpp), a C++ port of OpenAI's Whisper speech recognition architecture. It is faster than the integrated `whisper` engine, supports large models, and GPU processing. It can now be used for recognition, speech translation and alignment (via `dtw-ra`), though its word timestamps are less accurate than the integrated `whisper` engine.
|
|
7
|
+
* Add the [MDX-NET](https://github.com/kuielab/mdx-net/) source separation model, enabling vocal tracks to be extracted from music and speech audio using the new `isolate` operation
|
|
8
|
+
* Add support for OpenAI cloud platform's [speech recognition and translation services](https://platform.openai.com/docs/guides/speech-to-text)
|
|
9
|
+
* Add support for OpenAI cloud platform's [speech synthesis service](https://platform.openai.com/docs/guides/text-to-speech)
|
|
10
|
+
* Integrate optional vocal isolation to speech recognition, alignment and translation operations using the new `--isolate` option, allowing for higher accuracy in difficult cases like achieving word-level lyrics alignment
|
|
11
|
+
* Add the new `adaptive-gate` VAD engine using a custom bandlimited adaptive gate. Fast and robust. Works well for relatively clean tracks or tracks that have already been processed using vocal isolation
|
|
12
|
+
* Add optional token-level repetition suppression to Whisper engine
|
|
13
|
+
* Expose several new configuration options for the Whisper engine: a settings for maximum tokens per part, and a setting to enable/disable repetition suppression, set custom random seed, disable/enable decoding of timestamp tokens
|
|
14
|
+
* Expose more options for the Elevenlabs engine
|
|
15
|
+
|
|
16
|
+
**Behavioral and breaking changes**:
|
|
17
|
+
* Minimal required node version changed to `18.0.0`
|
|
18
|
+
* All recognition, alignment, translation and language recognition operations first apply the new adaptive gate VAD (can be changed to any other VAD engine via the `vad.` option prefix) and remove any sections that are not identified as containing voice, before starting processing. This should improve results in most cases, and reduce processing time
|
|
19
|
+
* To reduce Whisper hallucinations and repetition loops, these change were made:
|
|
20
|
+
* Pre-cropping by default can significantly help with reducing hallucinations, giving the model less "empty space" to hallucinate on
|
|
21
|
+
* Enable new token-level repetition suppression (`suppressRepetition = true`) during decoding
|
|
22
|
+
* Disable decoding of timestamp tokens by default (`decodeTimestampTokens = false`), since more accurate timing is already extracted via cross-attention weight alignment. For unclear reasons, this can significantly reduce the occurrence of token repetition loops, and increases word timestamp accuracy. However, there are cases where this causes the model to end a part prematurely, especially in singing and less speech-like voice segments. In those cases the it can be enabled with `decodeTimestampTokens = true`
|
|
23
|
+
* When `transcribe`, `align` or `translate-speech` operations are run with `--isolate` enabled, they will output the isolated part in `some-output-file.isolated.wav` and background part (isolated subtracted from original) in `some-output-file.background.wav` (any supported codec other than `wav` can be used - this is just an example)
|
|
24
|
+
* VAD operations now return a timeline including only the active sections, labeled as `active`
|
|
25
|
+
* When the specified language is not English, but an `.en` Whisper model was specified, a warning would be shown, and the model would be automatically switched to the corresponding multilingual model (omitting the `.en`), instead of producing an error
|
|
26
|
+
* Default speech language detection engine is now changed to `whisper`
|
|
27
|
+
* Default voice activity detection engine is now changed to `silero`
|
|
28
|
+
* CLI: duplicate file name outputs would now append the `_001` suffix pattern instead of ` (1)`. This change is meant to simplify sorting and typing the resulting file names and remove the space and parenthesis characters, to ensure compatibility with all operating systems
|
|
29
|
+
* `targetPeakDb` post-processing and denoising option renamed to `targetPeak`
|
|
30
|
+
* `maxIncreaseDb` post-processing and denoising option renamed to `maxGainIncrease`
|
|
31
|
+
* `dryMixGainDb` denoising option renamed to `dryMixGain`
|
|
32
|
+
|
|
33
|
+
**Enhancements**:
|
|
34
|
+
* `detect-voice-activity` now also outputs the cropped voice when an audio file is given as output, with `.cropped` suffix added
|
|
35
|
+
* Improved word segmentation of whisper engine. Words spanning multiple recognized time segments are now split. Word timestamp ranges don't overlap non-speech sections.
|
|
36
|
+
* Whisper and Whisper.cpp outputs now include timestamps for individual recognized tokens
|
|
37
|
+
|
|
38
|
+
**Fixes**:
|
|
39
|
+
* Integrated `whisper` engine now uses `tiktoken` to tokenize text, which produces near identical tokenization compared to the official Python implementation. This fixes issues with decoding Chinese characters, correctly encoding prompts, and several others languages with characters that span multiple tokens
|
|
40
|
+
* Fix voice language lists for multilingual voices in Elevenlabs TTS engine
|
|
41
|
+
* Fix runtime error with `rnnoise` when used as VAD engine
|
|
42
|
+
* Fix issue in CLI where supported output media formats weren't reported correctly
|
|
43
|
+
* Fix issue with identifying legacy IEEE Float wave format
|
|
44
|
+
* Fix issue with language detection failing with empty inputs
|
|
45
|
+
* Fix issue with Whisper model failing when no tokens are detected in a part
|
|
46
|
+
* Fix issue with phone alignment not getting the right DTW window size, producing warnings like `all cost directions are equal to infinity
|
|
47
|
+
* Fix phone timelines in DTW-RA
|
|
48
|
+
* Add more workarounds for eSpeak tokenization bugs
|
|
49
|
+
* Various other fixes
|
|
50
|
+
|
|
51
|
+
**Documentation**:
|
|
52
|
+
* Add new 'Releases' page. Releases before `1.0.x` were retroactively documented based on commit history (may not exactly detail all historical changes)
|
|
53
|
+
* Options reference page restructured and updated with some missing information
|
|
54
|
+
|
|
55
|
+
## `0.12.x` (March 16, 2024)
|
|
56
|
+
|
|
57
|
+
**New features**:
|
|
58
|
+
* Add global options support to API
|
|
59
|
+
* Add updated `ffmpeg` internal packages for many platforms, including pre-signed binaries for macOS
|
|
60
|
+
|
|
61
|
+
**Enhancements**:
|
|
62
|
+
|
|
63
|
+
**Fixes**:
|
|
64
|
+
* Fix issue with Polish TTS in eSpeak NG
|
|
65
|
+
* Fix warning about `punycode` module in the CLI
|
|
66
|
+
|
|
67
|
+
**Other**:
|
|
68
|
+
* Include `package-lock.json` in repository
|
|
69
|
+
|
|
70
|
+
## `0.11.x` (August 17, 2023)
|
|
71
|
+
|
|
72
|
+
Many features, enhancements, and fixes were incrementally added over the span of 7 months, up to March 2024.
|
|
73
|
+
|
|
74
|
+
**New features**:
|
|
75
|
+
* Partial rewrite of subtitle generation methods. Adds many features and options
|
|
76
|
+
* Expose subtitle methods to API
|
|
77
|
+
* Add support for multi-pass (AKA hierarchical) DTW alignment
|
|
78
|
+
* Auto-prompt parts in `whisper` STT engine
|
|
79
|
+
* Add support for Klatt synthesis in `espeak` engine
|
|
80
|
+
|
|
81
|
+
**Enhancements**:
|
|
82
|
+
* Adds a total of 14 new VITS voices
|
|
83
|
+
* Retry on failure for `microsoft-edge` and `google-translate` TTS engines
|
|
84
|
+
|
|
85
|
+
**Fixes**:
|
|
86
|
+
* Don't error when empty audio is returned in `microsoft-edge` response
|
|
87
|
+
* Fix audio playback in macOS
|
|
88
|
+
* Many other fixes
|
|
89
|
+
|
|
90
|
+
## `0.10.x` (August 2, 2023)
|
|
91
|
+
|
|
92
|
+
**New features**:
|
|
93
|
+
* Add developer and server APIs, allowing the package to be used as a library or server
|
|
94
|
+
* Add granularity options to DTW
|
|
95
|
+
* Add Linux SoX package
|
|
96
|
+
|
|
97
|
+
**Enhancements**:
|
|
98
|
+
* Adds 7 new VITS voices
|
|
99
|
+
|
|
100
|
+
**Fixes**:
|
|
101
|
+
* Many fixes
|
|
102
|
+
|
|
103
|
+
## `0.9.x` (July 29, 2023)
|
|
104
|
+
|
|
105
|
+
**New features**:
|
|
106
|
+
* Add text offsets to timeline
|
|
107
|
+
* Include segments and sentences in recognition and speech translation timelines
|
|
108
|
+
* Improve voice information in Elevenlabs engine
|
|
109
|
+
|
|
110
|
+
**Behavioral changes**:
|
|
111
|
+
* Set `en_GB-alan-low` as default `en-GB` VITS voice, since `danny` was trained to accept `en-US` pronunciations, which may confuse some people
|
|
112
|
+
|
|
113
|
+
**Fixes**:
|
|
114
|
+
* Work around several eSpeak bugs
|
|
115
|
+
* Many fixes
|
|
116
|
+
|
|
117
|
+
## `0.8.x` (July 25, 2023)
|
|
118
|
+
|
|
119
|
+
**New features**:
|
|
120
|
+
* Add confidence to some speech recognition timelines
|
|
121
|
+
* Add `plaintext` options
|
|
122
|
+
* Add punctuation thresholds to Whisper decoder
|
|
123
|
+
* Expose subtitle configuration options to CLI
|
|
124
|
+
|
|
125
|
+
**Behavioral changes**:
|
|
126
|
+
* Rename `subtitles.minWords` to `subtitles.minWordsInLine`
|
|
127
|
+
|
|
128
|
+
**Enhancements**:
|
|
129
|
+
* Improve speech language detection to work with arbitrary length audio. Split audio to overlapping parts and detect each part individually. Then average the results.
|
|
130
|
+
* Add more heteronyms
|
|
131
|
+
|
|
132
|
+
**Fixes**:
|
|
133
|
+
* Improve numerical stability of softmax function
|
|
134
|
+
* Work around eSpeak bug with markers in long inputs
|
|
135
|
+
* Various fixes
|
|
136
|
+
|
|
137
|
+
## `0.7.x` (July 23, 2023)
|
|
138
|
+
|
|
139
|
+
**New features**:
|
|
140
|
+
* Alignment: Add option to accept custom lexicons
|
|
141
|
+
* Implement and add decoder temperature option to Whisper model
|
|
142
|
+
|
|
143
|
+
**Behavioral changes**:
|
|
144
|
+
|
|
145
|
+
**Enhancements**:
|
|
146
|
+
* Alignment: use preprocessing and lexicons
|
|
147
|
+
* Add language detection to speech translation
|
|
148
|
+
* Add language detection options to synthesis, and set empty default options for detection in several APIs
|
|
149
|
+
* Accept speech language detection options in recognition
|
|
150
|
+
* Show warning only when DTW window is smaller than 25% of audio duration
|
|
151
|
+
* Add colors to log messages
|
|
152
|
+
* Warn when maximum DTW window duration is smaller than source audio duration.
|
|
153
|
+
|
|
154
|
+
**Fixes**:
|
|
155
|
+
* Fix support for SSML input in eSpeak engine
|
|
156
|
+
* Various fixes
|
|
157
|
+
|
|
158
|
+
## `0.6.x` (July 20, 2023)
|
|
159
|
+
|
|
160
|
+
**New features**:
|
|
161
|
+
* Add support for custom lexicons. Change lexicon object structure to include language code and allow for multiple languages in a single lexicon
|
|
162
|
+
* Add support for SSML inputs (currently only supported by Google, Microsoft and Amazon cloud engines). Ensure they are not split to segments or sentences
|
|
163
|
+
* CLI: Add flag to enable or disable file overwriting in CLI
|
|
164
|
+
* CLI: Add command to list engines
|
|
165
|
+
* Add arguments to customize paragraph parsing
|
|
166
|
+
* Change whitespace option to include option for collapsing all whitespace
|
|
167
|
+
|
|
168
|
+
**Behavioral changes**:
|
|
169
|
+
* Set Elevenlabs defaults to mid-values
|
|
170
|
+
* Split plain text to paragraphs using double line breaks by default.
|
|
171
|
+
* Rename `awsPolly` options to `amazonPolly` to be more consistent with documentation
|
|
172
|
+
|
|
173
|
+
**Enhancements**:
|
|
174
|
+
* Change whitespace option to include option for collapsing all whitespace
|
|
175
|
+
* Add awareness of guillemets
|
|
176
|
+
* Log full language of selected voice
|
|
177
|
+
|
|
178
|
+
**Fixes**:
|
|
179
|
+
* Fix and update Elevenlabs engine
|
|
180
|
+
* Fix incorrect gender properties for some VITS voices
|
|
181
|
+
* Convert to plaintext before detecting language when input is SSML.
|
|
182
|
+
* Various fixes
|
|
183
|
+
|
|
184
|
+
**Other**:
|
|
185
|
+
* Remove `package-lock.json` from the repository
|
|
186
|
+
|
|
187
|
+
## `0.5.x` (July, 19 2023)
|
|
188
|
+
|
|
189
|
+
**New features**:
|
|
190
|
+
|
|
191
|
+
**Behavioral changes**:
|
|
192
|
+
* Move to new package system supporting version tags, and hosted in a Hugging Face repository
|
|
193
|
+
|
|
194
|
+
**Enhancements**:
|
|
195
|
+
* Add large numbers of VITS voices
|
|
196
|
+
|
|
197
|
+
**Fixes**:
|
|
198
|
+
* Various fixes
|
|
199
|
+
|
|
200
|
+
## `0.4.x` (July 9, 2023)
|
|
201
|
+
|
|
202
|
+
**New features**:
|
|
203
|
+
|
|
204
|
+
**Behavioral changes**:
|
|
205
|
+
* Remove support for `afplay` and `aplay` for playback. Only SoX is used now.
|
|
206
|
+
|
|
207
|
+
**Enhancements**:
|
|
208
|
+
* Improve text normalization and add support for currencies
|
|
209
|
+
* Improve heteronym lexicons
|
|
210
|
+
* Extend year patterns
|
|
211
|
+
* Improve logic for decade normalization
|
|
212
|
+
* Add some British English (RP) pronunciations to heteronym lexicon
|
|
213
|
+
* Add large numbers of VITS voices
|
|
214
|
+
|
|
215
|
+
**Fixes**:
|
|
216
|
+
* Various fixes
|
|
217
|
+
|
|
218
|
+
## `0.3.x` (July 1, 2023)
|
|
219
|
+
|
|
220
|
+
**New features**:
|
|
221
|
+
|
|
222
|
+
**Behavioral changes**:
|
|
223
|
+
|
|
224
|
+
**Enhancements**:
|
|
225
|
+
* Upgrade heteronym disambiguation to an improved, rule-based approach, which doesn't use POS tagging
|
|
226
|
+
* Extend decade normalization
|
|
227
|
+
* Improve text normalization and add support to currencies
|
|
228
|
+
* Update the heteronym lexicon
|
|
229
|
+
|
|
230
|
+
**Fixes**:
|
|
231
|
+
* Remove sentences containing only whitespace when synthesizing
|
|
232
|
+
* Many fixes
|
|
233
|
+
|
|
234
|
+
## `0.2.x` (May 10, 2023)
|
|
235
|
+
|
|
236
|
+
**New features**:
|
|
237
|
+
|
|
238
|
+
**Behavioral changes**:
|
|
239
|
+
* Remove dependency on `xregexp` package. Use Unicode RegExp instead.
|
|
240
|
+
|
|
241
|
+
**Enhancements**:
|
|
242
|
+
* Show current sentence and segment in synthesis log.
|
|
243
|
+
* Add check for cancellation flag.
|
|
244
|
+
* Add support to additional VITS voices
|
|
245
|
+
* Improve auto TTS engine selection
|
|
246
|
+
* Many Enhancements
|
|
247
|
+
|
|
248
|
+
**Fixes**:
|
|
249
|
+
* Many fixes
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
## `0.1.x` (April 24, 2023)
|
|
253
|
+
|
|
254
|
+
Initial release
|
|
255
|
+
|
|
256
|
+
**Enhancements**:
|
|
257
|
+
* Add support for skipping audio playback with the Enter key.
|
|
258
|
+
* Run CLI in a worker thread by default.
|
|
259
|
+
* Many Enhancements
|
|
260
|
+
|
|
261
|
+
**Fixes**:
|
|
262
|
+
* Many fixes
|
package/docs/Server.md
CHANGED
|
@@ -15,13 +15,13 @@ echogarden serve [options]
|
|
|
15
15
|
* `keyPath`: Path to a private key file, required when `secure = true`
|
|
16
16
|
* `deflate`: Use per-message deflate. Defaults to `true`
|
|
17
17
|
* `maxPayload`: Maximum raw message payload size (in bytes). Defaults to `1000 * 1000000` (1GB)
|
|
18
|
-
* `useWorkerThread`: Run worker in a separate thread. Defaults to `true` (recommended
|
|
18
|
+
* `useWorkerThread`: Run worker in a separate thread. Defaults to `true` (recommended leaving as is)
|
|
19
19
|
|
|
20
20
|
## Using the client class
|
|
21
21
|
|
|
22
22
|
For Node.js clients, a simple client class allows to wrap communications with the server in a more convenient interface, without needing to know the details of the protocol.
|
|
23
23
|
|
|
24
|
-
Currently, the client is
|
|
24
|
+
Currently, the client is embedded in the main codebase. This means you have to import the `echogarden` package to use it:
|
|
25
25
|
|
|
26
26
|
```ts
|
|
27
27
|
import { WebSocket } from 'ws'
|
|
@@ -39,7 +39,7 @@ ws.on("open", async () => {
|
|
|
39
39
|
In the future, this module may be separated to an independent lightweight package.
|
|
40
40
|
|
|
41
41
|
**TODO**: Document using the client class with a background worker.
|
|
42
|
-
**TODO**: Add support for
|
|
42
|
+
**TODO**: Add support for cancellation signals in the client class.
|
|
43
43
|
|
|
44
44
|
## Protocol details
|
|
45
45
|
|
|
@@ -111,18 +111,18 @@ Example response, for the above synthesis request:
|
|
|
111
111
|
}
|
|
112
112
|
```
|
|
113
113
|
|
|
114
|
-
###
|
|
114
|
+
### Cancellation messages
|
|
115
115
|
|
|
116
|
-
To cancel an existing request, the client can send a `
|
|
116
|
+
To cancel an existing request, the client can send a `CancellationRequest` message, with the same `requestId` of an ongoing request, like:
|
|
117
117
|
|
|
118
118
|
```ts
|
|
119
119
|
{
|
|
120
|
-
messageType: '
|
|
120
|
+
messageType: 'CancellationRequest',
|
|
121
121
|
requestId: 'cb7e0f3ec835a213b005c4424c8d5775'
|
|
122
122
|
}
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
**TODO**:
|
|
125
|
+
**TODO**: Cancellation requests are currently only supported for synthesis operations. Extend support for other operations.
|
|
126
126
|
|
|
127
127
|
## Starting the server programmatically
|
|
128
128
|
|
package/docs/Tasklist.md
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## Bugs
|
|
4
4
|
|
|
5
|
+
### Synthesis
|
|
6
|
+
|
|
7
|
+
|
|
5
8
|
### Phoneme processing
|
|
6
9
|
* IPA -> Kirshenbaum translation is still not completely similar to what is output by eSpeak. Also, in rare situations, it outputs characters that are not accepted by eSpeak and eSpeak errors. Investigate when that happens and how to improve on this.
|
|
7
10
|
|
|
@@ -12,54 +15,49 @@
|
|
|
12
15
|
### Browser extension / content script
|
|
13
16
|
* Highlighting sometimes does not appear when mouse is pressed over handle while speech of element starts
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
### External bugs
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
20
|
+
* `espeak-ng`: 'Oh dear!”' is read as "oh dear exclamation mark", because of the special quote character following the exclamation mark
|
|
21
|
+
* `espeak-ng`: [Marker right after sentence end is not reported as an event](https://github.com/espeak-ng/espeak-ng/issues/920)
|
|
22
|
+
* `espeak-ng`: On Japanese text, it says "Chinese character" or "Japanese character" for characters it doesn't know
|
|
23
|
+
* `wtf_wikipedia` Sometimes fails on `getResult.js` without throwing a humanly readable error
|
|
24
|
+
* `wtf_wikipedia` Sometimes captures markup like `.svg` etc.
|
|
25
|
+
* `msspeech`: Initialization fails on Chinese and Japanese voices (but not Korean)
|
|
26
|
+
* `compromise`: Slow initialization time. Currently, it takes more than a second
|
|
27
|
+
* Chromium doesn't fire timer events when cursor is positioned over scrollbar or body margins
|
|
28
|
+
* `whisper.cpp`: Timestamps aren't very accurate when `enableDTW` is set. There's a constant lag
|
|
29
|
+
* Node.js WASI for `flite` on Node `v21.7.2` and `v20.12.1` is intermittently crashing the process when `run` is called
|
|
21
30
|
|
|
22
|
-
|
|
23
|
-
* Autoscroll should work even if the scrollbar relevant to the target element is not the viewport's scrollbar
|
|
24
|
-
* Find a way to show handles even for elements that start with a link
|
|
25
|
-
* Add detection for line breaks in `pre` blocks
|
|
26
|
-
* Support the custom tags used in YouTube comments
|
|
27
|
-
* Show handles based on `<br>` tags and possibly line breaks internal to the element
|
|
28
|
-
* Show handles based on sentence start positions
|
|
29
|
-
* UI or gesture to stop speech (other than the `esc` key)
|
|
30
|
-
* Hide handles when mouse leaves the viewport
|
|
31
|
-
* Don't show handles when mouse is over a large container element
|
|
32
|
-
* Button or keyboard shortcut to show and hide handles
|
|
33
|
-
* Show blinking placeholder when synthesis is loading for a particular text node
|
|
34
|
-
* Navigate paragraphs or sentences with keyboard shortcuts
|
|
35
|
-
* Minimum size when iterating text nodes to get handle
|
|
31
|
+
## Features and enhancements
|
|
36
32
|
|
|
37
33
|
### Server
|
|
38
|
-
* Option to allow or disallow local file paths as arguments to API methods (as a security
|
|
34
|
+
* Option to allow or disallow local file paths as arguments to API methods (as a security safeguard)
|
|
39
35
|
|
|
40
36
|
### Worker
|
|
41
|
-
* Add
|
|
37
|
+
* Add cancellation checks in more operations
|
|
42
38
|
* Support more operations
|
|
43
39
|
|
|
44
40
|
### CLI
|
|
45
|
-
* Show names of files written do disk. This is useful for cases where a file is auto-renamed to
|
|
46
|
-
*
|
|
47
|
-
* Restrict input media file extensions to ensure that invalid files are not passed to FFMpeg.
|
|
41
|
+
* Show names of files written do disk. This is useful for cases where a file is auto-renamed to prevent overwriting existing data
|
|
42
|
+
* Restrict input media file extensions to ensure that invalid files are not passed to FFmpeg
|
|
48
43
|
* Mode to print IPA words when speaking
|
|
49
44
|
* Consider what to do with non-supported templates like `[hello]`
|
|
50
45
|
* Show a message when a new version is available
|
|
51
46
|
* Figure out which terminal outputs should go to stdout, or if that's a good idea at all
|
|
52
|
-
* Option to set audio output device for playback
|
|
53
47
|
* Print available synthesis voices when no voice matches (or suggest near matches)
|
|
54
48
|
* `transcribe` may also accept `http://` and `https://` URLs and pull the remote media file
|
|
55
|
-
* Make enum options case-insensitive if possible
|
|
56
|
-
* Add phone playback support
|
|
49
|
+
* Make `enum` options case-insensitive if possible
|
|
57
50
|
* More fine-grained intermediate progress report for operations
|
|
58
51
|
* Suggest possible correction on the error of not using `=`, e.g. `speed 0.9` instead of `speed=0.9`
|
|
59
52
|
* Multiple configuration files in `--config=..` taking precedence by order
|
|
60
53
|
* Generate JSON configuration file schema
|
|
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
|
|
62
|
-
|
|
54
|
+
* 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 to give better error messages when the given file type is wrong.
|
|
55
|
+
|
|
56
|
+
### CLI / playback
|
|
57
|
+
* Option to set audio output device for playback
|
|
58
|
+
* Option to set playback volume
|
|
59
|
+
* Maybe find a way not to pre-normalize if the audio is silent (to prevent a 30dB increase of possible noise)
|
|
60
|
+
* Add phone playback support
|
|
63
61
|
|
|
64
62
|
### CLI / `speak`
|
|
65
63
|
* Add support for sentence templates, like `echogarden speak-file text.txt /parts/[sentence].wav`.
|
|
@@ -72,33 +70,32 @@
|
|
|
72
70
|
* Use the Wikipedia reader when the URL is detected to be from `wikipedia.org`
|
|
73
71
|
|
|
74
72
|
### CLI / `list-voices`
|
|
75
|
-
* When given a configuration file, see if you can fall back to take options from
|
|
73
|
+
* When given a configuration file, see if you can fall back to take options from `speak` options, for example, to take API keys that are required for the both the synthesis request and voice list request and
|
|
76
74
|
|
|
77
75
|
### CLI / `list-packages`
|
|
78
76
|
* Support filters
|
|
79
77
|
|
|
80
78
|
### CLI / New commands
|
|
81
|
-
* `speak-youtube`: To speak the subtitles of a YouTube video
|
|
82
79
|
* `play-with-subtitles`: Preview subtitles in terminal
|
|
83
80
|
* `play-with-timeline`: Preview timeline in terminal
|
|
84
81
|
* `subtitles-to-text`, `subtitles-to-timeline`, `srt-to-vtt`, `vtt-to-srt`
|
|
85
|
-
* `crop-to-timeline`, `split-by-timeline`
|
|
86
82
|
* `text-to-ipa`, `arpabet-to-ipa`, `ipa-to-arpabet`
|
|
87
83
|
* `phonemize-text`
|
|
88
84
|
* `normalize-text`
|
|
89
|
-
* `
|
|
85
|
+
* `transcribe-youtube`: Transcribe the audio in a YouTube video (requires fetching the audio somehow - which can't be done using the normal YouTube API)
|
|
86
|
+
* `speak-youtube-subtitles`: To speak the subtitles of a YouTube video
|
|
90
87
|
|
|
91
88
|
### API
|
|
92
89
|
* Option to control logging verbosity
|
|
93
|
-
* 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)
|
|
94
90
|
* Accept full language names as language identifiers
|
|
95
|
-
* Validate timelines to ensure timestamps are always increasing
|
|
96
|
-
* See
|
|
91
|
+
* Validate timelines to ensure timestamps are always increasing: no negative timestamps or timestamps over the duration of the audio. No sentences without words, etc. and correct if needed
|
|
92
|
+
* See whether it's possible to detect and include / remove Emoji characters in timelines
|
|
97
93
|
* Add support for phrases in timelines
|
|
98
94
|
* Accept voice list caching options in `SynthesisOptions`
|
|
99
95
|
|
|
100
96
|
### Package manager
|
|
101
|
-
* Better error message when package is not found remotely. Currently it just gives a `404 not found` without any other information.
|
|
97
|
+
* Better error message when package is not found remotely. Currently, it just gives a `404 not found` without any other information.
|
|
98
|
+
* Retry on network failure
|
|
102
99
|
|
|
103
100
|
### Speech language detection
|
|
104
101
|
|
|
@@ -118,10 +115,10 @@
|
|
|
118
115
|
* Parse VTT's language
|
|
119
116
|
|
|
120
117
|
### Synthesis
|
|
121
|
-
* Option to disable alignment (only for some engines). Alternative: use a low setting that is very fast to compute
|
|
118
|
+
* Option to disable alignment (only for some engines). Alternative: use a low granularity setting that is very fast to compute
|
|
122
119
|
* Find places to add commas (",") to improve speech fluency. VITS voices don't normally add speech breaks if there is no punctuation
|
|
123
120
|
* An isolated dash " - " can be converted to a " , " to ensure there's a break in the speech.
|
|
124
|
-
* Ensure abbreviations like "Ph.d" or names like are segmented and read correctly (does `cldr` treat it as a word? Maybe eSpeak doesn't recognize it as a word). "C#" as well
|
|
121
|
+
* Ensure abbreviations like "Ph.d" or names like are segmented and read correctly (does `cldr` treat it as a word? Maybe eSpeak doesn't recognize it as a word). "C#" and ".NET" as well
|
|
125
122
|
* Find way to manually reset voice list cache
|
|
126
123
|
* 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
|
|
127
124
|
* 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
|
|
@@ -132,6 +129,7 @@
|
|
|
132
129
|
* 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
|
|
133
130
|
* Speaker-specific voice option
|
|
134
131
|
* Use VAD on the synthesized audio file to get more accurate sentence or word segmentation
|
|
132
|
+
* When `splitToSentences` is set to `false`, the timeline doesn't include proper sentences. Find a way to pass larger sections to the TTS, but still have proper sentences in the timeline.
|
|
135
133
|
|
|
136
134
|
### Synthesis / preprocessing
|
|
137
135
|
* Extend the heteronyms JSON document with additional words like "conducts", "survey", "protest", "transport", "abuse", "combat", "combats", "affect", "contest", "detail", "marked", "contrast", "construct", "constructs", "console", "recall", "permit", "permits", "prospect", "prospects", "proceed", "proceeds", "invite", "reject", "deserts", "transcript", "transcripts", "compact", "impact", "impacts"
|
|
@@ -141,40 +139,67 @@
|
|
|
141
139
|
* Support substituting to graphemes in lexicons, not only phonemes
|
|
142
140
|
* Cache lexicons to avoid parsing the JSON each time it is loaded (this may not be needed for if the file is relatively small)
|
|
143
141
|
* Is it possible to pre-phonemize common words like "the" or is it a bad idea / not necessary?
|
|
144
|
-
* Add support for text preprocessing for all engines that can benefit from it (possibly including cloud engines)
|
|
142
|
+
* Add support for text preprocessing for all engines that can benefit from it (possibly including cloud engines)
|
|
145
143
|
* Add SAPI pronunciation to lexicons (you already have the pronunciations for `en_US` and `en_GB`)
|
|
146
144
|
* 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"
|
|
147
145
|
* Option to add POS tags to timeline, if available
|
|
148
146
|
|
|
149
147
|
### Synthesis / VITS
|
|
150
|
-
* Allow
|
|
148
|
+
* Allow limiting how many models are cached in memory
|
|
151
149
|
* Custom model paths (decide how to implement)
|
|
152
150
|
* Pull voice list from JSON file, or based on URL? Is that a good idea?
|
|
153
151
|
* Add speaker names to voice list somehow
|
|
154
152
|
|
|
155
153
|
### Synthesis / Azure Cognitive Services
|
|
156
|
-
* Currently, when input is set to be SSML, it is wrapped in a `<speak>` tag. Handle the case where the user made their own SSML document wrapped with a `<speak>` tag as well. Currently it may send invalid input to Azure
|
|
154
|
+
* Currently, when input is set to be SSML, it is wrapped in a `<speak>` tag. Handle the case where the user made their own SSML document wrapped with a `<speak>` tag as well. Currently, it may send invalid input to Azure
|
|
157
155
|
|
|
158
156
|
### Recognition
|
|
159
|
-
* Add confidence to each recognized word on any engine that supports it
|
|
160
157
|
* Show alternatives when playing in the CLI. Clear current line and rewrite already printed text for alternatives during the speech recognition process
|
|
161
|
-
* Look for good split points using VAD before performing recognition
|
|
162
158
|
* Option to split recognized audio to segments or sentences, as is done with synthesized audio
|
|
159
|
+
* Try to exclude the timing for trailing punctuation tokens in words that contain them. This can help narrow down the end timestamp to cover the word more tightly
|
|
160
|
+
* Recognized word entries that span VAD boundaries may be split
|
|
163
161
|
|
|
164
162
|
### Recognition / Whisper
|
|
165
163
|
* May get stuck in a token repeat loop when silence or non-speech segment encountered in audio. Decide what to do
|
|
166
164
|
* Automatically disable using previous section recognized transcript as prompt for the next section when lots of repetition occurred in previous section
|
|
167
165
|
* Cache last model (if enough memory available)
|
|
168
166
|
* Bring back option to use eSpeak DTW based alignment on segments, as an alternative approach
|
|
169
|
-
* The segment output can be
|
|
167
|
+
* The segment output can be used to split to segments, otherwise it is possible to try to guess using pause lengths or voice activity detection
|
|
168
|
+
* Use compression ratios on the decoded tokens of individual segments and discard if too much repetition detected
|
|
170
169
|
* Way to specify model size only, such that the English-only/multilingual variant would be automatically selected for sizes other than `tiny`?
|
|
171
|
-
* 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
|
|
170
|
+
* 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
|
|
171
|
+
* Whisper's Chinese output can be split to words in a more accurate way. Consider using a dedicated segmentation library to perform the segmentation in character sequences that have no spaces within them
|
|
172
172
|
|
|
173
173
|
### Alignment
|
|
174
|
-
* Investigate a reliable way to cut silent or non-speech sections to improve results.
|
|
175
174
|
|
|
176
|
-
|
|
177
|
-
|
|
175
|
+
* Aligned words entries that span VAD boundaries may be split
|
|
176
|
+
|
|
177
|
+
### Alignment / DTW-RA
|
|
178
|
+
* Remove emojis and other special characters, that are not likely to be pronounced in the speech, from the transcript timeline before it is synthesized. For example Whisper may produce 'note' emojis when it detects singing or music. Pronouncing them reduces the accuracy of the alignment
|
|
179
|
+
* Optional mode to pass Whisper a special vocabulary of tokens that can appear in the transcript. All other tokens would be suppressed
|
|
180
|
+
|
|
181
|
+
### Alignment / Whisper
|
|
182
|
+
* New mode to decode the transcript tokens in order using a more standard decoding approach (updating the KV cache at each step). This would allow audio inputs longer than 30 seconds. See if this produces better results
|
|
183
|
+
|
|
184
|
+
### Browser extension
|
|
185
|
+
* Options UI
|
|
186
|
+
* Add supported engines and voices to WebSpeech voice list
|
|
187
|
+
* Pause and resume support
|
|
188
|
+
|
|
189
|
+
### Browser extension / content script
|
|
190
|
+
* Autoscroll should work even if the scrollbar relevant to the target element is not the viewport's scrollbar
|
|
191
|
+
* Find a way to show handles even for elements that start with a link
|
|
192
|
+
* Add detection for line breaks in `pre` blocks
|
|
193
|
+
* Support the custom tags used in YouTube comments
|
|
194
|
+
* Show handles based on `<br>` tags and possibly line breaks internal to the element
|
|
195
|
+
* Show handles based on sentence start positions
|
|
196
|
+
* UI or gesture to stop speech (other than the `esc` key)
|
|
197
|
+
* Hide handles when mouse leaves the viewport
|
|
198
|
+
* Don't show handles when mouse is over a large container element
|
|
199
|
+
* Button or keyboard shortcut to show and hide handles
|
|
200
|
+
* Show blinking placeholder when synthesis is loading for a particular text node
|
|
201
|
+
* Navigate paragraphs or sentences with keyboard shortcuts
|
|
202
|
+
* Minimum size when iterating text nodes to get handle
|
|
178
203
|
|
|
179
204
|
## Maintenance and cleanup
|
|
180
205
|
|
|
@@ -182,21 +207,10 @@
|
|
|
182
207
|
* CLI code has a lot of repetition. See how it can be refactored
|
|
183
208
|
* See if the installation of `winax` can be automated and only initiate if it is in a Windows environment
|
|
184
209
|
* Ensure that all modules have no internal state other than caching
|
|
185
|
-
* Start thinking about some modules being available in the browser. Which node core APIs the use? Which of them can be polyfilled,
|
|
186
|
-
* Change all the Emscripten WASM modules to use the `EXPORT_ES6=1` flag
|
|
210
|
+
* Start thinking about some modules being available in the browser. Which node core APIs the use? Which of them can be polyfilled, and which cannot?
|
|
211
|
+
* Change all the Emscripten WASM modules to use the `EXPORT_ES6=1` flag and rebuild them. Support for node.js modules was only added in September 2022 (https://github.com/emscripten-core/emscripten/pull/17915).
|
|
187
212
|
* Remove built-in voices from `flite` to reduce size?
|
|
188
|
-
* Slim down `kuromoji` package to
|
|
189
|
-
|
|
190
|
-
## External bugs
|
|
191
|
-
|
|
192
|
-
* `espeak-ng`: 'Oh dear!”' is read as "oh dear exclamation mark", because of the special quote character following the exclamation mark
|
|
193
|
-
* `espeak-ng`: [Marker right after sentence end is not reported as an event](https://github.com/espeak-ng/espeak-ng/issues/920)
|
|
194
|
-
* `espeak-ng`: On Japanese text, it says "Chinese character" or "Japanese character" for characters it doesn't know
|
|
195
|
-
* `wtf_wikipedia` Sometimes fails on `getResult.js` without throwing a humanly readable error
|
|
196
|
-
* `wtf_wikipedia` Sometimes captures markup like `.svg` etc.
|
|
197
|
-
* `msspeech`: Initialization fails on Chinese and Japanese voices (but not Korean)
|
|
198
|
-
* `compromise`: Slow initialization time. Currently it takes more than a second
|
|
199
|
-
* Chromium doesn't fire timer events when cursor is positioned over scrollbar or body margins
|
|
213
|
+
* Slim down `kuromoji` package to reduce base installation size
|
|
200
214
|
|
|
201
215
|
## Things to test
|
|
202
216
|
|
|
@@ -206,6 +220,7 @@
|
|
|
206
220
|
* Test everything's fine on macOS
|
|
207
221
|
* Test that cloud services all still work correctly, especially with SSML inputs
|
|
208
222
|
|
|
223
|
+
|
|
209
224
|
## Future features and enhancements
|
|
210
225
|
|
|
211
226
|
### CLI
|
|
@@ -236,35 +251,37 @@
|
|
|
236
251
|
* Live input / microphone recognition
|
|
237
252
|
* Implement beam search for Whisper decoder
|
|
238
253
|
* Implement beam search for Silero decoder
|
|
239
|
-
* Live
|
|
254
|
+
* Live Vosk alternatives events
|
|
240
255
|
* Investigate exporting Whisper models to 16-bit quantized ONNX or a mix of 16-bit and 32-bit
|
|
241
256
|
|
|
242
257
|
### Alignment
|
|
243
|
-
* Implement alignment with speech translation assistance, which would enable multilingual subtitle replacement for translated subtitles
|
|
258
|
+
* Implement alignment with speech-to-text translation assistance, which would enable multilingual subtitle replacement for translated subtitles
|
|
244
259
|
* Method to align audio file to audio file
|
|
245
260
|
* Make `dtw` mode work with more speech synthesizers to produce its reference
|
|
246
261
|
* Predict timing for individual letters (graphemes) based on phoneme timestamps
|
|
247
262
|
|
|
248
|
-
|
|
263
|
+
### Voice activity detection
|
|
264
|
+
|
|
265
|
+
* Whisper-based VAD. Use Whisper's 'no speech' token to determine if the audio contains speech
|
|
266
|
+
|
|
267
|
+
### Source separation
|
|
268
|
+
* Option to customize overlap
|
|
269
|
+
* Add more MDX-NET models
|
|
249
270
|
|
|
250
271
|
## Possible new engines or platforms
|
|
251
272
|
|
|
252
|
-
* OpenAI Whisper cloud service (`large-v3` model is available, at a price).
|
|
253
|
-
* OpenAI Text-to-Speech cloud service.
|
|
254
273
|
* [PlayHT](https://play.ht/) speech synthesis cloud service
|
|
255
|
-
* [
|
|
256
|
-
* [
|
|
257
|
-
* `whisper.cpp` CLI and WASM support
|
|
274
|
+
* [Deepgram](https://deepgram.com/) cloud text-to-speech API
|
|
275
|
+
* [Assembly AI](https://www.assemblyai.com/) cloud speech recognition API
|
|
258
276
|
* Coqui STT server connection
|
|
277
|
+
* [MarbleNet VAD](https://github.com/NVIDIA/NeMo/blob/main/tutorials/asr/Online_Offline_Microphone_VAD_Demo.ipynb), included of the NVIDIA NeMo framework, can be exported to ONNX
|
|
278
|
+
* Silero text enhancement engine can be ported to ONNX
|
|
259
279
|
* See what can be done on supporting WinRT speech: in particular `windows.media.speechsynthesis` and `windows.media.speechrecognition` support, possibly using NodeRT or some other method.
|
|
260
280
|
* Figure out how to support `julius` speech recognition via WASM.
|
|
261
281
|
* Any way to support RHVoice?
|
|
262
|
-
* Silero text enhancement engine can be ported to ONNX
|
|
263
|
-
* Investigate Raspberry Pi support. In particular, see if `onnxruntime-node` can be built for this environment
|
|
264
282
|
|
|
265
283
|
## Maybe?
|
|
266
284
|
|
|
267
|
-
* PDF support
|
|
268
285
|
* Using a machine translation model to provide speech translation to languages other than English?
|
|
269
286
|
* Is it possible to get sentence boundaries without punctuation using NLP techniques like part of speech tagging?
|
|
270
287
|
|
|
@@ -275,10 +292,12 @@
|
|
|
275
292
|
|
|
276
293
|
## Other ideas
|
|
277
294
|
|
|
295
|
+
* Support alignment of EPUB 3 eBooks with corresponding audiobook
|
|
296
|
+
* Voice cloning
|
|
297
|
+
* Speech to speech voice conversion
|
|
298
|
+
* Speech-to-speech translation (need to find a good model)
|
|
278
299
|
* HTML generator, that includes text and audio, with playback and word highlighting
|
|
279
300
|
* Video generator
|
|
280
301
|
* Desktop app that uses the tool to transcribe the PC audio output
|
|
281
302
|
* Special method to use time stretching to project between different utterances of the same text
|
|
282
303
|
* Is it possible to combine the Silero speech recognizer and a language model and try to perform Viterbi decoding to find alignments?
|
|
283
|
-
* Voice replacement
|
|
284
|
-
* Speech-to-speech translation (need to find a good model)
|