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.
Files changed (334) hide show
  1. package/README.md +15 -14
  2. package/data/schemas/options.json +398 -111
  3. package/dist/alignment/DTWMfccSequenceAlignment.d.ts +1 -1
  4. package/dist/alignment/DTWMfccSequenceAlignment.js +8 -8
  5. package/dist/alignment/DTWSequenceAlignment.d.ts +1 -1
  6. package/dist/alignment/DTWSequenceAlignment.js +1 -1
  7. package/dist/alignment/DTWSequenceAlignmentWindowed.d.ts +1 -1
  8. package/dist/alignment/DTWSequenceAlignmentWindowed.js +2 -2
  9. package/dist/alignment/LevenshteinSequenceAlignment.d.ts +1 -1
  10. package/dist/alignment/LevenshteinSequenceAlignment.js +1 -1
  11. package/dist/alignment/SpeechAlignment.d.ts +9 -10
  12. package/dist/alignment/SpeechAlignment.js +136 -105
  13. package/dist/alignment/SpeechAlignment.js.map +1 -1
  14. package/dist/api/API.d.ts +13 -12
  15. package/dist/api/API.js +14 -13
  16. package/dist/api/API.js.map +1 -1
  17. package/dist/api/APIOptions.d.ts +5 -4
  18. package/dist/api/Alignment.d.ts +15 -9
  19. package/dist/api/Alignment.js +88 -74
  20. package/dist/api/Alignment.js.map +1 -1
  21. package/dist/api/Common.js +1 -1
  22. package/dist/api/Denoising.d.ts +6 -6
  23. package/dist/api/Denoising.js +23 -23
  24. package/dist/api/Denoising.js.map +1 -1
  25. package/dist/api/LanguageDetection.d.ts +19 -12
  26. package/dist/api/LanguageDetection.js +88 -38
  27. package/dist/api/LanguageDetection.js.map +1 -1
  28. package/dist/api/Recognition.d.ts +16 -6
  29. package/dist/api/Recognition.js +129 -55
  30. package/dist/api/Recognition.js.map +1 -1
  31. package/dist/api/SourceSeparation.d.ts +17 -0
  32. package/dist/api/SourceSeparation.js +61 -0
  33. package/dist/api/SourceSeparation.js.map +1 -0
  34. package/dist/api/Synthesis.d.ts +18 -18
  35. package/dist/api/Synthesis.js +191 -164
  36. package/dist/api/Synthesis.js.map +1 -1
  37. package/dist/api/Translation.d.ts +19 -8
  38. package/dist/api/Translation.js +132 -35
  39. package/dist/api/Translation.js.map +1 -1
  40. package/dist/api/Vad.d.ts +10 -5
  41. package/dist/api/Vad.js +76 -38
  42. package/dist/api/Vad.js.map +1 -1
  43. package/dist/audio/AudioBufferConversion.d.ts +1 -1
  44. package/dist/audio/AudioBufferConversion.js +4 -4
  45. package/dist/audio/AudioPlayer.d.ts +1 -1
  46. package/dist/audio/AudioPlayer.js +26 -26
  47. package/dist/audio/AudioPlayer.js.map +1 -1
  48. package/dist/audio/AudioRecorder.d.ts +1 -1
  49. package/dist/audio/AudioRecorder.js +5 -5
  50. package/dist/audio/AudioUtilities.d.ts +13 -9
  51. package/dist/audio/AudioUtilities.js +86 -24
  52. package/dist/audio/AudioUtilities.js.map +1 -1
  53. package/dist/cli/CLI.d.ts +3 -3
  54. package/dist/cli/CLI.js +271 -162
  55. package/dist/cli/CLI.js.map +1 -1
  56. package/dist/cli/CLIConfigFile.js +8 -8
  57. package/dist/cli/CLILauncher.js +6 -6
  58. package/dist/cli/CLIOptionsSchema.js +2 -2
  59. package/dist/cli/CLIParser.js +5 -5
  60. package/dist/cli/CLIStarter.js +4 -4
  61. package/dist/codecs/FFMpegTranscoder.d.ts +2 -2
  62. package/dist/codecs/FFMpegTranscoder.js +37 -37
  63. package/dist/codecs/FFMpegTranscoder.js.map +1 -1
  64. package/dist/codecs/TIMITCodec.js +5 -5
  65. package/dist/codecs/WaveCodec.d.ts +1 -1
  66. package/dist/codecs/WaveCodec.js +22 -22
  67. package/dist/denoising/RNNoise.d.ts +1 -1
  68. package/dist/denoising/RNNoise.js +9 -9
  69. package/dist/dsp/BiquadFilter.d.ts +3 -2
  70. package/dist/dsp/BiquadFilter.js +18 -11
  71. package/dist/dsp/BiquadFilter.js.map +1 -1
  72. package/dist/dsp/DecayingPeakEstimator.d.ts +16 -0
  73. package/dist/dsp/DecayingPeakEstimator.js +23 -0
  74. package/dist/dsp/DecayingPeakEstimator.js.map +1 -0
  75. package/dist/dsp/FFT.d.ts +8 -4
  76. package/dist/dsp/FFT.js +76 -30
  77. package/dist/dsp/FFT.js.map +1 -1
  78. package/dist/dsp/KWeightingFilter.d.ts +9 -0
  79. package/dist/dsp/KWeightingFilter.js +40 -0
  80. package/dist/dsp/KWeightingFilter.js.map +1 -0
  81. package/dist/dsp/LoudnessEstimator.d.ts +21 -0
  82. package/dist/dsp/LoudnessEstimator.js +47 -0
  83. package/dist/dsp/LoudnessEstimator.js.map +1 -0
  84. package/dist/dsp/MFCC.d.ts +2 -2
  85. package/dist/dsp/MFCC.js +15 -15
  86. package/dist/dsp/MelSpectogram.d.ts +1 -1
  87. package/dist/dsp/MelSpectogram.js +6 -6
  88. package/dist/dsp/Rubberband.d.ts +11 -11
  89. package/dist/dsp/Rubberband.js +27 -27
  90. package/dist/dsp/Sonic.d.ts +1 -1
  91. package/dist/dsp/Sonic.js +3 -3
  92. package/dist/dsp/SpeexResampler.d.ts +1 -1
  93. package/dist/dsp/SpeexResampler.js +2 -2
  94. package/dist/math/VectorMath.d.ts +12 -8
  95. package/dist/math/VectorMath.js +35 -32
  96. package/dist/math/VectorMath.js.map +1 -1
  97. package/dist/nlp/ChineseSegmentation.js +2 -2
  98. package/dist/nlp/CompromiseNLP.js +3 -3
  99. package/dist/nlp/EspeakPhonemizer.js +30 -30
  100. package/dist/nlp/IPA.js +20 -20
  101. package/dist/nlp/JapaneseSegmentation.js +6 -6
  102. package/dist/nlp/Lexicon.d.ts +1 -1
  103. package/dist/nlp/Lexicon.js +7 -7
  104. package/dist/nlp/Segmentation.d.ts +3 -0
  105. package/dist/nlp/Segmentation.js +21 -14
  106. package/dist/nlp/Segmentation.js.map +1 -1
  107. package/dist/nlp/TextNormalizer.js +16 -16
  108. package/dist/recognition/AmazonTranscribeSTT.d.ts +2 -2
  109. package/dist/recognition/AmazonTranscribeSTT.js +13 -14
  110. package/dist/recognition/AmazonTranscribeSTT.js.map +1 -1
  111. package/dist/recognition/AzureCognitiveServicesSTT.js +5 -6
  112. package/dist/recognition/AzureCognitiveServicesSTT.js.map +1 -1
  113. package/dist/recognition/GoogleCloudSTT.d.ts +3 -3
  114. package/dist/recognition/GoogleCloudSTT.js +18 -18
  115. package/dist/recognition/OpenAICloudSTT.d.ts +19 -0
  116. package/dist/recognition/OpenAICloudSTT.js +81 -0
  117. package/dist/recognition/OpenAICloudSTT.js.map +1 -0
  118. package/dist/recognition/SileroSTT.d.ts +2 -2
  119. package/dist/recognition/SileroSTT.js +25 -25
  120. package/dist/recognition/VoskSTT.d.ts +2 -2
  121. package/dist/recognition/VoskSTT.js +8 -8
  122. package/dist/recognition/WhisperCppSTT.d.ts +88 -0
  123. package/dist/recognition/WhisperCppSTT.js +332 -0
  124. package/dist/recognition/WhisperCppSTT.js.map +1 -0
  125. package/dist/recognition/WhisperSTT.d.ts +49 -25
  126. package/dist/recognition/WhisperSTT.js +626 -481
  127. package/dist/recognition/WhisperSTT.js.map +1 -1
  128. package/dist/server/Client.d.ts +1 -1
  129. package/dist/server/Client.js +22 -22
  130. package/dist/server/Server.js +9 -9
  131. package/dist/server/Server.js.map +1 -1
  132. package/dist/server/Worker.d.ts +22 -22
  133. package/dist/server/Worker.js +36 -36
  134. package/dist/server/Worker.js.map +1 -1
  135. package/dist/server/WorkerStarter.js +2 -2
  136. package/dist/source-separation/MDXNetSourceSeparation.d.ts +11 -0
  137. package/dist/source-separation/MDXNetSourceSeparation.js +161 -0
  138. package/dist/source-separation/MDXNetSourceSeparation.js.map +1 -0
  139. package/dist/speech-language-detection/SileroLanguageDetection.d.ts +1 -1
  140. package/dist/speech-language-detection/SileroLanguageDetection.js +7 -7
  141. package/dist/subtitles/Subtitles.d.ts +10 -0
  142. package/dist/subtitles/Subtitles.js +2 -2
  143. package/dist/subtitles/Subtitles.js.map +1 -1
  144. package/dist/synthesis/AwsPollyTTS.d.ts +1 -1
  145. package/dist/synthesis/AwsPollyTTS.js +12 -12
  146. package/dist/synthesis/AzureCognitiveServicesTTS.js +7 -7
  147. package/dist/synthesis/CoquiServerTTS.js +10 -10
  148. package/dist/synthesis/CoquiServerTTS.js.map +1 -1
  149. package/dist/synthesis/ElevenlabsTTS.d.ts +23 -0
  150. package/dist/synthesis/ElevenlabsTTS.js +103 -0
  151. package/dist/synthesis/ElevenlabsTTS.js.map +1 -0
  152. package/dist/synthesis/EspeakTTS.d.ts +6 -5
  153. package/dist/synthesis/EspeakTTS.js +81 -69
  154. package/dist/synthesis/EspeakTTS.js.map +1 -1
  155. package/dist/synthesis/FliteTTS.d.ts +3 -3
  156. package/dist/synthesis/FliteTTS.js +154 -154
  157. package/dist/synthesis/FliteTTS.js.map +1 -1
  158. package/dist/synthesis/GoogleCloudTTS.d.ts +3 -3
  159. package/dist/synthesis/GoogleCloudTTS.js +17 -17
  160. package/dist/synthesis/GoogleCloudTTS.js.map +1 -1
  161. package/dist/synthesis/GoogleTranslateTTS.d.ts +1 -1
  162. package/dist/synthesis/GoogleTranslateTTS.js +103 -103
  163. package/dist/synthesis/MicrosoftEdgeTTS.d.ts +2 -2
  164. package/dist/synthesis/MicrosoftEdgeTTS.js +74 -74
  165. package/dist/synthesis/OpenAICloudTTS.d.ts +13 -0
  166. package/dist/synthesis/OpenAICloudTTS.js +169 -0
  167. package/dist/synthesis/OpenAICloudTTS.js.map +1 -0
  168. package/dist/synthesis/SamTTS.js +3 -3
  169. package/dist/synthesis/SapiTTS.d.ts +3 -3
  170. package/dist/synthesis/SapiTTS.js +26 -26
  171. package/dist/synthesis/StreamlabsPollyTTS.d.ts +2 -2
  172. package/dist/synthesis/StreamlabsPollyTTS.js +27 -27
  173. package/dist/synthesis/SvoxPicoTTS.d.ts +2 -2
  174. package/dist/synthesis/SvoxPicoTTS.js +65 -65
  175. package/dist/synthesis/SvoxPicoTTS.js.map +1 -1
  176. package/dist/synthesis/VitsTTS.d.ts +3 -3
  177. package/dist/synthesis/VitsTTS.js +378 -378
  178. package/dist/synthesis/VitsTTS.js.map +1 -1
  179. package/dist/tests/Test.js +2 -2
  180. package/dist/utilities/Compression.d.ts +5 -0
  181. package/dist/utilities/Compression.js +29 -13
  182. package/dist/utilities/Compression.js.map +1 -1
  183. package/dist/utilities/FileDownloader.d.ts +1 -1
  184. package/dist/utilities/FileDownloader.js +16 -16
  185. package/dist/utilities/FileSystem.js +7 -7
  186. package/dist/utilities/Locale.d.ts +7 -7
  187. package/dist/utilities/Locale.js +15 -15
  188. package/dist/utilities/Logger.js +3 -3
  189. package/dist/utilities/ObjectUtilities.js +19 -19
  190. package/dist/utilities/OpenPromise.js +2 -2
  191. package/dist/utilities/OpenPromise.js.map +1 -1
  192. package/dist/utilities/PackageManager.js +31 -0
  193. package/dist/utilities/PackageManager.js.map +1 -1
  194. package/dist/utilities/PathUtilities.js +8 -8
  195. package/dist/utilities/RandomGenerator.js +2 -2
  196. package/dist/utilities/SmoothEstimator.d.ts +8 -0
  197. package/dist/utilities/SmoothEstimator.js +25 -0
  198. package/dist/utilities/SmoothEstimator.js.map +1 -0
  199. package/dist/utilities/TarballMaker.js +8 -8
  200. package/dist/utilities/Timeline.d.ts +3 -2
  201. package/dist/utilities/Timeline.js +11 -11
  202. package/dist/utilities/Timeline.js.map +1 -1
  203. package/dist/utilities/Timer.js +4 -4
  204. package/dist/utilities/Utilities.d.ts +4 -0
  205. package/dist/utilities/Utilities.js +38 -15
  206. package/dist/utilities/Utilities.js.map +1 -1
  207. package/dist/utilities/WasmMemoryManager.js +7 -7
  208. package/dist/utilities/WebReader.js +23 -23
  209. package/dist/utilities/WikipediaReader.js +2 -2
  210. package/dist/voice-activity-detection/AdaptiveGateVAD.d.ts +28 -0
  211. package/dist/voice-activity-detection/AdaptiveGateVAD.js +138 -0
  212. package/dist/voice-activity-detection/AdaptiveGateVAD.js.map +1 -0
  213. package/dist/voice-activity-detection/SileroVAD.d.ts +1 -1
  214. package/dist/voice-activity-detection/SileroVAD.js +5 -5
  215. package/dist/voice-activity-detection/SileroVAD.js.map +1 -1
  216. package/dist/voice-activity-detection/WebRtcVAD.d.ts +1 -1
  217. package/dist/voice-activity-detection/WebRtcVAD.js +4 -4
  218. package/docs/API.md +29 -11
  219. package/docs/CLI.md +31 -7
  220. package/docs/Contributing.md +38 -0
  221. package/docs/Development.md +93 -19
  222. package/docs/Engines.md +28 -16
  223. package/docs/Licenses.md +4 -1
  224. package/docs/Options.md +158 -78
  225. package/docs/Releases.md +262 -0
  226. package/docs/Server.md +7 -7
  227. package/docs/Tasklist.md +95 -76
  228. package/docs/Technical.md +4 -4
  229. package/package.json +13 -14
  230. package/src/alignment/DTWMfccSequenceAlignment.ts +9 -9
  231. package/src/alignment/DTWSequenceAlignment.ts +2 -2
  232. package/src/alignment/DTWSequenceAlignmentWindowed.ts +3 -3
  233. package/src/alignment/LevenshteinSequenceAlignment.ts +2 -2
  234. package/src/alignment/SpeechAlignment.ts +204 -119
  235. package/src/api/API.ts +14 -13
  236. package/src/api/APIOptions.ts +12 -11
  237. package/src/api/Alignment.ts +147 -90
  238. package/src/api/Common.ts +1 -1
  239. package/src/api/Denoising.ts +28 -28
  240. package/src/api/LanguageDetection.ts +135 -48
  241. package/src/api/Recognition.ts +198 -59
  242. package/src/api/SourceSeparation.ts +99 -0
  243. package/src/api/Synthesis.ts +217 -181
  244. package/src/api/Translation.ts +193 -40
  245. package/src/api/Vad.ts +110 -41
  246. package/src/audio/AudioBufferConversion.ts +4 -4
  247. package/src/audio/AudioPlayer.ts +27 -27
  248. package/src/audio/AudioRecorder.ts +5 -5
  249. package/src/audio/AudioUtilities.ts +107 -24
  250. package/src/cli/CLI.ts +313 -164
  251. package/src/cli/CLIConfigFile.ts +8 -8
  252. package/src/cli/CLILauncher.ts +6 -6
  253. package/src/cli/CLIOptionsSchema.ts +2 -2
  254. package/src/cli/CLIParser.ts +5 -5
  255. package/src/cli/CLIStarter.ts +4 -4
  256. package/src/codecs/FFMpegTranscoder.ts +38 -38
  257. package/src/codecs/TIMITCodec.ts +5 -5
  258. package/src/codecs/WaveCodec.ts +22 -22
  259. package/src/denoising/RNNoise.ts +9 -9
  260. package/src/dsp/BiquadFilter.ts +19 -11
  261. package/src/dsp/DecayingPeakEstimator.ts +35 -0
  262. package/src/dsp/FFT.ts +103 -35
  263. package/src/dsp/KWeightingFilter.ts +43 -0
  264. package/src/dsp/LoudnessEstimator.ts +74 -0
  265. package/src/dsp/MFCC.ts +15 -15
  266. package/src/dsp/MelSpectogram.ts +7 -7
  267. package/src/dsp/Rubberband.ts +38 -38
  268. package/src/dsp/Sonic.ts +4 -4
  269. package/src/dsp/SpeexResampler.ts +2 -2
  270. package/src/math/VectorMath.ts +42 -33
  271. package/src/nlp/ChineseSegmentation.ts +3 -3
  272. package/src/nlp/CompromiseNLP.ts +3 -3
  273. package/src/nlp/EspeakPhonemizer.ts +30 -30
  274. package/src/nlp/IPA.ts +20 -20
  275. package/src/nlp/JapaneseSegmentation.ts +6 -6
  276. package/src/nlp/Lexicon.ts +8 -8
  277. package/src/nlp/Segmentation.ts +23 -14
  278. package/src/nlp/TextNormalizer.ts +16 -16
  279. package/src/recognition/AmazonTranscribeSTT.ts +16 -17
  280. package/src/recognition/AzureCognitiveServicesSTT.ts +8 -6
  281. package/src/recognition/GoogleCloudSTT.ts +21 -21
  282. package/src/recognition/OpenAICloudSTT.ts +142 -0
  283. package/src/recognition/SileroSTT.ts +26 -26
  284. package/src/recognition/VoskSTT.ts +10 -10
  285. package/src/recognition/WhisperCppSTT.ts +555 -0
  286. package/src/recognition/WhisperSTT.ts +760 -507
  287. package/src/server/Client.ts +23 -23
  288. package/src/server/Server.ts +9 -9
  289. package/src/server/Worker.ts +53 -53
  290. package/src/server/WorkerStarter.ts +2 -2
  291. package/src/source-separation/MDXNetSourceSeparation.ts +228 -0
  292. package/src/speech-language-detection/SileroLanguageDetection.ts +8 -8
  293. package/src/subtitles/Subtitles.ts +3 -3
  294. package/src/synthesis/AwsPollyTTS.ts +14 -14
  295. package/src/synthesis/AzureCognitiveServicesTTS.ts +10 -10
  296. package/src/synthesis/CoquiServerTTS.ts +10 -10
  297. package/src/synthesis/ElevenlabsTTS.ts +137 -0
  298. package/src/synthesis/EspeakTTS.ts +90 -71
  299. package/src/synthesis/FliteTTS.ts +157 -157
  300. package/src/synthesis/GoogleCloudTTS.ts +19 -19
  301. package/src/synthesis/GoogleTranslateTTS.ts +104 -104
  302. package/src/synthesis/MicrosoftEdgeTTS.ts +80 -80
  303. package/src/synthesis/OpenAICloudTTS.ts +196 -0
  304. package/src/synthesis/SamTTS.ts +3 -3
  305. package/src/synthesis/SapiTTS.ts +29 -29
  306. package/src/synthesis/StreamlabsPollyTTS.ts +29 -29
  307. package/src/synthesis/SvoxPicoTTS.ts +67 -67
  308. package/src/synthesis/VitsTTS.ts +380 -380
  309. package/src/tests/Test.ts +4 -4
  310. package/src/utilities/Compression.ts +34 -13
  311. package/src/utilities/FileDownloader.ts +19 -19
  312. package/src/utilities/FileSystem.ts +7 -7
  313. package/src/utilities/Locale.ts +22 -22
  314. package/src/utilities/Logger.ts +4 -4
  315. package/src/utilities/ObjectUtilities.ts +19 -19
  316. package/src/utilities/OpenPromise.ts +2 -2
  317. package/src/utilities/PackageManager.ts +40 -0
  318. package/src/utilities/PathUtilities.ts +8 -8
  319. package/src/utilities/RandomGenerator.ts +3 -3
  320. package/src/utilities/SmoothEstimator.ts +35 -0
  321. package/src/utilities/TarballMaker.ts +9 -9
  322. package/src/utilities/Timeline.ts +15 -13
  323. package/src/utilities/Timer.ts +4 -4
  324. package/src/utilities/Utilities.ts +49 -15
  325. package/src/utilities/WasmMemoryManager.ts +7 -7
  326. package/src/utilities/WebReader.ts +23 -23
  327. package/src/utilities/WikipediaReader.ts +2 -2
  328. package/src/voice-activity-detection/AdaptiveGateVAD.ts +202 -0
  329. package/src/voice-activity-detection/SileroVAD.ts +5 -5
  330. package/src/voice-activity-detection/WebRtcVAD.ts +5 -5
  331. package/dist/synthesis/ElevenLabsTTS.d.ts +0 -8
  332. package/dist/synthesis/ElevenLabsTTS.js +0 -82
  333. package/dist/synthesis/ElevenLabsTTS.js.map +0 -1
  334. package/src/synthesis/ElevenLabsTTS.ts +0 -104
