echogarden 0.12.2 → 1.0.1
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 +11 -6
- package/dist/alignment/SpeechAlignment.js +113 -71
- 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 +92 -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 +91 -19
- package/docs/Engines.md +28 -16
- package/docs/Licenses.md +4 -1
- package/docs/Options.md +159 -79
- package/docs/Releases.md +262 -0
- package/docs/Server.md +7 -7
- package/docs/Tasklist.md +96 -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 +195 -86
- package/src/api/API.ts +14 -13
- package/src/api/APIOptions.ts +12 -11
- package/src/api/Alignment.ts +148 -92
- 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
package/dist/api/Alignment.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { AudioSourceParam, RawAudio } from
|
|
2
|
-
import * as API from
|
|
3
|
-
import { Timeline } from
|
|
4
|
-
import { WhisperOptions } from
|
|
5
|
-
import { DtwGranularity } from
|
|
6
|
-
import { SubtitlesConfig } from
|
|
1
|
+
import { AudioSourceParam, RawAudio } from '../audio/AudioUtilities.js';
|
|
2
|
+
import * as API from './API.js';
|
|
3
|
+
import { Timeline } from '../utilities/Timeline.js';
|
|
4
|
+
import { WhisperOptions } from '../recognition/WhisperSTT.js';
|
|
5
|
+
import { DtwGranularity } from '../alignment/SpeechAlignment.js';
|
|
6
|
+
import { SubtitlesConfig } from '../subtitles/Subtitles.js';
|
|
7
7
|
export declare function align(input: AudioSourceParam, transcript: string, options: AlignmentOptions): Promise<AlignmentResult>;
|
|
8
8
|
export declare function alignSegments(sourceRawAudio: RawAudio, segmentTimeline: Timeline, alignmentOptions: AlignmentOptions): Promise<Timeline>;
|
|
9
9
|
export interface AlignmentResult {
|
|
@@ -12,14 +12,19 @@ export interface AlignmentResult {
|
|
|
12
12
|
transcript: string;
|
|
13
13
|
language: string;
|
|
14
14
|
inputRawAudio: RawAudio;
|
|
15
|
+
isolatedRawAudio?: RawAudio;
|
|
16
|
+
backgroundRawAudio?: RawAudio;
|
|
15
17
|
}
|
|
16
|
-
export type AlignmentEngine =
|
|
17
|
-
export type PhoneAlignmentMethod =
|
|
18
|
+
export type AlignmentEngine = 'dtw' | 'dtw-ra' | 'whisper';
|
|
19
|
+
export type PhoneAlignmentMethod = 'interpolation' | 'dtw';
|
|
18
20
|
export interface AlignmentOptions {
|
|
19
21
|
engine?: AlignmentEngine;
|
|
20
22
|
language?: string;
|
|
21
|
-
|
|
23
|
+
isolate?: boolean;
|
|
24
|
+
crop?: boolean;
|
|
22
25
|
customLexiconPaths?: string[];
|
|
26
|
+
languageDetection?: API.TextLanguageDetectionOptions;
|
|
27
|
+
vad?: API.VADOptions;
|
|
23
28
|
plainText?: API.PlainTextOptions;
|
|
24
29
|
subtitles?: SubtitlesConfig;
|
|
25
30
|
dtw?: {
|
|
@@ -28,6 +33,7 @@ export interface AlignmentOptions {
|
|
|
28
33
|
phoneAlignmentMethod?: PhoneAlignmentMethod;
|
|
29
34
|
};
|
|
30
35
|
recognition?: API.RecognitionOptions;
|
|
36
|
+
sourceSeparation?: API.SourceSeparationOptions;
|
|
31
37
|
whisper?: WhisperOptions;
|
|
32
38
|
}
|
|
33
39
|
export declare const defaultAlignmentOptions: AlignmentOptions;
|
package/dist/api/Alignment.js
CHANGED
|
@@ -1,26 +1,43 @@
|
|
|
1
|
-
import { extendDeep } from
|
|
2
|
-
import { logToStderr } from
|
|
3
|
-
import {
|
|
4
|
-
import { Logger } from
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import { synthesize } from "./API.js";
|
|
13
|
-
import { defaultEspeakOptions } from "../synthesis/EspeakTTS.js";
|
|
1
|
+
import { extendDeep } from '../utilities/ObjectUtilities.js';
|
|
2
|
+
import { logToStderr } from '../utilities/Utilities.js';
|
|
3
|
+
import { ensureRawAudio, getRawAudioDuration, normalizeAudioLevel, trimAudioEnd } from '../audio/AudioUtilities.js';
|
|
4
|
+
import { Logger } from '../utilities/Logger.js';
|
|
5
|
+
import * as API from './API.js';
|
|
6
|
+
import { addTimeOffsetToTimeline, addWordTextOffsetsToTimeline, wordTimelineToSegmentSentenceTimeline } from '../utilities/Timeline.js';
|
|
7
|
+
import { formatLanguageCodeWithName, getDefaultDialectForLanguageCodeIfPossible, getShortLanguageCode, normalizeLanguageCode } from '../utilities/Locale.js';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { createAlignmentReferenceUsingEspeak } from '../alignment/SpeechAlignment.js';
|
|
10
|
+
import { defaultSubtitlesBaseConfig } from '../subtitles/Subtitles.js';
|
|
11
|
+
import { defaultEspeakOptions } from '../synthesis/EspeakTTS.js';
|
|
14
12
|
const log = logToStderr;
|
|
15
13
|
export async function align(input, transcript, options) {
|
|
16
14
|
const logger = new Logger();
|
|
17
15
|
const startTimestamp = logger.getTimestamp();
|
|
18
|
-
|
|
16
|
+
options = extendDeep(defaultAlignmentOptions, options);
|
|
19
17
|
const inputRawAudio = await ensureRawAudio(input);
|
|
20
|
-
let sourceRawAudio
|
|
18
|
+
let sourceRawAudio;
|
|
19
|
+
let isolatedRawAudio;
|
|
20
|
+
let backgroundRawAudio;
|
|
21
|
+
if (options.isolate) {
|
|
22
|
+
logger.log(``);
|
|
23
|
+
logger.end();
|
|
24
|
+
({ isolatedRawAudio, backgroundRawAudio } = await API.isolate(inputRawAudio, options.sourceSeparation));
|
|
25
|
+
logger.end();
|
|
26
|
+
logger.log(``);
|
|
27
|
+
sourceRawAudio = await ensureRawAudio(isolatedRawAudio, 16000, 1);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
sourceRawAudio = await ensureRawAudio(inputRawAudio, 16000, 1);
|
|
31
|
+
}
|
|
32
|
+
let sourceUncropTimeline;
|
|
33
|
+
if (options.crop) {
|
|
34
|
+
logger.start('Crop using voice activity detection');
|
|
35
|
+
({ timeline: sourceUncropTimeline, croppedRawAudio: sourceRawAudio } = await API.detectVoiceActivity(sourceRawAudio, options.vad));
|
|
36
|
+
logger.end();
|
|
37
|
+
}
|
|
38
|
+
logger.start('Prepare for alignment');
|
|
21
39
|
sourceRawAudio = normalizeAudioLevel(sourceRawAudio);
|
|
22
40
|
sourceRawAudio.audioChannels[0] = trimAudioEnd(sourceRawAudio.audioChannels[0]);
|
|
23
|
-
options = extendDeep(defaultAlignmentOptions, options);
|
|
24
41
|
if (options.dtw.windowDuration == null) {
|
|
25
42
|
const sourceAudioDuration = getRawAudioDuration(sourceRawAudio);
|
|
26
43
|
if (sourceAudioDuration < 5 * 60) { // If up to 5 minutes, set window to one minute
|
|
@@ -38,33 +55,15 @@ export async function align(input, transcript, options) {
|
|
|
38
55
|
language = normalizeLanguageCode(options.language);
|
|
39
56
|
}
|
|
40
57
|
else {
|
|
41
|
-
logger.start(
|
|
58
|
+
logger.start('No language specified. Detecting language');
|
|
42
59
|
const { detectedLanguage } = await API.detectTextLanguage(transcript, options.languageDetection || {});
|
|
43
60
|
language = detectedLanguage;
|
|
44
61
|
logger.end();
|
|
45
62
|
logger.logTitledMessage('Language detected', formatLanguageCodeWithName(detectedLanguage));
|
|
46
63
|
}
|
|
47
64
|
language = getDefaultDialectForLanguageCodeIfPossible(language);
|
|
48
|
-
logger.start(
|
|
49
|
-
const {
|
|
50
|
-
async function getAlignmentReference() {
|
|
51
|
-
logger.start("Create alignment reference with eSpeak");
|
|
52
|
-
const synthesisOptions = {
|
|
53
|
-
engine: "espeak",
|
|
54
|
-
language,
|
|
55
|
-
plainText: options.plainText,
|
|
56
|
-
customLexiconPaths: options.customLexiconPaths,
|
|
57
|
-
espeak: {
|
|
58
|
-
useKlatt: false
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
let { audio: referenceRawAudio, timeline: segmentTimeline, voice: espeakVoice } = await synthesize(transcript, synthesisOptions);
|
|
62
|
-
const sentenceTimeline = segmentTimeline.flatMap(entry => entry.timeline);
|
|
63
|
-
const wordTimeline = sentenceTimeline.flatMap(entry => entry.timeline);
|
|
64
|
-
referenceRawAudio = await resampleAudioSpeex(referenceRawAudio, 16000);
|
|
65
|
-
referenceRawAudio = downmixToMonoAndNormalize(referenceRawAudio);
|
|
66
|
-
return { referenceRawAudio, referenceTimeline: wordTimeline, espeakVoice };
|
|
67
|
-
}
|
|
65
|
+
logger.start('Load alignment module');
|
|
66
|
+
const { alignUsingDtwWithRecognitionReference, alignUsingDtw } = await import('../alignment/SpeechAlignment.js');
|
|
68
67
|
function getDtwWindowDurationsAndGranularities() {
|
|
69
68
|
let granularities;
|
|
70
69
|
let windowDurations;
|
|
@@ -101,66 +100,68 @@ export async function align(input, transcript, options) {
|
|
|
101
100
|
}
|
|
102
101
|
let mappedTimeline;
|
|
103
102
|
switch (options.engine) {
|
|
104
|
-
case
|
|
105
|
-
const { referenceRawAudio, referenceTimeline } = await
|
|
103
|
+
case 'dtw': {
|
|
104
|
+
const { referenceRawAudio, referenceTimeline } = await createAlignmentReferenceUsingEspeak(transcript, language, options.plainText, options.customLexiconPaths);
|
|
106
105
|
logger.end();
|
|
107
106
|
const { windowDurations, granularities } = getDtwWindowDurationsAndGranularities();
|
|
108
107
|
mappedTimeline = await alignUsingDtw(sourceRawAudio, referenceRawAudio, referenceTimeline, granularities, windowDurations);
|
|
109
108
|
break;
|
|
110
109
|
}
|
|
111
|
-
case
|
|
112
|
-
|
|
113
|
-
const promptWords = (await splitToWords(prompt, language)).filter(word => isWord(word))
|
|
114
|
-
|
|
115
|
-
shuffleArrayInPlace(promptWords, this.randomGen)
|
|
116
|
-
//promptWords.reverse()
|
|
117
|
-
|
|
118
|
-
prompt = promptWords.join(" ")
|
|
119
|
-
*/
|
|
120
|
-
const recognitionOptionsDefaults = {
|
|
121
|
-
engine: "whisper",
|
|
122
|
-
language,
|
|
123
|
-
};
|
|
124
|
-
const recognitionOptions = extendDeep(recognitionOptionsDefaults, options.recognition || {});
|
|
110
|
+
case 'dtw-ra': {
|
|
111
|
+
const recognitionOptions = extendDeep({ crop: options.crop, language }, options.recognition);
|
|
125
112
|
logger.end();
|
|
126
|
-
|
|
127
|
-
const {
|
|
113
|
+
// Recognize source audio
|
|
114
|
+
const { transcript: recognizedTranscript, wordTimeline: recognitionTimeline } = await API.recognize(sourceRawAudio, recognitionOptions);
|
|
115
|
+
// Synthesize the ground-truth transcript and get its timeline
|
|
116
|
+
logger.start('Synthesize ground-truth transcript with eSpeak');
|
|
117
|
+
const { referenceRawAudio, referenceTimeline, espeakVoice, } = await createAlignmentReferenceUsingEspeak(transcript, language, options.plainText, options.customLexiconPaths, true);
|
|
128
118
|
logger.end();
|
|
129
119
|
const { windowDurations, granularities } = getDtwWindowDurationsAndGranularities();
|
|
130
|
-
const espeakOptions = { ...defaultEspeakOptions, voice: espeakVoice, useKlatt: false };
|
|
131
120
|
const phoneAlignmentMethod = options.dtw.phoneAlignmentMethod;
|
|
132
|
-
|
|
121
|
+
const espeakOptions = {
|
|
122
|
+
...defaultEspeakOptions,
|
|
123
|
+
voice: espeakVoice,
|
|
124
|
+
useKlatt: false,
|
|
125
|
+
insertSeparators: true
|
|
126
|
+
};
|
|
127
|
+
// Align the ground-truth transcript and the recognized transcript
|
|
128
|
+
mappedTimeline = await alignUsingDtwWithRecognitionReference(sourceRawAudio, referenceRawAudio, referenceTimeline, recognitionTimeline, granularities, windowDurations, espeakOptions, phoneAlignmentMethod);
|
|
133
129
|
break;
|
|
134
130
|
}
|
|
135
|
-
case
|
|
136
|
-
const WhisperSTT = await import(
|
|
131
|
+
case 'whisper': {
|
|
132
|
+
const WhisperSTT = await import('../recognition/WhisperSTT.js');
|
|
137
133
|
const whisperOptions = options.whisper;
|
|
138
134
|
const shortLanguageCode = getShortLanguageCode(language);
|
|
139
|
-
const { modelName, modelDir
|
|
140
|
-
if (modelName.endsWith(".en") && shortLanguageCode != "en") {
|
|
141
|
-
throw new Error(`The model '${modelName}' is English only and cannot transcribe language '${shortLanguageCode}'`);
|
|
142
|
-
}
|
|
135
|
+
const { modelName, modelDir } = await WhisperSTT.loadPackagesAndGetPaths(whisperOptions.model, language);
|
|
143
136
|
if (getRawAudioDuration(sourceRawAudio) > 30) {
|
|
144
|
-
throw new Error(
|
|
137
|
+
throw new Error('Whisper based alignment currently only supports audio inputs that are 30s or less');
|
|
145
138
|
}
|
|
146
139
|
logger.end();
|
|
147
|
-
mappedTimeline = await WhisperSTT.align(sourceRawAudio, transcript, modelName, modelDir,
|
|
140
|
+
mappedTimeline = await WhisperSTT.align(sourceRawAudio, transcript, modelName, modelDir, shortLanguageCode);
|
|
148
141
|
break;
|
|
149
142
|
}
|
|
150
143
|
default: {
|
|
151
144
|
throw new Error(`Engine '${options.engine}' is not supported`);
|
|
152
145
|
}
|
|
153
146
|
}
|
|
147
|
+
// If the audio was cropped before recognition, map the timestamps back to the original audio
|
|
148
|
+
if (sourceUncropTimeline && sourceUncropTimeline.length > 0) {
|
|
149
|
+
API.convertCroppedToUncroppedTimeline(mappedTimeline, sourceUncropTimeline);
|
|
150
|
+
}
|
|
151
|
+
// Add text offsets
|
|
154
152
|
addWordTextOffsetsToTimeline(mappedTimeline, transcript);
|
|
153
|
+
// Make segment timeline
|
|
155
154
|
const { segmentTimeline } = await wordTimelineToSegmentSentenceTimeline(mappedTimeline, transcript, language, options.plainText?.paragraphBreaks, options.plainText?.whitespace);
|
|
156
155
|
logger.end();
|
|
157
156
|
logger.logDuration(`Total alignment time`, startTimestamp, chalk.magentaBright);
|
|
158
157
|
return {
|
|
159
158
|
timeline: segmentTimeline,
|
|
160
159
|
wordTimeline: mappedTimeline,
|
|
161
|
-
inputRawAudio,
|
|
162
160
|
transcript,
|
|
163
|
-
language
|
|
161
|
+
language,
|
|
162
|
+
inputRawAudio,
|
|
163
|
+
isolatedRawAudio,
|
|
164
|
+
backgroundRawAudio,
|
|
164
165
|
};
|
|
165
166
|
}
|
|
166
167
|
export async function alignSegments(sourceRawAudio, segmentTimeline, alignmentOptions) {
|
|
@@ -183,10 +184,12 @@ export async function alignSegments(sourceRawAudio, segmentTimeline, alignmentOp
|
|
|
183
184
|
return timeline;
|
|
184
185
|
}
|
|
185
186
|
export const defaultAlignmentOptions = {
|
|
186
|
-
engine:
|
|
187
|
+
engine: 'dtw',
|
|
187
188
|
language: undefined,
|
|
188
|
-
|
|
189
|
+
isolate: false,
|
|
190
|
+
crop: true,
|
|
189
191
|
customLexiconPaths: undefined,
|
|
192
|
+
languageDetection: {},
|
|
190
193
|
plainText: {
|
|
191
194
|
paragraphBreaks: 'double',
|
|
192
195
|
whitespace: 'collapse'
|
|
@@ -197,26 +200,41 @@ export const defaultAlignmentOptions = {
|
|
|
197
200
|
windowDuration: undefined,
|
|
198
201
|
phoneAlignmentMethod: 'dtw'
|
|
199
202
|
},
|
|
200
|
-
recognition: {
|
|
201
|
-
|
|
203
|
+
recognition: {
|
|
204
|
+
whisper: {
|
|
205
|
+
temperature: 0.15,
|
|
206
|
+
topCandidateCount: 5,
|
|
207
|
+
punctuationThreshold: 0.2,
|
|
208
|
+
maxTokensPerPart: 250,
|
|
209
|
+
autoPromptParts: true,
|
|
210
|
+
suppressRepetition: true,
|
|
211
|
+
seed: undefined,
|
|
212
|
+
decodeTimestampTokens: false,
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
vad: {
|
|
216
|
+
engine: 'adaptive-gate'
|
|
217
|
+
},
|
|
218
|
+
sourceSeparation: {},
|
|
219
|
+
whisper: {}
|
|
202
220
|
};
|
|
203
221
|
export const alignmentEngines = [
|
|
204
222
|
{
|
|
205
223
|
id: 'dtw',
|
|
206
224
|
name: 'Dynamic Time Warping',
|
|
207
|
-
description: 'Makes use of
|
|
225
|
+
description: 'Makes use of a synthesized reference to find the best mapping between the spoken audio and its transcript.',
|
|
208
226
|
type: 'local'
|
|
209
227
|
},
|
|
210
228
|
{
|
|
211
229
|
id: 'dtw-ra',
|
|
212
230
|
name: 'Dynamic Time Warping with Recognition Assist',
|
|
213
|
-
description: 'Makes use of both
|
|
231
|
+
description: 'Makes use of both a synthesized reference and a synthsized recognized transcript to find the best mapping between the spoken audio and its transcript.',
|
|
214
232
|
type: 'local'
|
|
215
233
|
},
|
|
216
234
|
{
|
|
217
235
|
id: 'whisper',
|
|
218
236
|
name: 'OpenAI Whisper',
|
|
219
|
-
description: 'Extracts timestamps from the internal state of the Whisper recognition model (note: currently limited to a maximum of
|
|
237
|
+
description: 'Extracts timestamps from the internal state of the Whisper recognition model (note: currently limited to a maximum audio duration of 30 seconds).',
|
|
220
238
|
type: 'local'
|
|
221
239
|
}
|
|
222
240
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alignment.js","sourceRoot":"","sources":["../../src/api/Alignment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAA8B,
|
|
1
|
+
{"version":3,"file":"Alignment.js","sourceRoot":"","sources":["../../src/api/Alignment.ts"],"names":[],"mappings":"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"}
|
package/dist/api/Common.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const appName =
|
|
1
|
+
export const appName = 'echogarden';
|
|
2
2
|
//# sourceMappingURL=Common.js.map
|
package/dist/api/Denoising.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AudioSourceParam, RawAudio } from
|
|
2
|
-
import { EngineMetadata } from
|
|
1
|
+
import { AudioSourceParam, RawAudio } from '../audio/AudioUtilities.js';
|
|
2
|
+
import { EngineMetadata } from './Common.js';
|
|
3
3
|
export declare function denoise(input: AudioSourceParam, options: DenoisingOptions): Promise<{
|
|
4
4
|
denoisedAudio: RawAudio;
|
|
5
5
|
inputRawAudio: RawAudio;
|
|
@@ -8,14 +8,14 @@ export interface DenoisingResult {
|
|
|
8
8
|
denoisedAudio: RawAudio;
|
|
9
9
|
inputRawAudio: RawAudio;
|
|
10
10
|
}
|
|
11
|
-
export type DenoisingMethod =
|
|
11
|
+
export type DenoisingMethod = 'rnnoise';
|
|
12
12
|
export interface DenoisingOptions {
|
|
13
13
|
method?: DenoisingMethod;
|
|
14
14
|
postProcessing?: {
|
|
15
15
|
normalizeAudio: boolean;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
targetPeak: number;
|
|
17
|
+
maxGainIncrease: number;
|
|
18
|
+
dryMixGain?: number;
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
export declare const defaultDenoisingOptions: DenoisingOptions;
|
package/dist/api/Denoising.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { extendDeep } from
|
|
2
|
-
import { applyGainDecibels, ensureRawAudio,
|
|
3
|
-
import { Logger } from
|
|
4
|
-
import { logToStderr } from
|
|
5
|
-
import { resampleAudioSpeex } from
|
|
6
|
-
import chalk from
|
|
1
|
+
import { extendDeep } from '../utilities/ObjectUtilities.js';
|
|
2
|
+
import { applyGainDecibels, ensureRawAudio, getSamplePeakDecibels, mixAudio, normalizeAudioLevel } from '../audio/AudioUtilities.js';
|
|
3
|
+
import { Logger } from '../utilities/Logger.js';
|
|
4
|
+
import { logToStderr } from '../utilities/Utilities.js';
|
|
5
|
+
import { resampleAudioSpeex } from '../dsp/SpeexResampler.js';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
7
|
const log = logToStderr;
|
|
8
8
|
export async function denoise(input, options) {
|
|
9
9
|
const logger = new Logger();
|
|
10
10
|
const startTime = logger.getTimestamp();
|
|
11
|
-
logger.start(
|
|
11
|
+
logger.start('Prepare for denoising');
|
|
12
12
|
options = extendDeep(defaultDenoisingOptions, options);
|
|
13
13
|
const inputRawAudio = await ensureRawAudio(input);
|
|
14
14
|
const processingSampleRate = 48000;
|
|
@@ -17,8 +17,8 @@ export async function denoise(input, options) {
|
|
|
17
17
|
logger.start(`Initialize ${options.method} module`);
|
|
18
18
|
let denoisedAudio;
|
|
19
19
|
switch (options.method) {
|
|
20
|
-
case
|
|
21
|
-
const RNNoise = await import(
|
|
20
|
+
case 'rnnoise': {
|
|
21
|
+
const RNNoise = await import('../denoising/RNNoise.js');
|
|
22
22
|
logger.end();
|
|
23
23
|
const denoisedAudioChannels = [];
|
|
24
24
|
for (const audioChannel of resampledRawAudio.audioChannels) {
|
|
@@ -33,35 +33,35 @@ export async function denoise(input, options) {
|
|
|
33
33
|
throw new Error(`Method: '${options.method}' is not supported`);
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
logger.start(
|
|
36
|
+
logger.start('Postprocess audio');
|
|
37
37
|
const shouldNormalize = options.postProcessing.normalizeAudio;
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
denoisedAudio = mixAudio(denoisedAudio, applyGainDecibels(resampledRawAudio,
|
|
43
|
-
const
|
|
38
|
+
const targetPeakDecibels = options.postProcessing.targetPeak;
|
|
39
|
+
const maxGainIncreaseDecibels = options.postProcessing.maxGainIncrease;
|
|
40
|
+
const dryMixGainDecibels = options.postProcessing.dryMixGain;
|
|
41
|
+
const preMixPeakDecibels = getSamplePeakDecibels(denoisedAudio.audioChannels);
|
|
42
|
+
denoisedAudio = mixAudio(denoisedAudio, applyGainDecibels(resampledRawAudio, dryMixGainDecibels));
|
|
43
|
+
const postMixPeakDecibels = getSamplePeakDecibels(denoisedAudio.audioChannels);
|
|
44
44
|
if (shouldNormalize) {
|
|
45
|
-
denoisedAudio = normalizeAudioLevel(denoisedAudio,
|
|
45
|
+
denoisedAudio = normalizeAudioLevel(denoisedAudio, targetPeakDecibels, maxGainIncreaseDecibels);
|
|
46
46
|
}
|
|
47
47
|
else {
|
|
48
|
-
denoisedAudio = applyGainDecibels(denoisedAudio,
|
|
48
|
+
denoisedAudio = applyGainDecibels(denoisedAudio, preMixPeakDecibels - postMixPeakDecibels);
|
|
49
49
|
}
|
|
50
50
|
logger.end();
|
|
51
51
|
logger.log('');
|
|
52
|
-
logger.logDuration(
|
|
52
|
+
logger.logDuration('Total denoising time', startTime, chalk.magentaBright);
|
|
53
53
|
return {
|
|
54
54
|
denoisedAudio,
|
|
55
55
|
inputRawAudio
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
export const defaultDenoisingOptions = {
|
|
59
|
-
method:
|
|
59
|
+
method: 'rnnoise',
|
|
60
60
|
postProcessing: {
|
|
61
61
|
normalizeAudio: false,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
targetPeak: -3,
|
|
63
|
+
maxGainIncrease: 30,
|
|
64
|
+
dryMixGain: -20,
|
|
65
65
|
}
|
|
66
66
|
};
|
|
67
67
|
export const denoisingEngines = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Denoising.js","sourceRoot":"","sources":["../../src/api/Denoising.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAE5D,OAAO,EAA8B,iBAAiB,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"Denoising.js","sourceRoot":"","sources":["../../src/api/Denoising.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAE5D,OAAO,EAA8B,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChK,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,GAAG,GAAG,WAAW,CAAA;AAEvB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAuB,EAAE,OAAyB;IAC/E,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;IAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAA;IAEvC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAErC,OAAO,GAAG,UAAU,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAA;IAEtD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAA;IAEjD,MAAM,oBAAoB,GAAG,KAAK,CAAA;IAElC,MAAM,CAAC,KAAK,CAAC,qBAAqB,oBAAoB,KAAK,CAAC,CAAA;IAC5D,MAAM,iBAAiB,GAAG,MAAM,kBAAkB,CAAC,aAAa,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAA;IAE1F,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,MAAM,SAAS,CAAC,CAAA;IAEnD,IAAI,aAAuB,CAAA;IAE3B,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACvD,MAAM,CAAC,GAAG,EAAE,CAAA;YAEZ,MAAM,qBAAqB,GAAmB,EAAE,CAAA;YAEhD,KAAK,MAAM,YAAY,IAAI,iBAAiB,CAAC,aAAa,EAAE,CAAC;gBAC5D,MAAM,oBAAoB,GAAa,EAAE,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAA;gBAE1G,MAAM,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAA;gBACpG,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9D,CAAC;YAED,aAAa,GAAG,EAAE,aAAa,EAAE,qBAAqB,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAA;YAE1F,MAAK;QACN,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAA;QAChE,CAAC;IACF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAEjC,MAAM,eAAe,GAAG,OAAO,CAAC,cAAe,CAAC,cAAe,CAAA;IAC/D,MAAM,kBAAkB,GAAG,OAAO,CAAC,cAAe,CAAC,UAAW,CAAA;IAC9D,MAAM,uBAAuB,GAAG,OAAO,CAAC,cAAe,CAAC,eAAgB,CAAA;IACxE,MAAM,kBAAkB,GAAG,OAAO,CAAC,cAAe,CAAC,UAAW,CAAA;IAE9D,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;IAC7E,aAAa,GAAG,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAA;IACjG,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;IAE9E,IAAI,eAAe,EAAE,CAAC;QACrB,aAAa,GAAG,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,EAAE,uBAAuB,CAAC,CAAA;IAChG,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,iBAAiB,CAAC,aAAa,EAAE,kBAAkB,GAAG,mBAAmB,CAAC,CAAA;IAC3F,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,CAAA;IAEZ,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACd,MAAM,CAAC,WAAW,CAAC,sBAAsB,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;IAE1E,OAAO;QACN,aAAa;QACb,aAAa;KACb,CAAA;AACF,CAAC;AAoBD,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACxD,MAAM,EAAE,SAAS;IAEjB,cAAc,EAAE;QACf,cAAc,EAAE,KAAK;QACrB,UAAU,EAAE,CAAC,CAAC;QACd,eAAe,EAAE,EAAE;QACnB,UAAU,EAAE,CAAC,EAAE;KACf;CACD,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IACjD;QACC,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,kEAAkE;QAC/E,IAAI,EAAE,OAAO;KACb;CACD,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { AudioSourceParam, RawAudio } from
|
|
2
|
-
import * as API from
|
|
3
|
-
import {
|
|
1
|
+
import { AudioSourceParam, RawAudio } from '../audio/AudioUtilities.js';
|
|
2
|
+
import * as API from './API.js';
|
|
3
|
+
import { WhisperModelName } from '../recognition/WhisperSTT.js';
|
|
4
|
+
import { WhisperCppOptions } from '../recognition/WhisperCppSTT.js';
|
|
4
5
|
export declare function detectSpeechLanguage(input: AudioSourceParam, options: SpeechLanguageDetectionOptions): Promise<SpeechLanguageDetectionResult>;
|
|
5
6
|
export interface SpeechLanguageDetectionResult {
|
|
6
7
|
detectedLanguage: string;
|
|
@@ -9,13 +10,19 @@ export interface SpeechLanguageDetectionResult {
|
|
|
9
10
|
inputRawAudio: RawAudio;
|
|
10
11
|
}
|
|
11
12
|
export declare function detectSpeechLanguageByParts(sourceRawAudio: RawAudio, getResultsForAudioPart: (audioPart: RawAudio) => Promise<LanguageDetectionResults>, audioPartDuration?: number, hopDuration?: number): Promise<API.LanguageDetectionResults>;
|
|
12
|
-
export type SpeechLanguageDetectionEngine =
|
|
13
|
+
export type SpeechLanguageDetectionEngine = 'silero' | 'whisper' | 'whisper.cpp';
|
|
13
14
|
export interface SpeechLanguageDetectionOptions {
|
|
14
15
|
engine?: SpeechLanguageDetectionEngine;
|
|
15
16
|
defaultLanguage?: string;
|
|
16
17
|
fallbackThresholdProbability?: number;
|
|
18
|
+
crop?: boolean;
|
|
17
19
|
silero?: {};
|
|
18
|
-
whisper?:
|
|
20
|
+
whisper?: {
|
|
21
|
+
model?: WhisperModelName;
|
|
22
|
+
temperature?: number;
|
|
23
|
+
};
|
|
24
|
+
whisperCpp?: WhisperCppOptions;
|
|
25
|
+
vad?: API.VADOptions;
|
|
19
26
|
}
|
|
20
27
|
export declare const defaultSpeechLanguageDetectionOptions: SpeechLanguageDetectionOptions;
|
|
21
28
|
export declare function detectTextLanguage(input: string, options: TextLanguageDetectionOptions): Promise<TextLanguageDetectionResult>;
|
|
@@ -25,22 +32,22 @@ export interface TextLanguageDetectionResult {
|
|
|
25
32
|
detectedLanguageProbabilities: LanguageDetectionResults;
|
|
26
33
|
}
|
|
27
34
|
export type LanguageDetectionResults = LanguageDetectionResultsEntry[];
|
|
28
|
-
export
|
|
35
|
+
export interface LanguageDetectionResultsEntry {
|
|
29
36
|
language: string;
|
|
30
37
|
languageName: string;
|
|
31
38
|
probability: number;
|
|
32
|
-
}
|
|
39
|
+
}
|
|
33
40
|
export type LanguageDetectionGroupResults = LanguageDetectionGroupResultsEntry[];
|
|
34
|
-
export
|
|
41
|
+
export interface LanguageDetectionGroupResultsEntry {
|
|
35
42
|
languageGroup: string;
|
|
36
43
|
probability: number;
|
|
37
|
-
}
|
|
38
|
-
export type TextLanguageDetectionEngine =
|
|
39
|
-
export
|
|
44
|
+
}
|
|
45
|
+
export type TextLanguageDetectionEngine = 'tinyld' | 'fasttext';
|
|
46
|
+
export interface TextLanguageDetectionOptions {
|
|
40
47
|
engine?: TextLanguageDetectionEngine;
|
|
41
48
|
defaultLanguage?: string;
|
|
42
49
|
fallbackThresholdProbability?: number;
|
|
43
|
-
}
|
|
50
|
+
}
|
|
44
51
|
export declare const defaultTextLanguageDetectionOptions: TextLanguageDetectionOptions;
|
|
45
52
|
export declare const speechLanguageDetectionEngines: API.EngineMetadata[];
|
|
46
53
|
export declare const textLanguageDetectionEngines: API.EngineMetadata[];
|