echogarden 0.0.1 → 0.1.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 (295) hide show
  1. package/README.md +59 -1
  2. package/data/lexicons/heteronyms.json +674 -0
  3. package/data/schemas/options.json +1057 -0
  4. package/data/tables/lcid-table.json +7427 -0
  5. package/dist/alignment/DTWMfccSequenceAlignment.d.ts +2 -0
  6. package/dist/alignment/DTWMfccSequenceAlignment.js +26 -0
  7. package/dist/alignment/DTWMfccSequenceAlignment.js.map +1 -0
  8. package/dist/alignment/DTWSequenceAlignment.d.ts +5 -0
  9. package/dist/alignment/DTWSequenceAlignment.js +99 -0
  10. package/dist/alignment/DTWSequenceAlignment.js.map +1 -0
  11. package/dist/alignment/DTWSequenceAlignmentWindowed.d.ts +5 -0
  12. package/dist/alignment/DTWSequenceAlignmentWindowed.js +161 -0
  13. package/dist/alignment/DTWSequenceAlignmentWindowed.js.map +1 -0
  14. package/dist/alignment/LevenshteinSequenceAlignment.d.ts +5 -0
  15. package/dist/alignment/LevenshteinSequenceAlignment.js +102 -0
  16. package/dist/alignment/LevenshteinSequenceAlignment.js.map +1 -0
  17. package/dist/alignment/SpeechAlignment.d.ts +27 -0
  18. package/dist/alignment/SpeechAlignment.js +266 -0
  19. package/dist/alignment/SpeechAlignment.js.map +1 -0
  20. package/dist/api/API.d.ts +8 -0
  21. package/dist/api/API.js +10 -0
  22. package/dist/api/API.js.map +1 -0
  23. package/dist/api/APIOptions.d.ts +12 -0
  24. package/dist/api/APIOptions.js +2 -0
  25. package/dist/api/APIOptions.js.map +1 -0
  26. package/dist/api/Alignment.d.ts +32 -0
  27. package/dist/api/Alignment.js +134 -0
  28. package/dist/api/Alignment.js.map +1 -0
  29. package/dist/api/Denoising.d.ts +14 -0
  30. package/dist/api/Denoising.js +66 -0
  31. package/dist/api/Denoising.js.map +1 -0
  32. package/dist/api/Globals.d.ts +1 -0
  33. package/dist/api/Globals.js +2 -0
  34. package/dist/api/Globals.js.map +1 -0
  35. package/dist/api/LanguageDetection.d.ts +49 -0
  36. package/dist/api/LanguageDetection.js +118 -0
  37. package/dist/api/LanguageDetection.js.map +1 -0
  38. package/dist/api/Recognition.d.ts +49 -0
  39. package/dist/api/Recognition.js +162 -0
  40. package/dist/api/Recognition.js.map +1 -0
  41. package/dist/api/Synthesis.d.ts +125 -0
  42. package/dist/api/Synthesis.js +892 -0
  43. package/dist/api/Synthesis.js.map +1 -0
  44. package/dist/api/Translation.d.ts +25 -0
  45. package/dist/api/Translation.js +69 -0
  46. package/dist/api/Translation.js.map +1 -0
  47. package/dist/api/Vad.d.ts +25 -0
  48. package/dist/api/Vad.js +88 -0
  49. package/dist/api/Vad.js.map +1 -0
  50. package/dist/audio/AudioBufferConversion.d.ts +15 -0
  51. package/dist/audio/AudioBufferConversion.js +228 -0
  52. package/dist/audio/AudioBufferConversion.js.map +1 -0
  53. package/dist/audio/AudioPlayer.d.ts +9 -0
  54. package/dist/audio/AudioPlayer.js +232 -0
  55. package/dist/audio/AudioPlayer.js.map +1 -0
  56. package/dist/audio/AudioRecorder.d.ts +3 -0
  57. package/dist/audio/AudioRecorder.js +68 -0
  58. package/dist/audio/AudioRecorder.js.map +1 -0
  59. package/dist/audio/AudioUtilities.d.ts +48 -0
  60. package/dist/audio/AudioUtilities.js +209 -0
  61. package/dist/audio/AudioUtilities.js.map +1 -0
  62. package/dist/audio/SoxPath.d.ts +1 -0
  63. package/dist/audio/SoxPath.js +19 -0
  64. package/dist/audio/SoxPath.js.map +1 -0
  65. package/dist/cli/CLI.d.ts +8 -0
  66. package/dist/cli/CLI.js +860 -0
  67. package/dist/cli/CLI.js.map +1 -0
  68. package/dist/cli/CLIConfigFile.d.ts +3 -0
  69. package/dist/cli/CLIConfigFile.js +62 -0
  70. package/dist/cli/CLIConfigFile.js.map +1 -0
  71. package/dist/cli/CLILauncher.d.ts +2 -0
  72. package/dist/cli/CLILauncher.js +22 -0
  73. package/dist/cli/CLILauncher.js.map +1 -0
  74. package/dist/cli/CLIOptionsSchema.d.ts +5 -0
  75. package/dist/cli/CLIOptionsSchema.js +36 -0
  76. package/dist/cli/CLIOptionsSchema.js.map +1 -0
  77. package/dist/cli/CLIParser.d.ts +6 -0
  78. package/dist/cli/CLIParser.js +34 -0
  79. package/dist/cli/CLIParser.js.map +1 -0
  80. package/dist/cli/CLIStarter.d.ts +1 -0
  81. package/dist/cli/CLIStarter.js +3 -0
  82. package/dist/cli/CLIStarter.js.map +1 -0
  83. package/dist/codecs/FFMpegTranscoder.d.ts +20 -0
  84. package/dist/codecs/FFMpegTranscoder.js +169 -0
  85. package/dist/codecs/FFMpegTranscoder.js.map +1 -0
  86. package/dist/codecs/TIMITCodec.d.ts +9 -0
  87. package/dist/codecs/TIMITCodec.js +14 -0
  88. package/dist/codecs/TIMITCodec.js.map +1 -0
  89. package/dist/codecs/WaveCodec.d.ts +19 -0
  90. package/dist/codecs/WaveCodec.js +208 -0
  91. package/dist/codecs/WaveCodec.js.map +1 -0
  92. package/dist/denoising/RNNoise.d.ts +6 -0
  93. package/dist/denoising/RNNoise.js +68 -0
  94. package/dist/denoising/RNNoise.js.map +1 -0
  95. package/dist/dsp/BiquadFilter.d.ts +26 -0
  96. package/dist/dsp/BiquadFilter.js +399 -0
  97. package/dist/dsp/BiquadFilter.js.map +1 -0
  98. package/dist/dsp/FFT.d.ts +9 -0
  99. package/dist/dsp/FFT.js +135 -0
  100. package/dist/dsp/FFT.js.map +1 -0
  101. package/dist/dsp/MFCC.d.ts +25 -0
  102. package/dist/dsp/MFCC.js +162 -0
  103. package/dist/dsp/MFCC.js.map +1 -0
  104. package/dist/dsp/MelSpectogram.d.ts +19 -0
  105. package/dist/dsp/MelSpectogram.js +102 -0
  106. package/dist/dsp/MelSpectogram.js.map +1 -0
  107. package/dist/dsp/Rubberband.d.ts +52 -0
  108. package/dist/dsp/Rubberband.js +186 -0
  109. package/dist/dsp/Rubberband.js.map +1 -0
  110. package/dist/dsp/Sonic.d.ts +2 -0
  111. package/dist/dsp/Sonic.js +39 -0
  112. package/dist/dsp/Sonic.js.map +1 -0
  113. package/dist/dsp/SpeexResampler.d.ts +3 -0
  114. package/dist/dsp/SpeexResampler.js +53 -0
  115. package/dist/dsp/SpeexResampler.js.map +1 -0
  116. package/dist/math/VectorMath.d.ts +70 -0
  117. package/dist/math/VectorMath.js +564 -0
  118. package/dist/math/VectorMath.js.map +1 -0
  119. package/dist/nlp/ChineseSegmentation.d.ts +1 -0
  120. package/dist/nlp/ChineseSegmentation.js +53 -0
  121. package/dist/nlp/ChineseSegmentation.js.map +1 -0
  122. package/dist/nlp/CompromiseNLP.d.ts +15 -0
  123. package/dist/nlp/CompromiseNLP.js +66 -0
  124. package/dist/nlp/CompromiseNLP.js.map +1 -0
  125. package/dist/nlp/EspeakPhonemizer.d.ts +4 -0
  126. package/dist/nlp/EspeakPhonemizer.js +133 -0
  127. package/dist/nlp/EspeakPhonemizer.js.map +1 -0
  128. package/dist/nlp/IPA.d.ts +19 -0
  129. package/dist/nlp/IPA.js +113 -0
  130. package/dist/nlp/IPA.js.map +1 -0
  131. package/dist/nlp/JapaneseSegmentation.d.ts +1 -0
  132. package/dist/nlp/JapaneseSegmentation.js +40 -0
  133. package/dist/nlp/JapaneseSegmentation.js.map +1 -0
  134. package/dist/nlp/Lexicon.d.ts +17 -0
  135. package/dist/nlp/Lexicon.js +6 -0
  136. package/dist/nlp/Lexicon.js.map +1 -0
  137. package/dist/nlp/PhoneConversion.d.ts +6 -0
  138. package/dist/nlp/PhoneConversion.js +467 -0
  139. package/dist/nlp/PhoneConversion.js.map +1 -0
  140. package/dist/nlp/Segmentation.d.ts +41 -0
  141. package/dist/nlp/Segmentation.js +158 -0
  142. package/dist/nlp/Segmentation.js.map +1 -0
  143. package/dist/nlp/TextNormalizer.d.ts +4 -0
  144. package/dist/nlp/TextNormalizer.js +69 -0
  145. package/dist/nlp/TextNormalizer.js.map +1 -0
  146. package/dist/recognition/AmazonTranscribeSTT.d.ts +6 -0
  147. package/dist/recognition/AmazonTranscribeSTT.js +79 -0
  148. package/dist/recognition/AmazonTranscribeSTT.js.map +1 -0
  149. package/dist/recognition/AzureCognitiveServicesSTT.d.ts +7 -0
  150. package/dist/recognition/AzureCognitiveServicesSTT.js +51 -0
  151. package/dist/recognition/AzureCognitiveServicesSTT.js.map +1 -0
  152. package/dist/recognition/GoogleCloudSTT.d.ts +7 -0
  153. package/dist/recognition/GoogleCloudSTT.js +66 -0
  154. package/dist/recognition/GoogleCloudSTT.js.map +1 -0
  155. package/dist/recognition/SileroSTT.d.ts +9 -0
  156. package/dist/recognition/SileroSTT.js +125 -0
  157. package/dist/recognition/SileroSTT.js.map +1 -0
  158. package/dist/recognition/VoskSTT.d.ts +10 -0
  159. package/dist/recognition/VoskSTT.js +78 -0
  160. package/dist/recognition/VoskSTT.js.map +1 -0
  161. package/dist/recognition/WhisperSTT.d.ts +69 -0
  162. package/dist/recognition/WhisperSTT.js +977 -0
  163. package/dist/recognition/WhisperSTT.js.map +1 -0
  164. package/dist/server/Server.d.ts +1 -0
  165. package/dist/server/Server.js +18 -0
  166. package/dist/server/Server.js.map +1 -0
  167. package/dist/speech-language-detection/SileroLanguageDetection.d.ts +9 -0
  168. package/dist/speech-language-detection/SileroLanguageDetection.js +47 -0
  169. package/dist/speech-language-detection/SileroLanguageDetection.js.map +1 -0
  170. package/dist/subtitles/Subtitles.d.ts +25 -0
  171. package/dist/subtitles/Subtitles.js +286 -0
  172. package/dist/subtitles/Subtitles.js.map +1 -0
  173. package/dist/synthesis/AwsPollyTTS.d.ts +7 -0
  174. package/dist/synthesis/AwsPollyTTS.js +51 -0
  175. package/dist/synthesis/AwsPollyTTS.js.map +1 -0
  176. package/dist/synthesis/AzureCognitiveServicesTTS.d.ts +9 -0
  177. package/dist/synthesis/AzureCognitiveServicesTTS.js +103 -0
  178. package/dist/synthesis/AzureCognitiveServicesTTS.js.map +1 -0
  179. package/dist/synthesis/CoquiServerTTS.d.ts +6 -0
  180. package/dist/synthesis/CoquiServerTTS.js +22 -0
  181. package/dist/synthesis/CoquiServerTTS.js.map +1 -0
  182. package/dist/synthesis/ElevenLabsTTS.d.ts +8 -0
  183. package/dist/synthesis/ElevenLabsTTS.js +48 -0
  184. package/dist/synthesis/ElevenLabsTTS.js.map +1 -0
  185. package/dist/synthesis/EspeakTTS.d.ts +46 -0
  186. package/dist/synthesis/EspeakTTS.js +353 -0
  187. package/dist/synthesis/EspeakTTS.js.map +1 -0
  188. package/dist/synthesis/FliteTTS.d.ts +17 -0
  189. package/dist/synthesis/FliteTTS.js +326 -0
  190. package/dist/synthesis/FliteTTS.js.map +1 -0
  191. package/dist/synthesis/GoogleCloudTTS.d.ts +16 -0
  192. package/dist/synthesis/GoogleCloudTTS.js +72 -0
  193. package/dist/synthesis/GoogleCloudTTS.js.map +1 -0
  194. package/dist/synthesis/GoogleTranslateTTS.d.ts +13 -0
  195. package/dist/synthesis/GoogleTranslateTTS.js +177 -0
  196. package/dist/synthesis/GoogleTranslateTTS.js.map +1 -0
  197. package/dist/synthesis/MicrosoftEdgeTTS.d.ts +10 -0
  198. package/dist/synthesis/MicrosoftEdgeTTS.js +216 -0
  199. package/dist/synthesis/MicrosoftEdgeTTS.js.map +1 -0
  200. package/dist/synthesis/SamTTS.d.ts +4 -0
  201. package/dist/synthesis/SamTTS.js +21 -0
  202. package/dist/synthesis/SamTTS.js.map +1 -0
  203. package/dist/synthesis/SapiTTS.d.ts +9 -0
  204. package/dist/synthesis/SapiTTS.js +211 -0
  205. package/dist/synthesis/SapiTTS.js.map +1 -0
  206. package/dist/synthesis/StreamlabsPollyTTS.d.ts +12 -0
  207. package/dist/synthesis/StreamlabsPollyTTS.js +88 -0
  208. package/dist/synthesis/StreamlabsPollyTTS.js.map +1 -0
  209. package/dist/synthesis/SvoxPicoTTS.d.ts +11 -0
  210. package/dist/synthesis/SvoxPicoTTS.js +236 -0
  211. package/dist/synthesis/SvoxPicoTTS.js.map +1 -0
  212. package/dist/synthesis/VitsTTS.d.ts +27 -0
  213. package/dist/synthesis/VitsTTS.js +359 -0
  214. package/dist/synthesis/VitsTTS.js.map +1 -0
  215. package/dist/tests/Test.d.ts +1 -0
  216. package/dist/tests/Test.js +10 -0
  217. package/dist/tests/Test.js.map +1 -0
  218. package/dist/text-language-detection/FastTextLanguageDetection.d.ts +2 -0
  219. package/dist/text-language-detection/FastTextLanguageDetection.js +38 -0
  220. package/dist/text-language-detection/FastTextLanguageDetection.js.map +1 -0
  221. package/dist/text-language-detection/TinyLDLanguageDetection.d.ts +2 -0
  222. package/dist/text-language-detection/TinyLDLanguageDetection.js +12 -0
  223. package/dist/text-language-detection/TinyLDLanguageDetection.js.map +1 -0
  224. package/dist/utilities/BinaryArrayConversion.d.ts +15 -0
  225. package/dist/utilities/BinaryArrayConversion.js +115 -0
  226. package/dist/utilities/BinaryArrayConversion.js.map +1 -0
  227. package/dist/utilities/Compression.d.ts +4 -0
  228. package/dist/utilities/Compression.js +67 -0
  229. package/dist/utilities/Compression.js.map +1 -0
  230. package/dist/utilities/FileDownloader.d.ts +3 -0
  231. package/dist/utilities/FileDownloader.js +147 -0
  232. package/dist/utilities/FileDownloader.js.map +1 -0
  233. package/dist/utilities/FileSystem.d.ts +30 -0
  234. package/dist/utilities/FileSystem.js +141 -0
  235. package/dist/utilities/FileSystem.js.map +1 -0
  236. package/dist/utilities/Hashing.d.ts +10 -0
  237. package/dist/utilities/Hashing.js +169 -0
  238. package/dist/utilities/Hashing.js.map +1 -0
  239. package/dist/utilities/Locale.d.ts +9 -0
  240. package/dist/utilities/Locale.js +65 -0
  241. package/dist/utilities/Locale.js.map +1 -0
  242. package/dist/utilities/Logger.d.ts +11 -0
  243. package/dist/utilities/Logger.js +49 -0
  244. package/dist/utilities/Logger.js.map +1 -0
  245. package/dist/utilities/NdArrayUtilities.d.ts +3 -0
  246. package/dist/utilities/NdArrayUtilities.js +22 -0
  247. package/dist/utilities/NdArrayUtilities.js.map +1 -0
  248. package/dist/utilities/ObjectUtilities.d.ts +4 -0
  249. package/dist/utilities/ObjectUtilities.js +132 -0
  250. package/dist/utilities/ObjectUtilities.js.map +1 -0
  251. package/dist/utilities/OpenPromise.d.ts +6 -0
  252. package/dist/utilities/OpenPromise.js +12 -0
  253. package/dist/utilities/OpenPromise.js.map +1 -0
  254. package/dist/utilities/PackageManager.d.ts +4 -0
  255. package/dist/utilities/PackageManager.js +46 -0
  256. package/dist/utilities/PackageManager.js.map +1 -0
  257. package/dist/utilities/RandomGenerator.d.ts +35 -0
  258. package/dist/utilities/RandomGenerator.js +149 -0
  259. package/dist/utilities/RandomGenerator.js.map +1 -0
  260. package/dist/utilities/TarballMaker.d.ts +4 -0
  261. package/dist/utilities/TarballMaker.js +50 -0
  262. package/dist/utilities/TarballMaker.js.map +1 -0
  263. package/dist/utilities/Timeline.d.ts +20 -0
  264. package/dist/utilities/Timeline.js +110 -0
  265. package/dist/utilities/Timeline.js.map +1 -0
  266. package/dist/utilities/Timer.d.ts +13 -0
  267. package/dist/utilities/Timer.js +70 -0
  268. package/dist/utilities/Timer.js.map +1 -0
  269. package/dist/utilities/Utilities.d.ts +68 -0
  270. package/dist/utilities/Utilities.js +305 -0
  271. package/dist/utilities/Utilities.js.map +1 -0
  272. package/dist/utilities/WasmMemoryManager.d.ts +142 -0
  273. package/dist/utilities/WasmMemoryManager.js +407 -0
  274. package/dist/utilities/WasmMemoryManager.js.map +1 -0
  275. package/dist/utilities/WebReader.d.ts +1 -0
  276. package/dist/utilities/WebReader.js +47 -0
  277. package/dist/utilities/WebReader.js.map +1 -0
  278. package/dist/utilities/WikipediaReader.d.ts +1 -0
  279. package/dist/utilities/WikipediaReader.js +31 -0
  280. package/dist/utilities/WikipediaReader.js.map +1 -0
  281. package/dist/voice-activity-detection/SileroVAD.d.ts +13 -0
  282. package/dist/voice-activity-detection/SileroVAD.js +58 -0
  283. package/dist/voice-activity-detection/SileroVAD.js.map +1 -0
  284. package/dist/voice-activity-detection/WebRtcVAD.d.ts +3 -0
  285. package/dist/voice-activity-detection/WebRtcVAD.js +53 -0
  286. package/dist/voice-activity-detection/WebRtcVAD.js.map +1 -0
  287. package/docs/CLI.md +234 -0
  288. package/docs/Development.md +3 -0
  289. package/docs/Engines.md +80 -0
  290. package/docs/Licenses.md +37 -0
  291. package/docs/Options.md +192 -0
  292. package/docs/Roadmap.md +16 -0
  293. package/docs/Technical.md +72 -0
  294. package/package.json +119 -19
  295. package/cli.js +0 -3
