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
@@ -28,7 +28,7 @@ export function subtitlesToTimeline(subtitles: string, removeMarkup = true) {
28
28
  for (let line of lines) {
29
29
  line = line.trim()
30
30
 
31
- if (line.length == 0) {
31
+ if (line.length === 0) {
32
32
  isWithinCue = false
33
33
 
34
34
  continue
@@ -52,7 +52,7 @@ export function subtitlesToTimeline(subtitles: string, removeMarkup = true) {
52
52
  } else if (isWithinCue && timeline.length > 0) {
53
53
  const lastEntry = timeline[timeline.length - 1]
54
54
 
55
- if (lastEntry.text == '') {
55
+ if (lastEntry.text === '') {
56
56
  lastEntry.text = line
57
57
  } else {
58
58
  lastEntry.text += ' ' + line
@@ -86,7 +86,7 @@ export function timelineToSubtitles(timeline: Timeline, subtitlesConfig?: Subtit
86
86
 
87
87
  let config = subtitlesConfig || {}
88
88
 
89
- if (config.format && config.format == 'webvtt') {
89
+ if (config.format && config.format === 'webvtt') {
90
90
  config = { ...defaultSubtitlesBaseConfig, ...webVttConfigExtension, ...config }
91
91
  } else {
92
92
  config = { ...defaultSubtitlesBaseConfig, ...srtConfigExtension, ...config }
@@ -97,7 +97,7 @@ export function timelineToSubtitles(timeline: Timeline, subtitlesConfig?: Subtit
97
97
 
98
98
  let outText = ''
99
99
 
100
- if (config.format == 'webvtt') {
100
+ if (config.format === 'webvtt') {
101
101
  outText += `WEBVTT${lineBreakString}Kind: captions${lineBreakString}`
102
102
 
103
103
  if (config.language) {
@@ -110,11 +110,11 @@ export function timelineToSubtitles(timeline: Timeline, subtitlesConfig?: Subtit
110
110
  // Generate the cues from the given timeline
111
111
  let cues: Cue[]
112
112
 
113
- if (config.mode == 'segment' || config.mode == 'sentence') {
113
+ if (config.mode === 'segment' || config.mode === 'sentence') {
114
114
  cues = getCuesFromTimeline_IsolateSegmentSentence(timeline, config)
115
- } else if (config.mode == 'word' || config.mode == 'phone' || config.mode == 'word+phone') {
115
+ } else if (config.mode === 'word' || config.mode === 'phone' || config.mode === 'word+phone') {
116
116
  cues = getCuesFromTimeline_IsolateWordPhone(timeline, config)
117
- } else if (config.mode == 'line') {
117
+ } else if (config.mode === 'line') {
118
118
  cues = getCuesFromTimeline_IsolateLines(timeline, config)
119
119
  } else {
120
120
  throw new Error('Invalid subtitles mode.')
@@ -213,7 +213,7 @@ function getCuesFromTimeline_IsolateSegmentSentence(timeline: Timeline, config:
213
213
  for (const wordEntry of wordTimeline) {
214
214
  const wordStartOffset = entryText.indexOf(wordEntry.text, lastWordEndOffset)
215
215
 
216
- if (wordStartOffset == -1) {
216
+ if (wordStartOffset === -1) {
217
217
  throw new Error(`Couldn't find word '${wordEntry.text}' in its parent entry text`)
218
218
  }
219
219
 
@@ -235,13 +235,13 @@ function getCuesFromTimeline_IsolateSegmentSentence(timeline: Timeline, config:
235
235
  let lineStartOffset = 0
236
236
 
237
237
  for (let wordIndex = 0; wordIndex < wordTimeline.length; wordIndex++) {
238
- const isLastWord = wordIndex == wordTimeline.length - 1
238
+ const isLastWord = wordIndex === wordTimeline.length - 1
239
239
 
240
240
  const wordEntry = wordTimeline[wordIndex]
241
241
  const wordEndOffset = wordEntry.endOffsetUtf16!
242
242
 
243
243
  function getExtendedEndOffset(offset: number | undefined) {
244
- if (offset == undefined) {
244
+ if (offset === undefined) {
245
245
  return entryText.length
246
246
  }
247
247
 
@@ -300,14 +300,14 @@ function getCuesFromTimeline_IsolateSegmentSentence(timeline: Timeline, config:
300
300
  currentCue.lines.push(lineText)
301
301
 
302
302
  // Update cue start and end times
303
- if (currentCue.startTime == -1) {
303
+ if (currentCue.startTime === -1) {
304
304
  currentCue.startTime = lineStartTime
305
305
  }
306
306
 
307
307
  currentCue.endTime = lineEndTime
308
308
 
309
309
  // Finalize cue if needed
310
- if (isLastWord || currentCue.lines.length == config.maxLineCount) {
310
+ if (isLastWord || currentCue.lines.length === config.maxLineCount) {
311
311
  cues.push(currentCue)
312
312
 
313
313
  currentCue = {
@@ -329,7 +329,7 @@ function getCuesFromTimeline_IsolateSegmentSentence(timeline: Timeline, config:
329
329
 
330
330
  // Generates cues from timeline. Isolates words or phones in individual cues.
331
331
  function getCuesFromTimeline_IsolateWordPhone(timeline: Timeline, config: SubtitlesConfig) {
332
- if (timeline.length == 0) {
332
+ if (timeline.length === 0) {
333
333
  return []
334
334
  }
335
335
 
@@ -338,12 +338,12 @@ function getCuesFromTimeline_IsolateWordPhone(timeline: Timeline, config: Subtit
338
338
  const cues: Cue[] = []
339
339
 
340
340
  for (const entry of timeline) {
341
- const entryIsWord = entry.type == 'word'
342
- const entryIsPhone = entry.type == 'phone'
341
+ const entryIsWord = entry.type === 'word'
342
+ const entryIsPhone = entry.type === 'phone'
343
343
 
344
344
  const shouldIncludeEntry =
345
- (entryIsWord && (mode == 'word' || mode == 'word+phone')) ||
346
- (entryIsPhone && (mode == 'phone' || mode == 'word+phone'))
345
+ (entryIsWord && (mode === 'word' || mode === 'word+phone')) ||
346
+ (entryIsPhone && (mode === 'phone' || mode === 'word+phone'))
347
347
 
348
348
  if (shouldIncludeEntry) {
349
349
  cues.push({
@@ -363,7 +363,7 @@ function getCuesFromTimeline_IsolateWordPhone(timeline: Timeline, config: Subtit
363
363
 
364
364
  // Generates cues from timeline. Isolates lines in individual cues.
365
365
  function getCuesFromTimeline_IsolateLines(timeline: Timeline, config: SubtitlesConfig) {
366
- if (timeline.length == 0) {
366
+ if (timeline.length === 0) {
367
367
  return []
368
368
  }
369
369
 
@@ -390,7 +390,7 @@ function getCuesFromTimeline_IsolateLines(timeline: Timeline, config: SubtitlesC
390
390
  let currentCueWords: Timeline = []
391
391
 
392
392
  function addCueFromCurrentWords() {
393
- if (currentCueWords.length == 0) {
393
+ if (currentCueWords.length === 0) {
394
394
  return
395
395
  }
396
396
 
@@ -411,7 +411,7 @@ function getCuesFromTimeline_IsolateLines(timeline: Timeline, config: SubtitlesC
411
411
 
412
412
  function addCuesFrom(timeline: Timeline) {
413
413
  for (const entry of timeline) {
414
- if (entry.type == 'word') {
414
+ if (entry.type === 'word') {
415
415
  const currentWordLineNumber = charOffsetToLineNumber[entry.startOffsetUtf16!]
416
416
  const previousWordEntry = currentCueWords[currentCueWords.length - 1]
417
417
 
@@ -481,7 +481,7 @@ export function tryParseTimeRangePatternWithoutHours(line: string) {
481
481
  }
482
482
 
483
483
  function cueObjectToText(cue: Cue, cueIndex: number, config: SubtitlesConfig) {
484
- if (!cue || !cue.lines || cue.lines.length == 0) {
484
+ if (!cue || !cue.lines || cue.lines.length === 0) {
485
485
  throw new Error(`Cue is empty`)
486
486
  }
487
487
 
@@ -496,7 +496,7 @@ function cueObjectToText(cue: Cue, cueIndex: number, config: SubtitlesConfig) {
496
496
  let formattedStartTime: string
497
497
  let formattedEndTime: string
498
498
 
499
- if (config.includeHours == true) {
499
+ if (config.includeHours === true) {
500
500
  formattedStartTime = formatHMS(secondsToHMS(cue.startTime), config.decimalSeparator)
501
501
  formattedEndTime = formatHMS(secondsToHMS(cue.endTime), config.decimalSeparator)
502
502
  } else {
@@ -4,9 +4,11 @@ import * as FFMpegTranscoder from '../codecs/FFMpegTranscoder.js'
4
4
  import { Logger } from '../utilities/Logger.js'
5
5
 
6
6
  import { readBinaryIncomingMessage } from '../utilities/Utilities.js'
7
+ import { SynthesisCallbacks, VoiceListRequestCallbacks } from '../api/API.js'
8
+
9
+ export async function synthesize(text: string, language: string | undefined, voice: string, region: string, accessKeyId: string, secretAccessKey: string, engine: 'standard' | 'neural' = 'standard', ssmlEnabled = false, lexiconNames: string[] | undefined, callbacks: SynthesisCallbacks) {
10
+ const logger = new Logger(callbacks.logLevel)
7
11
 
8
- export async function synthesize(text: string, language: string | undefined, voice: string, region: string, accessKeyId: string, secretAccessKey: string, engine: 'standard' | 'neural' = 'standard', ssmlEnabled = false, lexiconNames?: string[]) {
9
- const logger = new Logger()
10
12
  logger.start('Load AWS SDK client module')
11
13
 
12
14
  const polly = await import('@aws-sdk/client-polly')
@@ -45,13 +47,18 @@ export async function synthesize(text: string, language: string | undefined, voi
45
47
 
46
48
  logger.end()
47
49
 
48
- const rawAudio = await FFMpegTranscoder.decodeToChannels(audioData as any)
50
+ const rawAudio = await FFMpegTranscoder.decodeToChannels(
51
+ audioData as any,
52
+ undefined,
53
+ undefined,
54
+ { abortSignal: callbacks.abortSignal, logLevel: 'warning' }
55
+ )
49
56
 
50
57
  return { rawAudio }
51
58
  }
52
59
 
53
- export async function getVoiceList(region: string, accessKeyId: string, secretAccessKey: string) {
54
- const logger = new Logger()
60
+ export async function getVoiceList(region: string, accessKeyId: string, secretAccessKey: string, callbacks: VoiceListRequestCallbacks) {
61
+ const logger = new Logger(callbacks.logLevel)
55
62
  logger.start('Load AWS SDK client module')
56
63
 
57
64
  const polly = await import('@aws-sdk/client-polly')
@@ -7,6 +7,7 @@ import { Timeline } from '../utilities/Timeline.js'
7
7
  import { RawAudio, getRawAudioDuration } from '../audio/AudioUtilities.js'
8
8
  import { concatUint8Arrays } from '../utilities/Utilities.js'
9
9
  import { escapeHtml } from '../encodings/HtmlEscape.js'
10
+ import { SynthesisCallbacks } from '../api/Synthesis.js'
10
11
 
11
12
  export async function synthesize(
12
13
  text: string,
@@ -16,10 +17,12 @@ export async function synthesize(
16
17
  voice = 'Microsoft Server Speech Text to Speech Voice (en-US, AvaNeural)',
17
18
  ssmlEnabled = false,
18
19
  ssmlPitchString = '+0Hz',
19
- ssmlRateString = '+0%') {
20
+ ssmlRateString = '+0%',
21
+ callbacks: SynthesisCallbacks) {
20
22
 
21
23
  return new Promise<{ rawAudio: RawAudio, timeline: Timeline }>((resolve, reject) => {
22
- const logger = new Logger()
24
+ const logger = new Logger(callbacks.logLevel)
25
+
23
26
  logger.start('Request synthesis from Azure Cognitive Services')
24
27
 
25
28
  const speechConfig = SpeechSDK.SpeechConfig.fromSubscription(subscriptionKey, serviceRegion)
@@ -71,7 +74,12 @@ export async function synthesize(
71
74
 
72
75
  logger.end()
73
76
 
74
- const rawAudio = await FFMpegTranscoder.decodeToChannels(encodedAudio, 24000, 1)
77
+ const rawAudio = await FFMpegTranscoder.decodeToChannels(
78
+ encodedAudio,
79
+ 24000,
80
+ 1,
81
+ { abortSignal: callbacks.abortSignal, logLevel: 'warning' }
82
+ )
75
83
 
76
84
  logger.start('Convert boundary events to a timeline')
77
85
 
@@ -1,14 +1,14 @@
1
- import { request } from 'gaxios'
1
+ import { SynthesisCallbacks } from '../api/API.js'
2
2
  import { decodeWaveToRawAudio } from '../audio/AudioUtilities.js'
3
+ import { requestHttp } from 'easier-http-request'
3
4
  import { Logger } from '../utilities/Logger.js'
4
5
  import { logToStderr } from '../utilities/Utilities.js'
5
- const log = logToStderr
6
6
 
7
- export async function synthesize(text: string, speakerId: string | null, serverURL = 'http://[::1]:5002') {
8
- const logger = new Logger()
7
+ export async function synthesize(text: string, speakerId: string | null, serverURL = 'http://[::1]:5002', callbacks: SynthesisCallbacks) {
8
+ const logger = new Logger(callbacks.logLevel)
9
9
  logger.start('Request synthesis from Coqui Server')
10
10
 
11
- const response = await request<Uint8Array>({
11
+ const response = await requestHttp({
12
12
  url: `${serverURL}/api/tts`,
13
13
 
14
14
  params: {
@@ -16,10 +16,11 @@ export async function synthesize(text: string, speakerId: string | null, serverU
16
16
  'speaker_id': speakerId
17
17
  },
18
18
 
19
- responseType: 'arraybuffer'
19
+ abortSignal: callbacks?.abortSignal
20
20
  })
21
21
 
22
- const waveData = new Uint8Array(response.data)
22
+ const responseBody = await response.arrayBuffer()
23
+ const waveData = new Uint8Array(responseBody)
23
24
 
24
25
  const { rawAudio } = decodeWaveToRawAudio(waveData)
25
26
 
@@ -1,22 +1,23 @@
1
- import { GaxiosResponse, request } from 'gaxios'
2
- import { SynthesisVoice } from '../api/API.js'
1
+ import { SynthesisCallbacks, SynthesisVoice } from '../api/API.js'
3
2
  import * as FFMpegTranscoder from '../codecs/FFMpegTranscoder.js'
4
3
  import { Logger } from '../utilities/Logger.js'
5
4
  import { logToStderr } from '../utilities/Utilities.js'
6
5
  import { extendDeep } from '../utilities/ObjectUtilities.js'
6
+ import { EasierHttpRequestError, requestHttp } from 'easier-http-request'
7
7
 
8
8
  const log = logToStderr
9
9
 
10
- export async function synthesize(text: string, modelId: string, options: DeepgramTTSOptions) {
11
- const logger = new Logger()
10
+ export async function synthesize(text: string, modelId: string, options: DeepgramTTSOptions, callbacks: SynthesisCallbacks) {
11
+ const logger = new Logger(callbacks.logLevel)
12
+
12
13
  logger.start('Request synthesis from Deepgram')
13
14
 
14
15
  options = extendDeep(defaultDeepgramTTSOptions, options)
15
16
 
16
- let response: GaxiosResponse<any>
17
+ let responseBody: ArrayBuffer
17
18
 
18
19
  try {
19
- response = await request<any>({
20
+ const response = await requestHttp({
20
21
  url: `https://api.deepgram.com/v1/speak`,
21
22
 
22
23
  params: {
@@ -32,21 +33,21 @@ export async function synthesize(text: string, modelId: string, options: Deepgra
32
33
  'Authorization': `Token ${options.apiKey}`,
33
34
  },
34
35
 
35
- data: {
36
+ body: {
36
37
  text,
37
38
  },
38
39
 
39
- responseType: 'arraybuffer'
40
+ abortSignal: callbacks?.abortSignal,
40
41
  })
41
- } catch (e: any) {
42
- const response = e.response
43
42
 
44
- if (response) {
45
- logger.log(`Request failed with status code ${response.status}`)
43
+ responseBody = await response.arrayBuffer()
44
+ } catch (e: any) {
45
+ if (e instanceof EasierHttpRequestError) {
46
+ logger.log(`Request failed with status code ${e.statusCode}: ${e.statusText}.`)
46
47
 
47
- if (response.data) {
48
+ if (e.errorBody) {
48
49
  logger.log(`Server responded with:`)
49
- logger.log(response.data)
50
+ logger.log(e.errorBody)
50
51
  }
51
52
  }
52
53
 
@@ -54,7 +55,12 @@ export async function synthesize(text: string, modelId: string, options: Deepgra
54
55
  }
55
56
 
56
57
  logger.start('Decode synthesized audio')
57
- const rawAudio = await FFMpegTranscoder.decodeToChannels(new Uint8Array(response.data))
58
+ const rawAudio = await FFMpegTranscoder.decodeToChannels(
59
+ new Uint8Array(responseBody),
60
+ undefined,
61
+ undefined,
62
+ { abortSignal: callbacks.abortSignal, logLevel: 'warning' }
63
+ )
58
64
 
59
65
  logger.end()
60
66
 
@@ -1,5 +1,4 @@
1
- import { GaxiosResponse, request } from 'gaxios'
2
- import { SynthesisVoice, VoiceGender } from '../api/API.js'
1
+ import { VoiceListRequestCallbacks, SynthesisCallbacks, SynthesisVoice, VoiceGender } from '../api/API.js'
3
2
  import * as FFMpegTranscoder from '../codecs/FFMpegTranscoder.js'
4
3
  import { Logger } from '../utilities/Logger.js'
5
4
  import { logToStderr } from '../utilities/Utilities.js'
@@ -7,19 +6,21 @@ import { extendDeep } from '../utilities/ObjectUtilities.js'
7
6
  import { decodeBase64 } from '../encodings/Base64.js'
8
7
  import { splitToWords } from '../nlp/Segmentation.js'
9
8
  import { Timeline } from '../utilities/Timeline.js'
9
+ import { EasierHttpRequestError, requestHttp } from 'easier-http-request'
10
10
 
11
11
  const log = logToStderr
12
12
 
13
- export async function synthesize(text: string, voiceId: string, language: string, options: ElevenLabsTTSOptions) {
14
- const logger = new Logger()
13
+ export async function synthesize(text: string, voiceId: string, language: string, options: ElevenLabsTTSOptions, callbacks: SynthesisCallbacks) {
14
+ const logger = new Logger(callbacks.logLevel)
15
+
15
16
  logger.start('Request synthesis from ElevenLabs')
16
17
 
17
18
  options = extendDeep(defaultElevenLabsTTSOptions, options)
18
19
 
19
- let response: GaxiosResponse<any>
20
+ let responseObject: any
20
21
 
21
22
  try {
22
- response = await request<any>({
23
+ const response = await requestHttp({
23
24
  url: `https://api.elevenlabs.io/v1/text-to-speech/${voiceId}/with-timestamps`,
24
25
 
25
26
  method: 'POST',
@@ -33,7 +34,7 @@ export async function synthesize(text: string, voiceId: string, language: string
33
34
  output_format: 'mp3_44100_64',
34
35
  },
35
36
 
36
- data: {
37
+ body: {
37
38
  text,
38
39
 
39
40
  model_id: options.modelId,
@@ -48,17 +49,17 @@ export async function synthesize(text: string, voiceId: string, language: string
48
49
  seed: options.seed
49
50
  },
50
51
 
51
- responseType: 'json'
52
+ abortSignal: callbacks?.abortSignal,
52
53
  })
53
- } catch (e: any) {
54
- const response = e.response
55
54
 
56
- if (response) {
57
- logger.log(`Request failed with status code ${response.status}`)
55
+ responseObject = await response.json()
56
+ } catch (e: any) {
57
+ if (e instanceof EasierHttpRequestError) {
58
+ logger.log(`Request failed with status code ${e.statusCode}: ${e.statusText}.`)
58
59
 
59
- if (response.data) {
60
+ if (e.errorBody) {
60
61
  logger.log(`Server responded with:`)
61
- logger.log(response.data)
62
+ logger.log(e.errorBody)
62
63
  }
63
64
  }
64
65
 
@@ -66,14 +67,21 @@ export async function synthesize(text: string, voiceId: string, language: string
66
67
  }
67
68
 
68
69
  logger.start('Decode synthesized audio')
69
- const audioData = decodeBase64(response.data.audio_base64)
70
- const rawAudio = await FFMpegTranscoder.decodeToChannels(audioData)
70
+
71
+ const audioData = decodeBase64(responseObject.audio_base64)
72
+
73
+ const rawAudio = await FFMpegTranscoder.decodeToChannels(
74
+ audioData,
75
+ undefined,
76
+ undefined,
77
+ { abortSignal: callbacks.abortSignal, logLevel: 'warning' }
78
+ )
71
79
 
72
80
  let timeline: Timeline | undefined
73
81
 
74
- const characters: string[] = response.data.alignment?.characters
75
- const characterStartTimes: number[] = response.data.alignment?.character_start_times_seconds
76
- const characterEndTimes: number[] = response.data.alignment?.character_end_times_seconds
82
+ const characters: string[] = responseObject.alignment?.characters
83
+ const characterStartTimes: number[] = responseObject.alignment?.character_start_times_seconds
84
+ const characterEndTimes: number[] = responseObject.alignment?.character_end_times_seconds
77
85
 
78
86
  if (characters && characterStartTimes && characterEndTimes) {
79
87
  logger.start('Create timeline from returned character timings')
@@ -106,8 +114,8 @@ export async function synthesize(text: string, voiceId: string, language: string
106
114
  return { rawAudio, timeline }
107
115
  }
108
116
 
109
- export async function getVoiceList(apiKey: string) {
110
- const response = await request<any>({
117
+ export async function getVoiceList(apiKey: string, callbacks: VoiceListRequestCallbacks) {
118
+ const response = await requestHttp({
111
119
  method: 'GET',
112
120
 
113
121
  url: 'https://api.elevenlabs.io/v1/voices',
@@ -117,10 +125,12 @@ export async function getVoiceList(apiKey: string) {
117
125
  'xi-api-key': apiKey
118
126
  },
119
127
 
120
- responseType: 'json'
128
+ abortSignal: callbacks?.abortSignal
121
129
  })
122
130
 
123
- const elevenLabsVoices: any[] = response.data.voices
131
+ const responseObject = await response.json()
132
+
133
+ const elevenLabsVoices: any[] = responseObject.voices
124
134
 
125
135
  const voices: SynthesisVoice[] = elevenLabsVoices.map(elevenLabsVoice => {
126
136
  const gender: VoiceGender = elevenLabsVoice?.labels?.gender ?? 'unknown'