echogarden 2.10.2 → 3.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 (496) hide show
  1. package/LICENSE.MIT.md +7 -0
  2. package/README.md +9 -1
  3. package/data/lexicons/heteronyms.en.json +44 -10
  4. package/data/lexicons/words.en.json +726 -22
  5. package/data/schemas/options.json +91 -153
  6. package/dist/alignment/DTWMfccSequenceAlignment.js.map +1 -1
  7. package/dist/alignment/SemanticTextAlignment.d.ts +4 -2
  8. package/dist/alignment/SemanticTextAlignment.d.ts.map +1 -1
  9. package/dist/alignment/SemanticTextAlignment.js +7 -7
  10. package/dist/alignment/SemanticTextAlignment.js.map +1 -1
  11. package/dist/alignment/SpeechAlignment.d.ts +9 -10
  12. package/dist/alignment/SpeechAlignment.d.ts.map +1 -1
  13. package/dist/alignment/SpeechAlignment.js +23 -96
  14. package/dist/alignment/SpeechAlignment.js.map +1 -1
  15. package/dist/api/APIOptions.d.ts +1 -1
  16. package/dist/api/APIOptions.d.ts.map +1 -1
  17. package/dist/api/Alignment.d.ts +8 -6
  18. package/dist/api/Alignment.d.ts.map +1 -1
  19. package/dist/api/Alignment.js +31 -40
  20. package/dist/api/Alignment.js.map +1 -1
  21. package/dist/api/Common.d.ts +7 -0
  22. package/dist/api/Common.d.ts.map +1 -1
  23. package/dist/api/Common.js.map +1 -1
  24. package/dist/api/Denoising.d.ts +5 -2
  25. package/dist/api/Denoising.d.ts.map +1 -1
  26. package/dist/api/Denoising.js +15 -15
  27. package/dist/api/Denoising.js.map +1 -1
  28. package/dist/api/GlobalOptions.d.ts +2 -8
  29. package/dist/api/GlobalOptions.d.ts.map +1 -1
  30. package/dist/api/GlobalOptions.js +2 -13
  31. package/dist/api/GlobalOptions.js.map +1 -1
  32. package/dist/api/Recognition.d.ts +11 -12
  33. package/dist/api/Recognition.d.ts.map +1 -1
  34. package/dist/api/Recognition.js +32 -82
  35. package/dist/api/Recognition.js.map +1 -1
  36. package/dist/api/SourceSeparation.d.ts +7 -2
  37. package/dist/api/SourceSeparation.d.ts.map +1 -1
  38. package/dist/api/SourceSeparation.js +12 -10
  39. package/dist/api/SourceSeparation.js.map +1 -1
  40. package/dist/api/SpeechLanguageDetection.d.ts +11 -7
  41. package/dist/api/SpeechLanguageDetection.d.ts.map +1 -1
  42. package/dist/api/SpeechLanguageDetection.js +37 -30
  43. package/dist/api/SpeechLanguageDetection.js.map +1 -1
  44. package/dist/api/SpeechSearch.d.ts +4 -1
  45. package/dist/api/SpeechSearch.d.ts.map +1 -1
  46. package/dist/api/SpeechSearch.js.map +1 -1
  47. package/dist/api/SpeechTranslation.d.ts +10 -6
  48. package/dist/api/SpeechTranslation.d.ts.map +1 -1
  49. package/dist/api/SpeechTranslation.js +28 -26
  50. package/dist/api/SpeechTranslation.js.map +1 -1
  51. package/dist/api/Synthesis.d.ts +13 -8
  52. package/dist/api/Synthesis.d.ts.map +1 -1
  53. package/dist/api/Synthesis.js +67 -89
  54. package/dist/api/Synthesis.js.map +1 -1
  55. package/dist/api/TextLanguageDetection.d.ts +4 -2
  56. package/dist/api/TextLanguageDetection.d.ts.map +1 -1
  57. package/dist/api/TextLanguageDetection.js +4 -7
  58. package/dist/api/TextLanguageDetection.js.map +1 -1
  59. package/dist/api/TextTranslation.d.ts +4 -2
  60. package/dist/api/TextTranslation.d.ts.map +1 -1
  61. package/dist/api/TextTranslation.js +13 -24
  62. package/dist/api/TextTranslation.js.map +1 -1
  63. package/dist/api/TimelineTranslationAlignment.d.ts +6 -3
  64. package/dist/api/TimelineTranslationAlignment.d.ts.map +1 -1
  65. package/dist/api/TimelineTranslationAlignment.js +20 -11
  66. package/dist/api/TimelineTranslationAlignment.js.map +1 -1
  67. package/dist/api/TranscriptAndTranslationAlignment.d.ts +6 -4
  68. package/dist/api/TranscriptAndTranslationAlignment.d.ts.map +1 -1
  69. package/dist/api/TranscriptAndTranslationAlignment.js +11 -12
  70. package/dist/api/TranscriptAndTranslationAlignment.js.map +1 -1
  71. package/dist/api/TranslationAlignment.d.ts +6 -4
  72. package/dist/api/TranslationAlignment.d.ts.map +1 -1
  73. package/dist/api/TranslationAlignment.js +20 -21
  74. package/dist/api/TranslationAlignment.js.map +1 -1
  75. package/dist/api/VoiceActivityDetection.d.ts +9 -8
  76. package/dist/api/VoiceActivityDetection.d.ts.map +1 -1
  77. package/dist/api/VoiceActivityDetection.js +20 -43
  78. package/dist/api/VoiceActivityDetection.js.map +1 -1
  79. package/dist/audio/AudioBufferConversion.js.map +1 -1
  80. package/dist/audio/AudioPlayer.d.ts +1 -3
  81. package/dist/audio/AudioPlayer.d.ts.map +1 -1
  82. package/dist/audio/AudioPlayer.js +3 -188
  83. package/dist/audio/AudioPlayer.js.map +1 -1
  84. package/dist/audio/AudioUtilities.d.ts +2 -1
  85. package/dist/audio/AudioUtilities.d.ts.map +1 -1
  86. package/dist/audio/AudioUtilities.js +2 -2
  87. package/dist/audio/AudioUtilities.js.map +1 -1
  88. package/dist/build-tools/MakeTarballsForInstalledPackages.js +3 -3
  89. package/dist/build-tools/MakeTarballsForInstalledPackages.js.map +1 -1
  90. package/dist/cli/CLI.d.ts.map +1 -1
  91. package/dist/cli/CLI.js +139 -92
  92. package/dist/cli/CLI.js.map +1 -1
  93. package/dist/codecs/FFMpegTranscoder.d.ts +4 -3
  94. package/dist/codecs/FFMpegTranscoder.d.ts.map +1 -1
  95. package/dist/codecs/FFMpegTranscoder.js +16 -14
  96. package/dist/codecs/FFMpegTranscoder.js.map +1 -1
  97. package/dist/codecs/TIMITCodec.d.ts.map +1 -1
  98. package/dist/data-structures/DynamicTypedArray.d.ts.map +1 -1
  99. package/dist/data-structures/DynamicTypedArray.js.map +1 -1
  100. package/dist/data-structures/Queue.d.ts.map +1 -1
  101. package/dist/data-structures/WindowedList.d.ts.map +1 -1
  102. package/dist/data-structures/WindowedList.js.map +1 -1
  103. package/dist/denoising/NSNet2.d.ts +3 -2
  104. package/dist/denoising/NSNet2.d.ts.map +1 -1
  105. package/dist/denoising/NSNet2.js +4 -4
  106. package/dist/denoising/NSNet2.js.map +1 -1
  107. package/dist/denoising/RNNoise.d.ts +2 -1
  108. package/dist/denoising/RNNoise.d.ts.map +1 -1
  109. package/dist/denoising/RNNoise.js +10 -6
  110. package/dist/denoising/RNNoise.js.map +1 -1
  111. package/dist/dsp/BiquadFilter.d.ts.map +1 -1
  112. package/dist/dsp/DecayingPeakEstimator.d.ts.map +1 -1
  113. package/dist/dsp/DecayingPeakEstimator.js.map +1 -1
  114. package/dist/dsp/FFT.d.ts.map +1 -1
  115. package/dist/dsp/FFT.js +2 -1
  116. package/dist/dsp/FFT.js.map +1 -1
  117. package/dist/dsp/KWeightingFilter.d.ts.map +1 -1
  118. package/dist/dsp/KWeightingFilter.js.map +1 -1
  119. package/dist/dsp/LoudnessEstimator.d.ts.map +1 -1
  120. package/dist/dsp/LoudnessEstimator.js.map +1 -1
  121. package/dist/dsp/MFCC.d.ts +3 -2
  122. package/dist/dsp/MFCC.d.ts.map +1 -1
  123. package/dist/dsp/MFCC.js +4 -4
  124. package/dist/dsp/MFCC.js.map +1 -1
  125. package/dist/dsp/MelSpectrogram.d.ts +10 -8
  126. package/dist/dsp/MelSpectrogram.d.ts.map +1 -1
  127. package/dist/dsp/MelSpectrogram.js +31 -34
  128. package/dist/dsp/MelSpectrogram.js.map +1 -1
  129. package/dist/dsp/Rubberband.d.ts.map +1 -1
  130. package/dist/dsp/Rubberband.js +8 -3
  131. package/dist/dsp/Rubberband.js.map +1 -1
  132. package/dist/dsp/Sonic.d.ts.map +1 -1
  133. package/dist/dsp/Sonic.js +1 -1
  134. package/dist/dsp/Sonic.js.map +1 -1
  135. package/dist/dsp/SpeexResampler.d.ts.map +1 -1
  136. package/dist/dsp/SpeexResampler.js +1 -1
  137. package/dist/dsp/SpeexResampler.js.map +1 -1
  138. package/dist/encodings/Ascii.d.ts +1 -1
  139. package/dist/encodings/Ascii.d.ts.map +1 -1
  140. package/dist/encodings/Base64.js.map +1 -1
  141. package/dist/encodings/Utf16.d.ts.map +1 -1
  142. package/dist/encodings/Utf8.d.ts.map +1 -1
  143. package/dist/math/VectorMath.d.ts +1 -0
  144. package/dist/math/VectorMath.d.ts.map +1 -1
  145. package/dist/math/VectorMath.js +9 -5
  146. package/dist/math/VectorMath.js.map +1 -1
  147. package/dist/nlp/ChineseSegmentation.d.ts +1 -1
  148. package/dist/nlp/ChineseSegmentation.d.ts.map +1 -1
  149. package/dist/nlp/EspeakPhonemizer.d.ts +1 -1
  150. package/dist/nlp/EspeakPhonemizer.d.ts.map +1 -1
  151. package/dist/nlp/EspeakPhonemizer.js +2 -2
  152. package/dist/nlp/EspeakPhonemizer.js.map +1 -1
  153. package/dist/nlp/IPA.d.ts +2 -2
  154. package/dist/nlp/Segmentation.d.ts +1 -1
  155. package/dist/nlp/Segmentation.d.ts.map +1 -1
  156. package/dist/nlp/Segmentation.js +8 -4
  157. package/dist/nlp/Segmentation.js.map +1 -1
  158. package/dist/recognition/AmazonTranscribeSTT.d.ts +2 -1
  159. package/dist/recognition/AmazonTranscribeSTT.d.ts.map +1 -1
  160. package/dist/recognition/AmazonTranscribeSTT.js +3 -3
  161. package/dist/recognition/AmazonTranscribeSTT.js.map +1 -1
  162. package/dist/recognition/AzureCognitiveServicesSTT.d.ts +2 -1
  163. package/dist/recognition/AzureCognitiveServicesSTT.d.ts.map +1 -1
  164. package/dist/recognition/AzureCognitiveServicesSTT.js +4 -4
  165. package/dist/recognition/AzureCognitiveServicesSTT.js.map +1 -1
  166. package/dist/recognition/DeepgramSTT.d.ts +2 -1
  167. package/dist/recognition/DeepgramSTT.d.ts.map +1 -1
  168. package/dist/recognition/DeepgramSTT.js +12 -13
  169. package/dist/recognition/DeepgramSTT.js.map +1 -1
  170. package/dist/recognition/GoogleCloudSTT.d.ts +2 -1
  171. package/dist/recognition/GoogleCloudSTT.d.ts.map +1 -1
  172. package/dist/recognition/GoogleCloudSTT.js +11 -10
  173. package/dist/recognition/GoogleCloudSTT.js.map +1 -1
  174. package/dist/recognition/OpenAICloudSTT.d.ts +2 -1
  175. package/dist/recognition/OpenAICloudSTT.d.ts.map +1 -1
  176. package/dist/recognition/OpenAICloudSTT.js +6 -6
  177. package/dist/recognition/OpenAICloudSTT.js.map +1 -1
  178. package/dist/recognition/WhisperCommon.d.ts +9 -0
  179. package/dist/recognition/WhisperCommon.d.ts.map +1 -0
  180. package/dist/recognition/WhisperCommon.js +52 -0
  181. package/dist/recognition/WhisperCommon.js.map +1 -0
  182. package/dist/recognition/{WhisperCppSTT.d.ts → WhisperCppCliSTT.d.ts} +14 -16
  183. package/dist/recognition/WhisperCppCliSTT.d.ts.map +1 -0
  184. package/dist/recognition/{WhisperCppSTT.js → WhisperCppCliSTT.js} +55 -84
  185. package/dist/recognition/WhisperCppCliSTT.js.map +1 -0
  186. package/dist/recognition/WhisperSTT.d.ts +72 -85
  187. package/dist/recognition/WhisperSTT.d.ts.map +1 -1
  188. package/dist/recognition/WhisperSTT.js +384 -519
  189. package/dist/recognition/WhisperSTT.js.map +1 -1
  190. package/dist/server/Client.d.ts +2 -2
  191. package/dist/server/Client.d.ts.map +1 -1
  192. package/dist/server/Client.js.map +1 -1
  193. package/dist/server/Worker.d.ts +6 -7
  194. package/dist/server/Worker.d.ts.map +1 -1
  195. package/dist/server/Worker.js +42 -44
  196. package/dist/server/Worker.js.map +1 -1
  197. package/dist/source-separation/MDXNetSourceSeparation.d.ts +3 -2
  198. package/dist/source-separation/MDXNetSourceSeparation.d.ts.map +1 -1
  199. package/dist/source-separation/MDXNetSourceSeparation.js +10 -8
  200. package/dist/source-separation/MDXNetSourceSeparation.js.map +1 -1
  201. package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.d.ts +3 -2
  202. package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.d.ts.map +1 -1
  203. package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.js +5 -5
  204. package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.js.map +1 -1
  205. package/dist/speech-language-detection/SileroLanguageDetection.d.ts +5 -3
  206. package/dist/speech-language-detection/SileroLanguageDetection.d.ts.map +1 -1
  207. package/dist/speech-language-detection/SileroLanguageDetection.js +8 -8
  208. package/dist/speech-language-detection/SileroLanguageDetection.js.map +1 -1
  209. package/dist/speech-search/DTWSpeechSearch.d.ts +2 -1
  210. package/dist/speech-search/DTWSpeechSearch.d.ts.map +1 -1
  211. package/dist/speech-search/DTWSpeechSearch.js +4 -4
  212. package/dist/speech-search/DTWSpeechSearch.js.map +1 -1
  213. package/dist/subtitles/Subtitles.d.ts +13 -1
  214. package/dist/subtitles/Subtitles.d.ts.map +1 -1
  215. package/dist/subtitles/Subtitles.js +22 -22
  216. package/dist/subtitles/Subtitles.js.map +1 -1
  217. package/dist/synthesis/AwsPollyTTS.d.ts +3 -2
  218. package/dist/synthesis/AwsPollyTTS.d.ts.map +1 -1
  219. package/dist/synthesis/AwsPollyTTS.js +5 -5
  220. package/dist/synthesis/AwsPollyTTS.js.map +1 -1
  221. package/dist/synthesis/AzureCognitiveServicesTTS.d.ts +2 -1
  222. package/dist/synthesis/AzureCognitiveServicesTTS.d.ts.map +1 -1
  223. package/dist/synthesis/AzureCognitiveServicesTTS.js +3 -3
  224. package/dist/synthesis/AzureCognitiveServicesTTS.js.map +1 -1
  225. package/dist/synthesis/CoquiServerTTS.d.ts +2 -1
  226. package/dist/synthesis/CoquiServerTTS.d.ts.map +1 -1
  227. package/dist/synthesis/CoquiServerTTS.js +7 -8
  228. package/dist/synthesis/CoquiServerTTS.js.map +1 -1
  229. package/dist/synthesis/DeepgramTTS.d.ts +2 -2
  230. package/dist/synthesis/DeepgramTTS.d.ts.map +1 -1
  231. package/dist/synthesis/DeepgramTTS.js +13 -13
  232. package/dist/synthesis/DeepgramTTS.js.map +1 -1
  233. package/dist/synthesis/ElevenLabsTTS.d.ts +3 -3
  234. package/dist/synthesis/ElevenLabsTTS.d.ts.map +1 -1
  235. package/dist/synthesis/ElevenLabsTTS.js +22 -21
  236. package/dist/synthesis/ElevenLabsTTS.js.map +1 -1
  237. package/dist/synthesis/EspeakTTS.d.ts +11 -9
  238. package/dist/synthesis/EspeakTTS.d.ts.map +1 -1
  239. package/dist/synthesis/EspeakTTS.js +118 -68
  240. package/dist/synthesis/EspeakTTS.js.map +1 -1
  241. package/dist/synthesis/FliteTTS.d.ts +2 -2
  242. package/dist/synthesis/FliteTTS.d.ts.map +1 -1
  243. package/dist/synthesis/FliteTTS.js +2 -2
  244. package/dist/synthesis/FliteTTS.js.map +1 -1
  245. package/dist/synthesis/GnuSpeechTTS.d.ts +2 -2
  246. package/dist/synthesis/GnuSpeechTTS.d.ts.map +1 -1
  247. package/dist/synthesis/GnuSpeechTTS.js +1 -1
  248. package/dist/synthesis/GnuSpeechTTS.js.map +1 -1
  249. package/dist/synthesis/GoogleCloudTTS.d.ts +3 -2
  250. package/dist/synthesis/GoogleCloudTTS.d.ts.map +1 -1
  251. package/dist/synthesis/GoogleCloudTTS.js +15 -14
  252. package/dist/synthesis/GoogleCloudTTS.js.map +1 -1
  253. package/dist/synthesis/GoogleTranslateTTS.d.ts +3 -2
  254. package/dist/synthesis/GoogleTranslateTTS.d.ts.map +1 -1
  255. package/dist/synthesis/GoogleTranslateTTS.js +11 -11
  256. package/dist/synthesis/GoogleTranslateTTS.js.map +1 -1
  257. package/dist/synthesis/KokoroTTS.d.ts +4 -4
  258. package/dist/synthesis/KokoroTTS.d.ts.map +1 -1
  259. package/dist/synthesis/KokoroTTS.js +11 -10
  260. package/dist/synthesis/KokoroTTS.js.map +1 -1
  261. package/dist/synthesis/MicrosoftEdgeTTS.d.ts +4 -3
  262. package/dist/synthesis/MicrosoftEdgeTTS.d.ts.map +1 -1
  263. package/dist/synthesis/MicrosoftEdgeTTS.js +41 -20
  264. package/dist/synthesis/MicrosoftEdgeTTS.js.map +1 -1
  265. package/dist/synthesis/OpenAICloudTTS.d.ts +2 -2
  266. package/dist/synthesis/OpenAICloudTTS.d.ts.map +1 -1
  267. package/dist/synthesis/OpenAICloudTTS.js +6 -5
  268. package/dist/synthesis/OpenAICloudTTS.js.map +1 -1
  269. package/dist/synthesis/SamTTS.d.ts +2 -1
  270. package/dist/synthesis/SamTTS.d.ts.map +1 -1
  271. package/dist/synthesis/SamTTS.js +2 -2
  272. package/dist/synthesis/SamTTS.js.map +1 -1
  273. package/dist/synthesis/SapiTTS.d.ts +2 -2
  274. package/dist/synthesis/SapiTTS.d.ts.map +1 -1
  275. package/dist/synthesis/SapiTTS.js +2 -2
  276. package/dist/synthesis/SapiTTS.js.map +1 -1
  277. package/dist/synthesis/SvoxPicoTTS.d.ts +2 -2
  278. package/dist/synthesis/SvoxPicoTTS.d.ts.map +1 -1
  279. package/dist/synthesis/SvoxPicoTTS.js +3 -3
  280. package/dist/synthesis/SvoxPicoTTS.js.map +1 -1
  281. package/dist/synthesis/VitsTTS.d.ts +3 -3
  282. package/dist/synthesis/VitsTTS.d.ts.map +1 -1
  283. package/dist/synthesis/VitsTTS.js +14 -11
  284. package/dist/synthesis/VitsTTS.js.map +1 -1
  285. package/dist/text-translation/DeepLTextTranslation.d.ts +2 -2
  286. package/dist/text-translation/DeepLTextTranslation.d.ts.map +1 -1
  287. package/dist/text-translation/DeepLTextTranslation.js +10 -9
  288. package/dist/text-translation/DeepLTextTranslation.js.map +1 -1
  289. package/dist/text-translation/GoogleTranslateTextTranslation.d.ts +4 -4
  290. package/dist/text-translation/GoogleTranslateTextTranslation.d.ts.map +1 -1
  291. package/dist/text-translation/GoogleTranslateTextTranslation.js +20 -18
  292. package/dist/text-translation/GoogleTranslateTextTranslation.js.map +1 -1
  293. package/dist/text-translation/NLLBTextTranslation.d.ts +2 -2
  294. package/dist/text-translation/NLLBTextTranslation.d.ts.map +1 -1
  295. package/dist/text-translation/NLLBTextTranslation.js +4 -6
  296. package/dist/text-translation/NLLBTextTranslation.js.map +1 -1
  297. package/dist/typings/TypedArray.d.ts.map +1 -1
  298. package/dist/utilities/Compression.d.ts +4 -3
  299. package/dist/utilities/Compression.d.ts.map +1 -1
  300. package/dist/utilities/Compression.js +9 -9
  301. package/dist/utilities/Compression.js.map +1 -1
  302. package/dist/utilities/FileDownloader.d.ts +6 -3
  303. package/dist/utilities/FileDownloader.d.ts.map +1 -1
  304. package/dist/utilities/FileDownloader.js +25 -21
  305. package/dist/utilities/FileDownloader.js.map +1 -1
  306. package/dist/utilities/FileReader.d.ts.map +1 -1
  307. package/dist/utilities/FileReader.js.map +1 -1
  308. package/dist/utilities/FileSystem.js +1 -1
  309. package/dist/utilities/FileSystem.js.map +1 -1
  310. package/dist/utilities/FileWriter.d.ts.map +1 -1
  311. package/dist/utilities/FileWriter.js.map +1 -1
  312. package/dist/utilities/Hashing.d.ts.map +1 -1
  313. package/dist/utilities/Hashing.js.map +1 -1
  314. package/dist/utilities/Locale.js.map +1 -1
  315. package/dist/utilities/Logger.d.ts +17 -9
  316. package/dist/utilities/Logger.d.ts.map +1 -1
  317. package/dist/utilities/Logger.js +50 -35
  318. package/dist/utilities/Logger.js.map +1 -1
  319. package/dist/utilities/NpmUtilities.d.ts.map +1 -1
  320. package/dist/utilities/NpmUtilities.js +4 -5
  321. package/dist/utilities/NpmUtilities.js.map +1 -1
  322. package/dist/utilities/ObjectUtilities.js.map +1 -1
  323. package/dist/utilities/OpenPromise.d.ts.map +1 -1
  324. package/dist/utilities/OpenPromise.js.map +1 -1
  325. package/dist/utilities/PackageManager.d.ts +4 -1
  326. package/dist/utilities/PackageManager.d.ts.map +1 -1
  327. package/dist/utilities/PackageManager.js +37 -22
  328. package/dist/utilities/PackageManager.js.map +1 -1
  329. package/dist/utilities/PathUtilities.d.ts +2 -0
  330. package/dist/utilities/PathUtilities.d.ts.map +1 -1
  331. package/dist/utilities/PathUtilities.js +5 -2
  332. package/dist/utilities/PathUtilities.js.map +1 -1
  333. package/dist/utilities/RandomGenerator.d.ts.map +1 -1
  334. package/dist/utilities/SignalChannel.d.ts.map +1 -1
  335. package/dist/utilities/SmoothEstimator.d.ts.map +1 -1
  336. package/dist/utilities/SmoothEstimator.js.map +1 -1
  337. package/dist/utilities/StringBuilder.d.ts.map +1 -1
  338. package/dist/utilities/TarballMaker.d.ts +4 -3
  339. package/dist/utilities/TarballMaker.d.ts.map +1 -1
  340. package/dist/utilities/TarballMaker.js +6 -6
  341. package/dist/utilities/TarballMaker.js.map +1 -1
  342. package/dist/utilities/Timeline.js.map +1 -1
  343. package/dist/utilities/Timer.d.ts.map +1 -1
  344. package/dist/utilities/Utilities.d.ts +9 -7
  345. package/dist/utilities/Utilities.d.ts.map +1 -1
  346. package/dist/utilities/Utilities.js +49 -33
  347. package/dist/utilities/Utilities.js.map +1 -1
  348. package/dist/utilities/VirtualFileReadStream.d.ts.map +1 -1
  349. package/dist/utilities/WebReader.d.ts +2 -1
  350. package/dist/utilities/WebReader.d.ts.map +1 -1
  351. package/dist/utilities/WebReader.js +7 -6
  352. package/dist/utilities/WebReader.js.map +1 -1
  353. package/dist/utilities/WikipediaReader.d.ts +2 -1
  354. package/dist/utilities/WikipediaReader.d.ts.map +1 -1
  355. package/dist/utilities/WikipediaReader.js +1 -5
  356. package/dist/utilities/WikipediaReader.js.map +1 -1
  357. package/dist/voice-activity-detection/AdaptiveGateVAD.d.ts +2 -1
  358. package/dist/voice-activity-detection/AdaptiveGateVAD.d.ts.map +1 -1
  359. package/dist/voice-activity-detection/AdaptiveGateVAD.js +1 -1
  360. package/dist/voice-activity-detection/AdaptiveGateVAD.js.map +1 -1
  361. package/dist/voice-activity-detection/SileroVAD.d.ts.map +1 -1
  362. package/dist/voice-activity-detection/SileroVAD.js.map +1 -1
  363. package/dist/voice-activity-detection/WebRtcVAD.d.ts.map +1 -1
  364. package/dist/voice-activity-detection/WebRtcVAD.js +1 -1
  365. package/dist/voice-activity-detection/WebRtcVAD.js.map +1 -1
  366. package/docs/API.md +62 -17
  367. package/docs/CUDA.md +4 -3
  368. package/docs/Engines.md +8 -7
  369. package/docs/Licenses.md +0 -3
  370. package/docs/Options.md +27 -31
  371. package/docs/Server.md +1 -0
  372. package/docs/Tasklist.md +2 -1
  373. package/docs/Technical.md +2 -2
  374. package/package.json +45 -35
  375. package/src/alignment/SemanticTextAlignment.ts +14 -7
  376. package/src/alignment/SpeechAlignment.ts +47 -150
  377. package/src/api/APIOptions.ts +1 -1
  378. package/src/api/Alignment.ts +95 -61
  379. package/src/api/Common.ts +11 -0
  380. package/src/api/Denoising.ts +22 -17
  381. package/src/api/GlobalOptions.ts +4 -20
  382. package/src/api/Recognition.ts +106 -123
  383. package/src/api/SourceSeparation.ts +39 -21
  384. package/src/api/SpeechLanguageDetection.ts +77 -37
  385. package/src/api/SpeechSearch.ts +6 -1
  386. package/src/api/SpeechTranslation.ts +75 -38
  387. package/src/api/Synthesis.ts +220 -116
  388. package/src/api/TextLanguageDetection.ts +10 -12
  389. package/src/api/TextTranslation.ts +43 -26
  390. package/src/api/TimelineTranslationAlignment.ts +41 -13
  391. package/src/api/TranscriptAndTranslationAlignment.ts +28 -15
  392. package/src/api/TranslationAlignment.ts +53 -24
  393. package/src/api/VoiceActivityDetection.ts +33 -68
  394. package/src/audio/AudioPlayer.ts +4 -232
  395. package/src/audio/AudioUtilities.ts +9 -2
  396. package/src/build-tools/MakeTarballsForInstalledPackages.ts +4 -3
  397. package/src/cli/CLI.ts +209 -101
  398. package/src/codecs/FFMpegTranscoder.ts +18 -16
  399. package/src/denoising/NSNet2.ts +5 -4
  400. package/src/denoising/RNNoise.ts +14 -6
  401. package/src/dsp/FFT.ts +2 -1
  402. package/src/dsp/MFCC.ts +7 -5
  403. package/src/dsp/MelSpectrogram.ts +56 -36
  404. package/src/dsp/Rubberband.ts +10 -3
  405. package/src/dsp/Sonic.ts +2 -1
  406. package/src/dsp/SpeexResampler.ts +2 -1
  407. package/src/encodings/Ascii.ts +1 -1
  408. package/src/encodings/Base64.ts +1 -1
  409. package/src/math/VectorMath.ts +10 -6
  410. package/src/nlp/EspeakPhonemizer.ts +2 -2
  411. package/src/nlp/Segmentation.ts +9 -4
  412. package/src/recognition/AmazonTranscribeSTT.ts +4 -3
  413. package/src/recognition/AzureCognitiveServicesSTT.ts +5 -4
  414. package/src/recognition/DeepgramSTT.ts +16 -16
  415. package/src/recognition/GoogleCloudSTT.ts +14 -12
  416. package/src/recognition/OpenAICloudSTT.ts +12 -6
  417. package/src/recognition/WhisperCommon.ts +130 -0
  418. package/src/recognition/{WhisperCppSTT.ts → WhisperCppCliSTT.ts} +73 -133
  419. package/src/recognition/WhisperSTT.ts +569 -718
  420. package/src/server/Client.ts +4 -4
  421. package/src/server/Worker.ts +59 -59
  422. package/src/source-separation/MDXNetSourceSeparation.ts +15 -10
  423. package/src/speech-embeddings/WavToVec2BertFeatureEmbeddings.ts +7 -5
  424. package/src/speech-language-detection/SileroLanguageDetection.ts +18 -9
  425. package/src/speech-search/DTWSpeechSearch.ts +6 -5
  426. package/src/subtitles/Subtitles.ts +22 -22
  427. package/src/synthesis/AwsPollyTTS.ts +12 -5
  428. package/src/synthesis/AzureCognitiveServicesTTS.ts +11 -3
  429. package/src/synthesis/CoquiServerTTS.ts +8 -7
  430. package/src/synthesis/DeepgramTTS.ts +21 -15
  431. package/src/synthesis/ElevenLabsTTS.ts +33 -23
  432. package/src/synthesis/EspeakTTS.ts +145 -69
  433. package/src/synthesis/FliteTTS.ts +3 -3
  434. package/src/synthesis/GnuSpeechTTS.ts +2 -2
  435. package/src/synthesis/GoogleCloudTTS.ts +23 -14
  436. package/src/synthesis/GoogleTranslateTTS.ts +19 -11
  437. package/src/synthesis/KokoroTTS.ts +37 -14
  438. package/src/synthesis/MicrosoftEdgeTTS.ts +71 -23
  439. package/src/synthesis/OpenAICloudTTS.ts +7 -6
  440. package/src/synthesis/SamTTS.ts +3 -2
  441. package/src/synthesis/SapiTTS.ts +3 -3
  442. package/src/synthesis/SvoxPicoTTS.ts +4 -5
  443. package/src/synthesis/VitsTTS.ts +43 -15
  444. package/src/text-translation/DeepLTextTranslation.ts +12 -10
  445. package/src/text-translation/GoogleTranslateTextTranslation.ts +35 -21
  446. package/src/text-translation/NLLBTextTranslation.ts +5 -9
  447. package/src/typings/Fillers.d.ts +0 -60
  448. package/src/typings/TypedArray.ts +12 -1
  449. package/src/utilities/Compression.ts +10 -9
  450. package/src/utilities/FileDownloader.ts +38 -23
  451. package/src/utilities/FileSystem.ts +1 -1
  452. package/src/utilities/Logger.ts +59 -42
  453. package/src/utilities/NpmUtilities.ts +4 -6
  454. package/src/utilities/OpenPromise.ts +1 -2
  455. package/src/utilities/PackageManager.ts +53 -26
  456. package/src/utilities/PathUtilities.ts +6 -2
  457. package/src/utilities/TarballMaker.ts +7 -7
  458. package/src/utilities/Utilities.ts +58 -41
  459. package/src/utilities/WebReader.ts +11 -6
  460. package/src/utilities/WikipediaReader.ts +2 -8
  461. package/src/voice-activity-detection/AdaptiveGateVAD.ts +13 -8
  462. package/src/voice-activity-detection/WebRtcVAD.ts +1 -2
  463. package/tsconfig.json +53 -54
  464. package/dist/audio/AudioRecorder.d.ts +0 -4
  465. package/dist/audio/AudioRecorder.d.ts.map +0 -1
  466. package/dist/audio/AudioRecorder.js +0 -68
  467. package/dist/audio/AudioRecorder.js.map +0 -1
  468. package/dist/audio/SoxPath.d.ts +0 -2
  469. package/dist/audio/SoxPath.d.ts.map +0 -1
  470. package/dist/audio/SoxPath.js +0 -24
  471. package/dist/audio/SoxPath.js.map +0 -1
  472. package/dist/recognition/SileroSTT.d.ts +0 -30
  473. package/dist/recognition/SileroSTT.d.ts.map +0 -1
  474. package/dist/recognition/SileroSTT.js +0 -152
  475. package/dist/recognition/SileroSTT.js.map +0 -1
  476. package/dist/recognition/VoskSTT.d.ts +0 -11
  477. package/dist/recognition/VoskSTT.d.ts.map +0 -1
  478. package/dist/recognition/VoskSTT.js +0 -72
  479. package/dist/recognition/VoskSTT.js.map +0 -1
  480. package/dist/recognition/WhisperCppSTT.d.ts.map +0 -1
  481. package/dist/recognition/WhisperCppSTT.js.map +0 -1
  482. package/dist/synthesis/StreamlabsPollyTTS.d.ts +0 -12
  483. package/dist/synthesis/StreamlabsPollyTTS.d.ts.map +0 -1
  484. package/dist/synthesis/StreamlabsPollyTTS.js +0 -88
  485. package/dist/synthesis/StreamlabsPollyTTS.js.map +0 -1
  486. package/dist/utilities/BinaryUtilities.d.ts +0 -14
  487. package/dist/utilities/BinaryUtilities.d.ts.map +0 -1
  488. package/dist/utilities/BinaryUtilities.js +0 -113
  489. package/dist/utilities/BinaryUtilities.js.map +0 -1
  490. package/src/audio/AudioRecorder.ts +0 -91
  491. package/src/audio/SoxPath.ts +0 -31
  492. package/src/recognition/SileroSTT.ts +0 -222
  493. package/src/recognition/VoskSTT.ts +0 -112
  494. package/src/synthesis/StreamlabsPollyTTS.ts +0 -114
  495. package/src/utilities/BinaryUtilities.ts +0 -138
  496. /package/{LICENSE.md → LICENSE.GPLv3.md} +0 -0