@@ -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 to leave as is)
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 is embedded in the main codebase. This means you have to import the `echogarden` package to use it:
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 cancelation signals in the client class.
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
- ### Cancelation messages
114
+ ### Cancellation messages
115
115
 
116
- To cancel an existing request, the client can send a `CancelationRequest` message, with the same `requestId` of an ongoing request, like:
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: 'CancelationRequest',
120
+ messageType: 'CancellationRequest',
121
121
  requestId: 'cb7e0f3ec835a213b005c4424c8d5775'
122
122
  }
123
123
  ```
124
124
 
125
- **TODO**: Cancelation requests are currently only supported for synthesis operations. Extend support for other operations.
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
- ## Features and enhancements
18
+ ### External bugs
16
19
 
17
- ### Browser extension
18
- * Options UI
19
- * Add supported engines and voices to WebSpeech voice list
20
- * Pause and resume support
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
- ### Browser extension / content script
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 guard)
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 cancelation checks in more operations
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 allow overwrite.
46
- * Consider if auto-renamed files can use a suffix other than ` (1)`.
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 giving better error messages when the given file type is wrong.
62
- * Option to set playback volume.
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 from `speak` options, for example, to take API keys that are required for the both the synthesis request and voice list request and
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
- * `remove-nonspeech`
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, no -1 timestamps or timestamps over the time of the audio, no sentences without words, etc. and correct if needed
96
- * See if it's possible to detect and include Emoji characters in timelines.
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 to limit how many models are cached in memory
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 use to split to segments, otherwise it is possible to try to guess using pause lengths or voice activity detection
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
- ### Postprocessing
177
- * When `normalize` is set to false, should obvious clipping still be prevented?
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, an which cannot?
186
- * Change all the Emscripten WASM modules to use the `EXPORT_ES6=1` flag to all of them and rebuild them. Support for node.js modules was only added in September 2022 (https://github.com/emscripten-core/emscripten/pull/17915), so maybe wait a little bit until it's' stable.
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 the reduce base install size
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 vosk alternatives events
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
- ## Documentation
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
- * [Assembly AI cloud service](https://www.assemblyai.com/)
256
- * [Deepgram cloud service](https://deepgram.com/)
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)