echogarden 2.10.2 → 3.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/LICENSE.MIT.md +7 -0
- package/README.md +9 -1
- package/data/lexicons/heteronyms.en.json +44 -10
- package/data/lexicons/words.en.json +726 -22
- package/data/schemas/options.json +91 -153
- package/dist/alignment/DTWMfccSequenceAlignment.js.map +1 -1
- package/dist/alignment/SemanticTextAlignment.d.ts +4 -2
- package/dist/alignment/SemanticTextAlignment.d.ts.map +1 -1
- package/dist/alignment/SemanticTextAlignment.js +7 -7
- package/dist/alignment/SemanticTextAlignment.js.map +1 -1
- package/dist/alignment/SpeechAlignment.d.ts +9 -10
- package/dist/alignment/SpeechAlignment.d.ts.map +1 -1
- package/dist/alignment/SpeechAlignment.js +23 -96
- package/dist/alignment/SpeechAlignment.js.map +1 -1
- package/dist/api/APIOptions.d.ts +1 -1
- package/dist/api/APIOptions.d.ts.map +1 -1
- package/dist/api/Alignment.d.ts +8 -6
- package/dist/api/Alignment.d.ts.map +1 -1
- package/dist/api/Alignment.js +31 -40
- package/dist/api/Alignment.js.map +1 -1
- package/dist/api/Common.d.ts +7 -0
- package/dist/api/Common.d.ts.map +1 -1
- package/dist/api/Common.js.map +1 -1
- package/dist/api/Denoising.d.ts +5 -2
- package/dist/api/Denoising.d.ts.map +1 -1
- package/dist/api/Denoising.js +15 -15
- package/dist/api/Denoising.js.map +1 -1
- package/dist/api/GlobalOptions.d.ts +2 -8
- package/dist/api/GlobalOptions.d.ts.map +1 -1
- package/dist/api/GlobalOptions.js +2 -13
- package/dist/api/GlobalOptions.js.map +1 -1
- package/dist/api/Recognition.d.ts +11 -12
- package/dist/api/Recognition.d.ts.map +1 -1
- package/dist/api/Recognition.js +32 -82
- package/dist/api/Recognition.js.map +1 -1
- package/dist/api/SourceSeparation.d.ts +7 -2
- package/dist/api/SourceSeparation.d.ts.map +1 -1
- package/dist/api/SourceSeparation.js +12 -10
- package/dist/api/SourceSeparation.js.map +1 -1
- package/dist/api/SpeechLanguageDetection.d.ts +11 -7
- package/dist/api/SpeechLanguageDetection.d.ts.map +1 -1
- package/dist/api/SpeechLanguageDetection.js +37 -30
- package/dist/api/SpeechLanguageDetection.js.map +1 -1
- package/dist/api/SpeechSearch.d.ts +4 -1
- package/dist/api/SpeechSearch.d.ts.map +1 -1
- package/dist/api/SpeechSearch.js.map +1 -1
- package/dist/api/SpeechTranslation.d.ts +10 -6
- package/dist/api/SpeechTranslation.d.ts.map +1 -1
- package/dist/api/SpeechTranslation.js +28 -26
- package/dist/api/SpeechTranslation.js.map +1 -1
- package/dist/api/Synthesis.d.ts +13 -8
- package/dist/api/Synthesis.d.ts.map +1 -1
- package/dist/api/Synthesis.js +67 -89
- package/dist/api/Synthesis.js.map +1 -1
- package/dist/api/TextLanguageDetection.d.ts +4 -2
- package/dist/api/TextLanguageDetection.d.ts.map +1 -1
- package/dist/api/TextLanguageDetection.js +4 -7
- package/dist/api/TextLanguageDetection.js.map +1 -1
- package/dist/api/TextTranslation.d.ts +4 -2
- package/dist/api/TextTranslation.d.ts.map +1 -1
- package/dist/api/TextTranslation.js +13 -24
- package/dist/api/TextTranslation.js.map +1 -1
- package/dist/api/TimelineTranslationAlignment.d.ts +6 -3
- package/dist/api/TimelineTranslationAlignment.d.ts.map +1 -1
- package/dist/api/TimelineTranslationAlignment.js +20 -11
- package/dist/api/TimelineTranslationAlignment.js.map +1 -1
- package/dist/api/TranscriptAndTranslationAlignment.d.ts +6 -4
- package/dist/api/TranscriptAndTranslationAlignment.d.ts.map +1 -1
- package/dist/api/TranscriptAndTranslationAlignment.js +11 -12
- package/dist/api/TranscriptAndTranslationAlignment.js.map +1 -1
- package/dist/api/TranslationAlignment.d.ts +6 -4
- package/dist/api/TranslationAlignment.d.ts.map +1 -1
- package/dist/api/TranslationAlignment.js +20 -21
- package/dist/api/TranslationAlignment.js.map +1 -1
- package/dist/api/VoiceActivityDetection.d.ts +9 -8
- package/dist/api/VoiceActivityDetection.d.ts.map +1 -1
- package/dist/api/VoiceActivityDetection.js +20 -43
- package/dist/api/VoiceActivityDetection.js.map +1 -1
- package/dist/audio/AudioBufferConversion.js.map +1 -1
- package/dist/audio/AudioPlayer.d.ts +1 -3
- package/dist/audio/AudioPlayer.d.ts.map +1 -1
- package/dist/audio/AudioPlayer.js +3 -188
- package/dist/audio/AudioPlayer.js.map +1 -1
- package/dist/audio/AudioUtilities.d.ts +2 -1
- package/dist/audio/AudioUtilities.d.ts.map +1 -1
- package/dist/audio/AudioUtilities.js +2 -2
- package/dist/audio/AudioUtilities.js.map +1 -1
- package/dist/build-tools/MakeTarballsForInstalledPackages.js +3 -3
- package/dist/build-tools/MakeTarballsForInstalledPackages.js.map +1 -1
- package/dist/cli/CLI.d.ts.map +1 -1
- package/dist/cli/CLI.js +139 -92
- package/dist/cli/CLI.js.map +1 -1
- package/dist/codecs/FFMpegTranscoder.d.ts +4 -3
- package/dist/codecs/FFMpegTranscoder.d.ts.map +1 -1
- package/dist/codecs/FFMpegTranscoder.js +16 -14
- package/dist/codecs/FFMpegTranscoder.js.map +1 -1
- package/dist/codecs/TIMITCodec.d.ts.map +1 -1
- package/dist/data-structures/DynamicTypedArray.d.ts.map +1 -1
- package/dist/data-structures/DynamicTypedArray.js.map +1 -1
- package/dist/data-structures/Queue.d.ts.map +1 -1
- package/dist/data-structures/WindowedList.d.ts.map +1 -1
- package/dist/data-structures/WindowedList.js.map +1 -1
- package/dist/denoising/NSNet2.d.ts +3 -2
- package/dist/denoising/NSNet2.d.ts.map +1 -1
- package/dist/denoising/NSNet2.js +4 -4
- package/dist/denoising/NSNet2.js.map +1 -1
- package/dist/denoising/RNNoise.d.ts +2 -1
- package/dist/denoising/RNNoise.d.ts.map +1 -1
- package/dist/denoising/RNNoise.js +10 -6
- package/dist/denoising/RNNoise.js.map +1 -1
- package/dist/dsp/BiquadFilter.d.ts.map +1 -1
- package/dist/dsp/DecayingPeakEstimator.d.ts.map +1 -1
- package/dist/dsp/DecayingPeakEstimator.js.map +1 -1
- package/dist/dsp/FFT.d.ts.map +1 -1
- package/dist/dsp/FFT.js +2 -1
- package/dist/dsp/FFT.js.map +1 -1
- package/dist/dsp/KWeightingFilter.d.ts.map +1 -1
- package/dist/dsp/KWeightingFilter.js.map +1 -1
- package/dist/dsp/LoudnessEstimator.d.ts.map +1 -1
- package/dist/dsp/LoudnessEstimator.js.map +1 -1
- package/dist/dsp/MFCC.d.ts +3 -2
- package/dist/dsp/MFCC.d.ts.map +1 -1
- package/dist/dsp/MFCC.js +4 -4
- package/dist/dsp/MFCC.js.map +1 -1
- package/dist/dsp/MelSpectrogram.d.ts +10 -8
- package/dist/dsp/MelSpectrogram.d.ts.map +1 -1
- package/dist/dsp/MelSpectrogram.js +31 -34
- package/dist/dsp/MelSpectrogram.js.map +1 -1
- package/dist/dsp/Rubberband.d.ts.map +1 -1
- package/dist/dsp/Rubberband.js +8 -3
- package/dist/dsp/Rubberband.js.map +1 -1
- package/dist/dsp/Sonic.d.ts.map +1 -1
- package/dist/dsp/Sonic.js +1 -1
- package/dist/dsp/Sonic.js.map +1 -1
- package/dist/dsp/SpeexResampler.d.ts.map +1 -1
- package/dist/dsp/SpeexResampler.js +1 -1
- package/dist/dsp/SpeexResampler.js.map +1 -1
- package/dist/encodings/Ascii.d.ts +1 -1
- package/dist/encodings/Ascii.d.ts.map +1 -1
- package/dist/encodings/Base64.js.map +1 -1
- package/dist/encodings/Utf16.d.ts.map +1 -1
- package/dist/encodings/Utf8.d.ts.map +1 -1
- package/dist/math/VectorMath.d.ts +1 -0
- package/dist/math/VectorMath.d.ts.map +1 -1
- package/dist/math/VectorMath.js +9 -5
- package/dist/math/VectorMath.js.map +1 -1
- package/dist/nlp/ChineseSegmentation.d.ts +1 -1
- package/dist/nlp/ChineseSegmentation.d.ts.map +1 -1
- package/dist/nlp/EspeakPhonemizer.d.ts +1 -1
- package/dist/nlp/EspeakPhonemizer.d.ts.map +1 -1
- package/dist/nlp/EspeakPhonemizer.js +2 -2
- package/dist/nlp/EspeakPhonemizer.js.map +1 -1
- package/dist/nlp/IPA.d.ts +2 -2
- package/dist/nlp/Segmentation.d.ts +1 -1
- package/dist/nlp/Segmentation.d.ts.map +1 -1
- package/dist/nlp/Segmentation.js +8 -4
- package/dist/nlp/Segmentation.js.map +1 -1
- package/dist/recognition/AmazonTranscribeSTT.d.ts +2 -1
- package/dist/recognition/AmazonTranscribeSTT.d.ts.map +1 -1
- package/dist/recognition/AmazonTranscribeSTT.js +3 -3
- package/dist/recognition/AmazonTranscribeSTT.js.map +1 -1
- package/dist/recognition/AzureCognitiveServicesSTT.d.ts +2 -1
- package/dist/recognition/AzureCognitiveServicesSTT.d.ts.map +1 -1
- package/dist/recognition/AzureCognitiveServicesSTT.js +4 -4
- package/dist/recognition/AzureCognitiveServicesSTT.js.map +1 -1
- package/dist/recognition/DeepgramSTT.d.ts +2 -1
- package/dist/recognition/DeepgramSTT.d.ts.map +1 -1
- package/dist/recognition/DeepgramSTT.js +12 -13
- package/dist/recognition/DeepgramSTT.js.map +1 -1
- package/dist/recognition/GoogleCloudSTT.d.ts +2 -1
- package/dist/recognition/GoogleCloudSTT.d.ts.map +1 -1
- package/dist/recognition/GoogleCloudSTT.js +11 -10
- package/dist/recognition/GoogleCloudSTT.js.map +1 -1
- package/dist/recognition/OpenAICloudSTT.d.ts +2 -1
- package/dist/recognition/OpenAICloudSTT.d.ts.map +1 -1
- package/dist/recognition/OpenAICloudSTT.js +6 -6
- package/dist/recognition/OpenAICloudSTT.js.map +1 -1
- package/dist/recognition/WhisperCommon.d.ts +9 -0
- package/dist/recognition/WhisperCommon.d.ts.map +1 -0
- package/dist/recognition/WhisperCommon.js +52 -0
- package/dist/recognition/WhisperCommon.js.map +1 -0
- package/dist/recognition/{WhisperCppSTT.d.ts → WhisperCppCliSTT.d.ts} +14 -16
- package/dist/recognition/WhisperCppCliSTT.d.ts.map +1 -0
- package/dist/recognition/{WhisperCppSTT.js → WhisperCppCliSTT.js} +55 -84
- package/dist/recognition/WhisperCppCliSTT.js.map +1 -0
- package/dist/recognition/WhisperSTT.d.ts +72 -85
- package/dist/recognition/WhisperSTT.d.ts.map +1 -1
- package/dist/recognition/WhisperSTT.js +384 -519
- package/dist/recognition/WhisperSTT.js.map +1 -1
- package/dist/server/Client.d.ts +2 -2
- package/dist/server/Client.d.ts.map +1 -1
- package/dist/server/Client.js.map +1 -1
- package/dist/server/Worker.d.ts +6 -7
- package/dist/server/Worker.d.ts.map +1 -1
- package/dist/server/Worker.js +42 -44
- package/dist/server/Worker.js.map +1 -1
- package/dist/source-separation/MDXNetSourceSeparation.d.ts +3 -2
- package/dist/source-separation/MDXNetSourceSeparation.d.ts.map +1 -1
- package/dist/source-separation/MDXNetSourceSeparation.js +10 -8
- package/dist/source-separation/MDXNetSourceSeparation.js.map +1 -1
- package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.d.ts +3 -2
- package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.d.ts.map +1 -1
- package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.js +5 -5
- package/dist/speech-embeddings/WavToVec2BertFeatureEmbeddings.js.map +1 -1
- package/dist/speech-language-detection/SileroLanguageDetection.d.ts +5 -3
- package/dist/speech-language-detection/SileroLanguageDetection.d.ts.map +1 -1
- package/dist/speech-language-detection/SileroLanguageDetection.js +8 -8
- package/dist/speech-language-detection/SileroLanguageDetection.js.map +1 -1
- package/dist/speech-search/DTWSpeechSearch.d.ts +2 -1
- package/dist/speech-search/DTWSpeechSearch.d.ts.map +1 -1
- package/dist/speech-search/DTWSpeechSearch.js +4 -4
- package/dist/speech-search/DTWSpeechSearch.js.map +1 -1
- package/dist/subtitles/Subtitles.d.ts +13 -1
- package/dist/subtitles/Subtitles.d.ts.map +1 -1
- package/dist/subtitles/Subtitles.js +22 -22
- package/dist/subtitles/Subtitles.js.map +1 -1
- package/dist/synthesis/AwsPollyTTS.d.ts +3 -2
- package/dist/synthesis/AwsPollyTTS.d.ts.map +1 -1
- package/dist/synthesis/AwsPollyTTS.js +5 -5
- package/dist/synthesis/AwsPollyTTS.js.map +1 -1
- package/dist/synthesis/AzureCognitiveServicesTTS.d.ts +2 -1
- package/dist/synthesis/AzureCognitiveServicesTTS.d.ts.map +1 -1
- package/dist/synthesis/AzureCognitiveServicesTTS.js +3 -3
- package/dist/synthesis/AzureCognitiveServicesTTS.js.map +1 -1
- package/dist/synthesis/CoquiServerTTS.d.ts +2 -1
- package/dist/synthesis/CoquiServerTTS.d.ts.map +1 -1
- package/dist/synthesis/CoquiServerTTS.js +7 -8
- package/dist/synthesis/CoquiServerTTS.js.map +1 -1
- package/dist/synthesis/DeepgramTTS.d.ts +2 -2
- package/dist/synthesis/DeepgramTTS.d.ts.map +1 -1
- package/dist/synthesis/DeepgramTTS.js +13 -13
- package/dist/synthesis/DeepgramTTS.js.map +1 -1
- package/dist/synthesis/ElevenLabsTTS.d.ts +3 -3
- package/dist/synthesis/ElevenLabsTTS.d.ts.map +1 -1
- package/dist/synthesis/ElevenLabsTTS.js +22 -21
- package/dist/synthesis/ElevenLabsTTS.js.map +1 -1
- package/dist/synthesis/EspeakTTS.d.ts +11 -9
- package/dist/synthesis/EspeakTTS.d.ts.map +1 -1
- package/dist/synthesis/EspeakTTS.js +118 -68
- package/dist/synthesis/EspeakTTS.js.map +1 -1
- package/dist/synthesis/FliteTTS.d.ts +2 -2
- package/dist/synthesis/FliteTTS.d.ts.map +1 -1
- package/dist/synthesis/FliteTTS.js +2 -2
- package/dist/synthesis/FliteTTS.js.map +1 -1
- package/dist/synthesis/GnuSpeechTTS.d.ts +2 -2
- package/dist/synthesis/GnuSpeechTTS.d.ts.map +1 -1
- package/dist/synthesis/GnuSpeechTTS.js +1 -1
- package/dist/synthesis/GnuSpeechTTS.js.map +1 -1
- package/dist/synthesis/GoogleCloudTTS.d.ts +3 -2
- package/dist/synthesis/GoogleCloudTTS.d.ts.map +1 -1
- package/dist/synthesis/GoogleCloudTTS.js +15 -14
- package/dist/synthesis/GoogleCloudTTS.js.map +1 -1
- package/dist/synthesis/GoogleTranslateTTS.d.ts +3 -2
- package/dist/synthesis/GoogleTranslateTTS.d.ts.map +1 -1
- package/dist/synthesis/GoogleTranslateTTS.js +11 -11
- package/dist/synthesis/GoogleTranslateTTS.js.map +1 -1
- package/dist/synthesis/KokoroTTS.d.ts +4 -4
- package/dist/synthesis/KokoroTTS.d.ts.map +1 -1
- package/dist/synthesis/KokoroTTS.js +11 -10
- package/dist/synthesis/KokoroTTS.js.map +1 -1
- package/dist/synthesis/MicrosoftEdgeTTS.d.ts +4 -3
- package/dist/synthesis/MicrosoftEdgeTTS.d.ts.map +1 -1
- package/dist/synthesis/MicrosoftEdgeTTS.js +41 -20
- package/dist/synthesis/MicrosoftEdgeTTS.js.map +1 -1
- package/dist/synthesis/OpenAICloudTTS.d.ts +2 -2
- package/dist/synthesis/OpenAICloudTTS.d.ts.map +1 -1
- package/dist/synthesis/OpenAICloudTTS.js +6 -5
- package/dist/synthesis/OpenAICloudTTS.js.map +1 -1
- package/dist/synthesis/SamTTS.d.ts +2 -1
- package/dist/synthesis/SamTTS.d.ts.map +1 -1
- package/dist/synthesis/SamTTS.js +2 -2
- package/dist/synthesis/SamTTS.js.map +1 -1
- package/dist/synthesis/SapiTTS.d.ts +2 -2
- package/dist/synthesis/SapiTTS.d.ts.map +1 -1
- package/dist/synthesis/SapiTTS.js +2 -2
- package/dist/synthesis/SapiTTS.js.map +1 -1
- package/dist/synthesis/SvoxPicoTTS.d.ts +2 -2
- package/dist/synthesis/SvoxPicoTTS.d.ts.map +1 -1
- package/dist/synthesis/SvoxPicoTTS.js +3 -3
- package/dist/synthesis/SvoxPicoTTS.js.map +1 -1
- package/dist/synthesis/VitsTTS.d.ts +3 -3
- package/dist/synthesis/VitsTTS.d.ts.map +1 -1
- package/dist/synthesis/VitsTTS.js +14 -11
- package/dist/synthesis/VitsTTS.js.map +1 -1
- package/dist/text-translation/DeepLTextTranslation.d.ts +2 -2
- package/dist/text-translation/DeepLTextTranslation.d.ts.map +1 -1
- package/dist/text-translation/DeepLTextTranslation.js +10 -9
- package/dist/text-translation/DeepLTextTranslation.js.map +1 -1
- package/dist/text-translation/GoogleTranslateTextTranslation.d.ts +4 -4
- package/dist/text-translation/GoogleTranslateTextTranslation.d.ts.map +1 -1
- package/dist/text-translation/GoogleTranslateTextTranslation.js +20 -18
- package/dist/text-translation/GoogleTranslateTextTranslation.js.map +1 -1
- package/dist/text-translation/NLLBTextTranslation.d.ts +2 -2
- package/dist/text-translation/NLLBTextTranslation.d.ts.map +1 -1
- package/dist/text-translation/NLLBTextTranslation.js +4 -6
- package/dist/text-translation/NLLBTextTranslation.js.map +1 -1
- package/dist/typings/TypedArray.d.ts.map +1 -1
- package/dist/utilities/Compression.d.ts +4 -3
- package/dist/utilities/Compression.d.ts.map +1 -1
- package/dist/utilities/Compression.js +9 -9
- package/dist/utilities/Compression.js.map +1 -1
- package/dist/utilities/FileDownloader.d.ts +6 -3
- package/dist/utilities/FileDownloader.d.ts.map +1 -1
- package/dist/utilities/FileDownloader.js +25 -21
- package/dist/utilities/FileDownloader.js.map +1 -1
- package/dist/utilities/FileReader.d.ts.map +1 -1
- package/dist/utilities/FileReader.js.map +1 -1
- package/dist/utilities/FileSystem.js +1 -1
- package/dist/utilities/FileSystem.js.map +1 -1
- package/dist/utilities/FileWriter.d.ts.map +1 -1
- package/dist/utilities/FileWriter.js.map +1 -1
- package/dist/utilities/Hashing.d.ts.map +1 -1
- package/dist/utilities/Hashing.js.map +1 -1
- package/dist/utilities/Locale.js.map +1 -1
- package/dist/utilities/Logger.d.ts +17 -9
- package/dist/utilities/Logger.d.ts.map +1 -1
- package/dist/utilities/Logger.js +50 -35
- package/dist/utilities/Logger.js.map +1 -1
- package/dist/utilities/NpmUtilities.d.ts.map +1 -1
- package/dist/utilities/NpmUtilities.js +4 -5
- package/dist/utilities/NpmUtilities.js.map +1 -1
- package/dist/utilities/ObjectUtilities.js.map +1 -1
- package/dist/utilities/OpenPromise.d.ts.map +1 -1
- package/dist/utilities/OpenPromise.js.map +1 -1
- package/dist/utilities/PackageManager.d.ts +4 -1
- package/dist/utilities/PackageManager.d.ts.map +1 -1
- package/dist/utilities/PackageManager.js +37 -22
- package/dist/utilities/PackageManager.js.map +1 -1
- package/dist/utilities/PathUtilities.d.ts +2 -0
- package/dist/utilities/PathUtilities.d.ts.map +1 -1
- package/dist/utilities/PathUtilities.js +5 -2
- package/dist/utilities/PathUtilities.js.map +1 -1
- package/dist/utilities/RandomGenerator.d.ts.map +1 -1
- package/dist/utilities/SignalChannel.d.ts.map +1 -1
- package/dist/utilities/SmoothEstimator.d.ts.map +1 -1
- package/dist/utilities/SmoothEstimator.js.map +1 -1
- package/dist/utilities/StringBuilder.d.ts.map +1 -1
- package/dist/utilities/TarballMaker.d.ts +4 -3
- package/dist/utilities/TarballMaker.d.ts.map +1 -1
- package/dist/utilities/TarballMaker.js +6 -6
- package/dist/utilities/TarballMaker.js.map +1 -1
- package/dist/utilities/Timeline.js.map +1 -1
- package/dist/utilities/Timer.d.ts.map +1 -1
- package/dist/utilities/Utilities.d.ts +9 -7
- package/dist/utilities/Utilities.d.ts.map +1 -1
- package/dist/utilities/Utilities.js +49 -33
- package/dist/utilities/Utilities.js.map +1 -1
- package/dist/utilities/VirtualFileReadStream.d.ts.map +1 -1
- package/dist/utilities/WebReader.d.ts +2 -1
- package/dist/utilities/WebReader.d.ts.map +1 -1
- package/dist/utilities/WebReader.js +7 -6
- package/dist/utilities/WebReader.js.map +1 -1
- package/dist/utilities/WikipediaReader.d.ts +2 -1
- package/dist/utilities/WikipediaReader.d.ts.map +1 -1
- package/dist/utilities/WikipediaReader.js +1 -5
- package/dist/utilities/WikipediaReader.js.map +1 -1
- package/dist/voice-activity-detection/AdaptiveGateVAD.d.ts +2 -1
- package/dist/voice-activity-detection/AdaptiveGateVAD.d.ts.map +1 -1
- package/dist/voice-activity-detection/AdaptiveGateVAD.js +1 -1
- package/dist/voice-activity-detection/AdaptiveGateVAD.js.map +1 -1
- package/dist/voice-activity-detection/SileroVAD.d.ts.map +1 -1
- package/dist/voice-activity-detection/SileroVAD.js.map +1 -1
- package/dist/voice-activity-detection/WebRtcVAD.d.ts.map +1 -1
- package/dist/voice-activity-detection/WebRtcVAD.js +1 -1
- package/dist/voice-activity-detection/WebRtcVAD.js.map +1 -1
- package/docs/API.md +62 -17
- package/docs/CUDA.md +4 -3
- package/docs/Engines.md +8 -7
- package/docs/Licenses.md +0 -3
- package/docs/Options.md +27 -31
- package/docs/Server.md +1 -0
- package/docs/Tasklist.md +2 -1
- package/docs/Technical.md +2 -2
- package/package.json +45 -35
- package/src/alignment/SemanticTextAlignment.ts +14 -7
- package/src/alignment/SpeechAlignment.ts +47 -150
- package/src/api/APIOptions.ts +1 -1
- package/src/api/Alignment.ts +95 -61
- package/src/api/Common.ts +11 -0
- package/src/api/Denoising.ts +22 -17
- package/src/api/GlobalOptions.ts +4 -20
- package/src/api/Recognition.ts +106 -123
- package/src/api/SourceSeparation.ts +39 -21
- package/src/api/SpeechLanguageDetection.ts +77 -37
- package/src/api/SpeechSearch.ts +6 -1
- package/src/api/SpeechTranslation.ts +75 -38
- package/src/api/Synthesis.ts +220 -116
- package/src/api/TextLanguageDetection.ts +10 -12
- package/src/api/TextTranslation.ts +43 -26
- package/src/api/TimelineTranslationAlignment.ts +41 -13
- package/src/api/TranscriptAndTranslationAlignment.ts +28 -15
- package/src/api/TranslationAlignment.ts +53 -24
- package/src/api/VoiceActivityDetection.ts +33 -68
- package/src/audio/AudioPlayer.ts +4 -232
- package/src/audio/AudioUtilities.ts +9 -2
- package/src/build-tools/MakeTarballsForInstalledPackages.ts +4 -3
- package/src/cli/CLI.ts +209 -101
- package/src/codecs/FFMpegTranscoder.ts +18 -16
- package/src/denoising/NSNet2.ts +5 -4
- package/src/denoising/RNNoise.ts +14 -6
- package/src/dsp/FFT.ts +2 -1
- package/src/dsp/MFCC.ts +7 -5
- package/src/dsp/MelSpectrogram.ts +56 -36
- package/src/dsp/Rubberband.ts +10 -3
- package/src/dsp/Sonic.ts +2 -1
- package/src/dsp/SpeexResampler.ts +2 -1
- package/src/encodings/Ascii.ts +1 -1
- package/src/encodings/Base64.ts +1 -1
- package/src/math/VectorMath.ts +10 -6
- package/src/nlp/EspeakPhonemizer.ts +2 -2
- package/src/nlp/Segmentation.ts +9 -4
- package/src/recognition/AmazonTranscribeSTT.ts +4 -3
- package/src/recognition/AzureCognitiveServicesSTT.ts +5 -4
- package/src/recognition/DeepgramSTT.ts +16 -16
- package/src/recognition/GoogleCloudSTT.ts +14 -12
- package/src/recognition/OpenAICloudSTT.ts +12 -6
- package/src/recognition/WhisperCommon.ts +130 -0
- package/src/recognition/{WhisperCppSTT.ts → WhisperCppCliSTT.ts} +73 -133
- package/src/recognition/WhisperSTT.ts +569 -718
- package/src/server/Client.ts +4 -4
- package/src/server/Worker.ts +59 -59
- package/src/source-separation/MDXNetSourceSeparation.ts +15 -10
- package/src/speech-embeddings/WavToVec2BertFeatureEmbeddings.ts +7 -5
- package/src/speech-language-detection/SileroLanguageDetection.ts +18 -9
- package/src/speech-search/DTWSpeechSearch.ts +6 -5
- package/src/subtitles/Subtitles.ts +22 -22
- package/src/synthesis/AwsPollyTTS.ts +12 -5
- package/src/synthesis/AzureCognitiveServicesTTS.ts +11 -3
- package/src/synthesis/CoquiServerTTS.ts +8 -7
- package/src/synthesis/DeepgramTTS.ts +21 -15
- package/src/synthesis/ElevenLabsTTS.ts +33 -23
- package/src/synthesis/EspeakTTS.ts +145 -69
- package/src/synthesis/FliteTTS.ts +3 -3
- package/src/synthesis/GnuSpeechTTS.ts +2 -2
- package/src/synthesis/GoogleCloudTTS.ts +23 -14
- package/src/synthesis/GoogleTranslateTTS.ts +19 -11
- package/src/synthesis/KokoroTTS.ts +37 -14
- package/src/synthesis/MicrosoftEdgeTTS.ts +71 -23
- package/src/synthesis/OpenAICloudTTS.ts +7 -6
- package/src/synthesis/SamTTS.ts +3 -2
- package/src/synthesis/SapiTTS.ts +3 -3
- package/src/synthesis/SvoxPicoTTS.ts +4 -5
- package/src/synthesis/VitsTTS.ts +43 -15
- package/src/text-translation/DeepLTextTranslation.ts +12 -10
- package/src/text-translation/GoogleTranslateTextTranslation.ts +35 -21
- package/src/text-translation/NLLBTextTranslation.ts +5 -9
- package/src/typings/Fillers.d.ts +0 -60
- package/src/typings/TypedArray.ts +12 -1
- package/src/utilities/Compression.ts +10 -9
- package/src/utilities/FileDownloader.ts +38 -23
- package/src/utilities/FileSystem.ts +1 -1
- package/src/utilities/Logger.ts +59 -42
- package/src/utilities/NpmUtilities.ts +4 -6
- package/src/utilities/OpenPromise.ts +1 -2
- package/src/utilities/PackageManager.ts +53 -26
- package/src/utilities/PathUtilities.ts +6 -2
- package/src/utilities/TarballMaker.ts +7 -7
- package/src/utilities/Utilities.ts +58 -41
- package/src/utilities/WebReader.ts +11 -6
- package/src/utilities/WikipediaReader.ts +2 -8
- package/src/voice-activity-detection/AdaptiveGateVAD.ts +13 -8
- package/src/voice-activity-detection/WebRtcVAD.ts +1 -2
- package/tsconfig.json +53 -54
- package/dist/audio/AudioRecorder.d.ts +0 -4
- package/dist/audio/AudioRecorder.d.ts.map +0 -1
- package/dist/audio/AudioRecorder.js +0 -68
- package/dist/audio/AudioRecorder.js.map +0 -1
- package/dist/audio/SoxPath.d.ts +0 -2
- package/dist/audio/SoxPath.d.ts.map +0 -1
- package/dist/audio/SoxPath.js +0 -24
- package/dist/audio/SoxPath.js.map +0 -1
- package/dist/recognition/SileroSTT.d.ts +0 -30
- package/dist/recognition/SileroSTT.d.ts.map +0 -1
- package/dist/recognition/SileroSTT.js +0 -152
- package/dist/recognition/SileroSTT.js.map +0 -1
- package/dist/recognition/VoskSTT.d.ts +0 -11
- package/dist/recognition/VoskSTT.d.ts.map +0 -1
- package/dist/recognition/VoskSTT.js +0 -72
- package/dist/recognition/VoskSTT.js.map +0 -1
- package/dist/recognition/WhisperCppSTT.d.ts.map +0 -1
- package/dist/recognition/WhisperCppSTT.js.map +0 -1
- package/dist/synthesis/StreamlabsPollyTTS.d.ts +0 -12
- package/dist/synthesis/StreamlabsPollyTTS.d.ts.map +0 -1
- package/dist/synthesis/StreamlabsPollyTTS.js +0 -88
- package/dist/synthesis/StreamlabsPollyTTS.js.map +0 -1
- package/dist/utilities/BinaryUtilities.d.ts +0 -14
- package/dist/utilities/BinaryUtilities.d.ts.map +0 -1
- package/dist/utilities/BinaryUtilities.js +0 -113
- package/dist/utilities/BinaryUtilities.js.map +0 -1
- package/src/audio/AudioRecorder.ts +0 -91
- package/src/audio/SoxPath.ts +0 -31
- package/src/recognition/SileroSTT.ts +0 -222
- package/src/recognition/VoskSTT.ts +0 -112
- package/src/synthesis/StreamlabsPollyTTS.ts +0 -114
- package/src/utilities/BinaryUtilities.ts +0 -138
- /package/{LICENSE.md → LICENSE.GPLv3.md} +0 -0
package/src/api/Denoising.ts
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
|
+
import chalk from 'chalk'
|
|
2
|
+
|
|
3
|
+
import * as API from './API.js'
|
|
4
|
+
|
|
1
5
|
import { extendDeep } from '../utilities/ObjectUtilities.js'
|
|
2
6
|
|
|
3
7
|
import { AudioSourceParam, RawAudio, applyGainDecibels, applyGainDecibelsInPlace, attenuateIfClippingInPlace, ensureRawAudio, getSamplePeakDecibels, mixAudio, normalizeAudioLevelInPlace } from '../audio/AudioUtilities.js'
|
|
4
8
|
import { Logger } from '../utilities/Logger.js'
|
|
5
9
|
|
|
6
|
-
import { logToStderr } from '../utilities/Utilities.js'
|
|
7
10
|
import { resampleAudioSpeex } from '../dsp/SpeexResampler.js'
|
|
8
11
|
import { EngineMetadata } from './Common.js'
|
|
9
|
-
import chalk from 'chalk'
|
|
10
12
|
import { defaultNSNet2Options, NSNet2Options } from '../denoising/NSNet2.js'
|
|
11
13
|
import { loadPackage } from '../utilities/PackageManager.js'
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
export async function denoise(input: AudioSourceParam, options: DenoisingOptions, callbacks?: DenoisingCallbacks) {
|
|
16
|
+
options = extendDeep(defaultDenoisingOptions, options)
|
|
17
|
+
callbacks = { logLevel: API.getGlobalLogLevel(), ...callbacks }
|
|
18
|
+
|
|
19
|
+
const logger = new Logger(callbacks.logLevel)
|
|
14
20
|
|
|
15
|
-
export async function denoise(input: AudioSourceParam, options: DenoisingOptions) {
|
|
16
|
-
const logger = new Logger()
|
|
17
21
|
const startTime = logger.getTimestamp()
|
|
18
22
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const inputRawAudio = await ensureRawAudio(input)
|
|
23
|
+
const inputRawAudio = await ensureRawAudio(input, undefined, undefined, callbacks)
|
|
22
24
|
|
|
23
25
|
logger.start(`Initialize ${options.engine} module`)
|
|
24
26
|
|
|
@@ -42,9 +44,9 @@ export async function denoise(input: AudioSourceParam, options: DenoisingOptions
|
|
|
42
44
|
const audioChannelRawAudio: RawAudio = { audioChannels: [audioChannel], sampleRate: processingSampleRate }
|
|
43
45
|
|
|
44
46
|
logger.end()
|
|
45
|
-
logger.logTitledMessage(`Denoise audio channel`, `${channelIndex}`, chalk.magentaBright)
|
|
47
|
+
logger.logTitledMessage(`Denoise audio channel`, `${channelIndex}`, 'info', chalk.magentaBright)
|
|
46
48
|
|
|
47
|
-
const { denoisedRawAudio, frameVadProbabilities } = await RNNoise.denoiseAudio(audioChannelRawAudio)
|
|
49
|
+
const { denoisedRawAudio, frameVadProbabilities } = await RNNoise.denoiseAudio(audioChannelRawAudio, callbacks)
|
|
48
50
|
|
|
49
51
|
logger.end()
|
|
50
52
|
|
|
@@ -78,7 +80,7 @@ export async function denoise(input: AudioSourceParam, options: DenoisingOptions
|
|
|
78
80
|
}
|
|
79
81
|
|
|
80
82
|
if (!nsnet2Options.modelDirectoryPath) {
|
|
81
|
-
nsnet2Options.modelDirectoryPath = await loadPackage(packageName)
|
|
83
|
+
nsnet2Options.modelDirectoryPath = await loadPackage(packageName, callbacks)
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
logger.start(`Resample audio to ${processingSampleRate} Hz`)
|
|
@@ -93,9 +95,9 @@ export async function denoise(input: AudioSourceParam, options: DenoisingOptions
|
|
|
93
95
|
|
|
94
96
|
logger.end()
|
|
95
97
|
|
|
96
|
-
logger.logTitledMessage(`Denoise audio channel`, `${channelIndex}`, chalk.magentaBright)
|
|
98
|
+
logger.logTitledMessage(`Denoise audio channel`, `${channelIndex}`, 'info', chalk.magentaBright)
|
|
97
99
|
|
|
98
|
-
const { denoisedAudio } = await NSNet2.denoiseAudio(audioChannelRawAudio, nsnet2Options)
|
|
100
|
+
const { denoisedAudio } = await NSNet2.denoiseAudio(audioChannelRawAudio, nsnet2Options, callbacks)
|
|
99
101
|
|
|
100
102
|
logger.end()
|
|
101
103
|
|
|
@@ -112,11 +114,11 @@ export async function denoise(input: AudioSourceParam, options: DenoisingOptions
|
|
|
112
114
|
}
|
|
113
115
|
}
|
|
114
116
|
|
|
115
|
-
logger.logTitledMessage(`Postprocess`, ``, chalk.magentaBright)
|
|
117
|
+
logger.logTitledMessage(`Postprocess`, ``, 'info', chalk.magentaBright)
|
|
116
118
|
|
|
117
119
|
logger.start(`Resample denoised audio (${denoisedAudio.sampleRate} Hz) back to original sample rate (${inputRawAudio.sampleRate} Hz)`)
|
|
118
120
|
|
|
119
|
-
denoisedAudio = await ensureRawAudio(denoisedAudio, inputRawAudio.sampleRate, inputRawAudio.audioChannels.length)
|
|
121
|
+
denoisedAudio = await ensureRawAudio(denoisedAudio, inputRawAudio.sampleRate, inputRawAudio.audioChannels.length, callbacks)
|
|
120
122
|
|
|
121
123
|
logger.start('Postprocess audio')
|
|
122
124
|
|
|
@@ -141,7 +143,7 @@ export async function denoise(input: AudioSourceParam, options: DenoisingOptions
|
|
|
141
143
|
logger.end()
|
|
142
144
|
|
|
143
145
|
logger.log('')
|
|
144
|
-
logger.logDuration('Total denoising time', startTime, chalk.magentaBright)
|
|
146
|
+
logger.logDuration('Total denoising time', startTime, 'info', chalk.magentaBright)
|
|
145
147
|
|
|
146
148
|
return {
|
|
147
149
|
denoisedAudio,
|
|
@@ -156,7 +158,7 @@ export interface DenoisingResult {
|
|
|
156
158
|
|
|
157
159
|
export type DenoisingEngine = 'rnnoise' | 'nsnet2'
|
|
158
160
|
|
|
159
|
-
export interface DenoisingOptions {
|
|
161
|
+
export interface DenoisingOptions extends API.OperationOptions {
|
|
160
162
|
engine?: DenoisingEngine,
|
|
161
163
|
|
|
162
164
|
postProcessing?: {
|
|
@@ -183,6 +185,9 @@ export const defaultDenoisingOptions: DenoisingOptions = {
|
|
|
183
185
|
nsnet2: defaultNSNet2Options,
|
|
184
186
|
}
|
|
185
187
|
|
|
188
|
+
export interface DenoisingCallbacks extends API.OperationCallbacks {
|
|
189
|
+
}
|
|
190
|
+
|
|
186
191
|
export const denoisingEngines: EngineMetadata[] = [
|
|
187
192
|
{
|
|
188
193
|
id: 'rnnoise',
|
package/src/api/GlobalOptions.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { LogLevel, logLevelGreaterOrEqualTo } from "../utilities/Logger.js"
|
|
2
|
+
|
|
1
3
|
export function getGlobalOption<K extends keyof GlobalOptions>(key: K): GlobalOptions[K] {
|
|
2
4
|
if (!listGlobalOptions().includes(key)) {
|
|
3
5
|
throw new Error(`Unknown global option key '${key}'`)
|
|
@@ -18,36 +20,18 @@ export function listGlobalOptions() {
|
|
|
18
20
|
return Object.keys(globalOptions)
|
|
19
21
|
}
|
|
20
22
|
|
|
21
|
-
export function
|
|
22
|
-
return
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export function getLogLevel() {
|
|
26
|
-
return globalOptions.logLevel ?? 'info'
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function logLevelGreaterOrEqualTo(referenceLevel: LogLevel) {
|
|
30
|
-
return !logLevelSmallerThan(referenceLevel)
|
|
23
|
+
export function getGlobalLogLevel() {
|
|
24
|
+
return getGlobalOption('logLevel') ?? 'info'
|
|
31
25
|
}
|
|
32
26
|
|
|
33
|
-
export function logLevelSmallerThan(referenceLevel: LogLevel) {
|
|
34
|
-
return logLevelToNumber(getLogLevel()) < logLevelToNumber(referenceLevel)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const logLevels = ['silent', 'output', 'error', 'warning', 'info', 'trace'] as const
|
|
38
|
-
|
|
39
|
-
export type LogLevel = typeof logLevels[number]
|
|
40
|
-
|
|
41
27
|
export interface GlobalOptions {
|
|
42
28
|
ffmpegPath?: string
|
|
43
|
-
soxPath?: string
|
|
44
29
|
packageBaseURL?: string
|
|
45
30
|
logLevel?: LogLevel
|
|
46
31
|
}
|
|
47
32
|
|
|
48
33
|
const globalOptions: GlobalOptions = {
|
|
49
34
|
ffmpegPath: undefined,
|
|
50
|
-
soxPath: undefined,
|
|
51
35
|
packageBaseURL: 'https://huggingface.co/echogarden/echogarden-packages/resolve/main/',
|
|
52
36
|
logLevel: 'info',
|
|
53
37
|
}
|
package/src/api/Recognition.ts
CHANGED
|
@@ -4,58 +4,61 @@ import * as API from './API.js'
|
|
|
4
4
|
|
|
5
5
|
import { extendDeep } from '../utilities/ObjectUtilities.js'
|
|
6
6
|
|
|
7
|
-
import { logToStderr } from '../utilities/Utilities.js'
|
|
8
7
|
import { AudioSourceParam, RawAudio, ensureRawAudio, normalizeAudioLevelInPlace, trimAudioEnd } from '../audio/AudioUtilities.js'
|
|
9
8
|
import { Logger } from '../utilities/Logger.js'
|
|
10
9
|
|
|
11
10
|
import { Timeline, addWordTextOffsetsToTimelineInPlace, wordTimelineToSegmentSentenceTimeline } from '../utilities/Timeline.js'
|
|
12
11
|
import { formatLanguageCodeWithName, parseLangIdentifier } from '../utilities/Locale.js'
|
|
13
|
-
import { loadPackage } from '../utilities/PackageManager.js'
|
|
14
12
|
|
|
15
|
-
import { type WhisperPartCallback, type
|
|
13
|
+
import { type WhisperOptions, type WhisperPartCallback, type WhisperTokenCallback } from '../recognition/WhisperSTT.js'
|
|
16
14
|
import { type SubtitlesConfig } from '../subtitles/Subtitles.js'
|
|
17
15
|
import { type OpenAICloudSTTOptions } from '../recognition/OpenAICloudSTT.js'
|
|
18
|
-
import { type
|
|
19
|
-
import { type SileroRecognitionOptions } from '../recognition/SileroSTT.js'
|
|
16
|
+
import { type WhisperCppCliOptions } from '../recognition/WhisperCppCliSTT.js'
|
|
20
17
|
import { type DeepgramSTTOptions } from '../recognition/DeepgramSTT.js'
|
|
21
|
-
import { type OnnxExecutionProvider } from '../utilities/OnnxUtilities.js'
|
|
22
18
|
|
|
23
|
-
|
|
19
|
+
export async function recognize(input: AudioSourceParam, options: RecognitionOptions, callbacks?: RecognitionCallbacks): Promise<RecognitionResult> {
|
|
20
|
+
options = extendDeep(defaultRecognitionOptions, options)
|
|
21
|
+
callbacks = { logLevel: API.getGlobalLogLevel(), ...callbacks }
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
const logger = new Logger()
|
|
23
|
+
const logger = new Logger(callbacks.logLevel)
|
|
27
24
|
|
|
28
25
|
const startTimestamp = logger.getTimestamp()
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const inputRawAudio = await ensureRawAudio(input)
|
|
27
|
+
const inputRawAudio = await ensureRawAudio(input, undefined, undefined, callbacks)
|
|
33
28
|
|
|
34
29
|
let sourceRawAudio: RawAudio
|
|
35
30
|
let isolatedRawAudio: RawAudio | undefined
|
|
36
31
|
let backgroundRawAudio: RawAudio | undefined
|
|
37
32
|
|
|
38
33
|
if (options.isolate) {
|
|
39
|
-
logger.
|
|
40
|
-
logger.end();
|
|
34
|
+
logger.logTitledMessage(`Isolate vocals`, '');
|
|
41
35
|
|
|
42
|
-
({ isolatedRawAudio, backgroundRawAudio } = await API.isolate(
|
|
36
|
+
({ isolatedRawAudio, backgroundRawAudio } = await API.isolate(
|
|
37
|
+
inputRawAudio,
|
|
38
|
+
options.sourceSeparation!,
|
|
39
|
+
{ ...callbacks, logLevel: logger.logLevel }))
|
|
43
40
|
|
|
44
41
|
logger.end()
|
|
45
|
-
logger.log(``)
|
|
46
42
|
|
|
47
43
|
logger.start(`Resample audio to 16kHz mono`)
|
|
48
|
-
sourceRawAudio = await ensureRawAudio(isolatedRawAudio, 16000, 1)
|
|
44
|
+
sourceRawAudio = await ensureRawAudio(isolatedRawAudio, 16000, 1, callbacks)
|
|
49
45
|
} else {
|
|
50
46
|
logger.start(`Resample audio to 16kHz mono`)
|
|
51
|
-
sourceRawAudio = await ensureRawAudio(inputRawAudio, 16000, 1)
|
|
47
|
+
sourceRawAudio = await ensureRawAudio(inputRawAudio, 16000, 1, callbacks)
|
|
52
48
|
}
|
|
53
49
|
|
|
50
|
+
logger.end()
|
|
51
|
+
|
|
54
52
|
let sourceUncropTimeline: Timeline | undefined
|
|
55
53
|
|
|
56
54
|
if (options.crop) {
|
|
57
55
|
logger.start('Crop using voice activity detection');
|
|
58
|
-
|
|
56
|
+
|
|
57
|
+
({ timeline: sourceUncropTimeline, croppedRawAudio: sourceRawAudio } =
|
|
58
|
+
await API.detectVoiceActivity(
|
|
59
|
+
sourceRawAudio,
|
|
60
|
+
options.vad!,
|
|
61
|
+
{ ...callbacks, logLevel: 'warning' }))
|
|
59
62
|
|
|
60
63
|
logger.end()
|
|
61
64
|
}
|
|
@@ -76,7 +79,10 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
|
|
|
76
79
|
logger.logTitledMessage('Language specified', formatLanguageCodeWithName(options.language))
|
|
77
80
|
} else {
|
|
78
81
|
logger.start('No language specified. Detect speech language')
|
|
79
|
-
const { detectedLanguage } = await API.detectSpeechLanguage(
|
|
82
|
+
const { detectedLanguage } = await API.detectSpeechLanguage(
|
|
83
|
+
sourceRawAudio,
|
|
84
|
+
options.languageDetection!,
|
|
85
|
+
{ abortSignal: callbacks.abortSignal, logLevel: 'warning' })
|
|
80
86
|
|
|
81
87
|
options.language = detectedLanguage
|
|
82
88
|
|
|
@@ -97,105 +103,67 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
|
|
|
97
103
|
switch (engine) {
|
|
98
104
|
case 'whisper': {
|
|
99
105
|
const WhisperSTT = await import('../recognition/WhisperSTT.js')
|
|
106
|
+
const WhisperCommon = await import('../recognition/WhisperCommon.js')
|
|
100
107
|
|
|
101
|
-
const whisperOptions =
|
|
108
|
+
const whisperOptions: WhisperOptions =
|
|
109
|
+
extendDeep(WhisperSTT.defaultWhisperOptions, options.whisper)
|
|
102
110
|
|
|
103
|
-
|
|
111
|
+
const { modelId, modelPath } = await WhisperCommon.loadModelPackage(
|
|
112
|
+
whisperOptions.model,
|
|
113
|
+
shortLanguageCode,
|
|
114
|
+
callbacks,
|
|
115
|
+
)
|
|
104
116
|
|
|
105
|
-
const {
|
|
117
|
+
const { libPath } = await WhisperSTT.loadLibraryPackages(
|
|
118
|
+
whisperOptions.enableGPU,
|
|
119
|
+
callbacks,
|
|
120
|
+
)
|
|
106
121
|
|
|
107
122
|
logger.end();
|
|
108
123
|
|
|
109
124
|
({ transcript, timeline } = await WhisperSTT.recognize(
|
|
110
125
|
sourceRawAudio,
|
|
111
|
-
|
|
112
|
-
|
|
126
|
+
modelId,
|
|
127
|
+
modelPath,
|
|
128
|
+
libPath,
|
|
113
129
|
'transcribe',
|
|
114
130
|
shortLanguageCode,
|
|
115
131
|
whisperOptions,
|
|
116
|
-
|
|
132
|
+
callbacks,
|
|
117
133
|
))
|
|
118
134
|
|
|
119
135
|
break
|
|
120
136
|
}
|
|
121
137
|
|
|
122
138
|
case 'whisper.cpp': {
|
|
123
|
-
const
|
|
139
|
+
const WhisperCppCliSTT = await import('../recognition/WhisperCppCliSTT.js')
|
|
140
|
+
const WhisperCommon = await import('../recognition/WhisperCommon.js')
|
|
124
141
|
|
|
125
142
|
const whisperCppOptions = options.whisperCpp!
|
|
126
143
|
|
|
127
144
|
logger.end()
|
|
128
145
|
|
|
129
|
-
const {
|
|
146
|
+
const { modelId, modelPath } = await WhisperCommon.loadModelPackage(
|
|
147
|
+
whisperCppOptions.model,
|
|
148
|
+
shortLanguageCode,
|
|
149
|
+
callbacks,
|
|
150
|
+
)
|
|
130
151
|
|
|
131
152
|
logger.end();
|
|
132
153
|
|
|
133
|
-
({ transcript, timeline } = await
|
|
154
|
+
({ transcript, timeline } = await WhisperCppCliSTT.recognize(
|
|
134
155
|
sourceRawAudio,
|
|
135
156
|
'transcribe',
|
|
136
157
|
shortLanguageCode,
|
|
137
|
-
|
|
158
|
+
modelId,
|
|
138
159
|
modelPath,
|
|
139
160
|
whisperCppOptions,
|
|
161
|
+
callbacks,
|
|
140
162
|
))
|
|
141
163
|
|
|
142
164
|
break
|
|
143
165
|
}
|
|
144
166
|
|
|
145
|
-
case 'vosk': {
|
|
146
|
-
const VoskSTT = await import('../recognition/VoskSTT.js')
|
|
147
|
-
|
|
148
|
-
try {
|
|
149
|
-
await import('@echogarden/vosk')
|
|
150
|
-
} catch (e) {
|
|
151
|
-
log(e)
|
|
152
|
-
throw new Error(`The vosk npm package, which is required for Vosk support, was not found, or had an error loading. If missing, you can install it by running 'npm install @echogarden/vosk -g'.`)
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
const voskOptions = options.vosk!
|
|
156
|
-
|
|
157
|
-
const modelPath = voskOptions.modelPath
|
|
158
|
-
|
|
159
|
-
if (!modelPath) {
|
|
160
|
-
throw new Error(`Vosk models are not currently auto-downloaded. You'll need to download a model manually and set a model path in 'vosk.modelPath'.`)
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
logger.end();
|
|
164
|
-
|
|
165
|
-
({ transcript, timeline } = await VoskSTT.recognize(sourceRawAudio, modelPath, true))
|
|
166
|
-
|
|
167
|
-
break
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
case 'silero': {
|
|
171
|
-
const SileroSTT = await import('../recognition/SileroSTT.js')
|
|
172
|
-
|
|
173
|
-
const sileroOptions = options.silero!
|
|
174
|
-
|
|
175
|
-
let modelPath = sileroOptions.modelPath
|
|
176
|
-
|
|
177
|
-
if (!modelPath) {
|
|
178
|
-
const packageName = SileroSTT.languageCodeToPackageName[shortLanguageCode]
|
|
179
|
-
|
|
180
|
-
if (!packageName) {
|
|
181
|
-
throw new Error(`Language '${shortLanguageCode}' is not supported by Silero`)
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
modelPath = await loadPackage(packageName)
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
const onnxExecutionProviders: OnnxExecutionProvider[] = sileroOptions.provider ? [sileroOptions.provider] : []
|
|
188
|
-
|
|
189
|
-
logger.end();
|
|
190
|
-
|
|
191
|
-
({ transcript, timeline } = await SileroSTT.recognize(
|
|
192
|
-
sourceRawAudio,
|
|
193
|
-
modelPath,
|
|
194
|
-
onnxExecutionProviders))
|
|
195
|
-
|
|
196
|
-
break
|
|
197
|
-
}
|
|
198
|
-
|
|
199
167
|
case 'google-cloud': {
|
|
200
168
|
const GoogleCloudSTT = await import('../recognition/GoogleCloudSTT.js')
|
|
201
169
|
|
|
@@ -207,7 +175,12 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
|
|
|
207
175
|
|
|
208
176
|
logger.end();
|
|
209
177
|
|
|
210
|
-
({ transcript, timeline } = await GoogleCloudSTT.recognize(
|
|
178
|
+
({ transcript, timeline } = await GoogleCloudSTT.recognize(
|
|
179
|
+
sourceRawAudio,
|
|
180
|
+
apiKey,
|
|
181
|
+
shortLanguageCode,
|
|
182
|
+
callbacks
|
|
183
|
+
))
|
|
211
184
|
|
|
212
185
|
break
|
|
213
186
|
}
|
|
@@ -229,7 +202,14 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
|
|
|
229
202
|
|
|
230
203
|
logger.end();
|
|
231
204
|
|
|
232
|
-
({ transcript, timeline } = await AzureCognitiveServicesSTT.recognize(
|
|
205
|
+
({ transcript, timeline } = await AzureCognitiveServicesSTT.recognize(
|
|
206
|
+
sourceRawAudio,
|
|
207
|
+
subscriptionKey,
|
|
208
|
+
serviceRegion,
|
|
209
|
+
shortLanguageCode,
|
|
210
|
+
undefined,
|
|
211
|
+
callbacks
|
|
212
|
+
))
|
|
233
213
|
|
|
234
214
|
break
|
|
235
215
|
}
|
|
@@ -257,7 +237,14 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
|
|
|
257
237
|
|
|
258
238
|
logger.end();
|
|
259
239
|
|
|
260
|
-
({ transcript, timeline } = await AmazonTranscribeSTT.recgonize(
|
|
240
|
+
({ transcript, timeline } = await AmazonTranscribeSTT.recgonize(
|
|
241
|
+
sourceRawAudio,
|
|
242
|
+
languageCode,
|
|
243
|
+
region,
|
|
244
|
+
accessKeyId,
|
|
245
|
+
secretAccessKey,
|
|
246
|
+
callbacks
|
|
247
|
+
))
|
|
261
248
|
|
|
262
249
|
break
|
|
263
250
|
}
|
|
@@ -273,7 +260,13 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
|
|
|
273
260
|
|
|
274
261
|
logger.end();
|
|
275
262
|
|
|
276
|
-
({ transcript, timeline } = await OpenAICloudSTT.recognize(
|
|
263
|
+
({ transcript, timeline } = await OpenAICloudSTT.recognize(
|
|
264
|
+
sourceRawAudio,
|
|
265
|
+
shortLanguageCode,
|
|
266
|
+
openAICloudSTTOptions,
|
|
267
|
+
'transcribe',
|
|
268
|
+
callbacks
|
|
269
|
+
))
|
|
277
270
|
|
|
278
271
|
break
|
|
279
272
|
}
|
|
@@ -289,7 +282,12 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
|
|
|
289
282
|
|
|
290
283
|
logger.end();
|
|
291
284
|
|
|
292
|
-
({ transcript, timeline } = await DeepgramSTT.recognize(
|
|
285
|
+
({ transcript, timeline } = await DeepgramSTT.recognize(
|
|
286
|
+
sourceRawAudio,
|
|
287
|
+
options.language ? shortLanguageCode : undefined,
|
|
288
|
+
deepgramOptions,
|
|
289
|
+
callbacks,
|
|
290
|
+
))
|
|
293
291
|
|
|
294
292
|
break
|
|
295
293
|
}
|
|
@@ -304,7 +302,12 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
|
|
|
304
302
|
logger.start(`Align audio to transcript`)
|
|
305
303
|
const alignmentOptions: API.AlignmentOptions = extendDeep(options.alignment, { language: languageCode })
|
|
306
304
|
|
|
307
|
-
const { wordTimeline } = await API.align(
|
|
305
|
+
const { wordTimeline } = await API.align(
|
|
306
|
+
sourceRawAudio,
|
|
307
|
+
transcript,
|
|
308
|
+
alignmentOptions,
|
|
309
|
+
{ abortSignal: callbacks.abortSignal, logLevel: 'warning' },
|
|
310
|
+
)
|
|
308
311
|
|
|
309
312
|
timeline = wordTimeline
|
|
310
313
|
}
|
|
@@ -321,7 +324,7 @@ export async function recognize(input: AudioSourceParam, options: RecognitionOpt
|
|
|
321
324
|
const { segmentTimeline } = await wordTimelineToSegmentSentenceTimeline(timeline, transcript, languageCode, 'single', 'preserve')
|
|
322
325
|
|
|
323
326
|
logger.end()
|
|
324
|
-
logger.logDuration('\nTotal recognition time', startTimestamp, chalk.magentaBright)
|
|
327
|
+
logger.logDuration('\nTotal recognition time', startTimestamp, 'info', chalk.magentaBright)
|
|
325
328
|
|
|
326
329
|
return {
|
|
327
330
|
transcript,
|
|
@@ -350,9 +353,9 @@ export interface RecognitionResult {
|
|
|
350
353
|
backgroundRawAudio?: RawAudio
|
|
351
354
|
}
|
|
352
355
|
|
|
353
|
-
export type RecognitionEngine = 'whisper' | 'whisper.cpp' | '
|
|
356
|
+
export type RecognitionEngine = 'whisper' | 'whisper.cpp' | 'google-cloud' | 'microsoft-azure' | 'amazon-transcribe' | 'openai-cloud' | 'deepgram'
|
|
354
357
|
|
|
355
|
-
export interface RecognitionOptions {
|
|
358
|
+
export interface RecognitionOptions extends API.OperationOptions {
|
|
356
359
|
engine?: RecognitionEngine
|
|
357
360
|
|
|
358
361
|
language?: string
|
|
@@ -369,19 +372,13 @@ export interface RecognitionOptions {
|
|
|
369
372
|
|
|
370
373
|
subtitles?: SubtitlesConfig
|
|
371
374
|
|
|
372
|
-
vad?: API.
|
|
375
|
+
vad?: API.VoiceActivityDetectionOptions
|
|
373
376
|
|
|
374
377
|
sourceSeparation?: API.SourceSeparationOptions
|
|
375
378
|
|
|
376
379
|
whisper?: WhisperOptions
|
|
377
380
|
|
|
378
|
-
whisperCpp?:
|
|
379
|
-
|
|
380
|
-
vosk?: {
|
|
381
|
-
modelPath?: string
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
silero?: SileroRecognitionOptions
|
|
381
|
+
whisperCpp?: WhisperCppCliOptions
|
|
385
382
|
|
|
386
383
|
googleCloud?: {
|
|
387
384
|
apiKey?: string
|
|
@@ -437,13 +434,6 @@ export const defaultRecognitionOptions: RecognitionOptions = {
|
|
|
437
434
|
whisperCpp: {
|
|
438
435
|
},
|
|
439
436
|
|
|
440
|
-
vosk: {
|
|
441
|
-
modelPath: undefined
|
|
442
|
-
},
|
|
443
|
-
|
|
444
|
-
silero: {
|
|
445
|
-
},
|
|
446
|
-
|
|
447
437
|
googleCloud: {
|
|
448
438
|
apiKey: undefined,
|
|
449
439
|
alternativeLanguageCodes: [],
|
|
@@ -470,29 +460,22 @@ export const defaultRecognitionOptions: RecognitionOptions = {
|
|
|
470
460
|
}
|
|
471
461
|
}
|
|
472
462
|
|
|
463
|
+
export interface RecognitionCallbacks extends API.OperationCallbacks {
|
|
464
|
+
onPart?: WhisperPartCallback
|
|
465
|
+
onToken?: WhisperTokenCallback
|
|
466
|
+
}
|
|
467
|
+
|
|
473
468
|
export const recognitionEngines: API.EngineMetadata[] = [
|
|
474
469
|
{
|
|
475
470
|
id: 'whisper',
|
|
476
471
|
name: 'OpenAI Whisper',
|
|
477
|
-
description: '
|
|
472
|
+
description: 'High accuracy transformer-based speech recognition architecture by OpenAI.',
|
|
478
473
|
type: 'local'
|
|
479
474
|
},
|
|
480
475
|
{
|
|
481
476
|
id: 'whisper.cpp',
|
|
482
|
-
name: 'OpenAI Whisper (C++ port)',
|
|
483
|
-
description: '
|
|
484
|
-
type: 'local'
|
|
485
|
-
},
|
|
486
|
-
{
|
|
487
|
-
id: 'vosk',
|
|
488
|
-
name: 'Vosk',
|
|
489
|
-
description: 'A speech recognition toolkit.',
|
|
490
|
-
type: 'local'
|
|
491
|
-
},
|
|
492
|
-
{
|
|
493
|
-
id: 'silero',
|
|
494
|
-
name: 'Silero',
|
|
495
|
-
description: 'Speech recognition models.',
|
|
477
|
+
name: 'OpenAI Whisper (C++ port) CLI',
|
|
478
|
+
description: 'Invokes the CLI version of the whisper.cpp port of OpenAI Whisper.',
|
|
496
479
|
type: 'local'
|
|
497
480
|
},
|
|
498
481
|
{
|
|
@@ -1,31 +1,36 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import chalk from 'chalk'
|
|
2
|
+
|
|
3
|
+
import * as API from './API.js'
|
|
4
|
+
|
|
5
|
+
import { AudioSourceParam, RawAudio, attenuateIfClippingInPlace, ensureRawAudio, subtractAudio } from '../audio/AudioUtilities.js'
|
|
6
|
+
import { Logger } from '../utilities/Logger.js'
|
|
7
|
+
import { extendDeep } from '../utilities/ObjectUtilities.js'
|
|
8
|
+
import { loadPackage } from '../utilities/PackageManager.js'
|
|
9
|
+
import { EngineMetadata } from './Common.js'
|
|
10
|
+
import { readdir } from '../utilities/FileSystem.js'
|
|
11
|
+
import { defaultMDXNetOptions, getProfileForMDXNetModelName, MDXNetOptions } from '../source-separation/MDXNetSourceSeparation.js'
|
|
12
|
+
import { joinPath } from '../utilities/PathUtilities.js'
|
|
13
|
+
|
|
14
|
+
export async function isolate(input: AudioSourceParam, options: SourceSeparationOptions, callbacks?: SourceSeparationCallbacks): Promise<SourceSeparationResult> {
|
|
15
|
+
options = extendDeep(defaultSourceSeparationOptions, options)
|
|
16
|
+
callbacks = { logLevel: API.getGlobalLogLevel(), ...callbacks }
|
|
17
|
+
|
|
18
|
+
const logger = new Logger(callbacks.logLevel)
|
|
19
|
+
|
|
13
20
|
const startTimestamp = logger.getTimestamp()
|
|
14
21
|
|
|
15
|
-
const inputRawAudio = await ensureRawAudio(input)
|
|
22
|
+
const inputRawAudio = await ensureRawAudio(input, undefined, undefined, callbacks)
|
|
16
23
|
|
|
17
24
|
let isolatedRawAudio: RawAudio
|
|
18
25
|
let backgroundRawAudio: RawAudio
|
|
19
26
|
|
|
20
|
-
options = extendDeep(defaultSourceSeparationOptions, options)
|
|
21
|
-
|
|
22
27
|
switch (options.engine) {
|
|
23
28
|
case 'mdx-net': {
|
|
24
29
|
const MDXNetSourceSeparation = await import('../source-separation/MDXNetSourceSeparation.js')
|
|
25
30
|
|
|
26
31
|
const mdxNetOptions = options.mdxNet!
|
|
27
32
|
|
|
28
|
-
const packageDir = await loadPackage(`mdxnet-${mdxNetOptions.model!}
|
|
33
|
+
const packageDir = await loadPackage(`mdxnet-${mdxNetOptions.model!}`, callbacks)
|
|
29
34
|
const modelFilename = (await readdir(packageDir)).filter(name => name.endsWith('onnx'))[0]
|
|
30
35
|
|
|
31
36
|
if (!modelFilename) {
|
|
@@ -36,20 +41,27 @@ export async function isolate(input: AudioSourceParam, options: SourceSeparation
|
|
|
36
41
|
|
|
37
42
|
await logger.startAsync(`Convert audio to 44.1 kHz stereo`)
|
|
38
43
|
|
|
39
|
-
let inputRawAudioAs44100Stereo: RawAudio | undefined = await ensureRawAudio(inputRawAudio, 44100, 2)
|
|
44
|
+
let inputRawAudioAs44100Stereo: RawAudio | undefined = await ensureRawAudio(inputRawAudio, 44100, 2, callbacks)
|
|
40
45
|
|
|
41
46
|
logger.end()
|
|
42
47
|
|
|
43
48
|
const modelProfile = getProfileForMDXNetModelName(mdxNetOptions.model!)
|
|
44
49
|
|
|
45
|
-
isolatedRawAudio = await MDXNetSourceSeparation.isolate(
|
|
50
|
+
isolatedRawAudio = await MDXNetSourceSeparation.isolate(
|
|
51
|
+
inputRawAudioAs44100Stereo,
|
|
52
|
+
modelPath,
|
|
53
|
+
modelProfile,
|
|
54
|
+
mdxNetOptions,
|
|
55
|
+
callbacks,
|
|
56
|
+
)
|
|
57
|
+
|
|
46
58
|
logger.end()
|
|
47
59
|
|
|
48
60
|
// Release memory for the converted input audio since it's not needed anymore
|
|
49
61
|
inputRawAudioAs44100Stereo = undefined
|
|
50
62
|
|
|
51
63
|
await logger.startAsync(`Convert isolated audio back to original sample rate (${inputRawAudio.sampleRate} Hz) and channel count (${inputRawAudio.audioChannels.length})`)
|
|
52
|
-
isolatedRawAudio = await ensureRawAudio(isolatedRawAudio, inputRawAudio.sampleRate, inputRawAudio.audioChannels.length)
|
|
64
|
+
isolatedRawAudio = await ensureRawAudio(isolatedRawAudio, inputRawAudio.sampleRate, inputRawAudio.audioChannels.length, callbacks)
|
|
53
65
|
|
|
54
66
|
await logger.startAsync(`Subtract from original waveform to extract background audio`)
|
|
55
67
|
backgroundRawAudio = subtractAudio(inputRawAudio, isolatedRawAudio)
|
|
@@ -69,7 +81,7 @@ export async function isolate(input: AudioSourceParam, options: SourceSeparation
|
|
|
69
81
|
|
|
70
82
|
logger.end()
|
|
71
83
|
|
|
72
|
-
logger.logDuration(`Total source separation time`, startTimestamp, chalk.magentaBright)
|
|
84
|
+
logger.logDuration(`Total source separation time`, startTimestamp, 'info', chalk.magentaBright)
|
|
73
85
|
|
|
74
86
|
return {
|
|
75
87
|
inputRawAudio,
|
|
@@ -80,7 +92,7 @@ export async function isolate(input: AudioSourceParam, options: SourceSeparation
|
|
|
80
92
|
|
|
81
93
|
export type SourceSeparationEngine = 'mdx-net'
|
|
82
94
|
|
|
83
|
-
export interface SourceSeparationOptions {
|
|
95
|
+
export interface SourceSeparationOptions extends API.OperationOptions {
|
|
84
96
|
engine?: SourceSeparationEngine
|
|
85
97
|
|
|
86
98
|
mdxNet?: MDXNetOptions
|
|
@@ -98,6 +110,12 @@ export interface SourceSeparationResult {
|
|
|
98
110
|
backgroundRawAudio: RawAudio
|
|
99
111
|
}
|
|
100
112
|
|
|
113
|
+
export interface SourceSeparationCallbacks extends API.OperationCallbacks {
|
|
114
|
+
onSegment?: SourceSeparationSegmentCallback
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export type SourceSeparationSegmentCallback = (timePosition: number, rawAudio: RawAudio) => Promise<void>
|
|
118
|
+
|
|
101
119
|
export const sourceSeparationEngines: EngineMetadata[] = [
|
|
102
120
|
{
|
|
103
121
|
id: 'mdx-net',
|