@@ -1,24 +1,26 @@
1
+ import chalk from 'chalk'
2
+
3
+ import * as API from './API.js'
4
+
1
5
  import { extendDeep } from '../utilities/ObjectUtilities.js'
2
6
 
3
7
  import { AudioSourceParam, RawAudio, applyGainDecibels, applyGainDecibelsInPlace, attenuateIfClippingInPlace, ensureRawAudio, getSamplePeakDecibels, mixAudio, normalizeAudioLevelInPlace } from '../audio/AudioUtilities.js'
4
8
  import { Logger } from '../utilities/Logger.js'
5
9
 
6
- import { logToStderr } from '../utilities/Utilities.js'
7
10
  import { resampleAudioSpeex } from '../dsp/SpeexResampler.js'
8
11
  import { EngineMetadata } from './Common.js'
9
- import chalk from 'chalk'
10
12
  import { defaultNSNet2Options, NSNet2Options } from '../denoising/NSNet2.js'
11
13
  import { loadPackage } from '../utilities/PackageManager.js'
12
14
 
13
- const log = logToStderr
15
+ export async function denoise(input: AudioSourceParam, options: DenoisingOptions, callbacks?: DenoisingCallbacks) {
16
+ options = extendDeep(defaultDenoisingOptions, options)
17
+ callbacks = { logLevel: API.getGlobalLogLevel(), ...callbacks }
18
+
19
+ const logger = new Logger(callbacks.logLevel)
14
20
 
15
- export async function denoise(input: AudioSourceParam, options: DenoisingOptions) {
16
- const logger = new Logger()
17
21
  const startTime = logger.getTimestamp()
18
22
 
19
- options = extendDeep(defaultDenoisingOptions, options)
20
-
21
- const inputRawAudio = await ensureRawAudio(input)
23
+ const inputRawAudio = await ensureRawAudio(input, undefined, undefined, callbacks)
22
24
 
23
25
  logger.start(`Initialize ${options.engine} module`)
24
26
 
@@ -42,9 +44,9 @@ export async function denoise(input: AudioSourceParam, options: DenoisingOptions
42
44
  const audioChannelRawAudio: RawAudio = { audioChannels: [audioChannel], sampleRate: processingSampleRate }
43
45
 
44
46
  logger.end()
45
- logger.logTitledMessage(`Denoise audio channel`, `${channelIndex}`, chalk.magentaBright)
47
+ logger.logTitledMessage(`Denoise audio channel`, `${channelIndex}`, 'info', chalk.magentaBright)
46
48
 
47
- const { denoisedRawAudio, frameVadProbabilities } = await RNNoise.denoiseAudio(audioChannelRawAudio)
49
+ const { denoisedRawAudio, frameVadProbabilities } = await RNNoise.denoiseAudio(audioChannelRawAudio, callbacks)
48
50
 
49
51
  logger.end()
50
52
 
@@ -78,7 +80,7 @@ export async function denoise(input: AudioSourceParam, options: DenoisingOptions
78
80
  }
79
81
 
80
82
  if (!nsnet2Options.modelDirectoryPath) {
81
- nsnet2Options.modelDirectoryPath = await loadPackage(packageName)
83
+ nsnet2Options.modelDirectoryPath = await loadPackage(packageName, callbacks)
82
84
  }
83
85
 
84
86
  logger.start(`Resample audio to ${processingSampleRate} Hz`)
@@ -93,9 +95,9 @@ export async function denoise(input: AudioSourceParam, options: DenoisingOptions
93
95
 
94
96
  logger.end()
95
97
 
96
- logger.logTitledMessage(`Denoise audio channel`, `${channelIndex}`, chalk.magentaBright)
98
+ logger.logTitledMessage(`Denoise audio channel`, `${channelIndex}`, 'info', chalk.magentaBright)
97
99
 
98
- const { denoisedAudio } = await NSNet2.denoiseAudio(audioChannelRawAudio, nsnet2Options)
100
+ const { denoisedAudio } = await NSNet2.denoiseAudio(audioChannelRawAudio, nsnet2Options, callbacks)
99
101
 
100
102
  logger.end()
101
103
 
@@ -112,11 +114,11 @@ export async function denoise(input: AudioSourceParam, options: DenoisingOptions
112
114
  }
113
115
  }
114
116
 
115
- logger.logTitledMessage(`Postprocess`, ``, chalk.magentaBright)
117
+ logger.logTitledMessage(`Postprocess`, ``, 'info', chalk.magentaBright)
116
118
 
117
119
  logger.start(`Resample denoised audio (${denoisedAudio.sampleRate} Hz) back to original sample rate (${inputRawAudio.sampleRate} Hz)`)
118
120
 
119
- denoisedAudio = await ensureRawAudio(denoisedAudio, inputRawAudio.sampleRate, inputRawAudio.audioChannels.length)
121
+ denoisedAudio = await ensureRawAudio(denoisedAudio, inputRawAudio.sampleRate, inputRawAudio.audioChannels.length, callbacks)
120
122
 
121
123
  logger.start('Postprocess audio')
122
124
 
@@ -141,7 +143,7 @@ export async function denoise(input: AudioSourceParam, options: DenoisingOptions
141
143
  logger.end()
142
144
 
143
145
  logger.log('')
144
- logger.logDuration('Total denoising time', startTime, chalk.magentaBright)
146
+ logger.logDuration('Total denoising time', startTime, 'info', chalk.magentaBright)
145
147
 
146
148
  return {
147
149
  denoisedAudio,
@@ -156,7 +158,7 @@ export interface DenoisingResult {
156
158
 
157
159
  export type DenoisingEngine = 'rnnoise' | 'nsnet2'
158
160
 
159
- export interface DenoisingOptions {
161
+ export interface DenoisingOptions extends API.OperationOptions {
160
162
  engine?: DenoisingEngine,
161
163
 
162
164
  postProcessing?: {
@@ -183,6 +185,9 @@ export const defaultDenoisingOptions: DenoisingOptions = {
183
185
  nsnet2: defaultNSNet2Options,
184
186
  }
185
187
 
188
+ export interface DenoisingCallbacks extends API.OperationCallbacks {
189
+ }
190
+
186
191
  export const denoisingEngines: EngineMetadata[] = [
187
192
  {
188
193
  id: 'rnnoise',
@@ -1,3 +1,5 @@
1
+ import { LogLevel, logLevelGreaterOrEqualTo } from "../utilities/Logger.js"
2
+
1
3
  export function getGlobalOption<K extends keyof GlobalOptions>(key: K): GlobalOptions[K] {
2
4
  if (!listGlobalOptions().includes(key)) {
3
5
  throw new Error(`Unknown global option key '${key}'`)
@@ -18,36 +20,18 @@ export function listGlobalOptions() {
18
20
  return Object.keys(globalOptions)
19
21
  }
20
22
 
21
- export function logLevelToNumber(logLevel: LogLevel) {
22
- return logLevels.indexOf(logLevel)
23
- }
24
-
25
- export function getLogLevel() {
26
- return globalOptions.logLevel ?? 'info'
27
- }
28
-
29
- export function logLevelGreaterOrEqualTo(referenceLevel: LogLevel) {
30
- return !logLevelSmallerThan(referenceLevel)
23
+ export function getGlobalLogLevel() {
24
+ return getGlobalOption('logLevel') ?? 'info'
31
25
  }
32
26
 
33
- export function logLevelSmallerThan(referenceLevel: LogLevel) {
34
- return logLevelToNumber(getLogLevel()) < logLevelToNumber(referenceLevel)
35
- }
36
-
37
- const logLevels = ['silent', 'output', 'error', 'warning', 'info', 'trace'] as const
38
-
39
- export type LogLevel = typeof logLevels[number]
40
-
41
27
  export interface GlobalOptions {
42
28
  ffmpegPath?: string
43
- soxPath?: string
44
29
  packageBaseURL?: string
45
30
  logLevel?: LogLevel
46
31
  }
47
32
 
48
33
  const globalOptions: GlobalOptions = {
49
34
  ffmpegPath: undefined,
50
- soxPath: undefined,
51
35
  packageBaseURL: 'https://huggingface.co/echogarden/echogarden-packages/resolve/main/',
52
36
  logLevel: 'info',
53
37
  }
@@ -4,58 +4,61 @@ import * as API from './API.js'
4
4
 
5
5
  import { extendDeep } from '../utilities/ObjectUtilities.js'
6
6
 
7
- import { logToStderr } from '../utilities/Utilities.js'
8
7
  import { AudioSourceParam, RawAudio, ensureRawAudio, normalizeAudioLevelInPlace, trimAudioEnd } from '../audio/AudioUtilities.js'
9
8
  import { Logger } from '../utilities/Logger.js'
10
9
 
11
10
  import { Timeline, addWordTextOffsetsToTimelineInPlace, wordTimelineToSegmentSentenceTimeline } from '../utilities/Timeline.js'
12
11
  import { formatLanguageCodeWithName, parseLangIdentifier } from '../utilities/Locale.js'
13
- import { loadPackage } from '../utilities/PackageManager.js'
14
12
 
15
- import { type WhisperPartCallback, type WhisperOptions } from '../recognition/WhisperSTT.js'
13
+ import { type WhisperOptions, type WhisperPartCallback, type WhisperTokenCallback } from '../recognition/WhisperSTT.js'
16
14
  import { type SubtitlesConfig } from '../subtitles/Subtitles.js'
17
15
  import { type OpenAICloudSTTOptions } from '../recognition/OpenAICloudSTT.js'
18
- import { type WhisperCppOptions } from '../recognition/WhisperCppSTT.js'
19
- import { type SileroRecognitionOptions } from '../recognition/SileroSTT.js'
16
+ import { type WhisperCppCliOptions } from '../recognition/WhisperCppCliSTT.js'
20
17
  import { type DeepgramSTTOptions } from '../recognition/DeepgramSTT.js'
21
- import { type OnnxExecutionProvider } from '../utilities/OnnxUtilities.js'
22
18
 
23
- const log = logToStderr
19
+ export async function recognize(input: AudioSourceParam, options: RecognitionOptions, callbacks?: RecognitionCallbacks): Promise<RecognitionResult> {
20
+ options = extendDeep(defaultRecognitionOptions, options)
21
+ callbacks = { logLevel: API.getGlobalLogLevel(), ...callbacks }
24
22
 
25
- export async function recognize(input: AudioSourceParam, options: RecognitionOptions, onPart?: WhisperPartCallback): Promise<RecognitionResult> {
26
- const logger = new Logger()
23
+ const logger = new Logger(callbacks.logLevel)
27
24
 
28
25
  const startTimestamp = logger.getTimestamp()
29
26
 
30
- options = extendDeep(defaultRecognitionOptions, options)
31
-
32
- const inputRawAudio = await ensureRawAudio(input)
27
+ const inputRawAudio = await ensureRawAudio(input, undefined, undefined, callbacks)
33
28
 
34
29
  let sourceRawAudio: RawAudio
35
30
  let isolatedRawAudio: RawAudio | undefined
36
31
  let backgroundRawAudio: RawAudio | undefined
37
32
 
38
33
  if (options.isolate) {
39
- logger.log(``)
40
- logger.end();
34
+ logger.logTitledMessage(`Isolate vocals`, '');
41
35
 
42
- ({ isolatedRawAudio, backgroundRawAudio } = await API.isolate(inputRawAudio, options.sourceSeparation!))
36
+ ({ isolatedRawAudio, backgroundRawAudio } = await API.isolate(
37
+ inputRawAudio,
38
+ options.sourceSeparation!,
39
+ { ...callbacks, logLevel: logger.logLevel }))
43
40
 
44
41
  logger.end()
45
- logger.log(``)
46
42
 
47
43
  logger.start(`Resample audio to 16kHz mono`)
48
- sourceRawAudio = await ensureRawAudio(isolatedRawAudio, 16000, 1)
44
+ sourceRawAudio = await ensureRawAudio(isolatedRawAudio, 16000, 1, callbacks)
49
45
  } else {
50
46
  logger.start(`Resample audio to 16kHz mono`)
51
- sourceRawAudio = await ensureRawAudio(inputRawAudio, 16000, 1)
47
+ sourceRawAudio = await ensureRawAudio(inputRawAudio, 16000, 1, callbacks)
52
48
  }
53
49
 
50
+ logger.end()
51
+
54
52
  let sourceUncropTimeline: Timeline | undefined
55
53
 
56
54
  if (options.crop) {
57
55
  logger.start('Crop using voice activity detection');
58
- ({ timeline: sourceUncropTimeline, croppedRawAudio: sourceRawAudio } = await API.detectVoiceActivity(sourceRawAudio, options.vad!))
56
+
57
+ ({ timeline: sourceUncropTimeline, croppedRawAudio: sourceRawAudio } =
58
+ await API.detectVoiceActivity(
59
+ sourceRawAudio,
60
+ options.vad!,
61
+ { ...callbacks, logLevel: 'warning' }))
59
62
 
60
63
  logger.end()
61
64
  }
@@ -76,7 +79,10 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
76
79
  logger.logTitledMessage('Language specified', formatLanguageCodeWithName(options.language))
77
80
  } else {
78
81
  logger.start('No language specified. Detect speech language')
79
- const { detectedLanguage } = await API.detectSpeechLanguage(sourceRawAudio, options.languageDetection!)
82
+ const { detectedLanguage } = await API.detectSpeechLanguage(
83
+ sourceRawAudio,
84
+ options.languageDetection!,
85
+ { abortSignal: callbacks.abortSignal, logLevel: 'warning' })
80
86
 
81
87
  options.language = detectedLanguage
82
88
 
@@ -97,105 +103,67 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
97
103
  switch (engine) {
98
104
  case 'whisper': {
99
105
  const WhisperSTT = await import('../recognition/WhisperSTT.js')
106
+ const WhisperCommon = await import('../recognition/WhisperCommon.js')
100
107
 
101
- const whisperOptions = options.whisper!
108
+ const whisperOptions: WhisperOptions =
109
+ extendDeep(WhisperSTT.defaultWhisperOptions, options.whisper)
102
110
 
103
- logger.end()
111
+ const { modelId, modelPath } = await WhisperCommon.loadModelPackage(
112
+ whisperOptions.model,
113
+ shortLanguageCode,
114
+ callbacks,
115
+ )
104
116
 
105
- const { modelName, modelDir } = await WhisperSTT.loadPackagesAndGetPaths(whisperOptions.model, shortLanguageCode)
117
+ const { libPath } = await WhisperSTT.loadLibraryPackages(
118
+ whisperOptions.enableGPU,
119
+ callbacks,
120
+ )
106
121
 
107
122
  logger.end();
108
123
 
109
124
  ({ transcript, timeline } = await WhisperSTT.recognize(
110
125
  sourceRawAudio,
111
- modelName,
112
- modelDir,
126
+ modelId,
127
+ modelPath,
128
+ libPath,
113
129
  'transcribe',
114
130
  shortLanguageCode,
115
131
  whisperOptions,
116
- onPart,
132
+ callbacks,
117
133
  ))
118
134
 
119
135
  break
120
136
  }
121
137
 
122
138
  case 'whisper.cpp': {
123
- const WhisperCppSTT = await import('../recognition/WhisperCppSTT.js')
139
+ const WhisperCppCliSTT = await import('../recognition/WhisperCppCliSTT.js')
140
+ const WhisperCommon = await import('../recognition/WhisperCommon.js')
124
141
 
125
142
  const whisperCppOptions = options.whisperCpp!
126
143
 
127
144
  logger.end()
128
145
 
129
- const { modelName, modelPath } = await WhisperCppSTT.loadModelPackage(whisperCppOptions.model, shortLanguageCode)
146
+ const { modelId, modelPath } = await WhisperCommon.loadModelPackage(
147
+ whisperCppOptions.model,
148
+ shortLanguageCode,
149
+ callbacks,
150
+ )
130
151
 
131
152
  logger.end();
132
153
 
133
- ({ transcript, timeline } = await WhisperCppSTT.recognize(
154
+ ({ transcript, timeline } = await WhisperCppCliSTT.recognize(
134
155
  sourceRawAudio,
135
156
  'transcribe',
136
157
  shortLanguageCode,
137
- modelName,
158
+ modelId,
138
159
  modelPath,
139
160
  whisperCppOptions,
161
+ callbacks,
140
162
  ))
141
163
 
142
164
  break
143
165
  }
144
166
 
145
- case 'vosk': {
146
- const VoskSTT = await import('../recognition/VoskSTT.js')
147
-
148
- try {
149
- await import('@echogarden/vosk')
150
- } catch (e) {
151
- log(e)
152
- throw new Error(`The vosk npm package, which is required for Vosk support, was not found, or had an error loading. If missing, you can install it by running 'npm install @echogarden/vosk -g'.`)
153
- }
154
-
155
- const voskOptions = options.vosk!
156
-
157
- const modelPath = voskOptions.modelPath
158
-
159
- if (!modelPath) {
160
- throw new Error(`Vosk models are not currently auto-downloaded. You'll need to download a model manually and set a model path in 'vosk.modelPath'.`)
161
- }
162
-
163
- logger.end();
164
-
165
- ({ transcript, timeline } = await VoskSTT.recognize(sourceRawAudio, modelPath, true))
166
-
167
- break
168
- }
169
-
170
- case 'silero': {
171
- const SileroSTT = await import('../recognition/SileroSTT.js')
172
-
173
- const sileroOptions = options.silero!
174
-
175
- let modelPath = sileroOptions.modelPath
176
-
177
- if (!modelPath) {
178
- const packageName = SileroSTT.languageCodeToPackageName[shortLanguageCode]
179
-
180
- if (!packageName) {
181
- throw new Error(`Language '${shortLanguageCode}' is not supported by Silero`)
182
- }
183
-
184
- modelPath = await loadPackage(packageName)
185
- }
186
-
187
- const onnxExecutionProviders: OnnxExecutionProvider[] = sileroOptions.provider ? [sileroOptions.provider] : []
188
-
189
- logger.end();
190
-
191
- ({ transcript, timeline } = await SileroSTT.recognize(
192
- sourceRawAudio,
193
- modelPath,
194
- onnxExecutionProviders))
195
-
196
- break
197
- }
198
-
199
167
  case 'google-cloud': {
200
168
  const GoogleCloudSTT = await import('../recognition/GoogleCloudSTT.js')
201
169
 
@@ -207,7 +175,12 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
207
175
 
208
176
  logger.end();
209
177
 
210
- ({ transcript, timeline } = await GoogleCloudSTT.recognize(sourceRawAudio, apiKey, shortLanguageCode))
178
+ ({ transcript, timeline } = await GoogleCloudSTT.recognize(
179
+ sourceRawAudio,
180
+ apiKey,
181
+ shortLanguageCode,
182
+ callbacks
183
+ ))
211
184
 
212
185
  break
213
186
  }
@@ -229,7 +202,14 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
229
202
 
230
203
  logger.end();
231
204
 
232
- ({ transcript, timeline } = await AzureCognitiveServicesSTT.recognize(sourceRawAudio, subscriptionKey, serviceRegion, shortLanguageCode))
205
+ ({ transcript, timeline } = await AzureCognitiveServicesSTT.recognize(
206
+ sourceRawAudio,
207
+ subscriptionKey,
208
+ serviceRegion,
209
+ shortLanguageCode,
210
+ undefined,
211
+ callbacks
212
+ ))
233
213
 
234
214
  break
235
215
  }
@@ -257,7 +237,14 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
257
237
 
258
238
  logger.end();
259
239
 
260
- ({ transcript, timeline } = await AmazonTranscribeSTT.recgonize(sourceRawAudio, languageCode, region, accessKeyId, secretAccessKey))
240
+ ({ transcript, timeline } = await AmazonTranscribeSTT.recgonize(
241
+ sourceRawAudio,
242
+ languageCode,
243
+ region,
244
+ accessKeyId,
245
+ secretAccessKey,
246
+ callbacks
247
+ ))
261
248
 
262
249
  break
263
250
  }
@@ -273,7 +260,13 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
273
260
 
274
261
  logger.end();
275
262
 
276
- ({ transcript, timeline } = await OpenAICloudSTT.recognize(sourceRawAudio, shortLanguageCode, openAICloudSTTOptions))
263
+ ({ transcript, timeline } = await OpenAICloudSTT.recognize(
264
+ sourceRawAudio,
265
+ shortLanguageCode,
266
+ openAICloudSTTOptions,
267
+ 'transcribe',
268
+ callbacks
269
+ ))
277
270
 
278
271
  break
279
272
  }
@@ -289,7 +282,12 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
289
282
 
290
283
  logger.end();
291
284
 
292
- ({ transcript, timeline } = await DeepgramSTT.recognize(sourceRawAudio, options.language ? shortLanguageCode : undefined, deepgramOptions))
285
+ ({ transcript, timeline } = await DeepgramSTT.recognize(
286
+ sourceRawAudio,
287
+ options.language ? shortLanguageCode : undefined,
288
+ deepgramOptions,
289
+ callbacks,
290
+ ))
293
291
 
294
292
  break
295
293
  }
@@ -304,7 +302,12 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
304
302
  logger.start(`Align audio to transcript`)
305
303
  const alignmentOptions: API.AlignmentOptions = extendDeep(options.alignment, { language: languageCode })
306
304
 
307
- const { wordTimeline } = await API.align(sourceRawAudio, transcript, alignmentOptions)
305
+ const { wordTimeline } = await API.align(
306
+ sourceRawAudio,
307
+ transcript,
308
+ alignmentOptions,
309
+ { abortSignal: callbacks.abortSignal, logLevel: 'warning' },
310
+ )
308
311
 
309
312
  timeline = wordTimeline
310
313
  }
@@ -321,7 +324,7 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
321
324
  const { segmentTimeline } = await wordTimelineToSegmentSentenceTimeline(timeline, transcript, languageCode, 'single', 'preserve')
322
325
 
323
326
  logger.end()
324
- logger.logDuration('\nTotal recognition time', startTimestamp, chalk.magentaBright)
327
+ logger.logDuration('\nTotal recognition time', startTimestamp, 'info', chalk.magentaBright)
325
328
 
326
329
  return {
327
330
  transcript,
@@ -350,9 +353,9 @@ export interface RecognitionResult {
350
353
  backgroundRawAudio?: RawAudio
351
354
  }
352
355
 
353
- export type RecognitionEngine = 'whisper' | 'whisper.cpp' | 'vosk' | 'silero' | 'google-cloud' | 'microsoft-azure' | 'amazon-transcribe' | 'openai-cloud' | 'deepgram'
356
+ export type RecognitionEngine = 'whisper' | 'whisper.cpp' | 'google-cloud' | 'microsoft-azure' | 'amazon-transcribe' | 'openai-cloud' | 'deepgram'
354
357
 
355
- export interface RecognitionOptions {
358
+ export interface RecognitionOptions extends API.OperationOptions {
356
359
  engine?: RecognitionEngine
357
360
 
358
361
  language?: string
@@ -369,19 +372,13 @@ export interface RecognitionOptions {
369
372
 
370
373
  subtitles?: SubtitlesConfig
371
374
 
372
- vad?: API.VADOptions
375
+ vad?: API.VoiceActivityDetectionOptions
373
376
 
374
377
  sourceSeparation?: API.SourceSeparationOptions
375
378
 
376
379
  whisper?: WhisperOptions
377
380
 
378
- whisperCpp?: WhisperCppOptions
379
-
380
- vosk?: {
381
- modelPath?: string
382
- }
383
-
384
- silero?: SileroRecognitionOptions
381
+ whisperCpp?: WhisperCppCliOptions
385
382
 
386
383
  googleCloud?: {
387
384
  apiKey?: string
@@ -437,13 +434,6 @@ export const defaultRecognitionOptions: RecognitionOptions = {
437
434
  whisperCpp: {
438
435
  },
439
436
 
440
- vosk: {
441
- modelPath: undefined
442
- },
443
-
444
- silero: {
445
- },
446
-
447
437
  googleCloud: {
448
438
  apiKey: undefined,
449
439
  alternativeLanguageCodes: [],
@@ -470,29 +460,22 @@ export const defaultRecognitionOptions: RecognitionOptions = {
470
460
  }
471
461
  }
472
462
 
463
+ export interface RecognitionCallbacks extends API.OperationCallbacks {
464
+ onPart?: WhisperPartCallback
465
+ onToken?: WhisperTokenCallback
466
+ }
467
+
473
468
  export const recognitionEngines: API.EngineMetadata[] = [
474
469
  {
475
470
  id: 'whisper',
476
471
  name: 'OpenAI Whisper',
477
- description: 'A high accuracy transformer-based speech recognition architecture by OpenAI.',
472
+ description: 'High accuracy transformer-based speech recognition architecture by OpenAI.',
478
473
  type: 'local'
479
474
  },
480
475
  {
481
476
  id: 'whisper.cpp',
482
- name: 'OpenAI Whisper (C++ port)',
483
- description: 'A C++ port of the Whisper speech recognition architecture.',
484
- type: 'local'
485
- },
486
- {
487
- id: 'vosk',
488
- name: 'Vosk',
489
- description: 'A speech recognition toolkit.',
490
- type: 'local'
491
- },
492
- {
493
- id: 'silero',
494
- name: 'Silero',
495
- description: 'Speech recognition models.',
477
+ name: 'OpenAI Whisper (C++ port) CLI',
478
+ description: 'Invokes the CLI version of the whisper.cpp port of OpenAI Whisper.',
496
479
  type: 'local'
497
480
  },
498
481
  {
@@ -1,31 +1,36 @@
1
- import { AudioSourceParam, RawAudio, attenuateIfClippingInPlace, ensureRawAudio, subtractAudio } from '../audio/AudioUtilities.js';
2
- import { Logger } from '../utilities/Logger.js';
3
- import { extendDeep } from '../utilities/ObjectUtilities.js';
4
- import { loadPackage } from '../utilities/PackageManager.js';
5
- import { EngineMetadata } from './Common.js';
6
- import chalk from 'chalk';
7
- import { readdir } from '../utilities/FileSystem.js';
8
- import { defaultMDXNetOptions, getProfileForMDXNetModelName, MDXNetOptions } from '../source-separation/MDXNetSourceSeparation.js';
9
- import { joinPath } from '../utilities/PathUtilities.js';
10
-
11
- export async function isolate(input: AudioSourceParam, options: SourceSeparationOptions): Promise<SourceSeparationResult> {
12
- const logger = new Logger()
1
+ import chalk from 'chalk'
2
+
3
+ import * as API from './API.js'
4
+
5
+ import { AudioSourceParam, RawAudio, attenuateIfClippingInPlace, ensureRawAudio, subtractAudio } from '../audio/AudioUtilities.js'
6
+ import { Logger } from '../utilities/Logger.js'
7
+ import { extendDeep } from '../utilities/ObjectUtilities.js'
8
+ import { loadPackage } from '../utilities/PackageManager.js'
9
+ import { EngineMetadata } from './Common.js'
10
+ import { readdir } from '../utilities/FileSystem.js'
11
+ import { defaultMDXNetOptions, getProfileForMDXNetModelName, MDXNetOptions } from '../source-separation/MDXNetSourceSeparation.js'
12
+ import { joinPath } from '../utilities/PathUtilities.js'
13
+
14
+ export async function isolate(input: AudioSourceParam, options: SourceSeparationOptions, callbacks?: SourceSeparationCallbacks): Promise<SourceSeparationResult> {
15
+ options = extendDeep(defaultSourceSeparationOptions, options)
16
+ callbacks = { logLevel: API.getGlobalLogLevel(), ...callbacks }
17
+
18
+ const logger = new Logger(callbacks.logLevel)
19
+
13
20
  const startTimestamp = logger.getTimestamp()
14
21
 
15
- const inputRawAudio = await ensureRawAudio(input)
22
+ const inputRawAudio = await ensureRawAudio(input, undefined, undefined, callbacks)
16
23
 
17
24
  let isolatedRawAudio: RawAudio
18
25
  let backgroundRawAudio: RawAudio
19
26
 
20
- options = extendDeep(defaultSourceSeparationOptions, options)
21
-
22
27
  switch (options.engine) {
23
28
  case 'mdx-net': {
24
29
  const MDXNetSourceSeparation = await import('../source-separation/MDXNetSourceSeparation.js')
25
30
 
26
31
  const mdxNetOptions = options.mdxNet!
27
32
 
28
- const packageDir = await loadPackage(`mdxnet-${mdxNetOptions.model!}`)
33
+ const packageDir = await loadPackage(`mdxnet-${mdxNetOptions.model!}`, callbacks)
29
34
  const modelFilename = (await readdir(packageDir)).filter(name => name.endsWith('onnx'))[0]
30
35
 
31
36
  if (!modelFilename) {
@@ -36,20 +41,27 @@ export async function isolate(input: AudioSourceParam, options: SourceSeparation
36
41
 
37
42
  await logger.startAsync(`Convert audio to 44.1 kHz stereo`)
38
43
 
39
- let inputRawAudioAs44100Stereo: RawAudio | undefined = await ensureRawAudio(inputRawAudio, 44100, 2)
44
+ let inputRawAudioAs44100Stereo: RawAudio | undefined = await ensureRawAudio(inputRawAudio, 44100, 2, callbacks)
40
45
 
41
46
  logger.end()
42
47
 
43
48
  const modelProfile = getProfileForMDXNetModelName(mdxNetOptions.model!)
44
49
 
45
- isolatedRawAudio = await MDXNetSourceSeparation.isolate(inputRawAudioAs44100Stereo, modelPath, modelProfile, mdxNetOptions)
50
+ isolatedRawAudio = await MDXNetSourceSeparation.isolate(
51
+ inputRawAudioAs44100Stereo,
52
+ modelPath,
53
+ modelProfile,
54
+ mdxNetOptions,
55
+ callbacks,
56
+ )
57
+
46
58
  logger.end()
47
59
 
48
60
  // Release memory for the converted input audio since it's not needed anymore
49
61
  inputRawAudioAs44100Stereo = undefined
50
62
 
51
63
  await logger.startAsync(`Convert isolated audio back to original sample rate (${inputRawAudio.sampleRate} Hz) and channel count (${inputRawAudio.audioChannels.length})`)
52
- isolatedRawAudio = await ensureRawAudio(isolatedRawAudio, inputRawAudio.sampleRate, inputRawAudio.audioChannels.length)
64
+ isolatedRawAudio = await ensureRawAudio(isolatedRawAudio, inputRawAudio.sampleRate, inputRawAudio.audioChannels.length, callbacks)
53
65
 
54
66
  await logger.startAsync(`Subtract from original waveform to extract background audio`)
55
67
  backgroundRawAudio = subtractAudio(inputRawAudio, isolatedRawAudio)
@@ -69,7 +81,7 @@ export async function isolate(input: AudioSourceParam, options: SourceSeparation
69
81
 
70
82
  logger.end()
71
83
 
72
- logger.logDuration(`Total source separation time`, startTimestamp, chalk.magentaBright)
84
+ logger.logDuration(`Total source separation time`, startTimestamp, 'info', chalk.magentaBright)
73
85
 
74
86
  return {
75
87
  inputRawAudio,
@@ -80,7 +92,7 @@ export async function isolate(input: AudioSourceParam, options: SourceSeparation
80
92
 
81
93
  export type SourceSeparationEngine = 'mdx-net'
82
94
 
83
- export interface SourceSeparationOptions {
95
+ export interface SourceSeparationOptions extends API.OperationOptions {
84
96
  engine?: SourceSeparationEngine
85
97
 
86
98
  mdxNet?: MDXNetOptions
@@ -98,6 +110,12 @@ export interface SourceSeparationResult {
98
110
  backgroundRawAudio: RawAudio
99
111
  }
100
112
 
113
+ export interface SourceSeparationCallbacks extends API.OperationCallbacks {
114
+ onSegment?: SourceSeparationSegmentCallback
115
+ }
116
+
117
+ export type SourceSeparationSegmentCallback = (timePosition: number, rawAudio: RawAudio) => Promise<void>
118
+
101
119
  export const sourceSeparationEngines: EngineMetadata[] = [
102
120
  {
103
121
  id: 'mdx-net',