echogarden 0.12.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/README.md +15 -14
  2. package/data/schemas/options.json +398 -111
  3. package/dist/alignment/DTWMfccSequenceAlignment.d.ts +1 -1
  4. package/dist/alignment/DTWMfccSequenceAlignment.js +8 -8
  5. package/dist/alignment/DTWSequenceAlignment.d.ts +1 -1
  6. package/dist/alignment/DTWSequenceAlignment.js +1 -1
  7. package/dist/alignment/DTWSequenceAlignmentWindowed.d.ts +1 -1
  8. package/dist/alignment/DTWSequenceAlignmentWindowed.js +2 -2
  9. package/dist/alignment/LevenshteinSequenceAlignment.d.ts +1 -1
  10. package/dist/alignment/LevenshteinSequenceAlignment.js +1 -1
  11. package/dist/alignment/SpeechAlignment.d.ts +9 -10
  12. package/dist/alignment/SpeechAlignment.js +136 -105
  13. package/dist/alignment/SpeechAlignment.js.map +1 -1
  14. package/dist/api/API.d.ts +13 -12
  15. package/dist/api/API.js +14 -13
  16. package/dist/api/API.js.map +1 -1
  17. package/dist/api/APIOptions.d.ts +5 -4
  18. package/dist/api/Alignment.d.ts +15 -9
  19. package/dist/api/Alignment.js +88 -74
  20. package/dist/api/Alignment.js.map +1 -1
  21. package/dist/api/Common.js +1 -1
  22. package/dist/api/Denoising.d.ts +6 -6
  23. package/dist/api/Denoising.js +23 -23
  24. package/dist/api/Denoising.js.map +1 -1
  25. package/dist/api/LanguageDetection.d.ts +19 -12
  26. package/dist/api/LanguageDetection.js +88 -38
  27. package/dist/api/LanguageDetection.js.map +1 -1
  28. package/dist/api/Recognition.d.ts +16 -6
  29. package/dist/api/Recognition.js +129 -55
  30. package/dist/api/Recognition.js.map +1 -1
  31. package/dist/api/SourceSeparation.d.ts +17 -0
  32. package/dist/api/SourceSeparation.js +61 -0
  33. package/dist/api/SourceSeparation.js.map +1 -0
  34. package/dist/api/Synthesis.d.ts +18 -18
  35. package/dist/api/Synthesis.js +191 -164
  36. package/dist/api/Synthesis.js.map +1 -1
  37. package/dist/api/Translation.d.ts +19 -8
  38. package/dist/api/Translation.js +132 -35
  39. package/dist/api/Translation.js.map +1 -1
  40. package/dist/api/Vad.d.ts +10 -5
  41. package/dist/api/Vad.js +76 -38
  42. package/dist/api/Vad.js.map +1 -1
  43. package/dist/audio/AudioBufferConversion.d.ts +1 -1
  44. package/dist/audio/AudioBufferConversion.js +4 -4
  45. package/dist/audio/AudioPlayer.d.ts +1 -1
  46. package/dist/audio/AudioPlayer.js +26 -26
  47. package/dist/audio/AudioPlayer.js.map +1 -1
  48. package/dist/audio/AudioRecorder.d.ts +1 -1
  49. package/dist/audio/AudioRecorder.js +5 -5
  50. package/dist/audio/AudioUtilities.d.ts +13 -9
  51. package/dist/audio/AudioUtilities.js +86 -24
  52. package/dist/audio/AudioUtilities.js.map +1 -1
  53. package/dist/cli/CLI.d.ts +3 -3
  54. package/dist/cli/CLI.js +271 -162
  55. package/dist/cli/CLI.js.map +1 -1
  56. package/dist/cli/CLIConfigFile.js +8 -8
  57. package/dist/cli/CLILauncher.js +6 -6
  58. package/dist/cli/CLIOptionsSchema.js +2 -2
  59. package/dist/cli/CLIParser.js +5 -5
  60. package/dist/cli/CLIStarter.js +4 -4
  61. package/dist/codecs/FFMpegTranscoder.d.ts +2 -2
  62. package/dist/codecs/FFMpegTranscoder.js +37 -37
  63. package/dist/codecs/FFMpegTranscoder.js.map +1 -1
  64. package/dist/codecs/TIMITCodec.js +5 -5
  65. package/dist/codecs/WaveCodec.d.ts +1 -1
  66. package/dist/codecs/WaveCodec.js +22 -22
  67. package/dist/denoising/RNNoise.d.ts +1 -1
  68. package/dist/denoising/RNNoise.js +9 -9
  69. package/dist/dsp/BiquadFilter.d.ts +3 -2
  70. package/dist/dsp/BiquadFilter.js +18 -11
  71. package/dist/dsp/BiquadFilter.js.map +1 -1
  72. package/dist/dsp/DecayingPeakEstimator.d.ts +16 -0
  73. package/dist/dsp/DecayingPeakEstimator.js +23 -0
  74. package/dist/dsp/DecayingPeakEstimator.js.map +1 -0
  75. package/dist/dsp/FFT.d.ts +8 -4
  76. package/dist/dsp/FFT.js +76 -30
  77. package/dist/dsp/FFT.js.map +1 -1
  78. package/dist/dsp/KWeightingFilter.d.ts +9 -0
  79. package/dist/dsp/KWeightingFilter.js +40 -0
  80. package/dist/dsp/KWeightingFilter.js.map +1 -0
  81. package/dist/dsp/LoudnessEstimator.d.ts +21 -0
  82. package/dist/dsp/LoudnessEstimator.js +47 -0
  83. package/dist/dsp/LoudnessEstimator.js.map +1 -0
  84. package/dist/dsp/MFCC.d.ts +2 -2
  85. package/dist/dsp/MFCC.js +15 -15
  86. package/dist/dsp/MelSpectogram.d.ts +1 -1
  87. package/dist/dsp/MelSpectogram.js +6 -6
  88. package/dist/dsp/Rubberband.d.ts +11 -11
  89. package/dist/dsp/Rubberband.js +27 -27
  90. package/dist/dsp/Sonic.d.ts +1 -1
  91. package/dist/dsp/Sonic.js +3 -3
  92. package/dist/dsp/SpeexResampler.d.ts +1 -1
  93. package/dist/dsp/SpeexResampler.js +2 -2
  94. package/dist/math/VectorMath.d.ts +12 -8
  95. package/dist/math/VectorMath.js +35 -32
  96. package/dist/math/VectorMath.js.map +1 -1
  97. package/dist/nlp/ChineseSegmentation.js +2 -2
  98. package/dist/nlp/CompromiseNLP.js +3 -3
  99. package/dist/nlp/EspeakPhonemizer.js +30 -30
  100. package/dist/nlp/IPA.js +20 -20
  101. package/dist/nlp/JapaneseSegmentation.js +6 -6
  102. package/dist/nlp/Lexicon.d.ts +1 -1
  103. package/dist/nlp/Lexicon.js +7 -7
  104. package/dist/nlp/Segmentation.d.ts +3 -0
  105. package/dist/nlp/Segmentation.js +21 -14
  106. package/dist/nlp/Segmentation.js.map +1 -1
  107. package/dist/nlp/TextNormalizer.js +16 -16
  108. package/dist/recognition/AmazonTranscribeSTT.d.ts +2 -2
  109. package/dist/recognition/AmazonTranscribeSTT.js +13 -14
  110. package/dist/recognition/AmazonTranscribeSTT.js.map +1 -1
  111. package/dist/recognition/AzureCognitiveServicesSTT.js +5 -6
  112. package/dist/recognition/AzureCognitiveServicesSTT.js.map +1 -1
  113. package/dist/recognition/GoogleCloudSTT.d.ts +3 -3
  114. package/dist/recognition/GoogleCloudSTT.js +18 -18
  115. package/dist/recognition/OpenAICloudSTT.d.ts +19 -0
  116. package/dist/recognition/OpenAICloudSTT.js +81 -0
  117. package/dist/recognition/OpenAICloudSTT.js.map +1 -0
  118. package/dist/recognition/SileroSTT.d.ts +2 -2
  119. package/dist/recognition/SileroSTT.js +25 -25
  120. package/dist/recognition/VoskSTT.d.ts +2 -2
  121. package/dist/recognition/VoskSTT.js +8 -8
  122. package/dist/recognition/WhisperCppSTT.d.ts +88 -0
  123. package/dist/recognition/WhisperCppSTT.js +332 -0
  124. package/dist/recognition/WhisperCppSTT.js.map +1 -0
  125. package/dist/recognition/WhisperSTT.d.ts +49 -25
  126. package/dist/recognition/WhisperSTT.js +626 -481
  127. package/dist/recognition/WhisperSTT.js.map +1 -1
  128. package/dist/server/Client.d.ts +1 -1
  129. package/dist/server/Client.js +22 -22
  130. package/dist/server/Server.js +9 -9
  131. package/dist/server/Server.js.map +1 -1
  132. package/dist/server/Worker.d.ts +22 -22
  133. package/dist/server/Worker.js +36 -36
  134. package/dist/server/Worker.js.map +1 -1
  135. package/dist/server/WorkerStarter.js +2 -2
  136. package/dist/source-separation/MDXNetSourceSeparation.d.ts +11 -0
  137. package/dist/source-separation/MDXNetSourceSeparation.js +161 -0
  138. package/dist/source-separation/MDXNetSourceSeparation.js.map +1 -0
  139. package/dist/speech-language-detection/SileroLanguageDetection.d.ts +1 -1
  140. package/dist/speech-language-detection/SileroLanguageDetection.js +7 -7
  141. package/dist/subtitles/Subtitles.d.ts +10 -0
  142. package/dist/subtitles/Subtitles.js +2 -2
  143. package/dist/subtitles/Subtitles.js.map +1 -1
  144. package/dist/synthesis/AwsPollyTTS.d.ts +1 -1
  145. package/dist/synthesis/AwsPollyTTS.js +12 -12
  146. package/dist/synthesis/AzureCognitiveServicesTTS.js +7 -7
  147. package/dist/synthesis/CoquiServerTTS.js +10 -10
  148. package/dist/synthesis/CoquiServerTTS.js.map +1 -1
  149. package/dist/synthesis/ElevenlabsTTS.d.ts +23 -0
  150. package/dist/synthesis/ElevenlabsTTS.js +103 -0
  151. package/dist/synthesis/ElevenlabsTTS.js.map +1 -0
  152. package/dist/synthesis/EspeakTTS.d.ts +6 -5
  153. package/dist/synthesis/EspeakTTS.js +81 -69
  154. package/dist/synthesis/EspeakTTS.js.map +1 -1
  155. package/dist/synthesis/FliteTTS.d.ts +3 -3
  156. package/dist/synthesis/FliteTTS.js +154 -154
  157. package/dist/synthesis/FliteTTS.js.map +1 -1
  158. package/dist/synthesis/GoogleCloudTTS.d.ts +3 -3
  159. package/dist/synthesis/GoogleCloudTTS.js +17 -17
  160. package/dist/synthesis/GoogleCloudTTS.js.map +1 -1
  161. package/dist/synthesis/GoogleTranslateTTS.d.ts +1 -1
  162. package/dist/synthesis/GoogleTranslateTTS.js +103 -103
  163. package/dist/synthesis/MicrosoftEdgeTTS.d.ts +2 -2
  164. package/dist/synthesis/MicrosoftEdgeTTS.js +74 -74
  165. package/dist/synthesis/OpenAICloudTTS.d.ts +13 -0
  166. package/dist/synthesis/OpenAICloudTTS.js +169 -0
  167. package/dist/synthesis/OpenAICloudTTS.js.map +1 -0
  168. package/dist/synthesis/SamTTS.js +3 -3
  169. package/dist/synthesis/SapiTTS.d.ts +3 -3
  170. package/dist/synthesis/SapiTTS.js +26 -26
  171. package/dist/synthesis/StreamlabsPollyTTS.d.ts +2 -2
  172. package/dist/synthesis/StreamlabsPollyTTS.js +27 -27
  173. package/dist/synthesis/SvoxPicoTTS.d.ts +2 -2
  174. package/dist/synthesis/SvoxPicoTTS.js +65 -65
  175. package/dist/synthesis/SvoxPicoTTS.js.map +1 -1
  176. package/dist/synthesis/VitsTTS.d.ts +3 -3
  177. package/dist/synthesis/VitsTTS.js +378 -378
  178. package/dist/synthesis/VitsTTS.js.map +1 -1
  179. package/dist/tests/Test.js +2 -2
  180. package/dist/utilities/Compression.d.ts +5 -0
  181. package/dist/utilities/Compression.js +29 -13
  182. package/dist/utilities/Compression.js.map +1 -1
  183. package/dist/utilities/FileDownloader.d.ts +1 -1
  184. package/dist/utilities/FileDownloader.js +16 -16
  185. package/dist/utilities/FileSystem.js +7 -7
  186. package/dist/utilities/Locale.d.ts +7 -7
  187. package/dist/utilities/Locale.js +15 -15
  188. package/dist/utilities/Logger.js +3 -3
  189. package/dist/utilities/ObjectUtilities.js +19 -19
  190. package/dist/utilities/OpenPromise.js +2 -2
  191. package/dist/utilities/OpenPromise.js.map +1 -1
  192. package/dist/utilities/PackageManager.js +31 -0
  193. package/dist/utilities/PackageManager.js.map +1 -1
  194. package/dist/utilities/PathUtilities.js +8 -8
  195. package/dist/utilities/RandomGenerator.js +2 -2
  196. package/dist/utilities/SmoothEstimator.d.ts +8 -0
  197. package/dist/utilities/SmoothEstimator.js +25 -0
  198. package/dist/utilities/SmoothEstimator.js.map +1 -0
  199. package/dist/utilities/TarballMaker.js +8 -8
  200. package/dist/utilities/Timeline.d.ts +3 -2
  201. package/dist/utilities/Timeline.js +11 -11
  202. package/dist/utilities/Timeline.js.map +1 -1
  203. package/dist/utilities/Timer.js +4 -4
  204. package/dist/utilities/Utilities.d.ts +4 -0
  205. package/dist/utilities/Utilities.js +38 -15
  206. package/dist/utilities/Utilities.js.map +1 -1
  207. package/dist/utilities/WasmMemoryManager.js +7 -7
  208. package/dist/utilities/WebReader.js +23 -23
  209. package/dist/utilities/WikipediaReader.js +2 -2
  210. package/dist/voice-activity-detection/AdaptiveGateVAD.d.ts +28 -0
  211. package/dist/voice-activity-detection/AdaptiveGateVAD.js +138 -0
  212. package/dist/voice-activity-detection/AdaptiveGateVAD.js.map +1 -0
  213. package/dist/voice-activity-detection/SileroVAD.d.ts +1 -1
  214. package/dist/voice-activity-detection/SileroVAD.js +5 -5
  215. package/dist/voice-activity-detection/SileroVAD.js.map +1 -1
  216. package/dist/voice-activity-detection/WebRtcVAD.d.ts +1 -1
  217. package/dist/voice-activity-detection/WebRtcVAD.js +4 -4
  218. package/docs/API.md +29 -11
  219. package/docs/CLI.md +31 -7
  220. package/docs/Contributing.md +38 -0
  221. package/docs/Development.md +93 -19
  222. package/docs/Engines.md +28 -16
  223. package/docs/Licenses.md +4 -1
  224. package/docs/Options.md +158 -78
  225. package/docs/Releases.md +262 -0
  226. package/docs/Server.md +7 -7
  227. package/docs/Tasklist.md +95 -76
  228. package/docs/Technical.md +4 -4
  229. package/package.json +13 -14
  230. package/src/alignment/DTWMfccSequenceAlignment.ts +9 -9
  231. package/src/alignment/DTWSequenceAlignment.ts +2 -2
  232. package/src/alignment/DTWSequenceAlignmentWindowed.ts +3 -3
  233. package/src/alignment/LevenshteinSequenceAlignment.ts +2 -2
  234. package/src/alignment/SpeechAlignment.ts +204 -119
  235. package/src/api/API.ts +14 -13
  236. package/src/api/APIOptions.ts +12 -11
  237. package/src/api/Alignment.ts +147 -90
  238. package/src/api/Common.ts +1 -1
  239. package/src/api/Denoising.ts +28 -28
  240. package/src/api/LanguageDetection.ts +135 -48
  241. package/src/api/Recognition.ts +198 -59
  242. package/src/api/SourceSeparation.ts +99 -0
  243. package/src/api/Synthesis.ts +217 -181
  244. package/src/api/Translation.ts +193 -40
  245. package/src/api/Vad.ts +110 -41
  246. package/src/audio/AudioBufferConversion.ts +4 -4
  247. package/src/audio/AudioPlayer.ts +27 -27
  248. package/src/audio/AudioRecorder.ts +5 -5
  249. package/src/audio/AudioUtilities.ts +107 -24
  250. package/src/cli/CLI.ts +313 -164
  251. package/src/cli/CLIConfigFile.ts +8 -8
  252. package/src/cli/CLILauncher.ts +6 -6
  253. package/src/cli/CLIOptionsSchema.ts +2 -2
  254. package/src/cli/CLIParser.ts +5 -5
  255. package/src/cli/CLIStarter.ts +4 -4
  256. package/src/codecs/FFMpegTranscoder.ts +38 -38
  257. package/src/codecs/TIMITCodec.ts +5 -5
  258. package/src/codecs/WaveCodec.ts +22 -22
  259. package/src/denoising/RNNoise.ts +9 -9
  260. package/src/dsp/BiquadFilter.ts +19 -11
  261. package/src/dsp/DecayingPeakEstimator.ts +35 -0
  262. package/src/dsp/FFT.ts +103 -35
  263. package/src/dsp/KWeightingFilter.ts +43 -0
  264. package/src/dsp/LoudnessEstimator.ts +74 -0
  265. package/src/dsp/MFCC.ts +15 -15
  266. package/src/dsp/MelSpectogram.ts +7 -7
  267. package/src/dsp/Rubberband.ts +38 -38
  268. package/src/dsp/Sonic.ts +4 -4
  269. package/src/dsp/SpeexResampler.ts +2 -2
  270. package/src/math/VectorMath.ts +42 -33
  271. package/src/nlp/ChineseSegmentation.ts +3 -3
  272. package/src/nlp/CompromiseNLP.ts +3 -3
  273. package/src/nlp/EspeakPhonemizer.ts +30 -30
  274. package/src/nlp/IPA.ts +20 -20
  275. package/src/nlp/JapaneseSegmentation.ts +6 -6
  276. package/src/nlp/Lexicon.ts +8 -8
  277. package/src/nlp/Segmentation.ts +23 -14
  278. package/src/nlp/TextNormalizer.ts +16 -16
  279. package/src/recognition/AmazonTranscribeSTT.ts +16 -17
  280. package/src/recognition/AzureCognitiveServicesSTT.ts +8 -6
  281. package/src/recognition/GoogleCloudSTT.ts +21 -21
  282. package/src/recognition/OpenAICloudSTT.ts +142 -0
  283. package/src/recognition/SileroSTT.ts +26 -26
  284. package/src/recognition/VoskSTT.ts +10 -10
  285. package/src/recognition/WhisperCppSTT.ts +555 -0
  286. package/src/recognition/WhisperSTT.ts +760 -507
  287. package/src/server/Client.ts +23 -23
  288. package/src/server/Server.ts +9 -9
  289. package/src/server/Worker.ts +53 -53
  290. package/src/server/WorkerStarter.ts +2 -2
  291. package/src/source-separation/MDXNetSourceSeparation.ts +228 -0
  292. package/src/speech-language-detection/SileroLanguageDetection.ts +8 -8
  293. package/src/subtitles/Subtitles.ts +3 -3
  294. package/src/synthesis/AwsPollyTTS.ts +14 -14
  295. package/src/synthesis/AzureCognitiveServicesTTS.ts +10 -10
  296. package/src/synthesis/CoquiServerTTS.ts +10 -10
  297. package/src/synthesis/ElevenlabsTTS.ts +137 -0
  298. package/src/synthesis/EspeakTTS.ts +90 -71
  299. package/src/synthesis/FliteTTS.ts +157 -157
  300. package/src/synthesis/GoogleCloudTTS.ts +19 -19
  301. package/src/synthesis/GoogleTranslateTTS.ts +104 -104
  302. package/src/synthesis/MicrosoftEdgeTTS.ts +80 -80
  303. package/src/synthesis/OpenAICloudTTS.ts +196 -0
  304. package/src/synthesis/SamTTS.ts +3 -3
  305. package/src/synthesis/SapiTTS.ts +29 -29
  306. package/src/synthesis/StreamlabsPollyTTS.ts +29 -29
  307. package/src/synthesis/SvoxPicoTTS.ts +67 -67
  308. package/src/synthesis/VitsTTS.ts +380 -380
  309. package/src/tests/Test.ts +4 -4
  310. package/src/utilities/Compression.ts +34 -13
  311. package/src/utilities/FileDownloader.ts +19 -19
  312. package/src/utilities/FileSystem.ts +7 -7
  313. package/src/utilities/Locale.ts +22 -22
  314. package/src/utilities/Logger.ts +4 -4
  315. package/src/utilities/ObjectUtilities.ts +19 -19
  316. package/src/utilities/OpenPromise.ts +2 -2
  317. package/src/utilities/PackageManager.ts +40 -0
  318. package/src/utilities/PathUtilities.ts +8 -8
  319. package/src/utilities/RandomGenerator.ts +3 -3
  320. package/src/utilities/SmoothEstimator.ts +35 -0
  321. package/src/utilities/TarballMaker.ts +9 -9
  322. package/src/utilities/Timeline.ts +15 -13
  323. package/src/utilities/Timer.ts +4 -4
  324. package/src/utilities/Utilities.ts +49 -15
  325. package/src/utilities/WasmMemoryManager.ts +7 -7
  326. package/src/utilities/WebReader.ts +23 -23
  327. package/src/utilities/WikipediaReader.ts +2 -2
  328. package/src/voice-activity-detection/AdaptiveGateVAD.ts +202 -0
  329. package/src/voice-activity-detection/SileroVAD.ts +5 -5
  330. package/src/voice-activity-detection/WebRtcVAD.ts +5 -5
  331. package/dist/synthesis/ElevenLabsTTS.d.ts +0 -8
  332. package/dist/synthesis/ElevenLabsTTS.js +0 -82
  333. package/dist/synthesis/ElevenLabsTTS.js.map +0 -1
  334. package/src/synthesis/ElevenLabsTTS.ts +0 -104