@@ -0,0 +1,49 @@
1
+ import { RawAudio } from "../audio/AudioUtilities.js";
2
+ import * as API from "./API.js";
3
+ import type { WhisperModelName } from "../recognition/WhisperSTT.js";
4
+ export declare function detectSpeechFileLanguage(filename: string, options: SpeechLanguageDetectionOptions): Promise<{
5
+ detectedLanguage: string;
6
+ detectedLanguageName: string;
7
+ detectedLanguageProbabilities: API.LanguageDetectionResults;
8
+ detectedLanguageGroupProbabilities: API.LanguageDetectionGroupResults;
9
+ }>;
10
+ export declare function detectSpeechLanguage(rawAudio: RawAudio, options: SpeechLanguageDetectionOptions): Promise<{
11
+ detectedLanguage: string;
12
+ detectedLanguageName: string;
13
+ detectedLanguageProbabilities: API.LanguageDetectionResults;
14
+ detectedLanguageGroupProbabilities: API.LanguageDetectionGroupResults;
15
+ }>;
16
+ export type SpeechLanguageDetectionEngine = "silero" | "whisper";
17
+ export interface SpeechLanguageDetectionOptions {
18
+ engine?: SpeechLanguageDetectionEngine;
19
+ defaultLanguage?: string;
20
+ fallbackThresholdProbability?: number;
21
+ silero?: {};
22
+ whisper?: {
23
+ model: WhisperModelName;
24
+ };
25
+ }
26
+ export declare const defaultSpeechLanguageDetectionOptions: SpeechLanguageDetectionOptions;
27
+ export declare function detectTextLanguage(text: string, options: TextLanguageDetectionOptions): Promise<{
28
+ detectedLanguage: string;
29
+ detectedLanguageName: string;
30
+ detectedLanguageProbabilities: API.LanguageDetectionResults;
31
+ }>;
32
+ export type LanguageDetectionResults = LanguageDetectionResultsEntry[];
33
+ export type LanguageDetectionResultsEntry = {
34
+ language: string;
35
+ languageName: string;
36
+ probability: number;
37
+ };
38
+ export type LanguageDetectionGroupResults = LanguageDetectionGroupResultsEntry[];
39
+ export type LanguageDetectionGroupResultsEntry = {
40
+ languageGroup: string;
41
+ probability: number;
42
+ };
43
+ export type TextLanguageDetectionEngine = "tinyld" | "fasttext";
44
+ export type TextLanguageDetectionOptions = {
45
+ engine?: TextLanguageDetectionEngine;
46
+ defaultLanguage?: string;
47
+ fallbackThresholdProbability?: number;
48
+ };
49
+ export declare const defaultTextLanguageDetectionOptions: TextLanguageDetectionOptions;
@@ -0,0 +1,118 @@
1
+ import { extendDeep } from "../utilities/ObjectUtilities.js";
2
+ import * as FFMpegTranscoder from "../codecs/FFMpegTranscoder.js";
3
+ import { downmixToMonoAndNormalize } from "../audio/AudioUtilities.js";
4
+ import { Logger } from "../utilities/Logger.js";
5
+ import { resampleAudioSpeex } from "../dsp/SpeexResampler.js";
6
+ import { logToStderr } from "../utilities/Utilities.js";
7
+ import path from "path";
8
+ import { languageCodeToName } from "../utilities/Locale.js";
9
+ import { loadPackage } from "../utilities/PackageManager.js";
10
+ const log = logToStderr;
11
+ /////////////////////////////////////////////////////////////////////////////////////////////
12
+ // Speech language detection
13
+ /////////////////////////////////////////////////////////////////////////////////////////////
14
+ export async function detectSpeechFileLanguage(filename, options) {
15
+ const rawAudio = await FFMpegTranscoder.decodeToChannels(filename);
16
+ return detectSpeechLanguage(rawAudio, options);
17
+ }
18
+ export async function detectSpeechLanguage(rawAudio, options) {
19
+ const logger = new Logger();
20
+ logger.start("Prepare for speech language detection");
21
+ options = extendDeep(defaultSpeechLanguageDetectionOptions, options);
22
+ const defaultLanguage = options.defaultLanguage;
23
+ const fallbackThresholdProbability = options.fallbackThresholdProbability;
24
+ rawAudio = await resampleAudioSpeex(rawAudio, 16000);
25
+ rawAudio = downmixToMonoAndNormalize(rawAudio);
26
+ logger.start(`Initialize ${options.engine} module`);
27
+ let detectedLanguageProbabilities;
28
+ let detectedLanguageGroupProbabilities;
29
+ switch (options.engine) {
30
+ case "silero": {
31
+ const SileroLanguageDetection = await import("../speech-language-detection/SileroLanguageDetection.js");
32
+ logger.end();
33
+ const sileroOptions = options.silero;
34
+ const modelDir = await loadPackage("silero-lang-classifier-95");
35
+ const modelPath = path.join(modelDir, "lang_classifier_95.onnx");
36
+ const languageDictionaryPath = path.join(modelDir, "lang_dict_95.json");
37
+ const languageGroupDictionaryPath = path.join(modelDir, "lang_group_dict_95.json");
38
+ const { languageResults, languageGroupResults } = await SileroLanguageDetection.detectLanguage(rawAudio, modelPath, languageDictionaryPath, languageGroupDictionaryPath);
39
+ detectedLanguageProbabilities = languageResults;
40
+ detectedLanguageGroupProbabilities = languageGroupResults;
41
+ break;
42
+ }
43
+ case "whisper": {
44
+ const WhisperSTT = await import("../recognition/WhisperSTT.js");
45
+ const whisperOptions = options.whisper;
46
+ const { modelName, modelDir, tokenizerDir } = await WhisperSTT.loadPackagesAndGetPaths(whisperOptions.model, undefined);
47
+ logger.end();
48
+ detectedLanguageProbabilities = await WhisperSTT.detectLanguage(rawAudio, modelName, modelDir, tokenizerDir);
49
+ detectedLanguageGroupProbabilities = [];
50
+ break;
51
+ }
52
+ default: {
53
+ throw new Error(`Engine '${options.engine}' is not supported`);
54
+ }
55
+ }
56
+ let detectedLanguage;
57
+ let detectedLanguageName;
58
+ if (detectedLanguageProbabilities.length == 0 ||
59
+ detectedLanguageProbabilities[0].probability < fallbackThresholdProbability) {
60
+ detectedLanguage = defaultLanguage;
61
+ }
62
+ else {
63
+ detectedLanguage = detectedLanguageProbabilities[0].language;
64
+ }
65
+ logger.end();
66
+ return { detectedLanguage, detectedLanguageName: languageCodeToName(detectedLanguage), detectedLanguageProbabilities, detectedLanguageGroupProbabilities };
67
+ }
68
+ export const defaultSpeechLanguageDetectionOptions = {
69
+ engine: "silero",
70
+ silero: {},
71
+ whisper: {
72
+ model: "tiny",
73
+ }
74
+ };
75
+ /////////////////////////////////////////////////////////////////////////////////////////////
76
+ // Text language detection
77
+ /////////////////////////////////////////////////////////////////////////////////////////////
78
+ export async function detectTextLanguage(text, options) {
79
+ const logger = new Logger();
80
+ options = extendDeep(defaultTextLanguageDetectionOptions, options);
81
+ const defaultLanguage = options.defaultLanguage;
82
+ const fallbackThresholdProbability = options.fallbackThresholdProbability;
83
+ let detectedLanguageProbabilities;
84
+ logger.start(`Initialize ${options.engine} module`);
85
+ switch (options.engine) {
86
+ case "tinyld": {
87
+ const { detectLanguage } = await import("../text-language-detection/TinyLDLanguageDetection.js");
88
+ logger.start("Detecting text language using tinyld");
89
+ detectedLanguageProbabilities = await detectLanguage(text);
90
+ break;
91
+ }
92
+ case "fasttext": {
93
+ const { detectLanguage } = await import("../text-language-detection/FastTextLanguageDetection.js");
94
+ logger.start("Detecting text language using FastText");
95
+ detectedLanguageProbabilities = await detectLanguage(text);
96
+ break;
97
+ }
98
+ default: {
99
+ throw new Error(`Engine '${options.engine}' is not supported`);
100
+ }
101
+ }
102
+ let detectedLanguage;
103
+ if (detectedLanguageProbabilities.length == 0 ||
104
+ detectedLanguageProbabilities[0].probability < fallbackThresholdProbability) {
105
+ detectedLanguage = defaultLanguage;
106
+ }
107
+ else {
108
+ detectedLanguage = detectedLanguageProbabilities[0].language;
109
+ }
110
+ logger.end();
111
+ return { detectedLanguage, detectedLanguageName: languageCodeToName(detectedLanguage), detectedLanguageProbabilities };
112
+ }
113
+ export const defaultTextLanguageDetectionOptions = {
114
+ engine: "tinyld",
115
+ defaultLanguage: "en",
116
+ fallbackThresholdProbability: 0.05
117
+ };
118
+ //# sourceMappingURL=LanguageDetection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageDetection.js","sourceRoot":"","sources":["../../src/api/LanguageDetection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { RawAudio } from "../audio/AudioUtilities.js";
2
+ import * as API from "./API.js";
3
+ import { Timeline } from "../utilities/Timeline.js";
4
+ import type { WhisperModelName } from "../recognition/WhisperSTT.js";
5
+ export declare function recognizeFile(filename: string, options: RecognitionOptions): Promise<{
6
+ transcript: string;
7
+ timeline: Timeline;
8
+ rawAudio: RawAudio;
9
+ language: string;
10
+ }>;
11
+ export declare function recognize(inputRawAudio: RawAudio, options: RecognitionOptions): Promise<{
12
+ transcript: string;
13
+ timeline: Timeline;
14
+ rawAudio: RawAudio;
15
+ language: string;
16
+ }>;
17
+ export type RecognitionEngine = "whisper" | "vosk" | "silero" | "google-cloud" | "microsoft-azure" | "amazon-transcribe";
18
+ export interface RecognitionOptions {
19
+ engine?: RecognitionEngine;
20
+ language?: string;
21
+ maxAlternatives?: number;
22
+ alignment?: API.AlignmentOptions;
23
+ whisper?: {
24
+ model?: WhisperModelName;
25
+ };
26
+ vosk?: {
27
+ modelPath?: string;
28
+ };
29
+ silero?: {
30
+ modelPath?: string;
31
+ };
32
+ googleCloud?: {
33
+ apiKey?: string;
34
+ alternativeLanguageCodes?: string[];
35
+ profanityFilter?: boolean;
36
+ autoPunctuation?: boolean;
37
+ useEnhancedModel?: boolean;
38
+ };
39
+ microsoftAzure?: {
40
+ subscriptionKey?: string;
41
+ serviceRegion?: string;
42
+ };
43
+ amazonTranscribe?: {
44
+ region?: string;
45
+ accessKeyId?: string;
46
+ secretAccessKey?: string;
47
+ };
48
+ }
49
+ export declare const defaultRecognitionOptions: RecognitionOptions;
@@ -0,0 +1,162 @@
1
+ import { extendDeep } from "../utilities/ObjectUtilities.js";
2
+ import * as FFMpegTranscoder from "../codecs/FFMpegTranscoder.js";
3
+ import { logToStderr } from "../utilities/Utilities.js";
4
+ import { downmixToMonoAndNormalize, trimAudioEnd } from "../audio/AudioUtilities.js";
5
+ import { Logger } from "../utilities/Logger.js";
6
+ import { resampleAudioSpeex } from "../dsp/SpeexResampler.js";
7
+ import * as API from "./API.js";
8
+ import { formatLanguageCodeWithName, getShortLanguageCode, normalizeLanguageCode } from "../utilities/Locale.js";
9
+ import { loadPackage } from "../utilities/PackageManager.js";
10
+ const log = logToStderr;
11
+ export async function recognizeFile(filename, options) {
12
+ const rawAudio = await FFMpegTranscoder.decodeToChannels(filename);
13
+ return recognize(rawAudio, options);
14
+ }
15
+ export async function recognize(inputRawAudio, options) {
16
+ const logger = new Logger();
17
+ const startTimestamp = logger.getTimestamp();
18
+ logger.start("Prepare for recognition");
19
+ options = extendDeep(defaultRecognitionOptions, options);
20
+ const engine = options.engine;
21
+ let sourceRawAudio = await resampleAudioSpeex(inputRawAudio, 16000);
22
+ sourceRawAudio = downmixToMonoAndNormalize(sourceRawAudio);
23
+ sourceRawAudio.audioChannels[0] = trimAudioEnd(sourceRawAudio.audioChannels[0], 0, -40);
24
+ if (!options.language) { // && options.engine != "whisper") {
25
+ logger.start("No language provided. Detecting audio language");
26
+ const { detectedLanguage } = await API.detectSpeechLanguage(inputRawAudio, { engine: "silero" });
27
+ logger.end();
28
+ logger.log(`Language detected: ${formatLanguageCodeWithName(detectedLanguage)}`);
29
+ options.language = detectedLanguage;
30
+ }
31
+ let language = normalizeLanguageCode(options.language);
32
+ let transcript;
33
+ let timeline;
34
+ logger.start(`Load ${engine} module`);
35
+ switch (engine) {
36
+ case "whisper": {
37
+ const WhisperSTT = await import("../recognition/WhisperSTT.js");
38
+ const whisperOptions = options.whisper;
39
+ const shortLanguageCode = getShortLanguageCode(language);
40
+ const { modelName, modelDir, tokenizerDir } = await WhisperSTT.loadPackagesAndGetPaths(whisperOptions.model, shortLanguageCode);
41
+ if (shortLanguageCode != "en" && modelName.endsWith(".en")) {
42
+ throw new Error(`The model '${modelName}' is English only and cannot transcribe language '${shortLanguageCode}'`);
43
+ }
44
+ logger.end();
45
+ ({ transcript, timeline } = await WhisperSTT.recognize(sourceRawAudio, modelName, modelDir, tokenizerDir, "transcribe", language));
46
+ break;
47
+ }
48
+ case "vosk": {
49
+ const VoskSTT = await import("../recognition/VoskSTT.js");
50
+ const voskOptions = options.vosk;
51
+ const modelPath = voskOptions.modelPath;
52
+ if (!modelPath) {
53
+ throw new Error("Vosk models are not currently auto-downloaded. You'll need to download a model manually and set a model path in 'vosk.modelPath'.");
54
+ }
55
+ logger.end();
56
+ ({ transcript, timeline } = await VoskSTT.recognize(sourceRawAudio, modelPath, true));
57
+ break;
58
+ }
59
+ case "silero": {
60
+ const SileroSTT = await import("../recognition/SileroSTT.js");
61
+ const sileroOptions = options.silero;
62
+ let modelPath = sileroOptions.modelPath;
63
+ if (!modelPath) {
64
+ const shortLanguageCode = getShortLanguageCode(language);
65
+ const packageName = SileroSTT.languageCodeToPackageName[shortLanguageCode];
66
+ if (!packageName) {
67
+ throw new Error(`Language '${shortLanguageCode}' is not supported by Silero`);
68
+ }
69
+ modelPath = await loadPackage(packageName);
70
+ }
71
+ logger.end();
72
+ ({ transcript, timeline } = await SileroSTT.recognize(sourceRawAudio, modelPath));
73
+ break;
74
+ }
75
+ case "google-cloud": {
76
+ const GoogleCloudSTT = await import("../recognition/GoogleCloudSTT.js");
77
+ const apiKey = options.googleCloud.apiKey;
78
+ if (!apiKey) {
79
+ throw new Error(`No API key given`);
80
+ }
81
+ logger.end();
82
+ ({ transcript, timeline } = await GoogleCloudSTT.recognize(sourceRawAudio, apiKey, language));
83
+ break;
84
+ }
85
+ case "microsoft-azure": {
86
+ const AzureCognitiveServicesSTT = await import("../recognition/AzureCognitiveServicesSTT.js");
87
+ const subscriptionKey = options.microsoftAzure.subscriptionKey;
88
+ if (!subscriptionKey) {
89
+ throw new Error(`No subscription key given`);
90
+ }
91
+ const serviceRegion = options.microsoftAzure.serviceRegion;
92
+ if (!serviceRegion) {
93
+ throw new Error(`No service region given`);
94
+ }
95
+ logger.end();
96
+ ({ transcript, timeline } = await AzureCognitiveServicesSTT.recognize(sourceRawAudio, subscriptionKey, serviceRegion, language));
97
+ break;
98
+ }
99
+ case "amazon-transcribe": {
100
+ const AmazonTranscribeSTT = await import("../recognition/AmazonTranscribeSTT.js");
101
+ const region = options.amazonTranscribe.region;
102
+ if (!region) {
103
+ throw new Error(`No region given`);
104
+ }
105
+ const accessKeyId = options.amazonTranscribe.accessKeyId;
106
+ if (!accessKeyId) {
107
+ throw new Error(`No access key id given`);
108
+ }
109
+ const secretAccessKey = options.amazonTranscribe.secretAccessKey;
110
+ if (!secretAccessKey) {
111
+ throw new Error(`No secret access key given`);
112
+ }
113
+ logger.end();
114
+ ({ transcript, timeline } = await AmazonTranscribeSTT.recgonize(sourceRawAudio, language, region, accessKeyId, secretAccessKey));
115
+ break;
116
+ }
117
+ default: {
118
+ throw new Error(`Engine '${options.engine}' is not supported`);
119
+ }
120
+ }
121
+ if (!timeline) {
122
+ logger.start(`Align audio to transcript`);
123
+ const alignmentOptions = extendDeep(options.alignment, { language: language });
124
+ const { wordTimeline } = await API.align(sourceRawAudio, transcript, alignmentOptions);
125
+ timeline = wordTimeline;
126
+ }
127
+ logger.end();
128
+ logger.logDuration(`Total recognition time`, startTimestamp);
129
+ return { transcript, timeline, rawAudio: inputRawAudio, language };
130
+ }
131
+ export const defaultRecognitionOptions = {
132
+ engine: "whisper",
133
+ language: undefined,
134
+ maxAlternatives: 1,
135
+ alignment: undefined,
136
+ whisper: {
137
+ model: undefined,
138
+ },
139
+ vosk: {
140
+ modelPath: undefined
141
+ },
142
+ silero: {
143
+ modelPath: undefined
144
+ },
145
+ googleCloud: {
146
+ apiKey: undefined,
147
+ alternativeLanguageCodes: [],
148
+ profanityFilter: false,
149
+ autoPunctuation: true,
150
+ useEnhancedModel: true,
151
+ },
152
+ microsoftAzure: {
153
+ subscriptionKey: undefined,
154
+ serviceRegion: undefined
155
+ },
156
+ amazonTranscribe: {
157
+ region: undefined,
158
+ accessKeyId: undefined,
159
+ secretAccessKey: undefined,
160
+ }
161
+ };
162
+ //# sourceMappingURL=Recognition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Recognition.js","sourceRoot":"","sources":["../../src/api/Recognition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { RawAudio } from "../audio/AudioUtilities.js";
2
+ import { type RubberbandOptions } from "../dsp/Rubberband.js";
3
+ import * as API from "./API.js";
4
+ import { Timeline } from "../utilities/Timeline.js";
5
+ export declare function synthesizeSegments(segments: string[], options: SynthesisOptions, onSegment?: SynthesisSegmentEvent, onSentence?: SynthesisSegmentEvent): Promise<{
6
+ synthesizedAudio: RawAudio;
7
+ timeline: Timeline;
8
+ segmentsAudio: RawAudio[];
9
+ segmentsTimelines: Timeline[];
10
+ }>;
11
+ export type SynthesisEngine = "vits" | "pico" | "flite" | "espeak" | "sam" | "sapi" | "msspeech" | "coqui-server" | "google-cloud" | "microsoft-azure" | "amazon-polly" | "elevenlabs" | "google-translate" | "microsoft-edge" | "streamlabs-polly";
12
+ export type TimePitchShiftingMethod = "sonic" | "rubberband";
13
+ export interface SynthesisOptions {
14
+ engine?: SynthesisEngine;
15
+ language?: string;
16
+ voice?: string;
17
+ voiceGender?: VoiceGender;
18
+ speed?: number;
19
+ pitch?: number;
20
+ pitchVariation?: number;
21
+ ssml?: boolean;
22
+ splitToSentences?: boolean;
23
+ segmentEndPause?: number;
24
+ sentenceEndPause?: number;
25
+ alignment?: API.AlignmentOptions;
26
+ postProcessing?: {
27
+ normalizeAudio?: boolean;
28
+ targetPeakDb?: number;
29
+ maxIncreaseDb?: number;
30
+ speed?: number;
31
+ pitch?: number;
32
+ timePitchShiftingMethod?: TimePitchShiftingMethod;
33
+ rubberband?: RubberbandOptions;
34
+ };
35
+ vits?: {
36
+ speakerId?: number;
37
+ };
38
+ pico?: {};
39
+ flite?: {};
40
+ espeak?: {
41
+ rate?: number;
42
+ pitch?: number;
43
+ pitchRange?: number;
44
+ };
45
+ sam?: {
46
+ pitch?: number;
47
+ speed?: number;
48
+ mouth?: number;
49
+ throat?: number;
50
+ };
51
+ sapi?: {
52
+ rate?: number;
53
+ };
54
+ msspeech?: {
55
+ rate?: number;
56
+ };
57
+ coquiServer?: {
58
+ serverUrl?: string;
59
+ speakerId?: string | null;
60
+ };
61
+ googleCloud?: {
62
+ apiKey?: string;
63
+ pitchDeltaSemitones?: number;
64
+ customVoice?: {
65
+ model?: string;
66
+ reportedUsage?: string;
67
+ };
68
+ };
69
+ microsoftAzure?: {
70
+ subscriptionKey?: string;
71
+ serviceRegion?: string;
72
+ pitchDeltaHz?: number;
73
+ };
74
+ awsPolly?: {
75
+ region?: string;
76
+ accessKeyId?: string;
77
+ secretAccessKey?: string;
78
+ pollyEngine?: "standard" | "neural";
79
+ lexiconNames?: string[];
80
+ };
81
+ elevenlabs?: {
82
+ apiKey?: string;
83
+ stability?: number;
84
+ similarityBoost?: number;
85
+ };
86
+ googleTranslate?: {
87
+ tld?: string;
88
+ };
89
+ microsoftEdge?: {
90
+ trustedClientToken?: string;
91
+ pitchDeltaHz?: number;
92
+ };
93
+ streamlabsPolly?: {};
94
+ }
95
+ export declare const defaultSynthesisOptions: SynthesisOptions;
96
+ export declare function requestVoiceList(options: VoiceListRequestOptions): Promise<{
97
+ voiceList: API.SynthesisVoice[];
98
+ bestMatchingVoice: API.SynthesisVoice;
99
+ }>;
100
+ export declare function selectBestOfflineEngineForLanguage(language: string): SynthesisEngine;
101
+ export interface VoiceListRequestOptions extends SynthesisOptions {
102
+ cache?: {
103
+ path?: string;
104
+ duration?: number;
105
+ };
106
+ }
107
+ export declare const defaultVoiceListRequestOptions: VoiceListRequestOptions;
108
+ export interface SynthesisSegmentEventData {
109
+ index: number;
110
+ total: number;
111
+ audio: RawAudio;
112
+ timeline: Timeline;
113
+ transcript: string;
114
+ language: string;
115
+ peakDecibelsSoFar: number;
116
+ }
117
+ export type SynthesisSegmentEvent = (data: SynthesisSegmentEventData) => Promise<void>;
118
+ export interface SynthesisVoice {
119
+ name: string;
120
+ languages: string[];
121
+ gender: VoiceGender;
122
+ speakerCount?: number;
123
+ packageName?: string;
124
+ }
125
+ export type VoiceGender = "male" | "female" | "unknown";