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
package/dist/api/APIOptions.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as API from
|
|
2
|
-
import type { ServerOptions } from
|
|
3
|
-
export
|
|
1
|
+
import * as API from './API.js';
|
|
2
|
+
import type { ServerOptions } from '../server/Server.js';
|
|
3
|
+
export interface APIOptions {
|
|
4
4
|
VoiceListRequestOptions: API.VoiceListRequestOptions;
|
|
5
5
|
SynthesisOptions: API.SynthesisOptions;
|
|
6
6
|
RecognitionOptions: API.RecognitionOptions;
|
|
@@ -10,5 +10,6 @@ export type APIOptions = {
|
|
|
10
10
|
TextLanguageDetectionOptions: API.TextLanguageDetectionOptions;
|
|
11
11
|
VADOptions: API.VADOptions;
|
|
12
12
|
DenoisingOptions: API.DenoisingOptions;
|
|
13
|
+
SourceSeparationOptions: API.SourceSeparationOptions;
|
|
13
14
|
ServerOptions: ServerOptions;
|
|
14
|
-
}
|
|
15
|
+
}
|
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,42 @@
|
|
|
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 { defaultSubtitlesBaseConfig } from "../subtitles/Subtitles.js";
|
|
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';
|
|
14
11
|
const log = logToStderr;
|
|
15
12
|
export async function align(input, transcript, options) {
|
|
16
13
|
const logger = new Logger();
|
|
17
14
|
const startTimestamp = logger.getTimestamp();
|
|
18
|
-
|
|
15
|
+
options = extendDeep(defaultAlignmentOptions, options);
|
|
19
16
|
const inputRawAudio = await ensureRawAudio(input);
|
|
20
|
-
let sourceRawAudio
|
|
17
|
+
let sourceRawAudio;
|
|
18
|
+
let isolatedRawAudio;
|
|
19
|
+
let backgroundRawAudio;
|
|
20
|
+
if (options.isolate) {
|
|
21
|
+
logger.log(``);
|
|
22
|
+
logger.end();
|
|
23
|
+
({ isolatedRawAudio, backgroundRawAudio } = await API.isolate(inputRawAudio, options.sourceSeparation));
|
|
24
|
+
logger.end();
|
|
25
|
+
logger.log(``);
|
|
26
|
+
sourceRawAudio = await ensureRawAudio(isolatedRawAudio, 16000, 1);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
sourceRawAudio = await ensureRawAudio(inputRawAudio, 16000, 1);
|
|
30
|
+
}
|
|
31
|
+
let sourceUncropTimeline;
|
|
32
|
+
if (options.crop) {
|
|
33
|
+
logger.start('Crop using voice activity detection');
|
|
34
|
+
({ timeline: sourceUncropTimeline, croppedRawAudio: sourceRawAudio } = await API.detectVoiceActivity(sourceRawAudio, options.vad));
|
|
35
|
+
logger.end();
|
|
36
|
+
}
|
|
37
|
+
logger.start('Prepare for alignment');
|
|
21
38
|
sourceRawAudio = normalizeAudioLevel(sourceRawAudio);
|
|
22
39
|
sourceRawAudio.audioChannels[0] = trimAudioEnd(sourceRawAudio.audioChannels[0]);
|
|
23
|
-
options = extendDeep(defaultAlignmentOptions, options);
|
|
24
40
|
if (options.dtw.windowDuration == null) {
|
|
25
41
|
const sourceAudioDuration = getRawAudioDuration(sourceRawAudio);
|
|
26
42
|
if (sourceAudioDuration < 5 * 60) { // If up to 5 minutes, set window to one minute
|
|
@@ -38,33 +54,15 @@ export async function align(input, transcript, options) {
|
|
|
38
54
|
language = normalizeLanguageCode(options.language);
|
|
39
55
|
}
|
|
40
56
|
else {
|
|
41
|
-
logger.start(
|
|
57
|
+
logger.start('No language specified. Detecting language');
|
|
42
58
|
const { detectedLanguage } = await API.detectTextLanguage(transcript, options.languageDetection || {});
|
|
43
59
|
language = detectedLanguage;
|
|
44
60
|
logger.end();
|
|
45
61
|
logger.logTitledMessage('Language detected', formatLanguageCodeWithName(detectedLanguage));
|
|
46
62
|
}
|
|
47
63
|
language = getDefaultDialectForLanguageCodeIfPossible(language);
|
|
48
|
-
logger.start(
|
|
49
|
-
const { alignUsingDtwWithRecognition, alignUsingDtw } = await import(
|
|
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
|
-
}
|
|
64
|
+
logger.start('Load alignment module');
|
|
65
|
+
const { alignUsingDtwWithRecognition: alignUsingDtwWithRecognitionReference, alignUsingDtw } = await import('../alignment/SpeechAlignment.js');
|
|
68
66
|
function getDtwWindowDurationsAndGranularities() {
|
|
69
67
|
let granularities;
|
|
70
68
|
let windowDurations;
|
|
@@ -101,66 +99,65 @@ export async function align(input, transcript, options) {
|
|
|
101
99
|
}
|
|
102
100
|
let mappedTimeline;
|
|
103
101
|
switch (options.engine) {
|
|
104
|
-
case
|
|
105
|
-
const { referenceRawAudio, referenceTimeline } = await
|
|
102
|
+
case 'dtw': {
|
|
103
|
+
const { referenceRawAudio, referenceTimeline } = await createAlignmentReferenceUsingEspeak(transcript, language, options.plainText, options.customLexiconPaths);
|
|
106
104
|
logger.end();
|
|
107
105
|
const { windowDurations, granularities } = getDtwWindowDurationsAndGranularities();
|
|
108
106
|
mappedTimeline = await alignUsingDtw(sourceRawAudio, referenceRawAudio, referenceTimeline, granularities, windowDurations);
|
|
109
107
|
break;
|
|
110
108
|
}
|
|
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 || {});
|
|
109
|
+
case 'dtw-ra': {
|
|
110
|
+
const recognitionOptions = extendDeep({ crop: options.crop, language }, options.recognition);
|
|
125
111
|
logger.end();
|
|
126
|
-
|
|
127
|
-
const {
|
|
112
|
+
// Recognize source audio
|
|
113
|
+
const { transcript: recognizedTranscript, wordTimeline: recognitionTimeline } = await API.recognize(sourceRawAudio, recognitionOptions);
|
|
114
|
+
// Synthesize the ground-truth transcript and get its timeline
|
|
115
|
+
logger.start('Synthesize ground-truth transcript with eSpeak');
|
|
116
|
+
const { referenceRawAudio, referenceTimeline, } = await createAlignmentReferenceUsingEspeak(transcript, language, options.plainText, options.customLexiconPaths, true);
|
|
117
|
+
// Synthesize the recognized transcript and get its timeline
|
|
118
|
+
logger.start('Synthesize recognized transcript with eSpeak');
|
|
119
|
+
const { referenceRawAudio: synthesizedRecognizedTranscriptRawAudio, referenceTimeline: synthesizedRecognitionTimeline } = await createAlignmentReferenceUsingEspeak(recognizedTranscript, language, undefined, undefined, true);
|
|
128
120
|
logger.end();
|
|
129
121
|
const { windowDurations, granularities } = getDtwWindowDurationsAndGranularities();
|
|
130
|
-
const espeakOptions = { ...defaultEspeakOptions, voice: espeakVoice, useKlatt: false };
|
|
131
122
|
const phoneAlignmentMethod = options.dtw.phoneAlignmentMethod;
|
|
132
|
-
|
|
123
|
+
// Align the ground-truth transcript and the recognized transcript
|
|
124
|
+
mappedTimeline = await alignUsingDtwWithRecognitionReference(sourceRawAudio, referenceRawAudio, referenceTimeline, recognitionTimeline, synthesizedRecognizedTranscriptRawAudio, synthesizedRecognitionTimeline, granularities, windowDurations, phoneAlignmentMethod);
|
|
133
125
|
break;
|
|
134
126
|
}
|
|
135
|
-
case
|
|
136
|
-
const WhisperSTT = await import(
|
|
127
|
+
case 'whisper': {
|
|
128
|
+
const WhisperSTT = await import('../recognition/WhisperSTT.js');
|
|
137
129
|
const whisperOptions = options.whisper;
|
|
138
130
|
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
|
-
}
|
|
131
|
+
const { modelName, modelDir } = await WhisperSTT.loadPackagesAndGetPaths(whisperOptions.model, language);
|
|
143
132
|
if (getRawAudioDuration(sourceRawAudio) > 30) {
|
|
144
|
-
throw new Error(
|
|
133
|
+
throw new Error('Whisper based alignment currently only supports audio inputs that are 30s or less');
|
|
145
134
|
}
|
|
146
135
|
logger.end();
|
|
147
|
-
mappedTimeline = await WhisperSTT.align(sourceRawAudio, transcript, modelName, modelDir,
|
|
136
|
+
mappedTimeline = await WhisperSTT.align(sourceRawAudio, transcript, modelName, modelDir, shortLanguageCode);
|
|
148
137
|
break;
|
|
149
138
|
}
|
|
150
139
|
default: {
|
|
151
140
|
throw new Error(`Engine '${options.engine}' is not supported`);
|
|
152
141
|
}
|
|
153
142
|
}
|
|
143
|
+
// If the audio was cropped before recognition, map the timestamps back to the original audio
|
|
144
|
+
if (sourceUncropTimeline && sourceUncropTimeline.length > 0) {
|
|
145
|
+
API.convertCroppedToUncroppedTimeline(mappedTimeline, sourceUncropTimeline);
|
|
146
|
+
}
|
|
147
|
+
// Add text offsets
|
|
154
148
|
addWordTextOffsetsToTimeline(mappedTimeline, transcript);
|
|
149
|
+
// Make segment timeline
|
|
155
150
|
const { segmentTimeline } = await wordTimelineToSegmentSentenceTimeline(mappedTimeline, transcript, language, options.plainText?.paragraphBreaks, options.plainText?.whitespace);
|
|
156
151
|
logger.end();
|
|
157
152
|
logger.logDuration(`Total alignment time`, startTimestamp, chalk.magentaBright);
|
|
158
153
|
return {
|
|
159
154
|
timeline: segmentTimeline,
|
|
160
155
|
wordTimeline: mappedTimeline,
|
|
161
|
-
inputRawAudio,
|
|
162
156
|
transcript,
|
|
163
|
-
language
|
|
157
|
+
language,
|
|
158
|
+
inputRawAudio,
|
|
159
|
+
isolatedRawAudio,
|
|
160
|
+
backgroundRawAudio,
|
|
164
161
|
};
|
|
165
162
|
}
|
|
166
163
|
export async function alignSegments(sourceRawAudio, segmentTimeline, alignmentOptions) {
|
|
@@ -183,10 +180,12 @@ export async function alignSegments(sourceRawAudio, segmentTimeline, alignmentOp
|
|
|
183
180
|
return timeline;
|
|
184
181
|
}
|
|
185
182
|
export const defaultAlignmentOptions = {
|
|
186
|
-
engine:
|
|
183
|
+
engine: 'dtw',
|
|
187
184
|
language: undefined,
|
|
188
|
-
|
|
185
|
+
isolate: false,
|
|
186
|
+
crop: true,
|
|
189
187
|
customLexiconPaths: undefined,
|
|
188
|
+
languageDetection: {},
|
|
190
189
|
plainText: {
|
|
191
190
|
paragraphBreaks: 'double',
|
|
192
191
|
whitespace: 'collapse'
|
|
@@ -197,26 +196,41 @@ export const defaultAlignmentOptions = {
|
|
|
197
196
|
windowDuration: undefined,
|
|
198
197
|
phoneAlignmentMethod: 'dtw'
|
|
199
198
|
},
|
|
200
|
-
recognition: {
|
|
201
|
-
|
|
199
|
+
recognition: {
|
|
200
|
+
whisper: {
|
|
201
|
+
temperature: 0.15,
|
|
202
|
+
topCandidateCount: 5,
|
|
203
|
+
punctuationThreshold: 0.2,
|
|
204
|
+
maxTokensPerPart: 250,
|
|
205
|
+
autoPromptParts: true,
|
|
206
|
+
suppressRepetition: true,
|
|
207
|
+
seed: undefined,
|
|
208
|
+
decodeTimestampTokens: false,
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
vad: {
|
|
212
|
+
engine: 'adaptive-gate'
|
|
213
|
+
},
|
|
214
|
+
sourceSeparation: {},
|
|
215
|
+
whisper: {}
|
|
202
216
|
};
|
|
203
217
|
export const alignmentEngines = [
|
|
204
218
|
{
|
|
205
219
|
id: 'dtw',
|
|
206
220
|
name: 'Dynamic Time Warping',
|
|
207
|
-
description: 'Makes use of
|
|
221
|
+
description: 'Makes use of a synthesized reference to find the best mapping between the spoken audio and its transcript.',
|
|
208
222
|
type: 'local'
|
|
209
223
|
},
|
|
210
224
|
{
|
|
211
225
|
id: 'dtw-ra',
|
|
212
226
|
name: 'Dynamic Time Warping with Recognition Assist',
|
|
213
|
-
description: 'Makes use of both
|
|
227
|
+
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
228
|
type: 'local'
|
|
215
229
|
},
|
|
216
230
|
{
|
|
217
231
|
id: 'whisper',
|
|
218
232
|
name: 'OpenAI Whisper',
|
|
219
|
-
description: 'Extracts timestamps from the internal state of the Whisper recognition model (note: currently limited to a maximum of
|
|
233
|
+
description: 'Extracts timestamps from the internal state of the Whisper recognition model (note: currently limited to a maximum audio duration of 30 seconds).',
|
|
220
234
|
type: 'local'
|
|
221
235
|
}
|
|
222
236
|
];
|
|
@@ -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":"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"}
|
|
@@ -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[];
|