@@ -1,34 +1,34 @@
1
- import { SynthesisVoice } from "../api/API.js"
2
- import { decodeWaveBuffer } from "../audio/AudioUtilities.js"
3
- import { Logger } from "../utilities/Logger.js"
4
- import { getRandomHexString, logToStderr, resolveModuleMainPath } from "../utilities/Utilities.js"
5
- import { readFile, open, close, remove, ensureDir } from "../utilities/FileSystem.js"
6
- import path from "node:path"
1
+ import { SynthesisVoice } from '../api/API.js'
2
+ import { decodeWaveToRawAudio } from '../audio/AudioUtilities.js'
3
+ import { Logger } from '../utilities/Logger.js'
4
+ import { getRandomHexString, logToStderr, resolveModuleMainPath } from '../utilities/Utilities.js'
5
+ import { readFile, open, close, remove, ensureDir } from '../utilities/FileSystem.js'
6
+ import path from 'node:path'
7
7
  import { escape } from 'html-escaper'
8
- import { getAppTempDir } from "../utilities/PathUtilities.js"
8
+ import { getAppTempDir } from '../utilities/PathUtilities.js'
9
9
 
10
10
  const log = logToStderr
11
11
 
12
- export type FliteVoiceName = "kal" | "kal16" | "awb" | "rms" | "slt" | string
12
+ export type FliteVoiceName = 'kal' | 'kal16' | 'awb' | 'rms' | 'slt' | string
13
13
 
