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.
- package/README.md +15 -14
- package/data/schemas/options.json +398 -111
- package/dist/alignment/DTWMfccSequenceAlignment.d.ts +1 -1
- package/dist/alignment/DTWMfccSequenceAlignment.js +8 -8
- package/dist/alignment/DTWSequenceAlignment.d.ts +1 -1
- package/dist/alignment/DTWSequenceAlignment.js +1 -1
- package/dist/alignment/DTWSequenceAlignmentWindowed.d.ts +1 -1
- package/dist/alignment/DTWSequenceAlignmentWindowed.js +2 -2
- package/dist/alignment/LevenshteinSequenceAlignment.d.ts +1 -1
- package/dist/alignment/LevenshteinSequenceAlignment.js +1 -1
- package/dist/alignment/SpeechAlignment.d.ts +9 -10
- package/dist/alignment/SpeechAlignment.js +136 -105
- package/dist/alignment/SpeechAlignment.js.map +1 -1
- package/dist/api/API.d.ts +13 -12
- package/dist/api/API.js +14 -13
- package/dist/api/API.js.map +1 -1
- package/dist/api/APIOptions.d.ts +5 -4
- package/dist/api/Alignment.d.ts +15 -9
- package/dist/api/Alignment.js +88 -74
- package/dist/api/Alignment.js.map +1 -1
- package/dist/api/Common.js +1 -1
- package/dist/api/Denoising.d.ts +6 -6
- package/dist/api/Denoising.js +23 -23
- package/dist/api/Denoising.js.map +1 -1
- package/dist/api/LanguageDetection.d.ts +19 -12
- package/dist/api/LanguageDetection.js +88 -38
- package/dist/api/LanguageDetection.js.map +1 -1
- package/dist/api/Recognition.d.ts +16 -6
- package/dist/api/Recognition.js +129 -55
- package/dist/api/Recognition.js.map +1 -1
- package/dist/api/SourceSeparation.d.ts +17 -0
- package/dist/api/SourceSeparation.js +61 -0
- package/dist/api/SourceSeparation.js.map +1 -0
- package/dist/api/Synthesis.d.ts +18 -18
- package/dist/api/Synthesis.js +191 -164
- package/dist/api/Synthesis.js.map +1 -1
- package/dist/api/Translation.d.ts +19 -8
- package/dist/api/Translation.js +132 -35
- package/dist/api/Translation.js.map +1 -1
- package/dist/api/Vad.d.ts +10 -5
- package/dist/api/Vad.js +76 -38
- package/dist/api/Vad.js.map +1 -1
- package/dist/audio/AudioBufferConversion.d.ts +1 -1
- package/dist/audio/AudioBufferConversion.js +4 -4
- package/dist/audio/AudioPlayer.d.ts +1 -1
- package/dist/audio/AudioPlayer.js +26 -26
- package/dist/audio/AudioPlayer.js.map +1 -1
- package/dist/audio/AudioRecorder.d.ts +1 -1
- package/dist/audio/AudioRecorder.js +5 -5
- package/dist/audio/AudioUtilities.d.ts +13 -9
- package/dist/audio/AudioUtilities.js +86 -24
- package/dist/audio/AudioUtilities.js.map +1 -1
- package/dist/cli/CLI.d.ts +3 -3
- package/dist/cli/CLI.js +271 -162
- package/dist/cli/CLI.js.map +1 -1
- package/dist/cli/CLIConfigFile.js +8 -8
- package/dist/cli/CLILauncher.js +6 -6
- package/dist/cli/CLIOptionsSchema.js +2 -2
- package/dist/cli/CLIParser.js +5 -5
- package/dist/cli/CLIStarter.js +4 -4
- package/dist/codecs/FFMpegTranscoder.d.ts +2 -2
- package/dist/codecs/FFMpegTranscoder.js +37 -37
- package/dist/codecs/FFMpegTranscoder.js.map +1 -1
- package/dist/codecs/TIMITCodec.js +5 -5
- package/dist/codecs/WaveCodec.d.ts +1 -1
- package/dist/codecs/WaveCodec.js +22 -22
- package/dist/denoising/RNNoise.d.ts +1 -1
- package/dist/denoising/RNNoise.js +9 -9
- package/dist/dsp/BiquadFilter.d.ts +3 -2
- package/dist/dsp/BiquadFilter.js +18 -11
- package/dist/dsp/BiquadFilter.js.map +1 -1
- package/dist/dsp/DecayingPeakEstimator.d.ts +16 -0
- package/dist/dsp/DecayingPeakEstimator.js +23 -0
- package/dist/dsp/DecayingPeakEstimator.js.map +1 -0
- package/dist/dsp/FFT.d.ts +8 -4
- package/dist/dsp/FFT.js +76 -30
- package/dist/dsp/FFT.js.map +1 -1
- package/dist/dsp/KWeightingFilter.d.ts +9 -0
- package/dist/dsp/KWeightingFilter.js +40 -0
- package/dist/dsp/KWeightingFilter.js.map +1 -0
- package/dist/dsp/LoudnessEstimator.d.ts +21 -0
- package/dist/dsp/LoudnessEstimator.js +47 -0
- package/dist/dsp/LoudnessEstimator.js.map +1 -0
- package/dist/dsp/MFCC.d.ts +2 -2
- package/dist/dsp/MFCC.js +15 -15
- package/dist/dsp/MelSpectogram.d.ts +1 -1
- package/dist/dsp/MelSpectogram.js +6 -6
- package/dist/dsp/Rubberband.d.ts +11 -11
- package/dist/dsp/Rubberband.js +27 -27
- package/dist/dsp/Sonic.d.ts +1 -1
- package/dist/dsp/Sonic.js +3 -3
- package/dist/dsp/SpeexResampler.d.ts +1 -1
- package/dist/dsp/SpeexResampler.js +2 -2
- package/dist/math/VectorMath.d.ts +12 -8
- package/dist/math/VectorMath.js +35 -32
- package/dist/math/VectorMath.js.map +1 -1
- package/dist/nlp/ChineseSegmentation.js +2 -2
- package/dist/nlp/CompromiseNLP.js +3 -3
- package/dist/nlp/EspeakPhonemizer.js +30 -30
- package/dist/nlp/IPA.js +20 -20
- package/dist/nlp/JapaneseSegmentation.js +6 -6
- package/dist/nlp/Lexicon.d.ts +1 -1
- package/dist/nlp/Lexicon.js +7 -7
- package/dist/nlp/Segmentation.d.ts +3 -0
- package/dist/nlp/Segmentation.js +21 -14
- package/dist/nlp/Segmentation.js.map +1 -1
- package/dist/nlp/TextNormalizer.js +16 -16
- package/dist/recognition/AmazonTranscribeSTT.d.ts +2 -2
- package/dist/recognition/AmazonTranscribeSTT.js +13 -14
- package/dist/recognition/AmazonTranscribeSTT.js.map +1 -1
- package/dist/recognition/AzureCognitiveServicesSTT.js +5 -6
- package/dist/recognition/AzureCognitiveServicesSTT.js.map +1 -1
- package/dist/recognition/GoogleCloudSTT.d.ts +3 -3
- package/dist/recognition/GoogleCloudSTT.js +18 -18
- package/dist/recognition/OpenAICloudSTT.d.ts +19 -0
- package/dist/recognition/OpenAICloudSTT.js +81 -0
- package/dist/recognition/OpenAICloudSTT.js.map +1 -0
- package/dist/recognition/SileroSTT.d.ts +2 -2
- package/dist/recognition/SileroSTT.js +25 -25
- package/dist/recognition/VoskSTT.d.ts +2 -2
- package/dist/recognition/VoskSTT.js +8 -8
- package/dist/recognition/WhisperCppSTT.d.ts +88 -0
- package/dist/recognition/WhisperCppSTT.js +332 -0
- package/dist/recognition/WhisperCppSTT.js.map +1 -0
- package/dist/recognition/WhisperSTT.d.ts +49 -25
- package/dist/recognition/WhisperSTT.js +626 -481
- package/dist/recognition/WhisperSTT.js.map +1 -1
- package/dist/server/Client.d.ts +1 -1
- package/dist/server/Client.js +22 -22
- package/dist/server/Server.js +9 -9
- package/dist/server/Server.js.map +1 -1
- package/dist/server/Worker.d.ts +22 -22
- package/dist/server/Worker.js +36 -36
- package/dist/server/Worker.js.map +1 -1
- package/dist/server/WorkerStarter.js +2 -2
- package/dist/source-separation/MDXNetSourceSeparation.d.ts +11 -0
- package/dist/source-separation/MDXNetSourceSeparation.js +161 -0
- package/dist/source-separation/MDXNetSourceSeparation.js.map +1 -0
- package/dist/speech-language-detection/SileroLanguageDetection.d.ts +1 -1
- package/dist/speech-language-detection/SileroLanguageDetection.js +7 -7
- package/dist/subtitles/Subtitles.d.ts +10 -0
- package/dist/subtitles/Subtitles.js +2 -2
- package/dist/subtitles/Subtitles.js.map +1 -1
- package/dist/synthesis/AwsPollyTTS.d.ts +1 -1
- package/dist/synthesis/AwsPollyTTS.js +12 -12
- package/dist/synthesis/AzureCognitiveServicesTTS.js +7 -7
- package/dist/synthesis/CoquiServerTTS.js +10 -10
- package/dist/synthesis/CoquiServerTTS.js.map +1 -1
- package/dist/synthesis/ElevenlabsTTS.d.ts +23 -0
- package/dist/synthesis/ElevenlabsTTS.js +103 -0
- package/dist/synthesis/ElevenlabsTTS.js.map +1 -0
- package/dist/synthesis/EspeakTTS.d.ts +6 -5
- package/dist/synthesis/EspeakTTS.js +81 -69
- package/dist/synthesis/EspeakTTS.js.map +1 -1
- package/dist/synthesis/FliteTTS.d.ts +3 -3
- package/dist/synthesis/FliteTTS.js +154 -154
- package/dist/synthesis/FliteTTS.js.map +1 -1
- package/dist/synthesis/GoogleCloudTTS.d.ts +3 -3
- package/dist/synthesis/GoogleCloudTTS.js +17 -17
- package/dist/synthesis/GoogleCloudTTS.js.map +1 -1
- package/dist/synthesis/GoogleTranslateTTS.d.ts +1 -1
- package/dist/synthesis/GoogleTranslateTTS.js +103 -103
- package/dist/synthesis/MicrosoftEdgeTTS.d.ts +2 -2
- package/dist/synthesis/MicrosoftEdgeTTS.js +74 -74
- package/dist/synthesis/OpenAICloudTTS.d.ts +13 -0
- package/dist/synthesis/OpenAICloudTTS.js +169 -0
- package/dist/synthesis/OpenAICloudTTS.js.map +1 -0
- package/dist/synthesis/SamTTS.js +3 -3
- package/dist/synthesis/SapiTTS.d.ts +3 -3
- package/dist/synthesis/SapiTTS.js +26 -26
- package/dist/synthesis/StreamlabsPollyTTS.d.ts +2 -2
- package/dist/synthesis/StreamlabsPollyTTS.js +27 -27
- package/dist/synthesis/SvoxPicoTTS.d.ts +2 -2
- package/dist/synthesis/SvoxPicoTTS.js +65 -65
- package/dist/synthesis/SvoxPicoTTS.js.map +1 -1
- package/dist/synthesis/VitsTTS.d.ts +3 -3
- package/dist/synthesis/VitsTTS.js +378 -378
- package/dist/synthesis/VitsTTS.js.map +1 -1
- package/dist/tests/Test.js +2 -2
- package/dist/utilities/Compression.d.ts +5 -0
- package/dist/utilities/Compression.js +29 -13
- package/dist/utilities/Compression.js.map +1 -1
- package/dist/utilities/FileDownloader.d.ts +1 -1
- package/dist/utilities/FileDownloader.js +16 -16
- package/dist/utilities/FileSystem.js +7 -7
- package/dist/utilities/Locale.d.ts +7 -7
- package/dist/utilities/Locale.js +15 -15
- package/dist/utilities/Logger.js +3 -3
- package/dist/utilities/ObjectUtilities.js +19 -19
- package/dist/utilities/OpenPromise.js +2 -2
- package/dist/utilities/OpenPromise.js.map +1 -1
- package/dist/utilities/PackageManager.js +31 -0
- package/dist/utilities/PackageManager.js.map +1 -1
- package/dist/utilities/PathUtilities.js +8 -8
- package/dist/utilities/RandomGenerator.js +2 -2
- package/dist/utilities/SmoothEstimator.d.ts +8 -0
- package/dist/utilities/SmoothEstimator.js +25 -0
- package/dist/utilities/SmoothEstimator.js.map +1 -0
- package/dist/utilities/TarballMaker.js +8 -8
- package/dist/utilities/Timeline.d.ts +3 -2
- package/dist/utilities/Timeline.js +11 -11
- package/dist/utilities/Timeline.js.map +1 -1
- package/dist/utilities/Timer.js +4 -4
- package/dist/utilities/Utilities.d.ts +4 -0
- package/dist/utilities/Utilities.js +38 -15
- package/dist/utilities/Utilities.js.map +1 -1
- package/dist/utilities/WasmMemoryManager.js +7 -7
- package/dist/utilities/WebReader.js +23 -23
- package/dist/utilities/WikipediaReader.js +2 -2
- package/dist/voice-activity-detection/AdaptiveGateVAD.d.ts +28 -0
- package/dist/voice-activity-detection/AdaptiveGateVAD.js +138 -0
- package/dist/voice-activity-detection/AdaptiveGateVAD.js.map +1 -0
- package/dist/voice-activity-detection/SileroVAD.d.ts +1 -1
- package/dist/voice-activity-detection/SileroVAD.js +5 -5
- package/dist/voice-activity-detection/SileroVAD.js.map +1 -1
- package/dist/voice-activity-detection/WebRtcVAD.d.ts +1 -1
- package/dist/voice-activity-detection/WebRtcVAD.js +4 -4
- package/docs/API.md +29 -11
- package/docs/CLI.md +31 -7
- package/docs/Contributing.md +38 -0
- package/docs/Development.md +93 -19
- package/docs/Engines.md +28 -16
- package/docs/Licenses.md +4 -1
- package/docs/Options.md +158 -78
- package/docs/Releases.md +262 -0
- package/docs/Server.md +7 -7
- package/docs/Tasklist.md +95 -76
- package/docs/Technical.md +4 -4
- package/package.json +13 -14
- package/src/alignment/DTWMfccSequenceAlignment.ts +9 -9
- package/src/alignment/DTWSequenceAlignment.ts +2 -2
- package/src/alignment/DTWSequenceAlignmentWindowed.ts +3 -3
- package/src/alignment/LevenshteinSequenceAlignment.ts +2 -2
- package/src/alignment/SpeechAlignment.ts +204 -119
- package/src/api/API.ts +14 -13
- package/src/api/APIOptions.ts +12 -11
- package/src/api/Alignment.ts +147 -90
- package/src/api/Common.ts +1 -1
- package/src/api/Denoising.ts +28 -28
- package/src/api/LanguageDetection.ts +135 -48
- package/src/api/Recognition.ts +198 -59
- package/src/api/SourceSeparation.ts +99 -0
- package/src/api/Synthesis.ts +217 -181
- package/src/api/Translation.ts +193 -40
- package/src/api/Vad.ts +110 -41
- package/src/audio/AudioBufferConversion.ts +4 -4
- package/src/audio/AudioPlayer.ts +27 -27
- package/src/audio/AudioRecorder.ts +5 -5
- package/src/audio/AudioUtilities.ts +107 -24
- package/src/cli/CLI.ts +313 -164
- package/src/cli/CLIConfigFile.ts +8 -8
- package/src/cli/CLILauncher.ts +6 -6
- package/src/cli/CLIOptionsSchema.ts +2 -2
- package/src/cli/CLIParser.ts +5 -5
- package/src/cli/CLIStarter.ts +4 -4
- package/src/codecs/FFMpegTranscoder.ts +38 -38
- package/src/codecs/TIMITCodec.ts +5 -5
- package/src/codecs/WaveCodec.ts +22 -22
- package/src/denoising/RNNoise.ts +9 -9
- package/src/dsp/BiquadFilter.ts +19 -11
- package/src/dsp/DecayingPeakEstimator.ts +35 -0
- package/src/dsp/FFT.ts +103 -35
- package/src/dsp/KWeightingFilter.ts +43 -0
- package/src/dsp/LoudnessEstimator.ts +74 -0
- package/src/dsp/MFCC.ts +15 -15
- package/src/dsp/MelSpectogram.ts +7 -7
- package/src/dsp/Rubberband.ts +38 -38
- package/src/dsp/Sonic.ts +4 -4
- package/src/dsp/SpeexResampler.ts +2 -2
- package/src/math/VectorMath.ts +42 -33
- package/src/nlp/ChineseSegmentation.ts +3 -3
- package/src/nlp/CompromiseNLP.ts +3 -3
- package/src/nlp/EspeakPhonemizer.ts +30 -30
- package/src/nlp/IPA.ts +20 -20
- package/src/nlp/JapaneseSegmentation.ts +6 -6
- package/src/nlp/Lexicon.ts +8 -8
- package/src/nlp/Segmentation.ts +23 -14
- package/src/nlp/TextNormalizer.ts +16 -16
- package/src/recognition/AmazonTranscribeSTT.ts +16 -17
- package/src/recognition/AzureCognitiveServicesSTT.ts +8 -6
- package/src/recognition/GoogleCloudSTT.ts +21 -21
- package/src/recognition/OpenAICloudSTT.ts +142 -0
- package/src/recognition/SileroSTT.ts +26 -26
- package/src/recognition/VoskSTT.ts +10 -10
- package/src/recognition/WhisperCppSTT.ts +555 -0
- package/src/recognition/WhisperSTT.ts +760 -507
- package/src/server/Client.ts +23 -23
- package/src/server/Server.ts +9 -9
- package/src/server/Worker.ts +53 -53
- package/src/server/WorkerStarter.ts +2 -2
- package/src/source-separation/MDXNetSourceSeparation.ts +228 -0
- package/src/speech-language-detection/SileroLanguageDetection.ts +8 -8
- package/src/subtitles/Subtitles.ts +3 -3
- package/src/synthesis/AwsPollyTTS.ts +14 -14
- package/src/synthesis/AzureCognitiveServicesTTS.ts +10 -10
- package/src/synthesis/CoquiServerTTS.ts +10 -10
- package/src/synthesis/ElevenlabsTTS.ts +137 -0
- package/src/synthesis/EspeakTTS.ts +90 -71
- package/src/synthesis/FliteTTS.ts +157 -157
- package/src/synthesis/GoogleCloudTTS.ts +19 -19
- package/src/synthesis/GoogleTranslateTTS.ts +104 -104
- package/src/synthesis/MicrosoftEdgeTTS.ts +80 -80
- package/src/synthesis/OpenAICloudTTS.ts +196 -0
- package/src/synthesis/SamTTS.ts +3 -3
- package/src/synthesis/SapiTTS.ts +29 -29
- package/src/synthesis/StreamlabsPollyTTS.ts +29 -29
- package/src/synthesis/SvoxPicoTTS.ts +67 -67
- package/src/synthesis/VitsTTS.ts +380 -380
- package/src/tests/Test.ts +4 -4
- package/src/utilities/Compression.ts +34 -13
- package/src/utilities/FileDownloader.ts +19 -19
- package/src/utilities/FileSystem.ts +7 -7
- package/src/utilities/Locale.ts +22 -22
- package/src/utilities/Logger.ts +4 -4
- package/src/utilities/ObjectUtilities.ts +19 -19
- package/src/utilities/OpenPromise.ts +2 -2
- package/src/utilities/PackageManager.ts +40 -0
- package/src/utilities/PathUtilities.ts +8 -8
- package/src/utilities/RandomGenerator.ts +3 -3
- package/src/utilities/SmoothEstimator.ts +35 -0
- package/src/utilities/TarballMaker.ts +9 -9
- package/src/utilities/Timeline.ts +15 -13
- package/src/utilities/Timer.ts +4 -4
- package/src/utilities/Utilities.ts +49 -15
- package/src/utilities/WasmMemoryManager.ts +7 -7
- package/src/utilities/WebReader.ts +23 -23
- package/src/utilities/WikipediaReader.ts +2 -2
- package/src/voice-activity-detection/AdaptiveGateVAD.ts +202 -0
- package/src/voice-activity-detection/SileroVAD.ts +5 -5
- package/src/voice-activity-detection/WebRtcVAD.ts +5 -5
- package/dist/synthesis/ElevenLabsTTS.d.ts +0 -8
- package/dist/synthesis/ElevenLabsTTS.js +0 -82
- package/dist/synthesis/ElevenLabsTTS.js.map +0 -1
- package/src/synthesis/ElevenLabsTTS.ts +0 -104
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { deepClone, extendDeep } from
|
|
1
|
+
import { deepClone, extendDeep } from '../utilities/ObjectUtilities.js'
|
|
2
2
|
|
|
3
|
-
import { AudioSourceParam, RawAudio, ensureRawAudio, getRawAudioDuration, normalizeAudioLevel, sliceRawAudioByTime, trimAudioEnd } from
|
|
4
|
-
import { Logger } from
|
|
3
|
+
import { AudioSourceParam, RawAudio, ensureRawAudio, getRawAudioDuration, normalizeAudioLevel, sliceRawAudioByTime, trimAudioEnd } from '../audio/AudioUtilities.js'
|
|
4
|
+
import { Logger } from '../utilities/Logger.js'
|
|
5
5
|
|
|
6
|
-
import * as API from
|
|
7
|
-
import { logToStderr } from
|
|
8
|
-
import path from
|
|
9
|
-
import {
|
|
10
|
-
import { formatLanguageCodeWithName, languageCodeToName } from
|
|
11
|
-
import { loadPackage } from
|
|
12
|
-
import chalk from
|
|
6
|
+
import * as API from './API.js'
|
|
7
|
+
import { logToStderr } from '../utilities/Utilities.js'
|
|
8
|
+
import path from 'path'
|
|
9
|
+
import { WhisperModelName } from '../recognition/WhisperSTT.js'
|
|
10
|
+
import { formatLanguageCodeWithName, languageCodeToName } from '../utilities/Locale.js'
|
|
11
|
+
import { loadPackage } from '../utilities/PackageManager.js'
|
|
12
|
+
import chalk from 'chalk'
|
|
13
|
+
import { WhisperCppOptions } from '../recognition/WhisperCppSTT.js'
|
|
13
14
|
|
|
14
15
|
const log = logToStderr
|
|
15
16
|
|
|
@@ -21,7 +22,7 @@ export async function detectSpeechLanguage(input: AudioSourceParam, options: Spe
|
|
|
21
22
|
|
|
22
23
|
const startTime = logger.getTimestamp()
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
options = extendDeep(defaultSpeechLanguageDetectionOptions, options)
|
|
25
26
|
|
|
26
27
|
const inputRawAudio = await ensureRawAudio(input)
|
|
27
28
|
|
|
@@ -29,7 +30,14 @@ export async function detectSpeechLanguage(input: AudioSourceParam, options: Spe
|
|
|
29
30
|
sourceRawAudio = normalizeAudioLevel(sourceRawAudio)
|
|
30
31
|
sourceRawAudio.audioChannels[0] = trimAudioEnd(sourceRawAudio.audioChannels[0])
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
if (options.crop) {
|
|
34
|
+
logger.start('Crop using voice activity detection');
|
|
35
|
+
({ croppedRawAudio: sourceRawAudio } = await API.detectVoiceActivity(sourceRawAudio, options.vad!))
|
|
36
|
+
|
|
37
|
+
logger.end()
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
logger.start('Prepare for speech language detection')
|
|
33
41
|
|
|
34
42
|
const defaultLanguage = options.defaultLanguage!
|
|
35
43
|
const fallbackThresholdProbability = options.fallbackThresholdProbability!
|
|
@@ -39,18 +47,18 @@ export async function detectSpeechLanguage(input: AudioSourceParam, options: Spe
|
|
|
39
47
|
let detectedLanguageProbabilities: LanguageDetectionResults
|
|
40
48
|
|
|
41
49
|
switch (options.engine) {
|
|
42
|
-
case
|
|
43
|
-
const SileroLanguageDetection = await import(
|
|
50
|
+
case 'silero': {
|
|
51
|
+
const SileroLanguageDetection = await import('../speech-language-detection/SileroLanguageDetection.js')
|
|
44
52
|
|
|
45
53
|
logger.end()
|
|
46
54
|
|
|
47
55
|
const sileroOptions = options.silero!
|
|
48
56
|
|
|
49
|
-
const modelDir = await loadPackage(
|
|
57
|
+
const modelDir = await loadPackage('silero-lang-classifier-95')
|
|
50
58
|
|
|
51
|
-
const modelPath = path.join(modelDir,
|
|
52
|
-
const languageDictionaryPath = path.join(modelDir,
|
|
53
|
-
const languageGroupDictionaryPath = path.join(modelDir,
|
|
59
|
+
const modelPath = path.join(modelDir, 'lang_classifier_95.onnx')
|
|
60
|
+
const languageDictionaryPath = path.join(modelDir, 'lang_dict_95.json')
|
|
61
|
+
const languageGroupDictionaryPath = path.join(modelDir, 'lang_group_dict_95.json')
|
|
54
62
|
|
|
55
63
|
const languageResults = await SileroLanguageDetection.detectLanguage(
|
|
56
64
|
sourceRawAudio,
|
|
@@ -63,16 +71,32 @@ export async function detectSpeechLanguage(input: AudioSourceParam, options: Spe
|
|
|
63
71
|
break
|
|
64
72
|
}
|
|
65
73
|
|
|
66
|
-
case
|
|
67
|
-
const WhisperSTT = await import(
|
|
74
|
+
case 'whisper': {
|
|
75
|
+
const WhisperSTT = await import('../recognition/WhisperSTT.js')
|
|
68
76
|
|
|
69
77
|
const whisperOptions = options.whisper!
|
|
70
78
|
|
|
71
|
-
const { modelName, modelDir
|
|
79
|
+
const { modelName, modelDir } = await WhisperSTT.loadPackagesAndGetPaths(whisperOptions.model, undefined)
|
|
80
|
+
|
|
81
|
+
logger.end()
|
|
82
|
+
|
|
83
|
+
detectedLanguageProbabilities = await WhisperSTT.detectLanguage(sourceRawAudio, modelName, modelDir, whisperOptions.temperature!)
|
|
84
|
+
|
|
85
|
+
break
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
case 'whisper.cpp': {
|
|
89
|
+
const WhisperCppSTT = await import('../recognition/WhisperCppSTT.js')
|
|
90
|
+
|
|
91
|
+
const whisperCppOptions = options.whisperCpp!
|
|
72
92
|
|
|
73
93
|
logger.end()
|
|
74
94
|
|
|
75
|
-
|
|
95
|
+
const { modelName, modelPath } = await WhisperCppSTT.loadModelPackage(whisperCppOptions.model, undefined)
|
|
96
|
+
|
|
97
|
+
logger.end();
|
|
98
|
+
|
|
99
|
+
detectedLanguageProbabilities = await WhisperCppSTT.detectLanguage(sourceRawAudio, modelName, modelPath)
|
|
76
100
|
|
|
77
101
|
break
|
|
78
102
|
}
|
|
@@ -93,9 +117,15 @@ export async function detectSpeechLanguage(input: AudioSourceParam, options: Spe
|
|
|
93
117
|
}
|
|
94
118
|
|
|
95
119
|
logger.end()
|
|
96
|
-
logger.logDuration(
|
|
120
|
+
logger.logDuration('\nTotal detection time', startTime, chalk.magentaBright)
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
detectedLanguage,
|
|
124
|
+
detectedLanguageName: languageCodeToName(detectedLanguage),
|
|
125
|
+
detectedLanguageProbabilities,
|
|
97
126
|
|
|
98
|
-
|
|
127
|
+
inputRawAudio,
|
|
128
|
+
}
|
|
99
129
|
}
|
|
100
130
|
|
|
101
131
|
export interface SpeechLanguageDetectionResult {
|
|
@@ -105,11 +135,15 @@ export interface SpeechLanguageDetectionResult {
|
|
|
105
135
|
inputRawAudio: RawAudio
|
|
106
136
|
}
|
|
107
137
|
|
|
108
|
-
export async function detectSpeechLanguageByParts(sourceRawAudio: RawAudio, getResultsForAudioPart: (audioPart: RawAudio) => Promise<LanguageDetectionResults>, audioPartDuration = 30, hopDuration =
|
|
138
|
+
export async function detectSpeechLanguageByParts(sourceRawAudio: RawAudio, getResultsForAudioPart: (audioPart: RawAudio) => Promise<LanguageDetectionResults>, audioPartDuration = 30, hopDuration = 25) {
|
|
109
139
|
const logger = new Logger()
|
|
110
140
|
|
|
111
141
|
const audioDuration = getRawAudioDuration(sourceRawAudio)
|
|
112
142
|
|
|
143
|
+
if (audioDuration === 0) {
|
|
144
|
+
return []
|
|
145
|
+
}
|
|
146
|
+
|
|
113
147
|
const resultsForParts: LanguageDetectionResults[] = []
|
|
114
148
|
|
|
115
149
|
for (let audioTimeOffset = 0; audioTimeOffset < audioDuration; audioTimeOffset += hopDuration) {
|
|
@@ -126,7 +160,13 @@ export async function detectSpeechLanguageByParts(sourceRawAudio: RawAudio, getR
|
|
|
126
160
|
|
|
127
161
|
const sortedResultsForPart = deepClone(resultsForPart).sort((a, b) => b.probability - a.probability)
|
|
128
162
|
|
|
129
|
-
|
|
163
|
+
let topCandidatesStrings: string[] = []
|
|
164
|
+
|
|
165
|
+
for (let i = 0; i < Math.min(3, sortedResultsForPart.length); i++) {
|
|
166
|
+
topCandidatesStrings.push(`${formatLanguageCodeWithName(sortedResultsForPart[i].language)}: ${sortedResultsForPart[i].probability.toFixed(3)}`)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
logger.logTitledMessage(`Top candidates`, topCandidatesStrings.join(', '))
|
|
130
170
|
|
|
131
171
|
if (audioPartLength < audioPartDuration) {
|
|
132
172
|
break
|
|
@@ -149,27 +189,49 @@ export async function detectSpeechLanguageByParts(sourceRawAudio: RawAudio, getR
|
|
|
149
189
|
return averagedResults
|
|
150
190
|
}
|
|
151
191
|
|
|
152
|
-
export type SpeechLanguageDetectionEngine =
|
|
192
|
+
export type SpeechLanguageDetectionEngine = 'silero' | 'whisper' | 'whisper.cpp'
|
|
153
193
|
|
|
154
194
|
export interface SpeechLanguageDetectionOptions {
|
|
155
195
|
engine?: SpeechLanguageDetectionEngine
|
|
156
196
|
defaultLanguage?: string,
|
|
157
197
|
fallbackThresholdProbability?: number
|
|
158
198
|
|
|
199
|
+
crop?: boolean
|
|
200
|
+
|
|
159
201
|
silero?: {
|
|
160
202
|
}
|
|
161
203
|
|
|
162
|
-
whisper?:
|
|
204
|
+
whisper?: {
|
|
205
|
+
model?: WhisperModelName
|
|
206
|
+
temperature?: number
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
whisperCpp?: WhisperCppOptions
|
|
210
|
+
|
|
211
|
+
vad?: API.VADOptions
|
|
163
212
|
}
|
|
164
213
|
|
|
165
214
|
export const defaultSpeechLanguageDetectionOptions: SpeechLanguageDetectionOptions = {
|
|
166
|
-
engine:
|
|
215
|
+
engine: 'whisper',
|
|
216
|
+
defaultLanguage: 'en',
|
|
217
|
+
fallbackThresholdProbability: 0.05,
|
|
218
|
+
|
|
219
|
+
crop: true,
|
|
167
220
|
|
|
168
221
|
silero: {
|
|
169
222
|
},
|
|
170
223
|
|
|
171
224
|
whisper: {
|
|
172
|
-
model:
|
|
225
|
+
model: 'tiny',
|
|
226
|
+
temperature: 1.0
|
|
227
|
+
},
|
|
228
|
+
|
|
229
|
+
whisperCpp: {
|
|
230
|
+
model: 'tiny'
|
|
231
|
+
},
|
|
232
|
+
|
|
233
|
+
vad: {
|
|
234
|
+
engine: 'adaptive-gate'
|
|
173
235
|
}
|
|
174
236
|
}
|
|
175
237
|
|
|
@@ -189,20 +251,20 @@ export async function detectTextLanguage(input: string, options: TextLanguageDet
|
|
|
189
251
|
logger.start(`Initialize ${options.engine} module`)
|
|
190
252
|
|
|
191
253
|
switch (options.engine) {
|
|
192
|
-
case
|
|
193
|
-
const { detectLanguage } = await import(
|
|
254
|
+
case 'tinyld': {
|
|
255
|
+
const { detectLanguage } = await import('../text-language-detection/TinyLDLanguageDetection.js')
|
|
194
256
|
|
|
195
|
-
logger.start(
|
|
257
|
+
logger.start('Detecting text language using tinyld')
|
|
196
258
|
|
|
197
259
|
detectedLanguageProbabilities = await detectLanguage(input)
|
|
198
260
|
|
|
199
261
|
break
|
|
200
262
|
}
|
|
201
263
|
|
|
202
|
-
case
|
|
203
|
-
const { detectLanguage } = await import(
|
|
264
|
+
case 'fasttext': {
|
|
265
|
+
const { detectLanguage } = await import('../text-language-detection/FastTextLanguageDetection.js')
|
|
204
266
|
|
|
205
|
-
logger.start(
|
|
267
|
+
logger.start('Detecting text language using FastText')
|
|
206
268
|
|
|
207
269
|
detectedLanguageProbabilities = await detectLanguage(input)
|
|
208
270
|
|
|
@@ -226,9 +288,17 @@ export async function detectTextLanguage(input: string, options: TextLanguageDet
|
|
|
226
288
|
|
|
227
289
|
logger.end()
|
|
228
290
|
|
|
229
|
-
return {
|
|
291
|
+
return {
|
|
292
|
+
detectedLanguage,
|
|
293
|
+
detectedLanguageName: languageCodeToName(detectedLanguage),
|
|
294
|
+
detectedLanguageProbabilities
|
|
295
|
+
}
|
|
230
296
|
}
|
|
231
297
|
|
|
298
|
+
/////////////////////////////////////////////////////////////////////////////////////////////
|
|
299
|
+
// Types
|
|
300
|
+
/////////////////////////////////////////////////////////////////////////////////////////////
|
|
301
|
+
|
|
232
302
|
export interface TextLanguageDetectionResult {
|
|
233
303
|
detectedLanguage: string
|
|
234
304
|
detectedLanguageName: string
|
|
@@ -236,23 +306,34 @@ export interface TextLanguageDetectionResult {
|
|
|
236
306
|
}
|
|
237
307
|
|
|
238
308
|
export type LanguageDetectionResults = LanguageDetectionResultsEntry[]
|
|
239
|
-
export
|
|
309
|
+
export interface LanguageDetectionResultsEntry {
|
|
310
|
+
language: string
|
|
311
|
+
languageName: string
|
|
312
|
+
probability: number
|
|
313
|
+
}
|
|
240
314
|
|
|
241
315
|
export type LanguageDetectionGroupResults = LanguageDetectionGroupResultsEntry[]
|
|
242
|
-
export
|
|
316
|
+
export interface LanguageDetectionGroupResultsEntry {
|
|
317
|
+
languageGroup: string
|
|
318
|
+
probability: number
|
|
319
|
+
}
|
|
243
320
|
|
|
244
|
-
export type TextLanguageDetectionEngine =
|
|
321
|
+
export type TextLanguageDetectionEngine = 'tinyld' | 'fasttext'
|
|
245
322
|
|
|
246
|
-
export
|
|
247
|
-
engine?: TextLanguageDetectionEngine
|
|
248
|
-
defaultLanguage?: string
|
|
323
|
+
export interface TextLanguageDetectionOptions {
|
|
324
|
+
engine?: TextLanguageDetectionEngine
|
|
325
|
+
defaultLanguage?: string
|
|
249
326
|
fallbackThresholdProbability?: number
|
|
250
327
|
}
|
|
251
328
|
|
|
329
|
+
/////////////////////////////////////////////////////////////////////////////////////////////
|
|
330
|
+
// Constants
|
|
331
|
+
/////////////////////////////////////////////////////////////////////////////////////////////
|
|
332
|
+
|
|
252
333
|
export const defaultTextLanguageDetectionOptions: TextLanguageDetectionOptions = {
|
|
253
|
-
engine:
|
|
254
|
-
defaultLanguage:
|
|
255
|
-
fallbackThresholdProbability: 0.05
|
|
334
|
+
engine: 'tinyld',
|
|
335
|
+
defaultLanguage: 'en',
|
|
336
|
+
fallbackThresholdProbability: 0.05,
|
|
256
337
|
}
|
|
257
338
|
|
|
258
339
|
export const speechLanguageDetectionEngines: API.EngineMetadata[] = [
|
|
@@ -265,7 +346,13 @@ export const speechLanguageDetectionEngines: API.EngineMetadata[] = [
|
|
|
265
346
|
{
|
|
266
347
|
id: 'whisper',
|
|
267
348
|
name: 'OpenAI Whisper',
|
|
268
|
-
description: 'Uses the language
|
|
349
|
+
description: 'Uses the language tokens produced by the Whisper model to classify the spoken langauge.',
|
|
350
|
+
type: 'local'
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
id: 'whisper.cpp',
|
|
354
|
+
name: 'OpenAI Whisper (C++ port)',
|
|
355
|
+
description: 'Uses the language tokens produced by Whisper.cpp to classify the spoken langauge.',
|
|
269
356
|
type: 'local'
|
|
270
357
|
},
|
|
271
358
|
]
|
|
@@ -280,7 +367,7 @@ export const textLanguageDetectionEngines: API.EngineMetadata[] = [
|
|
|
280
367
|
{
|
|
281
368
|
id: 'fasttext',
|
|
282
369
|
name: 'FastText',
|
|
283
|
-
description: '
|
|
370
|
+
description: 'A library for word representations and sentence classification by Facebook research.',
|
|
284
371
|
type: 'local'
|
|
285
372
|
},
|
|
286
373
|
]
|