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,34 +1,33 @@
1
- import { extendDeep } from '../utilities/ObjectUtilities.js'
1
+ import chalk from 'chalk'
2
2
 
3
- import { logToStderr } from '../utilities/Utilities.js'
3
+ import * as API from './API.js'
4
+
5
+ import { extendDeep } from '../utilities/ObjectUtilities.js'
4
6
  import { AudioSourceParam, RawAudio, cropToTimeline, ensureRawAudio, } from '../audio/AudioUtilities.js'
5
7
  import { Logger } from '../utilities/Logger.js'
6
8
 
7
9
  import { Timeline } from '../utilities/Timeline.js'
8
10
  import { loadPackage } from '../utilities/PackageManager.js'
9
11
  import { EngineMetadata } from './Common.js'
10
- import chalk from 'chalk'
11
12
  import { type AdaptiveGateVADOptions } from '../voice-activity-detection/AdaptiveGateVAD.js'
12
- import { type WhisperVADOptions } from '../recognition/WhisperSTT.js'
13
13
  import { OnnxExecutionProvider } from '../utilities/OnnxUtilities.js'
14
14
  import { joinPath } from '../utilities/PathUtilities.js'
15
15
 
16
- const log = logToStderr
16
+ export async function detectVoiceActivity(input: AudioSourceParam, options: VoiceActivityDetectionOptions, callbacks?: VoiceActivityDetectionCallbacks): Promise<VoiceActivityDetectionResult> {
17
+ options = extendDeep(defaultVoiceActivityDetectionOptions, options)
18
+ callbacks = { logLevel: API.getGlobalLogLevel(), ...callbacks }
17
19
 
18
- export async function detectVoiceActivity(input: AudioSourceParam, options: VADOptions): Promise<VADResult> {
19
- const logger = new Logger()
20
+ const logger = new Logger(callbacks.logLevel)
20
21
 
21
22
  const startTimestamp = logger.getTimestamp()
22
23
 
23
- const inputRawAudio = await ensureRawAudio(input)
24
+ const inputRawAudio = await ensureRawAudio(input, undefined, undefined, callbacks)
24
25
 
25
26
  logger.start(`Resample audio to 16kHz mono`)
26
- let sourceRawAudio = await ensureRawAudio(inputRawAudio, 16000, 1)
27
+ let sourceRawAudio = await ensureRawAudio(inputRawAudio, 16000, 1, callbacks)
27
28
 
28
29
  logger.start(`Detect voice activity with ${options.engine}`)
29
30
 
30
- options = extendDeep(defaultVADOptions, options)
31
-
32
31
  const activityThreshold = options.activityThreshold!
33
32
 
34
33
  let verboseTimeline: Timeline
@@ -52,7 +51,7 @@ export async function detectVoiceActivity(input: AudioSourceParam, options: VADO
52
51
 
53
52
  const sileroOptions = options.silero!
54
53
 
55
- const modelDir = await loadPackage('silero-vad')
54
+ const modelDir = await loadPackage('silero-vad', callbacks)
56
55
 
57
56
  const modelPath = joinPath(modelDir, 'silero-vad.onnx')
58
57
  const frameDuration = sileroOptions.frameDuration!
@@ -75,11 +74,11 @@ export async function detectVoiceActivity(input: AudioSourceParam, options: VADO
75
74
  case 'rnnoise': {
76
75
  const RNNoise = await import('../denoising/RNNoise.js')
77
76
 
78
- const audio48k = await ensureRawAudio(sourceRawAudio, 48000, 1)
77
+ const audio48k = await ensureRawAudio(sourceRawAudio, 48000, 1, callbacks)
79
78
 
80
79
  const rnnoiseOptions = options.rnnoise!
81
80
 
82
- const { denoisedRawAudio, frameVadProbabilities } = await RNNoise.denoiseAudio(audio48k)
81
+ const { denoisedRawAudio, frameVadProbabilities } = await RNNoise.denoiseAudio(audio48k, callbacks)
83
82
 
84
83
  const frameDurationSeconds = 0.01
85
84
  const frameProbabilities = frameVadProbabilities
@@ -89,52 +88,16 @@ export async function detectVoiceActivity(input: AudioSourceParam, options: VADO
89
88
  break
90
89
  }
91
90
 
92
- case 'whisper': {
93
- const WhisperSTT = await import('../recognition/WhisperSTT.js')
94
-
95
- const whisperVADOptions = options.whisper!
96
-
97
- logger.end()
98
-
99
- const { modelName, modelDir } = await WhisperSTT.loadPackagesAndGetPaths(whisperVADOptions.model, 'de')
100
-
101
- logger.end();
102
-
103
- const { partProbabilities } = await WhisperSTT.detectVoiceActivity(
104
- sourceRawAudio,
105
- modelName,
106
- modelDir,
107
- whisperVADOptions,
108
- )
109
-
110
- verboseTimeline = []
111
-
112
- for (const entry of partProbabilities) {
113
- const hasSpeech = entry.confidence! >= activityThreshold
114
-
115
- const text = hasSpeech ? 'active' : 'inactive'
116
-
117
- if (verboseTimeline.length === 0 || verboseTimeline[verboseTimeline.length - 1].text != text) {
118
- verboseTimeline.push({
119
- type: 'segment',
120
- text,
121
- startTime: entry.startTime,
122
- endTime: entry.endTime
123
- })
124
- } else {
125
- verboseTimeline[verboseTimeline.length - 1].endTime = entry.endTime
126
- }
127
- }
128
-
129
- break
130
- }
131
-
132
91
  case 'adaptive-gate': {
133
92
  const AdaptiveGateVAD = await import('../voice-activity-detection/AdaptiveGateVAD.js')
134
93
 
135
94
  const adaptiveGateOptions = options.adaptiveGate!
136
95
 
137
- verboseTimeline = await AdaptiveGateVAD.detectVoiceActivity(sourceRawAudio, adaptiveGateOptions)
96
+ verboseTimeline = await AdaptiveGateVAD.detectVoiceActivity(
97
+ sourceRawAudio,
98
+ adaptiveGateOptions,
99
+ callbacks
100
+ )
138
101
 
139
102
  break
140
103
  }
@@ -150,7 +113,7 @@ export async function detectVoiceActivity(input: AudioSourceParam, options: VADO
150
113
 
151
114
  logger.end()
152
115
  logger.log('')
153
- logger.logDuration(`Total voice activity detection time`, startTimestamp, chalk.magentaBright)
116
+ logger.logDuration(`Total voice activity detection time`, startTimestamp, 'info', chalk.magentaBright)
154
117
 
155
118
  return {
156
119
  timeline,
@@ -280,7 +243,7 @@ interface UncropTimelineMapResult {
280
243
  mappedEndTime: number
281
244
  }
282
245
 
283
- export interface VADResult {
246
+ export interface VoiceActivityDetectionResult {
284
247
  timeline: Timeline
285
248
  verboseTimeline: Timeline
286
249
 
@@ -288,10 +251,10 @@ export interface VADResult {
288
251
  croppedRawAudio: RawAudio
289
252
  }
290
253
 
291
- export type VADEngine = 'webrtc' | 'silero' | 'rnnoise' | 'whisper' | 'adaptive-gate'
254
+ export type VoiceActivityDetectionEngine = 'webrtc' | 'silero' | 'rnnoise' | 'whisper' | 'adaptive-gate'
292
255
 
293
- export interface VADOptions {
294
- engine?: VADEngine
256
+ export interface VoiceActivityDetectionOptions extends API.OperationOptions {
257
+ engine?: VoiceActivityDetectionEngine
295
258
 
296
259
  activityThreshold?: number
297
260
 
@@ -308,12 +271,10 @@ export interface VADOptions {
308
271
  rnnoise?: {
309
272
  }
310
273
 
311
- whisper?: WhisperVADOptions
312
-
313
274
  adaptiveGate?: AdaptiveGateVADOptions
314
275
  }
315
276
 
316
- export const defaultVADOptions: VADOptions = {
277
+ export const defaultVoiceActivityDetectionOptions: VoiceActivityDetectionOptions = {
317
278
  engine: 'silero',
318
279
 
319
280
  activityThreshold: 0.5,
@@ -331,15 +292,13 @@ export const defaultVADOptions: VADOptions = {
331
292
  rnnoise: {
332
293
  },
333
294
 
334
- whisper: {
335
- model: 'tiny',
336
- temperature: 1.0,
337
- },
338
-
339
295
  adaptiveGate: {
340
296
  }
341
297
  }
342
298
 
299
+ export interface VoiceActivityDetectionCallbacks extends API.OperationCallbacks {
300
+ }
301
+
343
302
  export const vadEngines: EngineMetadata[] = [
344
303
  {
345
304
  id: 'webrtc',
@@ -358,5 +317,11 @@ export const vadEngines: EngineMetadata[] = [
358
317
  name: 'RNNoise',
359
318
  description: `Uses RNNoise's internal speech probabilities as VAD metrics.`,
360
319
  type: 'local'
320
+ },
321
+ {
322
+ id: 'adaptive-gate',
323
+ name: 'Adaptive Gate',
324
+ description: `Band-limited adaptive gate.`,
325
+ type: 'local'
361
326
  }
362
327
  ]
@@ -1,36 +1,15 @@
1
1
  import { parentPort } from 'node:worker_threads'
2
2
 
3
- import { ChildProcessWithoutNullStreams, spawn } from 'child_process'
3
+ import { RawAudio, getRawAudioDuration, sliceAudioChannels } from './AudioUtilities.js'
4
4
 
5
- import { RawAudio, encodeRawAudioToWave, fadeAudioInOut, getRawAudioDuration, sliceAudioChannels } from './AudioUtilities.js'
6
- import * as FFMpegTranscoder from '../codecs/FFMpegTranscoder.js'
7
-
8
- import { Timer } from '../utilities/Timer.js'
9
- import { clip, getRandomHexString, waitTimeout, writeToStderr } from '../utilities/Utilities.js'
10
- import { encodeToAudioBuffer, float32ToInt16Pcm, interleaveChannels } from './AudioBufferConversion.js'
5
+ import { clip, writeToStderr } from '../utilities/Utilities.js'
6
+ import { float32ToInt16Pcm, interleaveChannels } from './AudioBufferConversion.js'
11
7
  import { OpenPromise } from '../utilities/OpenPromise.js'
12
8
  import { Timeline, addWordTextOffsetsToTimelineInPlace } from '../utilities/Timeline.js'
13
- import { readAndParseJsonFile, readFileAsUtf8, remove, writeFile } from '../utilities/FileSystem.js'
14
- import { tryResolvingSoxPath } from './SoxPath.js'
15
9
  import { SignalChannel } from '../utilities/SignalChannel.js'
16
10
  import { deepClone } from '../utilities/ObjectUtilities.js'
17
- import { appName } from '../api/Common.js'
18
- import { getAppTempDir, joinPath } from '../utilities/PathUtilities.js'
19
11
  import { type AudioOutput } from '@echogarden/audio-io'
20
12
 
21
- export async function playAudioFileWithTimelineFile(audioFilename: string, timelineFileName: string, transcriptFileName?: string, player?: AudioPlayerID) {
22
- const rawAudio = await FFMpegTranscoder.decodeToChannels(audioFilename, 48000, 1)
23
-
24
- const timeline = await readAndParseJsonFile(timelineFileName)
25
-
26
- let transcript: string | undefined
27
- if (transcriptFileName) {
28
- transcript = await readFileAsUtf8(transcriptFileName)
29
- }
30
-
31
- await playAudioWithWordTimeline(rawAudio, timeline, transcript, player)
32
- }
33
-
34
13
  export async function playAudioWithWordTimeline(rawAudio: RawAudio, wordTimeline: Timeline, transcript?: string, player?: AudioPlayerID) {
35
14
  if (!transcript) {
36
15
  transcript = wordTimeline.map(entry => entry.text).join(' ')
@@ -163,8 +142,6 @@ export function playAudioSamples(rawAudio: RawAudio, onTimePosition?: (timePosit
163
142
 
164
143
  if (player === 'audio-io') {
165
144
  return playAudioSamples_AudioIO(rawAudio, onTimePosition, signalChannel)
166
- } else if (player === 'sox') {
167
- return playAudioSamples_Sox(rawAudio, onTimePosition, signalChannel)
168
145
  } else {
169
146
  throw new Error(`Unsupported audio player ID: ${player}`)
170
147
  }
@@ -252,211 +229,6 @@ export async function playAudioSamples_AudioIO(rawAudio: RawAudio, onTimePositio
252
229
  return openPromise.promise
253
230
  }
254
231
 
255
- export function playAudioSamples_Sox(rawAudio: RawAudio, onTimePosition?: (timePosition: number) => void, signalChannel?: SignalChannel, microFadeInOut = true) {
256
- return new Promise<void>(async (resolve, reject) => {
257
- if (microFadeInOut) {
258
- rawAudio = fadeAudioInOut(rawAudio, 0.0025)
259
- }
260
-
261
- let playerProcessClosed = false
262
-
263
- const channelCount = rawAudio.audioChannels.length
264
- const audioDuration = getRawAudioDuration(rawAudio)
265
-
266
- const playerSpawnedOpenPromise = new OpenPromise<null>()
267
-
268
- const soxPath = await tryResolvingSoxPath()
269
-
270
- if (!soxPath) {
271
- throw new Error(`Couldn't find or install the SoX utility. Please install the SoX utility on your system path to enable audio playback.`)
272
- }
273
-
274
- let aborted = false
275
-
276
- let streamToStdin = true
277
-
278
- if (process.platform == 'darwin') {
279
- streamToStdin = false
280
- }
281
-
282
- let tempFilePath: string | undefined
283
- let audioBuffer: Uint8Array | undefined
284
-
285
- async function cleanup() {
286
- if (tempFilePath) {
287
- await remove(tempFilePath)
288
- }
289
- }
290
-
291
- let playerProcess: ChildProcessWithoutNullStreams
292
-
293
- if (streamToStdin) {
294
- audioBuffer = encodeToAudioBuffer(rawAudio.audioChannels)
295
-
296
- playerProcess = spawn(
297
- soxPath,
298
- ['-t', 'raw', '-r', `${rawAudio.sampleRate}`, '-e', 'signed', '-b', '16', '-c', channelCount.toString(), '-', '-d'],
299
- {}
300
- )
301
- } else {
302
- tempFilePath = joinPath(getAppTempDir(appName), `${getRandomHexString(16)}.wav`)
303
- const waveFileBuffer = encodeRawAudioToWave(rawAudio)
304
- await writeFile(tempFilePath, waveFileBuffer)
305
-
306
- playerProcess = spawn(
307
- soxPath,
308
- [tempFilePath, '-d'],
309
- {}
310
- )
311
- }
312
-
313
- if (signalChannel) {
314
- signalChannel.on('abort', () => {
315
- aborted = true
316
- playerProcess.kill('SIGKILL')
317
- })
318
- }
319
-
320
- // Required to work around SoX bug:
321
- playerProcess.stderr.on('data', (data) => {
322
- //writeToStderr(data.toString('utf-8'))
323
- })
324
-
325
- playerProcess.stdout.on('data', (data) => {
326
- //writeToStderr(data.toString('utf-8'))
327
- })
328
-
329
- playerProcess.once('spawn', () => {
330
- if (audioBuffer != undefined) {
331
- playerProcess.stdin!.write(audioBuffer)
332
- playerProcess.stdin!.end()
333
- playerProcess.stdin!.on('error', () => { })
334
- }
335
-
336
- playerSpawnedOpenPromise.resolve(null)
337
- })
338
-
339
- playerProcess.once('error', async (e) => {
340
- await cleanup()
341
- playerProcessClosed = true
342
-
343
- reject(e)
344
- })
345
-
346
- playerProcess.once('close', async () => {
347
- await cleanup()
348
- playerProcessClosed = true
349
-
350
- resolve()
351
- })
352
-
353
- await playerSpawnedOpenPromise.promise
354
-
355
- const timer = new Timer()
356
-
357
- while (!playerProcessClosed && !aborted) {
358
- const elapsedTime = timer.elapsedTimeSeconds
359
-
360
- if (onTimePosition) {
361
- onTimePosition(elapsedTime)
362
- }
363
-
364
- if (playerProcessClosed || elapsedTime >= audioDuration) {
365
- if (onTimePosition) {
366
- onTimePosition(audioDuration)
367
- }
368
-
369
- return
370
- }
371
-
372
- await waitTimeout(20)
373
- }
374
- })
375
- }
376
-
377
- /*
378
- export function playAudioSamples_Speaker(rawAudio: RawAudio, onTimePosition?: (timePosition: number) => void, microFadeInOut = true) {
379
- return new Promise<void>(async (resolve, reject) => {
380
- if (microFadeInOut) {
381
- rawAudio = fadeAudioInOut(rawAudio, 0.0025)
382
- }
383
-
384
- const channelCount = rawAudio.audioChannels.length
385
- let audioData = encodeToAudioBuffer(rawAudio.audioChannels)
386
-
387
- const { default: Speaker } = await import('speaker')
388
-
389
- const speaker = new Speaker({
390
- channels: rawAudio.audioChannels.length,
391
- bitDepth: 16,
392
- sampleRate: rawAudio.sampleRate,
393
- })
394
-
395
- speaker.on('error', (e: any) => {
396
- reject(e)
397
- })
398
-
399
- const bytesPerSecond = rawAudio.sampleRate * 2 * channelCount
400
-
401
- const byteCountToDuration = (byteCount: number) => {
402
- return byteCount / bytesPerSecond
403
- }
404
-
405
- const audioDuration = byteCountToDuration(audioData.length)
406
-
407
- let mpg123AudioBufferSize: number
408
- let mpg123AudioBufferDuration: number
409
-
410
- if (process.platform == 'win32') {
411
- mpg123AudioBufferSize = 65536
412
- mpg123AudioBufferDuration = byteCountToDuration(mpg123AudioBufferSize)
413
- } else {
414
- mpg123AudioBufferDuration = 0.5
415
- mpg123AudioBufferSize = bytesPerSecond * mpg123AudioBufferDuration
416
- }
417
-
418
- audioData = concatUint8Arrays([audioData, new Uint8Array(mpg123AudioBufferSize)])
419
-
420
- const maxChunkSize = mpg123AudioBufferSize
421
-
422
- const writeAheadDuration = 0.5
423
-
424
- const timer = new Timer()
425
- let readOffset = 0
426
- let targetTimePosition = 0
427
-
428
- while (true) {
429
- const elapsedTime = timer.elapsedTimeSeconds
430
-
431
- if (onTimePosition) {
432
- onTimePosition(elapsedTime)
433
- }
434
-
435
- if (readOffset < audioData.length) {
436
- const targetWriteTime = targetTimePosition - writeAheadDuration
437
-
438
- if (elapsedTime >= targetWriteTime) {
439
- const chunk = audioData.subarray(readOffset, readOffset + maxChunkSize)
440
-
441
- speaker.write(chunk)
442
-
443
- readOffset += chunk.length
444
- targetTimePosition += byteCountToDuration(chunk.length)
445
- }
446
- }
447
-
448
- if (elapsedTime >= audioDuration) {
449
- //speaker.close(false)
450
- resolve()
451
- return
452
- }
453
-
454
- await waitTimeout(20)
455
- }
456
- })
457
- }
458
- */
459
-
460
232
  export const charactersToWriteAhead = [
461
233
  ',', '.', ',', '、', ':', ';',
462
234
  '。', ':', ';', '?', '?', '!', '!',
@@ -464,4 +236,4 @@ export const charactersToWriteAhead = [
464
236
  '-', '—', '»', '،', '؟'
465
237
  ]
466
238
 
467
- export type AudioPlayerID = 'audio-io' | 'sox'
239
+ export type AudioPlayerID = 'audio-io'
@@ -1,8 +1,10 @@
1
1
  import * as FFMpegTranscoder from '../codecs/FFMpegTranscoder.js'
2
+
2
3
  import { SampleFormat, BitDepth, encodeWaveFromFloat32Channels, decodeWaveToFloat32Channels } from '@echogarden/wave-codec'
3
4
  import { resampleAudioSpeex } from '../dsp/SpeexResampler.js'
4
5
  import { Timeline } from '../utilities/Timeline.js'
5
6
  import { concatFloat32Arrays } from '../utilities/Utilities.js'
7
+ import { OperationCallbacks } from '../api/Common.js'
6
8
 
7
9
  ////////////////////////////////////////////////////////////////////////////////////////////////
8
10
  // Wave encoding and decoding
@@ -400,7 +402,7 @@ export function getRawAudioDuration(rawAudio: RawAudio) {
400
402
  return rawAudio.audioChannels[0].length / rawAudio.sampleRate
401
403
  }
402
404
 
403
- export async function ensureRawAudio(input: AudioSourceParam, outSampleRate?: number, outChannelCount?: number) {
405
+ export async function ensureRawAudio(input: AudioSourceParam, outSampleRate: number | undefined, outChannelCount: number | undefined, callbacks: OperationCallbacks) {
404
406
  let inputAsRawAudio: RawAudio = input as RawAudio
405
407
 
406
408
  if (isRawAudio(input)) {
@@ -421,7 +423,12 @@ export async function ensureRawAudio(input: AudioSourceParam, outSampleRate?: nu
421
423
  } else if (typeof input == 'string' || input instanceof Uint8Array) {
422
424
  const inputAsStringOrUint8Array = input as string | Uint8Array
423
425
 
424
- inputAsRawAudio = await FFMpegTranscoder.decodeToChannels(inputAsStringOrUint8Array, outSampleRate, outChannelCount)
426
+ inputAsRawAudio = await FFMpegTranscoder.decodeToChannels(
427
+ inputAsStringOrUint8Array,
428
+ outSampleRate,
429
+ outChannelCount,
430
+ callbacks,
431
+ )
425
432
  } else {
426
433
  throw new Error('Received an invalid input audio data type.')
427
434
  }
@@ -1,10 +1,11 @@
1
+ import { OperationCallbacks } from '../api/Common.js'
1
2
  import { existsSync, readdir } from '../utilities/FileSystem.js'
2
3
  import { ensureAndGetPackagesDir } from '../utilities/PackageManager.js'
3
4
  import { joinPath } from '../utilities/PathUtilities.js'
4
5
  import { createNamedTarball } from '../utilities/TarballMaker.js'
5
6
  import { setupProgramTerminationListeners } from '../utilities/Utilities.js'
6
7
 
7
- async function makeTarballsForInstalledPackages(tarballDir: string, skipIfExists = false) {
8
+ async function makeTarballsForInstalledPackages(tarballDir: string, skipIfExists = false, callbacks: OperationCallbacks) {
8
9
  const packagesDir = await ensureAndGetPackagesDir()
9
10
  const packageList = await readdir(packagesDir)
10
11
 
@@ -14,12 +15,12 @@ async function makeTarballsForInstalledPackages(tarballDir: string, skipIfExists
14
15
  }
15
16
 
16
17
  const packagePath = joinPath(packagesDir, packageName)
17
- await createNamedTarball(packagePath, packageName, tarballDir)
18
+ await createNamedTarball(packagePath, packageName, tarballDir, callbacks)
18
19
  }
19
20
  }
20
21
 
21
22
  setupProgramTerminationListeners()
22
23
 
23
- await makeTarballsForInstalledPackages('../resources/tarballs', true)
24
+ await makeTarballsForInstalledPackages('../resources/tarballs', true, { logLevel: 'info' })
24
25
 
25
26
  process.exit(0)