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
|
@@ -1,34 +1,33 @@
|
|
|
1
|
-
import
|
|
1
|
+
import chalk from 'chalk'
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import * as API from './API.js'
|
|
4
|
+
|
|
5
|
+
import { extendDeep } from '../utilities/ObjectUtilities.js'
|
|
4
6
|
import { AudioSourceParam, RawAudio, cropToTimeline, ensureRawAudio, } from '../audio/AudioUtilities.js'
|
|
5
7
|
import { Logger } from '../utilities/Logger.js'
|
|
6
8
|
|
|
7
9
|
import { Timeline } from '../utilities/Timeline.js'
|
|
8
10
|
import { loadPackage } from '../utilities/PackageManager.js'
|
|
9
11
|
import { EngineMetadata } from './Common.js'
|
|
10
|
-
import chalk from 'chalk'
|
|
11
12
|
import { type AdaptiveGateVADOptions } from '../voice-activity-detection/AdaptiveGateVAD.js'
|
|
12
|
-
import { type WhisperVADOptions } from '../recognition/WhisperSTT.js'
|
|
13
13
|
import { OnnxExecutionProvider } from '../utilities/OnnxUtilities.js'
|
|
14
14
|
import { joinPath } from '../utilities/PathUtilities.js'
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
export async function detectVoiceActivity(input: AudioSourceParam, options: VoiceActivityDetectionOptions, callbacks?: VoiceActivityDetectionCallbacks): Promise<VoiceActivityDetectionResult> {
|
|
17
|
+
options = extendDeep(defaultVoiceActivityDetectionOptions, options)
|
|
18
|
+
callbacks = { logLevel: API.getGlobalLogLevel(), ...callbacks }
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
const logger = new Logger()
|
|
20
|
+
const logger = new Logger(callbacks.logLevel)
|
|
20
21
|
|
|
21
22
|
const startTimestamp = logger.getTimestamp()
|
|
22
23
|
|
|
23
|
-
const inputRawAudio = await ensureRawAudio(input)
|
|
24
|
+
const inputRawAudio = await ensureRawAudio(input, undefined, undefined, callbacks)
|
|
24
25
|
|
|
25
26
|
logger.start(`Resample audio to 16kHz mono`)
|
|
26
|
-
let sourceRawAudio = await ensureRawAudio(inputRawAudio, 16000, 1)
|
|
27
|
+
let sourceRawAudio = await ensureRawAudio(inputRawAudio, 16000, 1, callbacks)
|
|
27
28
|
|
|
28
29
|
logger.start(`Detect voice activity with ${options.engine}`)
|
|
29
30
|
|
|
30
|
-
options = extendDeep(defaultVADOptions, options)
|
|
31
|
-
|
|
32
31
|
const activityThreshold = options.activityThreshold!
|
|
33
32
|
|
|
34
33
|
let verboseTimeline: Timeline
|
|
@@ -52,7 +51,7 @@ export async function detectVoiceActivity(input: AudioSourceParam, options: VADO
|
|
|
52
51
|
|
|
53
52
|
const sileroOptions = options.silero!
|
|
54
53
|
|
|
55
|
-
const modelDir = await loadPackage('silero-vad')
|
|
54
|
+
const modelDir = await loadPackage('silero-vad', callbacks)
|
|
56
55
|
|
|
57
56
|
const modelPath = joinPath(modelDir, 'silero-vad.onnx')
|
|
58
57
|
const frameDuration = sileroOptions.frameDuration!
|
|
@@ -75,11 +74,11 @@ export async function detectVoiceActivity(input: AudioSourceParam, options: VADO
|
|
|
75
74
|
case 'rnnoise': {
|
|
76
75
|
const RNNoise = await import('../denoising/RNNoise.js')
|
|
77
76
|
|
|
78
|
-
const audio48k = await ensureRawAudio(sourceRawAudio, 48000, 1)
|
|
77
|
+
const audio48k = await ensureRawAudio(sourceRawAudio, 48000, 1, callbacks)
|
|
79
78
|
|
|
80
79
|
const rnnoiseOptions = options.rnnoise!
|
|
81
80
|
|
|
82
|
-
const { denoisedRawAudio, frameVadProbabilities } = await RNNoise.denoiseAudio(audio48k)
|
|
81
|
+
const { denoisedRawAudio, frameVadProbabilities } = await RNNoise.denoiseAudio(audio48k, callbacks)
|
|
83
82
|
|
|
84
83
|
const frameDurationSeconds = 0.01
|
|
85
84
|
const frameProbabilities = frameVadProbabilities
|
|
@@ -89,52 +88,16 @@ export async function detectVoiceActivity(input: AudioSourceParam, options: VADO
|
|
|
89
88
|
break
|
|
90
89
|
}
|
|
91
90
|
|
|
92
|
-
case 'whisper': {
|
|
93
|
-
const WhisperSTT = await import('../recognition/WhisperSTT.js')
|
|
94
|
-
|
|
95
|
-
const whisperVADOptions = options.whisper!
|
|
96
|
-
|
|
97
|
-
logger.end()
|
|
98
|
-
|
|
99
|
-
const { modelName, modelDir } = await WhisperSTT.loadPackagesAndGetPaths(whisperVADOptions.model, 'de')
|
|
100
|
-
|
|
101
|
-
logger.end();
|
|
102
|
-
|
|
103
|
-
const { partProbabilities } = await WhisperSTT.detectVoiceActivity(
|
|
104
|
-
sourceRawAudio,
|
|
105
|
-
modelName,
|
|
106
|
-
modelDir,
|
|
107
|
-
whisperVADOptions,
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
verboseTimeline = []
|
|
111
|
-
|
|
112
|
-
for (const entry of partProbabilities) {
|
|
113
|
-
const hasSpeech = entry.confidence! >= activityThreshold
|
|
114
|
-
|
|
115
|
-
const text = hasSpeech ? 'active' : 'inactive'
|
|
116
|
-
|
|
117
|
-
if (verboseTimeline.length === 0 || verboseTimeline[verboseTimeline.length - 1].text != text) {
|
|
118
|
-
verboseTimeline.push({
|
|
119
|
-
type: 'segment',
|
|
120
|
-
text,
|
|
121
|
-
startTime: entry.startTime,
|
|
122
|
-
endTime: entry.endTime
|
|
123
|
-
})
|
|
124
|
-
} else {
|
|
125
|
-
verboseTimeline[verboseTimeline.length - 1].endTime = entry.endTime
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
break
|
|
130
|
-
}
|
|
131
|
-
|
|
132
91
|
case 'adaptive-gate': {
|
|
133
92
|
const AdaptiveGateVAD = await import('../voice-activity-detection/AdaptiveGateVAD.js')
|
|
134
93
|
|
|
135
94
|
const adaptiveGateOptions = options.adaptiveGate!
|
|
136
95
|
|
|
137
|
-
verboseTimeline = await AdaptiveGateVAD.detectVoiceActivity(
|
|
96
|
+
verboseTimeline = await AdaptiveGateVAD.detectVoiceActivity(
|
|
97
|
+
sourceRawAudio,
|
|
98
|
+
adaptiveGateOptions,
|
|
99
|
+
callbacks
|
|
100
|
+
)
|
|
138
101
|
|
|
139
102
|
break
|
|
140
103
|
}
|
|
@@ -150,7 +113,7 @@ export async function detectVoiceActivity(input: AudioSourceParam, options: VADO
|
|
|
150
113
|
|
|
151
114
|
logger.end()
|
|
152
115
|
logger.log('')
|
|
153
|
-
logger.logDuration(`Total voice activity detection time`, startTimestamp, chalk.magentaBright)
|
|
116
|
+
logger.logDuration(`Total voice activity detection time`, startTimestamp, 'info', chalk.magentaBright)
|
|
154
117
|
|
|
155
118
|
return {
|
|
156
119
|
timeline,
|
|
@@ -280,7 +243,7 @@ interface UncropTimelineMapResult {
|
|
|
280
243
|
mappedEndTime: number
|
|
281
244
|
}
|
|
282
245
|
|
|
283
|
-
export interface
|
|
246
|
+
export interface VoiceActivityDetectionResult {
|
|
284
247
|
timeline: Timeline
|
|
285
248
|
verboseTimeline: Timeline
|
|
286
249
|
|
|
@@ -288,10 +251,10 @@ export interface VADResult {
|
|
|
288
251
|
croppedRawAudio: RawAudio
|
|
289
252
|
}
|
|
290
253
|
|
|
291
|
-
export type
|
|
254
|
+
export type VoiceActivityDetectionEngine = 'webrtc' | 'silero' | 'rnnoise' | 'whisper' | 'adaptive-gate'
|
|
292
255
|
|
|
293
|
-
export interface
|
|
294
|
-
engine?:
|
|
256
|
+
export interface VoiceActivityDetectionOptions extends API.OperationOptions {
|
|
257
|
+
engine?: VoiceActivityDetectionEngine
|
|
295
258
|
|
|
296
259
|
activityThreshold?: number
|
|
297
260
|
|
|
@@ -308,12 +271,10 @@ export interface VADOptions {
|
|
|
308
271
|
rnnoise?: {
|
|
309
272
|
}
|
|
310
273
|
|
|
311
|
-
whisper?: WhisperVADOptions
|
|
312
|
-
|
|
313
274
|
adaptiveGate?: AdaptiveGateVADOptions
|
|
314
275
|
}
|
|
315
276
|
|
|
316
|
-
export const
|
|
277
|
+
export const defaultVoiceActivityDetectionOptions: VoiceActivityDetectionOptions = {
|
|
317
278
|
engine: 'silero',
|
|
318
279
|
|
|
319
280
|
activityThreshold: 0.5,
|
|
@@ -331,15 +292,13 @@ export const defaultVADOptions: VADOptions = {
|
|
|
331
292
|
rnnoise: {
|
|
332
293
|
},
|
|
333
294
|
|
|
334
|
-
whisper: {
|
|
335
|
-
model: 'tiny',
|
|
336
|
-
temperature: 1.0,
|
|
337
|
-
},
|
|
338
|
-
|
|
339
295
|
adaptiveGate: {
|
|
340
296
|
}
|
|
341
297
|
}
|
|
342
298
|
|
|
299
|
+
export interface VoiceActivityDetectionCallbacks extends API.OperationCallbacks {
|
|
300
|
+
}
|
|
301
|
+
|
|
343
302
|
export const vadEngines: EngineMetadata[] = [
|
|
344
303
|
{
|
|
345
304
|
id: 'webrtc',
|
|
@@ -358,5 +317,11 @@ export const vadEngines: EngineMetadata[] = [
|
|
|
358
317
|
name: 'RNNoise',
|
|
359
318
|
description: `Uses RNNoise's internal speech probabilities as VAD metrics.`,
|
|
360
319
|
type: 'local'
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
id: 'adaptive-gate',
|
|
323
|
+
name: 'Adaptive Gate',
|
|
324
|
+
description: `Band-limited adaptive gate.`,
|
|
325
|
+
type: 'local'
|
|
361
326
|
}
|
|
362
327
|
]
|
package/src/audio/AudioPlayer.ts
CHANGED
|
@@ -1,36 +1,15 @@
|
|
|
1
1
|
import { parentPort } from 'node:worker_threads'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { RawAudio, getRawAudioDuration, sliceAudioChannels } from './AudioUtilities.js'
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
import { Timer } from '../utilities/Timer.js'
|
|
9
|
-
import { clip, getRandomHexString, waitTimeout, writeToStderr } from '../utilities/Utilities.js'
|
|
10
|
-
import { encodeToAudioBuffer, float32ToInt16Pcm, interleaveChannels } from './AudioBufferConversion.js'
|
|
5
|
+
import { clip, writeToStderr } from '../utilities/Utilities.js'
|
|
6
|
+
import { float32ToInt16Pcm, interleaveChannels } from './AudioBufferConversion.js'
|
|
11
7
|
import { OpenPromise } from '../utilities/OpenPromise.js'
|
|
12
8
|
import { Timeline, addWordTextOffsetsToTimelineInPlace } from '../utilities/Timeline.js'
|
|
13
|
-
import { readAndParseJsonFile, readFileAsUtf8, remove, writeFile } from '../utilities/FileSystem.js'
|
|
14
|
-
import { tryResolvingSoxPath } from './SoxPath.js'
|
|
15
9
|
import { SignalChannel } from '../utilities/SignalChannel.js'
|
|
16
10
|
import { deepClone } from '../utilities/ObjectUtilities.js'
|
|
17
|
-
import { appName } from '../api/Common.js'
|
|
18
|
-
import { getAppTempDir, joinPath } from '../utilities/PathUtilities.js'
|
|
19
11
|
import { type AudioOutput } from '@echogarden/audio-io'
|
|
20
12
|
|
|
21
|
-
export async function playAudioFileWithTimelineFile(audioFilename: string, timelineFileName: string, transcriptFileName?: string, player?: AudioPlayerID) {
|
|
22
|
-
const rawAudio = await FFMpegTranscoder.decodeToChannels(audioFilename, 48000, 1)
|
|
23
|
-
|
|
24
|
-
const timeline = await readAndParseJsonFile(timelineFileName)
|
|
25
|
-
|
|
26
|
-
let transcript: string | undefined
|
|
27
|
-
if (transcriptFileName) {
|
|
28
|
-
transcript = await readFileAsUtf8(transcriptFileName)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
await playAudioWithWordTimeline(rawAudio, timeline, transcript, player)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
13
|
export async function playAudioWithWordTimeline(rawAudio: RawAudio, wordTimeline: Timeline, transcript?: string, player?: AudioPlayerID) {
|
|
35
14
|
if (!transcript) {
|
|
36
15
|
transcript = wordTimeline.map(entry => entry.text).join(' ')
|
|
@@ -163,8 +142,6 @@ export function playAudioSamples(rawAudio: RawAudio, onTimePosition?: (timePosit
|
|
|
163
142
|
|
|
164
143
|
if (player === 'audio-io') {
|
|
165
144
|
return playAudioSamples_AudioIO(rawAudio, onTimePosition, signalChannel)
|
|
166
|
-
} else if (player === 'sox') {
|
|
167
|
-
return playAudioSamples_Sox(rawAudio, onTimePosition, signalChannel)
|
|
168
145
|
} else {
|
|
169
146
|
throw new Error(`Unsupported audio player ID: ${player}`)
|
|
170
147
|
}
|
|
@@ -252,211 +229,6 @@ export async function playAudioSamples_AudioIO(rawAudio: RawAudio, onTimePositio
|
|
|
252
229
|
return openPromise.promise
|
|
253
230
|
}
|
|
254
231
|
|
|
255
|
-
export function playAudioSamples_Sox(rawAudio: RawAudio, onTimePosition?: (timePosition: number) => void, signalChannel?: SignalChannel, microFadeInOut = true) {
|
|
256
|
-
return new Promise<void>(async (resolve, reject) => {
|
|
257
|
-
if (microFadeInOut) {
|
|
258
|
-
rawAudio = fadeAudioInOut(rawAudio, 0.0025)
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
let playerProcessClosed = false
|
|
262
|
-
|
|
263
|
-
const channelCount = rawAudio.audioChannels.length
|
|
264
|
-
const audioDuration = getRawAudioDuration(rawAudio)
|
|
265
|
-
|
|
266
|
-
const playerSpawnedOpenPromise = new OpenPromise<null>()
|
|
267
|
-
|
|
268
|
-
const soxPath = await tryResolvingSoxPath()
|
|
269
|
-
|
|
270
|
-
if (!soxPath) {
|
|
271
|
-
throw new Error(`Couldn't find or install the SoX utility. Please install the SoX utility on your system path to enable audio playback.`)
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
let aborted = false
|
|
275
|
-
|
|
276
|
-
let streamToStdin = true
|
|
277
|
-
|
|
278
|
-
if (process.platform == 'darwin') {
|
|
279
|
-
streamToStdin = false
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
let tempFilePath: string | undefined
|
|
283
|
-
let audioBuffer: Uint8Array | undefined
|
|
284
|
-
|
|
285
|
-
async function cleanup() {
|
|
286
|
-
if (tempFilePath) {
|
|
287
|
-
await remove(tempFilePath)
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
let playerProcess: ChildProcessWithoutNullStreams
|
|
292
|
-
|
|
293
|
-
if (streamToStdin) {
|
|
294
|
-
audioBuffer = encodeToAudioBuffer(rawAudio.audioChannels)
|
|
295
|
-
|
|
296
|
-
playerProcess = spawn(
|
|
297
|
-
soxPath,
|
|
298
|
-
['-t', 'raw', '-r', `${rawAudio.sampleRate}`, '-e', 'signed', '-b', '16', '-c', channelCount.toString(), '-', '-d'],
|
|
299
|
-
{}
|
|
300
|
-
)
|
|
301
|
-
} else {
|
|
302
|
-
tempFilePath = joinPath(getAppTempDir(appName), `${getRandomHexString(16)}.wav`)
|
|
303
|
-
const waveFileBuffer = encodeRawAudioToWave(rawAudio)
|
|
304
|
-
await writeFile(tempFilePath, waveFileBuffer)
|
|
305
|
-
|
|
306
|
-
playerProcess = spawn(
|
|
307
|
-
soxPath,
|
|
308
|
-
[tempFilePath, '-d'],
|
|
309
|
-
{}
|
|
310
|
-
)
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
if (signalChannel) {
|
|
314
|
-
signalChannel.on('abort', () => {
|
|
315
|
-
aborted = true
|
|
316
|
-
playerProcess.kill('SIGKILL')
|
|
317
|
-
})
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
// Required to work around SoX bug:
|
|
321
|
-
playerProcess.stderr.on('data', (data) => {
|
|
322
|
-
//writeToStderr(data.toString('utf-8'))
|
|
323
|
-
})
|
|
324
|
-
|
|
325
|
-
playerProcess.stdout.on('data', (data) => {
|
|
326
|
-
//writeToStderr(data.toString('utf-8'))
|
|
327
|
-
})
|
|
328
|
-
|
|
329
|
-
playerProcess.once('spawn', () => {
|
|
330
|
-
if (audioBuffer != undefined) {
|
|
331
|
-
playerProcess.stdin!.write(audioBuffer)
|
|
332
|
-
playerProcess.stdin!.end()
|
|
333
|
-
playerProcess.stdin!.on('error', () => { })
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
playerSpawnedOpenPromise.resolve(null)
|
|
337
|
-
})
|
|
338
|
-
|
|
339
|
-
playerProcess.once('error', async (e) => {
|
|
340
|
-
await cleanup()
|
|
341
|
-
playerProcessClosed = true
|
|
342
|
-
|
|
343
|
-
reject(e)
|
|
344
|
-
})
|
|
345
|
-
|
|
346
|
-
playerProcess.once('close', async () => {
|
|
347
|
-
await cleanup()
|
|
348
|
-
playerProcessClosed = true
|
|
349
|
-
|
|
350
|
-
resolve()
|
|
351
|
-
})
|
|
352
|
-
|
|
353
|
-
await playerSpawnedOpenPromise.promise
|
|
354
|
-
|
|
355
|
-
const timer = new Timer()
|
|
356
|
-
|
|
357
|
-
while (!playerProcessClosed && !aborted) {
|
|
358
|
-
const elapsedTime = timer.elapsedTimeSeconds
|
|
359
|
-
|
|
360
|
-
if (onTimePosition) {
|
|
361
|
-
onTimePosition(elapsedTime)
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
if (playerProcessClosed || elapsedTime >= audioDuration) {
|
|
365
|
-
if (onTimePosition) {
|
|
366
|
-
onTimePosition(audioDuration)
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
return
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
await waitTimeout(20)
|
|
373
|
-
}
|
|
374
|
-
})
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
/*
|
|
378
|
-
export function playAudioSamples_Speaker(rawAudio: RawAudio, onTimePosition?: (timePosition: number) => void, microFadeInOut = true) {
|
|
379
|
-
return new Promise<void>(async (resolve, reject) => {
|
|
380
|
-
if (microFadeInOut) {
|
|
381
|
-
rawAudio = fadeAudioInOut(rawAudio, 0.0025)
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
const channelCount = rawAudio.audioChannels.length
|
|
385
|
-
let audioData = encodeToAudioBuffer(rawAudio.audioChannels)
|
|
386
|
-
|
|
387
|
-
const { default: Speaker } = await import('speaker')
|
|
388
|
-
|
|
389
|
-
const speaker = new Speaker({
|
|
390
|
-
channels: rawAudio.audioChannels.length,
|
|
391
|
-
bitDepth: 16,
|
|
392
|
-
sampleRate: rawAudio.sampleRate,
|
|
393
|
-
})
|
|
394
|
-
|
|
395
|
-
speaker.on('error', (e: any) => {
|
|
396
|
-
reject(e)
|
|
397
|
-
})
|
|
398
|
-
|
|
399
|
-
const bytesPerSecond = rawAudio.sampleRate * 2 * channelCount
|
|
400
|
-
|
|
401
|
-
const byteCountToDuration = (byteCount: number) => {
|
|
402
|
-
return byteCount / bytesPerSecond
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
const audioDuration = byteCountToDuration(audioData.length)
|
|
406
|
-
|
|
407
|
-
let mpg123AudioBufferSize: number
|
|
408
|
-
let mpg123AudioBufferDuration: number
|
|
409
|
-
|
|
410
|
-
if (process.platform == 'win32') {
|
|
411
|
-
mpg123AudioBufferSize = 65536
|
|
412
|
-
mpg123AudioBufferDuration = byteCountToDuration(mpg123AudioBufferSize)
|
|
413
|
-
} else {
|
|
414
|
-
mpg123AudioBufferDuration = 0.5
|
|
415
|
-
mpg123AudioBufferSize = bytesPerSecond * mpg123AudioBufferDuration
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
audioData = concatUint8Arrays([audioData, new Uint8Array(mpg123AudioBufferSize)])
|
|
419
|
-
|
|
420
|
-
const maxChunkSize = mpg123AudioBufferSize
|
|
421
|
-
|
|
422
|
-
const writeAheadDuration = 0.5
|
|
423
|
-
|
|
424
|
-
const timer = new Timer()
|
|
425
|
-
let readOffset = 0
|
|
426
|
-
let targetTimePosition = 0
|
|
427
|
-
|
|
428
|
-
while (true) {
|
|
429
|
-
const elapsedTime = timer.elapsedTimeSeconds
|
|
430
|
-
|
|
431
|
-
if (onTimePosition) {
|
|
432
|
-
onTimePosition(elapsedTime)
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
if (readOffset < audioData.length) {
|
|
436
|
-
const targetWriteTime = targetTimePosition - writeAheadDuration
|
|
437
|
-
|
|
438
|
-
if (elapsedTime >= targetWriteTime) {
|
|
439
|
-
const chunk = audioData.subarray(readOffset, readOffset + maxChunkSize)
|
|
440
|
-
|
|
441
|
-
speaker.write(chunk)
|
|
442
|
-
|
|
443
|
-
readOffset += chunk.length
|
|
444
|
-
targetTimePosition += byteCountToDuration(chunk.length)
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
if (elapsedTime >= audioDuration) {
|
|
449
|
-
//speaker.close(false)
|
|
450
|
-
resolve()
|
|
451
|
-
return
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
await waitTimeout(20)
|
|
455
|
-
}
|
|
456
|
-
})
|
|
457
|
-
}
|
|
458
|
-
*/
|
|
459
|
-
|
|
460
232
|
export const charactersToWriteAhead = [
|
|
461
233
|
',', '.', ',', '、', ':', ';',
|
|
462
234
|
'。', ':', ';', '?', '?', '!', '!',
|
|
@@ -464,4 +236,4 @@ export const charactersToWriteAhead = [
|
|
|
464
236
|
'-', '—', '»', '،', '؟'
|
|
465
237
|
]
|
|
466
238
|
|
|
467
|
-
export type AudioPlayerID = 'audio-io'
|
|
239
|
+
export type AudioPlayerID = 'audio-io'
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as FFMpegTranscoder from '../codecs/FFMpegTranscoder.js'
|
|
2
|
+
|
|
2
3
|
import { SampleFormat, BitDepth, encodeWaveFromFloat32Channels, decodeWaveToFloat32Channels } from '@echogarden/wave-codec'
|
|
3
4
|
import { resampleAudioSpeex } from '../dsp/SpeexResampler.js'
|
|
4
5
|
import { Timeline } from '../utilities/Timeline.js'
|
|
5
6
|
import { concatFloat32Arrays } from '../utilities/Utilities.js'
|
|
7
|
+
import { OperationCallbacks } from '../api/Common.js'
|
|
6
8
|
|
|
7
9
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
8
10
|
// Wave encoding and decoding
|
|
@@ -400,7 +402,7 @@ export function getRawAudioDuration(rawAudio: RawAudio) {
|
|
|
400
402
|
return rawAudio.audioChannels[0].length / rawAudio.sampleRate
|
|
401
403
|
}
|
|
402
404
|
|
|
403
|
-
export async function ensureRawAudio(input: AudioSourceParam, outSampleRate
|
|
405
|
+
export async function ensureRawAudio(input: AudioSourceParam, outSampleRate: number | undefined, outChannelCount: number | undefined, callbacks: OperationCallbacks) {
|
|
404
406
|
let inputAsRawAudio: RawAudio = input as RawAudio
|
|
405
407
|
|
|
406
408
|
if (isRawAudio(input)) {
|
|
@@ -421,7 +423,12 @@ export async function ensureRawAudio(input: AudioSourceParam, outSampleRate?: nu
|
|
|
421
423
|
} else if (typeof input == 'string' || input instanceof Uint8Array) {
|
|
422
424
|
const inputAsStringOrUint8Array = input as string | Uint8Array
|
|
423
425
|
|
|
424
|
-
inputAsRawAudio = await FFMpegTranscoder.decodeToChannels(
|
|
426
|
+
inputAsRawAudio = await FFMpegTranscoder.decodeToChannels(
|
|
427
|
+
inputAsStringOrUint8Array,
|
|
428
|
+
outSampleRate,
|
|
429
|
+
outChannelCount,
|
|
430
|
+
callbacks,
|
|
431
|
+
)
|
|
425
432
|
} else {
|
|
426
433
|
throw new Error('Received an invalid input audio data type.')
|
|
427
434
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { OperationCallbacks } from '../api/Common.js'
|
|
1
2
|
import { existsSync, readdir } from '../utilities/FileSystem.js'
|
|
2
3
|
import { ensureAndGetPackagesDir } from '../utilities/PackageManager.js'
|
|
3
4
|
import { joinPath } from '../utilities/PathUtilities.js'
|
|
4
5
|
import { createNamedTarball } from '../utilities/TarballMaker.js'
|
|
5
6
|
import { setupProgramTerminationListeners } from '../utilities/Utilities.js'
|
|
6
7
|
|
|
7
|
-
async function makeTarballsForInstalledPackages(tarballDir: string, skipIfExists = false) {
|
|
8
|
+
async function makeTarballsForInstalledPackages(tarballDir: string, skipIfExists = false, callbacks: OperationCallbacks) {
|
|
8
9
|
const packagesDir = await ensureAndGetPackagesDir()
|
|
9
10
|
const packageList = await readdir(packagesDir)
|
|
10
11
|
|
|
@@ -14,12 +15,12 @@ async function makeTarballsForInstalledPackages(tarballDir: string, skipIfExists
|
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
const packagePath = joinPath(packagesDir, packageName)
|
|
17
|
-
await createNamedTarball(packagePath, packageName, tarballDir)
|
|
18
|
+
await createNamedTarball(packagePath, packageName, tarballDir, callbacks)
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
setupProgramTerminationListeners()
|
|
22
23
|
|
|
23
|
-
await makeTarballsForInstalledPackages('../resources/tarballs', true)
|
|
24
|
+
await makeTarballsForInstalledPackages('../resources/tarballs', true, { logLevel: 'info' })
|
|
24
25
|
|
|
25
26
|
process.exit(0)
|