14
14
  let fliteModuleObject: WebAssembly.Module
15
15
 
16
16
  export async function synthesize(text: string, voice: FliteVoiceName, voiceDir: string | undefined, rate: number, pitchMeanHz?: number, pitchStdDev?: number) {
17
17
  const logger = new Logger()
18
- logger.start("Get Flite WASI instance")
18
+ logger.start('Get Flite WASI instance')
19
19
 
20
20
  const randomId = getRandomHexString(16)
21
21
 
22
22
  const outFileName = `${randomId}.out.wav`
23
23
  const stdOutFileName = `${randomId}.stdout`
24
24
 
25
- const tempDir = getAppTempDir("flite")
25
+ const tempDir = getAppTempDir('flite')
26
26
  await ensureDir(tempDir)
27
27
 
28
28
  const tempAudioFilePath = path.join(tempDir, outFileName)
29
29
  const tempStdOutFilePath = path.join(tempDir, stdOutFileName)
30
30
 
31
- const stdOutFileFd = await open(tempStdOutFilePath, "w+")
31
+ const stdOutFileFd = await open(tempStdOutFilePath, 'w+')
32
32
 
33
33
  if (voiceDir) {
34
34
  voice = `voices/${voice}.flitevox`
@@ -85,7 +85,7 @@ export async function synthesize(text: string, voice: FliteVoiceName, voiceDir:
85
85
  const moduleObject = await getModuleObject()
86
86
  const instance = await WebAssembly.instantiate(moduleObject, importObject)
87
87
 
88
- logger.start("Synthesize with flite")
88
+ logger.start('Synthesize with flite')
89
89
  const exitCode: number = wasi.start(instance) as any
90
90
 
91
91
  await close(stdOutFileFd)
@@ -101,13 +101,13 @@ export async function synthesize(text: string, voice: FliteVoiceName, voiceDir:
101
101
  }
102
102
 
103
103
  const waveData = await readFile(tempAudioFilePath)
104
- const stdOutString = await readFile(tempStdOutFilePath, "utf8")
104
+ const stdOutString = await readFile(tempStdOutFilePath, 'utf8')
105
105
 
106
106
  await cleanup()
107
107
 
108
108
  const events = parseEventsFromTrace(stdOutString)
109
109
 
110
- const { rawAudio } = decodeWaveBuffer(waveData)
110
+ const { rawAudio } = decodeWaveToRawAudio(waveData)
111
111
 
112
112
  logger.end()
113
113
 
@@ -127,7 +127,7 @@ async function getModuleObject() {
127
127
  function parseEventsFromTrace(eventTrace: string) {
128
128
  //log(eventTrace)
129
129
 
130
- const eventStrings = eventTrace.trim().split(" ")
130
+ const eventStrings = eventTrace.trim().split(' ')
131
131
  const eventCount = eventStrings.length
132
132
 
133
133
  const events: FliteEvent[] = []
@@ -135,21 +135,21 @@ function parseEventsFromTrace(eventTrace: string) {
135
135
 
136
136
  for (let i = 0; i < eventCount; i++) {
137
137
  const eventString = eventStrings[i]
138
- const splitPoint = eventString.lastIndexOf(":")
138
+ const splitPoint = eventString.lastIndexOf(':')
139
139
 
140
140
  const id = eventString.substring(0, splitPoint)
141
141
  const startTime = events.length > 0 ? events[events.length - 1].endTime : 0
142
142
 
143
143
  let eventType: FliteEventType
144
144
 
145
- if (id == "pau") {
146
- eventType = "pause"
147
- } else if (id == "\npau") {
148
- eventType = "phrasePause"
145
+ if (id == 'pau') {
146
+ eventType = 'pause'
147
+ } else if (id == '\npau') {
148
+ eventType = 'phrasePause'
149
149
 
150
150
  phraseStartOffset = startTime
151
151
  } else {
152
- eventType = "phone"
152
+ eventType = 'phone'
153
153
  }
154
154
 
155
155
  const endTime = phraseStartOffset + parseFloat(eventString.substring(splitPoint + 1))
@@ -165,7 +165,7 @@ function parseEventsFromTrace(eventTrace: string) {
165
165
  return events
166
166
  }
167
167
 
168
- export type FliteEventType = "phone" | "pause" | "phrasePause"
168
+ export type FliteEventType = 'phone' | 'pause' | 'phrasePause'
169
169
 
170
170
  export type FliteEvent = {
171
171
  type: FliteEventType,
@@ -177,214 +177,214 @@ export type FliteEvent = {
177
177
  export const voiceList: SynthesisVoice[] = [
178
178
  // Built-in voices
179
179
  {
180
- name: "slt",
181
- languages: ["en-US", "en"],
182
- gender: "female"
180
+ name: 'slt',
181
+ languages: ['en-US', 'en'],
182
+ gender: 'female'
183
183
  },
184
184
  {
185
- name: "kal16",
186
- languages: ["en-US", "en"],
187
- gender: "male"
185
+ name: 'kal16',
186
+ languages: ['en-US', 'en'],
187
+ gender: 'male'
188
188
  },
189
189
  {
190
- name: "rms",
191
- languages: ["en-US", "en"],
192
- gender: "male"
190
+ name: 'rms',
191
+ languages: ['en-US', 'en'],
192
+ gender: 'male'
193
193
  },
194
194
  {
195
- name: "awb",
196
- languages: ["en-GB-SCOTLAND", "en-GB", "en"],
197
- gender: "male"
195
+ name: 'awb',
196
+ languages: ['en-GB-SCOTLAND', 'en-GB', 'en'],
197
+ gender: 'male'
198
198
  },
199
199
  {
200
- name: "kal",
201
- languages: ["en-US", "en"],
202
- gender: "male"
200
+ name: 'kal',
201
+ languages: ['en-US', 'en'],
202
+ gender: 'male'
203
203
  },
204
204
 
205
205
 
206
206
  // Voices loaded from packages
207
207
  // US English voices
208
208
  {
209
- name: "cmu_us_aew",
210
- languages: ["en-US", "en"],
211
- gender: "male",
212
- packageName: "flite-cmu_us_aew"
209
+ name: 'cmu_us_aew',
210
+ languages: ['en-US', 'en'],
211
+ gender: 'male',
212
+ packageName: 'flite-cmu_us_aew'
213
213
  },
214
214
  {
215
- name: "cmu_us_ahw",
216
- languages: ["en-US", "en"],
217
- gender: "male",
218
- packageName: "flite-cmu_us_ahw"
215
+ name: 'cmu_us_ahw',
216
+ languages: ['en-US', 'en'],
217
+ gender: 'male',
218
+ packageName: 'flite-cmu_us_ahw'
219
219
  },
220
220
  {
221
- name: "cmu_us_aup",
222
- languages: ["en-US", "en"],
223
- gender: "male",
224
- packageName: "flite-cmu_us_aup"
221
+ name: 'cmu_us_aup',
222
+ languages: ['en-US', 'en'],
223
+ gender: 'male',
224
+ packageName: 'flite-cmu_us_aup'
225
225
  },
226
226
  {
227
- name: "cmu_us_awb",
228
- languages: ["en-US", "en"],
229
- gender: "male",
230
- packageName: "flite-cmu_us_awb"
227
+ name: 'cmu_us_awb',
228
+ languages: ['en-US', 'en'],
229
+ gender: 'male',
230
+ packageName: 'flite-cmu_us_awb'
231
231
  },
232
232
  {
233
- name: "cmu_us_axb",
234
- languages: ["en-US", "en"],
235
- gender: "female",
236
- packageName: "flite-cmu_us_axb"
233
+ name: 'cmu_us_axb',
234
+ languages: ['en-US', 'en'],
235
+ gender: 'female',
236
+ packageName: 'flite-cmu_us_axb'
237
237
  },
238
238
  {
239
- name: "cmu_us_bdl",
240
- languages: ["en-US", "en"],
241
- gender: "male",
242
- packageName: "flite-cmu_us_bdl"
239
+ name: 'cmu_us_bdl',
240
+ languages: ['en-US', 'en'],
241
+ gender: 'male',
242
+ packageName: 'flite-cmu_us_bdl'
243
243
  },
244
244
  {
245
- name: "cmu_us_clb",
246
- languages: ["en-US", "en"],
247
- gender: "female",
248
- packageName: "flite-cmu_us_clb"
245
+ name: 'cmu_us_clb',
246
+ languages: ['en-US', 'en'],
247
+ gender: 'female',
248
+ packageName: 'flite-cmu_us_clb'
249
249
  },
250
250
  {
251
- name: "cmu_us_eey",
252
- languages: ["en-US", "en"],
253
- gender: "female",
254
- packageName: "flite-cmu_us_eey"
251
+ name: 'cmu_us_eey',
252
+ languages: ['en-US', 'en'],
253
+ gender: 'female',
254
+ packageName: 'flite-cmu_us_eey'
255
255
  },
256
256
  {
257
- name: "cmu_us_fem",
258
- languages: ["en-US", "en"],
259
- gender: "male",
260
- packageName: "flite-cmu_us_fem"
257
+ name: 'cmu_us_fem',
258
+ languages: ['en-US', 'en'],
259
+ gender: 'male',
260
+ packageName: 'flite-cmu_us_fem'
261
261
  },
262
262
  {
263
- name: "cmu_us_gka",
264
- languages: ["en-US", "en"],
265
- gender: "male",
266
- packageName: "flite-cmu_us_gka"
263
+ name: 'cmu_us_gka',
264
+ languages: ['en-US', 'en'],
265
+ gender: 'male',
266
+ packageName: 'flite-cmu_us_gka'
267
267
  },
268
268
  {
269
- name: "cmu_us_jmk",
270
- languages: ["en-US", "en"],
271
- gender: "male",
272
- packageName: "flite-cmu_us_jmk"
269
+ name: 'cmu_us_jmk',
270
+ languages: ['en-US', 'en'],
271
+ gender: 'male',
272
+ packageName: 'flite-cmu_us_jmk'
273
273
  },
274
274
  {
275
- name: "cmu_us_ksp",
276
- languages: ["en-US", "en"],
277
- gender: "male",
278
- packageName: "flite-cmu_us_ksp"
275
+ name: 'cmu_us_ksp',
276
+ languages: ['en-US', 'en'],
277
+ gender: 'male',
278
+ packageName: 'flite-cmu_us_ksp'
279
279
  },
280
280
  {
281
- name: "cmu_us_ljm",
282
- languages: ["en-US", "en"],
283
- gender: "female",
284
- packageName: "flite-cmu_us_ljm"
281
+ name: 'cmu_us_ljm',
282
+ languages: ['en-US', 'en'],
283
+ gender: 'female',
284
+ packageName: 'flite-cmu_us_ljm'
285
285
  },
286
286
  {
287
- name: "cmu_us_lnh",
288
- languages: ["en-US", "en"],
289
- gender: "female",
290
- packageName: "flite-cmu_us_lnh"
287
+ name: 'cmu_us_lnh',
288
+ languages: ['en-US', 'en'],
289
+ gender: 'female',
290
+ packageName: 'flite-cmu_us_lnh'
291
291
  },
292
292
  {
293
- name: "cmu_us_rms",
294
- languages: ["en-US", "en"],
295
- gender: "male",
296
- packageName: "flite-cmu_us_rms"
293
+ name: 'cmu_us_rms',
294
+ languages: ['en-US', 'en'],
295
+ gender: 'male',
296
+ packageName: 'flite-cmu_us_rms'
297
297
  },
298
298
  {
299
- name: "cmu_us_rxr",
300
- languages: ["en-US", "en"],
301
- gender: "male",
302
- packageName: "flite-cmu_us_rxr"
299
+ name: 'cmu_us_rxr',
300
+ languages: ['en-US', 'en'],
301
+ gender: 'male',
302
+ packageName: 'flite-cmu_us_rxr'
303
303
  },
304
304
  {
305
- name: "cmu_us_slp",
306
- languages: ["en-US", "en"],
307
- gender: "female",
308
- packageName: "flite-cmu_us_slp"
305
+ name: 'cmu_us_slp',
306
+ languages: ['en-US', 'en'],
307
+ gender: 'female',
308
+ packageName: 'flite-cmu_us_slp'
309
309
  },
310
310
  {
311
- name: "cmu_us_slt",
312
- languages: ["en-US", "en"],
313
- gender: "female",
314
- packageName: "flite-cmu_us_slt"
311
+ name: 'cmu_us_slt',
312
+ languages: ['en-US', 'en'],
313
+ gender: 'female',
314
+ packageName: 'flite-cmu_us_slt'
315
315
  },
316
316
 
317
317
  // Indic voices
318
318
  {
319
- name: "cmu_indic_ben_rm",
320
- languages: ["be", "bn"],// Bengali
321
- gender: "female",
322
- packageName: "flite-cmu_indic_ben_rm"
319
+ name: 'cmu_indic_ben_rm',
320
+ languages: ['be', 'bn'],// Bengali
321
+ gender: 'female',
322
+ packageName: 'flite-cmu_indic_ben_rm'
323
323
  },
324
324
  {
325
- name: "cmu_indic_guj_ad",
326
- languages: ["gu"],// Gujarati
327
- gender: "male",
328
- packageName: "flite-cmu_indic_guj_ad"
325
+ name: 'cmu_indic_guj_ad',
326
+ languages: ['gu'],// Gujarati
327
+ gender: 'male',
328
+ packageName: 'flite-cmu_indic_guj_ad'
329
329
  },
330
330
  {
331
- name: "cmu_indic_guj_dp",
332
- languages: ["gu"],// Gujarati
333
- gender: "female",
334
- packageName: "flite-cmu_indic_guj_dp"
331
+ name: 'cmu_indic_guj_dp',
332
+ languages: ['gu'],// Gujarati
333
+ gender: 'female',
334
+ packageName: 'flite-cmu_indic_guj_dp'
335
335
  },
336
336
  {
337
- name: "cmu_indic_guj_kt",
338
- languages: ["gu"],// Gujarati
339
- gender: "female",
340
- packageName: "flite-cmu_indic_guj_kt"
337
+ name: 'cmu_indic_guj_kt',
338
+ languages: ['gu'],// Gujarati
339
+ gender: 'female',
340
+ packageName: 'flite-cmu_indic_guj_kt'
341
341
  },
342
342
  {
343
- name: "cmu_indic_hin_ab",
344
- languages: ["hi"],// Hindi
345
- gender: "female",
346
- packageName: "flite-cmu_indic_hin_ab"
343
+ name: 'cmu_indic_hin_ab',
344
+ languages: ['hi'],// Hindi
345
+ gender: 'female',
346
+ packageName: 'flite-cmu_indic_hin_ab'
347
347
  },
348
348
  {
349
- name: "cmu_indic_kan_plv",
350
- languages: ["ka"],// Kannada
351
- gender: "female",
352
- packageName: "flite-cmu_indic_kan_plv"
349
+ name: 'cmu_indic_kan_plv',
350
+ languages: ['ka'],// Kannada
351
+ gender: 'female',
352
+ packageName: 'flite-cmu_indic_kan_plv'
353
353
  },
354
354
  {
355
- name: "cmu_indic_mar_aup",
356
- languages: ["mr"],// Marathi
357
- gender: "male",
358
- packageName: "flite-cmu_indic_mar_aup"
355
+ name: 'cmu_indic_mar_aup',
356
+ languages: ['mr'],// Marathi
357
+ gender: 'male',
358
+ packageName: 'flite-cmu_indic_mar_aup'
359
359
  },
360
360
  {
361
- name: "cmu_indic_mar_slp",
362
- languages: ["mr"],// Marathi
363
- gender: "female",
364
- packageName: "flite-cmu_indic_mar_slp"
361
+ name: 'cmu_indic_mar_slp',
362
+ languages: ['mr'],// Marathi
363
+ gender: 'female',
364
+ packageName: 'flite-cmu_indic_mar_slp'
365
365
  },
366
366
  {
367
- name: "cmu_indic_pan_amp",
368
- languages: ["pa"],// Punjabi
369
- gender: "female",
370
- packageName: "flite-cmu_indic_pan_amp"
367
+ name: 'cmu_indic_pan_amp',
368
+ languages: ['pa'],// Punjabi
369
+ gender: 'female',
370
+ packageName: 'flite-cmu_indic_pan_amp'
371
371
  },
372
372
  {
373
- name: "cmu_indic_tel_kpn",
374
- languages: ["te"],// Telugu
375
- gender: "female",
376
- packageName: "flite-cmu_indic_tel_kpn"
373
+ name: 'cmu_indic_tel_kpn',
374
+ languages: ['te'],// Telugu
375
+ gender: 'female',
376
+ packageName: 'flite-cmu_indic_tel_kpn'
377
377
  },
378
378
  {
379
- name: "cmu_indic_tel_sk",
380
- languages: ["te"],// Telugu
381
- gender: "male",
382
- packageName: "flite-cmu_indic_tel_sk"
379
+ name: 'cmu_indic_tel_sk',
380
+ languages: ['te'],// Telugu
381
+ gender: 'male',
382
+ packageName: 'flite-cmu_indic_tel_sk'
383
383
  },
384
384
  {
385
- name: "cmu_indic_tel_ss",
386
- languages: ["te"],// Telugu
387
- gender: "female",
388
- packageName: "flite-cmu_indic_tel_ss"
385
+ name: 'cmu_indic_tel_ss',
386
+ languages: ['te'],// Telugu
387
+ gender: 'female',
388
+ packageName: 'flite-cmu_indic_tel_ss'
389
389
  },
390
390
  ]
@@ -1,12 +1,12 @@
1
- import { request } from "gaxios"
2
- import { Logger } from "../utilities/Logger.js"
3
- import { logToStderr } from "../utilities/Utilities.js"
1
+ import { request } from 'gaxios'
2
+ import { Logger } from '../utilities/Logger.js'
3
+ import { logToStderr } from '../utilities/Utilities.js'
4
4
 
5
5
  const log = logToStderr
6
6
 
7
- export async function synthesize(text: string, apiKey: string, languageCode = "en-US", voice = "en-US-Wavenet-C", speakingRate = 1.0, pitchDeltaSemitones = 0.0, volumeGainDb = 0.0, ssml = false, audioEncoding: AudioEncoding = "MP3_64_KBPS", sampleRate = 24000) {
7
+ export async function synthesize(text: string, apiKey: string, languageCode = 'en-US', voice = 'en-US-Wavenet-C', speakingRate = 1.0, pitchDeltaSemitones = 0.0, volumeGainDecibels = 0.0, ssml = false, audioEncoding: AudioEncoding = 'MP3_64_KBPS', sampleRate = 24000) {
8
8
  const logger = new Logger()
9
- logger.start("Request synthesis from Google Cloud")
9
+ logger.start('Request synthesis from Google Cloud')
10
10
 
11
11
  const requestBody = {
12
12
  input: {
@@ -23,11 +23,11 @@ export async function synthesize(text: string, apiKey: string, languageCode = "e
23
23
  audioEncoding,
24
24
  speakingRate,
25
25
  pitch: pitchDeltaSemitones,
26
- volumeGainDb,
26
+ volumeGainDb: volumeGainDecibels,
27
27
  sampleRateHertz: sampleRate
28
28
  },
29
29
 
30
- enableTimePointing: ["SSML_MARK"]
30
+ enableTimePointing: ['SSML_MARK']
31
31
  }
32
32
 
33
33
  if (ssml) {
@@ -37,24 +37,24 @@ export async function synthesize(text: string, apiKey: string, languageCode = "e
37
37
  }
38
38
 
39
39
  const response = await request<any>({
40
- method: "POST",
40
+ method: 'POST',
41
41
 
42
42
  url: `https://texttospeech.googleapis.com/v1beta1/text:synthesize`,
43
43
 
44
44
  params: {
45
- "key": apiKey
45
+ 'key': apiKey
46
46
  },
47
47
 
48
48
  headers: {
49
- "User-Agent": ""
49
+ 'User-Agent': ''
50
50
  },
51
51
 
52
52
  data: requestBody,
53
53
 
54
- responseType: "json"
54
+ responseType: 'json'
55
55
  })
56
56
 
57
- logger.start("Parse result")
57
+ logger.start('Parse result')
58
58
 
59
59
  const result = parseResponseBody(response.data)
60
60
 
@@ -64,7 +64,7 @@ export async function synthesize(text: string, apiKey: string, languageCode = "e
64
64
  }
65
65
 
66
66
  function parseResponseBody(responseBody: any) {
67
- const audioData = Buffer.from(responseBody.audioContent, "base64")
67
+ const audioData = Buffer.from(responseBody.audioContent, 'base64')
68
68
  const timepoints: timePoint[] = responseBody.timepoints
69
69
 
70
70
  return { audioData, timepoints }
@@ -75,19 +75,19 @@ export async function getVoiceList(apiKey: string) {
75
75
  const requestURL = `https://texttospeech.googleapis.com/v1beta1/voices`
76
76
 
77
77
  const response = await request<any>({
78
- method: "GET",
78
+ method: 'GET',
79
79
 
80
80
  url: requestURL,
81
81
 
82
82
  params: {
83
- "key": apiKey
83
+ 'key': apiKey
84
84
  },
85
85
 
86
86
  headers: {
87
- "User-Agent": ""
87
+ 'User-Agent': ''
88
88
  },
89
89
 
90
- responseType: "json"
90
+ responseType: 'json'
91
91
  })
92
92
 
93
93
  const responseData = response.data
@@ -100,11 +100,11 @@ export async function getVoiceList(apiKey: string) {
100
100
  export type GoogleCloudVoice = {
101
101
  name: string
102
102
  languageCodes: string[]
103
- ssmlGender: "MALE" | "FEMALE"
103
+ ssmlGender: 'MALE' | 'FEMALE'
104
104
  naturalSampleRateHertz: number
105
105
  }
106
106
 
107
- export type AudioEncoding = "LINEAR16" | "MP3" | "MP3_64_KBPS" | "OGG_OPUS" | "MULAW" | "ALAW"
107
+ export type AudioEncoding = 'LINEAR16' | 'MP3' | 'MP3_64_KBPS' | 'OGG_OPUS' | 'MULAW' | 'ALAW'
108
108
 
109
109
  export type timePoint = {
110
110
  markName: string,