echogarden 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -1
- package/data/lexicons/heteronyms.json +674 -0
- package/data/schemas/options.json +1057 -0
- package/data/tables/lcid-table.json +7427 -0
- package/dist/alignment/DTWMfccSequenceAlignment.d.ts +2 -0
- package/dist/alignment/DTWMfccSequenceAlignment.js +26 -0
- package/dist/alignment/DTWMfccSequenceAlignment.js.map +1 -0
- package/dist/alignment/DTWSequenceAlignment.d.ts +5 -0
- package/dist/alignment/DTWSequenceAlignment.js +99 -0
- package/dist/alignment/DTWSequenceAlignment.js.map +1 -0
- package/dist/alignment/DTWSequenceAlignmentWindowed.d.ts +5 -0
- package/dist/alignment/DTWSequenceAlignmentWindowed.js +161 -0
- package/dist/alignment/DTWSequenceAlignmentWindowed.js.map +1 -0
- package/dist/alignment/LevenshteinSequenceAlignment.d.ts +5 -0
- package/dist/alignment/LevenshteinSequenceAlignment.js +102 -0
- package/dist/alignment/LevenshteinSequenceAlignment.js.map +1 -0
- package/dist/alignment/SpeechAlignment.d.ts +27 -0
- package/dist/alignment/SpeechAlignment.js +266 -0
- package/dist/alignment/SpeechAlignment.js.map +1 -0
- package/dist/api/API.d.ts +8 -0
- package/dist/api/API.js +10 -0
- package/dist/api/API.js.map +1 -0
- package/dist/api/APIOptions.d.ts +12 -0
- package/dist/api/APIOptions.js +2 -0
- package/dist/api/APIOptions.js.map +1 -0
- package/dist/api/Alignment.d.ts +32 -0
- package/dist/api/Alignment.js +134 -0
- package/dist/api/Alignment.js.map +1 -0
- package/dist/api/Denoising.d.ts +14 -0
- package/dist/api/Denoising.js +66 -0
- package/dist/api/Denoising.js.map +1 -0
- package/dist/api/Globals.d.ts +1 -0
- package/dist/api/Globals.js +2 -0
- package/dist/api/Globals.js.map +1 -0
- package/dist/api/LanguageDetection.d.ts +49 -0
- package/dist/api/LanguageDetection.js +118 -0
- package/dist/api/LanguageDetection.js.map +1 -0
- package/dist/api/Recognition.d.ts +49 -0
- package/dist/api/Recognition.js +162 -0
- package/dist/api/Recognition.js.map +1 -0
- package/dist/api/Synthesis.d.ts +125 -0
- package/dist/api/Synthesis.js +892 -0
- package/dist/api/Synthesis.js.map +1 -0
- package/dist/api/Translation.d.ts +25 -0
- package/dist/api/Translation.js +69 -0
- package/dist/api/Translation.js.map +1 -0
- package/dist/api/Vad.d.ts +25 -0
- package/dist/api/Vad.js +88 -0
- package/dist/api/Vad.js.map +1 -0
- package/dist/audio/AudioBufferConversion.d.ts +15 -0
- package/dist/audio/AudioBufferConversion.js +228 -0
- package/dist/audio/AudioBufferConversion.js.map +1 -0
- package/dist/audio/AudioPlayer.d.ts +9 -0
- package/dist/audio/AudioPlayer.js +232 -0
- package/dist/audio/AudioPlayer.js.map +1 -0
- package/dist/audio/AudioRecorder.d.ts +3 -0
- package/dist/audio/AudioRecorder.js +68 -0
- package/dist/audio/AudioRecorder.js.map +1 -0
- package/dist/audio/AudioUtilities.d.ts +48 -0
- package/dist/audio/AudioUtilities.js +209 -0
- package/dist/audio/AudioUtilities.js.map +1 -0
- package/dist/audio/SoxPath.d.ts +1 -0
- package/dist/audio/SoxPath.js +19 -0
- package/dist/audio/SoxPath.js.map +1 -0
- package/dist/cli/CLI.d.ts +8 -0
- package/dist/cli/CLI.js +860 -0
- package/dist/cli/CLI.js.map +1 -0
- package/dist/cli/CLIConfigFile.d.ts +3 -0
- package/dist/cli/CLIConfigFile.js +62 -0
- package/dist/cli/CLIConfigFile.js.map +1 -0
- package/dist/cli/CLILauncher.d.ts +2 -0
- package/dist/cli/CLILauncher.js +22 -0
- package/dist/cli/CLILauncher.js.map +1 -0
- package/dist/cli/CLIOptionsSchema.d.ts +5 -0
- package/dist/cli/CLIOptionsSchema.js +36 -0
- package/dist/cli/CLIOptionsSchema.js.map +1 -0
- package/dist/cli/CLIParser.d.ts +6 -0
- package/dist/cli/CLIParser.js +34 -0
- package/dist/cli/CLIParser.js.map +1 -0
- package/dist/cli/CLIStarter.d.ts +1 -0
- package/dist/cli/CLIStarter.js +3 -0
- package/dist/cli/CLIStarter.js.map +1 -0
- package/dist/codecs/FFMpegTranscoder.d.ts +20 -0
- package/dist/codecs/FFMpegTranscoder.js +169 -0
- package/dist/codecs/FFMpegTranscoder.js.map +1 -0
- package/dist/codecs/TIMITCodec.d.ts +9 -0
- package/dist/codecs/TIMITCodec.js +14 -0
- package/dist/codecs/TIMITCodec.js.map +1 -0
- package/dist/codecs/WaveCodec.d.ts +19 -0
- package/dist/codecs/WaveCodec.js +208 -0
- package/dist/codecs/WaveCodec.js.map +1 -0
- package/dist/denoising/RNNoise.d.ts +6 -0
- package/dist/denoising/RNNoise.js +68 -0
- package/dist/denoising/RNNoise.js.map +1 -0
- package/dist/dsp/BiquadFilter.d.ts +26 -0
- package/dist/dsp/BiquadFilter.js +399 -0
- package/dist/dsp/BiquadFilter.js.map +1 -0
- package/dist/dsp/FFT.d.ts +9 -0
- package/dist/dsp/FFT.js +135 -0
- package/dist/dsp/FFT.js.map +1 -0
- package/dist/dsp/MFCC.d.ts +25 -0
- package/dist/dsp/MFCC.js +162 -0
- package/dist/dsp/MFCC.js.map +1 -0
- package/dist/dsp/MelSpectogram.d.ts +19 -0
- package/dist/dsp/MelSpectogram.js +102 -0
- package/dist/dsp/MelSpectogram.js.map +1 -0
- package/dist/dsp/Rubberband.d.ts +52 -0
- package/dist/dsp/Rubberband.js +186 -0
- package/dist/dsp/Rubberband.js.map +1 -0
- package/dist/dsp/Sonic.d.ts +2 -0
- package/dist/dsp/Sonic.js +39 -0
- package/dist/dsp/Sonic.js.map +1 -0
- package/dist/dsp/SpeexResampler.d.ts +3 -0
- package/dist/dsp/SpeexResampler.js +53 -0
- package/dist/dsp/SpeexResampler.js.map +1 -0
- package/dist/math/VectorMath.d.ts +70 -0
- package/dist/math/VectorMath.js +564 -0
- package/dist/math/VectorMath.js.map +1 -0
- package/dist/nlp/ChineseSegmentation.d.ts +1 -0
- package/dist/nlp/ChineseSegmentation.js +53 -0
- package/dist/nlp/ChineseSegmentation.js.map +1 -0
- package/dist/nlp/CompromiseNLP.d.ts +15 -0
- package/dist/nlp/CompromiseNLP.js +66 -0
- package/dist/nlp/CompromiseNLP.js.map +1 -0
- package/dist/nlp/EspeakPhonemizer.d.ts +4 -0
- package/dist/nlp/EspeakPhonemizer.js +133 -0
- package/dist/nlp/EspeakPhonemizer.js.map +1 -0
- package/dist/nlp/IPA.d.ts +19 -0
- package/dist/nlp/IPA.js +113 -0
- package/dist/nlp/IPA.js.map +1 -0
- package/dist/nlp/JapaneseSegmentation.d.ts +1 -0
- package/dist/nlp/JapaneseSegmentation.js +40 -0
- package/dist/nlp/JapaneseSegmentation.js.map +1 -0
- package/dist/nlp/Lexicon.d.ts +17 -0
- package/dist/nlp/Lexicon.js +6 -0
- package/dist/nlp/Lexicon.js.map +1 -0
- package/dist/nlp/PhoneConversion.d.ts +6 -0
- package/dist/nlp/PhoneConversion.js +467 -0
- package/dist/nlp/PhoneConversion.js.map +1 -0
- package/dist/nlp/Segmentation.d.ts +41 -0
- package/dist/nlp/Segmentation.js +158 -0
- package/dist/nlp/Segmentation.js.map +1 -0
- package/dist/nlp/TextNormalizer.d.ts +4 -0
- package/dist/nlp/TextNormalizer.js +69 -0
- package/dist/nlp/TextNormalizer.js.map +1 -0
- package/dist/recognition/AmazonTranscribeSTT.d.ts +6 -0
- package/dist/recognition/AmazonTranscribeSTT.js +79 -0
- package/dist/recognition/AmazonTranscribeSTT.js.map +1 -0
- package/dist/recognition/AzureCognitiveServicesSTT.d.ts +7 -0
- package/dist/recognition/AzureCognitiveServicesSTT.js +51 -0
- package/dist/recognition/AzureCognitiveServicesSTT.js.map +1 -0
- package/dist/recognition/GoogleCloudSTT.d.ts +7 -0
- package/dist/recognition/GoogleCloudSTT.js +66 -0
- package/dist/recognition/GoogleCloudSTT.js.map +1 -0
- package/dist/recognition/SileroSTT.d.ts +9 -0
- package/dist/recognition/SileroSTT.js +125 -0
- package/dist/recognition/SileroSTT.js.map +1 -0
- package/dist/recognition/VoskSTT.d.ts +10 -0
- package/dist/recognition/VoskSTT.js +78 -0
- package/dist/recognition/VoskSTT.js.map +1 -0
- package/dist/recognition/WhisperSTT.d.ts +69 -0
- package/dist/recognition/WhisperSTT.js +977 -0
- package/dist/recognition/WhisperSTT.js.map +1 -0
- package/dist/server/Server.d.ts +1 -0
- package/dist/server/Server.js +18 -0
- package/dist/server/Server.js.map +1 -0
- package/dist/speech-language-detection/SileroLanguageDetection.d.ts +9 -0
- package/dist/speech-language-detection/SileroLanguageDetection.js +47 -0
- package/dist/speech-language-detection/SileroLanguageDetection.js.map +1 -0
- package/dist/subtitles/Subtitles.d.ts +25 -0
- package/dist/subtitles/Subtitles.js +286 -0
- package/dist/subtitles/Subtitles.js.map +1 -0
- package/dist/synthesis/AwsPollyTTS.d.ts +7 -0
- package/dist/synthesis/AwsPollyTTS.js +51 -0
- package/dist/synthesis/AwsPollyTTS.js.map +1 -0
- package/dist/synthesis/AzureCognitiveServicesTTS.d.ts +9 -0
- package/dist/synthesis/AzureCognitiveServicesTTS.js +103 -0
- package/dist/synthesis/AzureCognitiveServicesTTS.js.map +1 -0
- package/dist/synthesis/CoquiServerTTS.d.ts +6 -0
- package/dist/synthesis/CoquiServerTTS.js +22 -0
- package/dist/synthesis/CoquiServerTTS.js.map +1 -0
- package/dist/synthesis/ElevenLabsTTS.d.ts +8 -0
- package/dist/synthesis/ElevenLabsTTS.js +48 -0
- package/dist/synthesis/ElevenLabsTTS.js.map +1 -0
- package/dist/synthesis/EspeakTTS.d.ts +46 -0
- package/dist/synthesis/EspeakTTS.js +353 -0
- package/dist/synthesis/EspeakTTS.js.map +1 -0
- package/dist/synthesis/FliteTTS.d.ts +17 -0
- package/dist/synthesis/FliteTTS.js +326 -0
- package/dist/synthesis/FliteTTS.js.map +1 -0
- package/dist/synthesis/GoogleCloudTTS.d.ts +16 -0
- package/dist/synthesis/GoogleCloudTTS.js +72 -0
- package/dist/synthesis/GoogleCloudTTS.js.map +1 -0
- package/dist/synthesis/GoogleTranslateTTS.d.ts +13 -0
- package/dist/synthesis/GoogleTranslateTTS.js +177 -0
- package/dist/synthesis/GoogleTranslateTTS.js.map +1 -0
- package/dist/synthesis/MicrosoftEdgeTTS.d.ts +10 -0
- package/dist/synthesis/MicrosoftEdgeTTS.js +216 -0
- package/dist/synthesis/MicrosoftEdgeTTS.js.map +1 -0
- package/dist/synthesis/SamTTS.d.ts +4 -0
- package/dist/synthesis/SamTTS.js +21 -0
- package/dist/synthesis/SamTTS.js.map +1 -0
- package/dist/synthesis/SapiTTS.d.ts +9 -0
- package/dist/synthesis/SapiTTS.js +211 -0
- package/dist/synthesis/SapiTTS.js.map +1 -0
- package/dist/synthesis/StreamlabsPollyTTS.d.ts +12 -0
- package/dist/synthesis/StreamlabsPollyTTS.js +88 -0
- package/dist/synthesis/StreamlabsPollyTTS.js.map +1 -0
- package/dist/synthesis/SvoxPicoTTS.d.ts +11 -0
- package/dist/synthesis/SvoxPicoTTS.js +236 -0
- package/dist/synthesis/SvoxPicoTTS.js.map +1 -0
- package/dist/synthesis/VitsTTS.d.ts +27 -0
- package/dist/synthesis/VitsTTS.js +359 -0
- package/dist/synthesis/VitsTTS.js.map +1 -0
- package/dist/tests/Test.d.ts +1 -0
- package/dist/tests/Test.js +10 -0
- package/dist/tests/Test.js.map +1 -0
- package/dist/text-language-detection/FastTextLanguageDetection.d.ts +2 -0
- package/dist/text-language-detection/FastTextLanguageDetection.js +38 -0
- package/dist/text-language-detection/FastTextLanguageDetection.js.map +1 -0
- package/dist/text-language-detection/TinyLDLanguageDetection.d.ts +2 -0
- package/dist/text-language-detection/TinyLDLanguageDetection.js +12 -0
- package/dist/text-language-detection/TinyLDLanguageDetection.js.map +1 -0
- package/dist/utilities/BinaryArrayConversion.d.ts +15 -0
- package/dist/utilities/BinaryArrayConversion.js +115 -0
- package/dist/utilities/BinaryArrayConversion.js.map +1 -0
- package/dist/utilities/Compression.d.ts +4 -0
- package/dist/utilities/Compression.js +67 -0
- package/dist/utilities/Compression.js.map +1 -0
- package/dist/utilities/FileDownloader.d.ts +3 -0
- package/dist/utilities/FileDownloader.js +147 -0
- package/dist/utilities/FileDownloader.js.map +1 -0
- package/dist/utilities/FileSystem.d.ts +30 -0
- package/dist/utilities/FileSystem.js +141 -0
- package/dist/utilities/FileSystem.js.map +1 -0
- package/dist/utilities/Hashing.d.ts +10 -0
- package/dist/utilities/Hashing.js +169 -0
- package/dist/utilities/Hashing.js.map +1 -0
- package/dist/utilities/Locale.d.ts +9 -0
- package/dist/utilities/Locale.js +65 -0
- package/dist/utilities/Locale.js.map +1 -0
- package/dist/utilities/Logger.d.ts +11 -0
- package/dist/utilities/Logger.js +49 -0
- package/dist/utilities/Logger.js.map +1 -0
- package/dist/utilities/NdArrayUtilities.d.ts +3 -0
- package/dist/utilities/NdArrayUtilities.js +22 -0
- package/dist/utilities/NdArrayUtilities.js.map +1 -0
- package/dist/utilities/ObjectUtilities.d.ts +4 -0
- package/dist/utilities/ObjectUtilities.js +132 -0
- package/dist/utilities/ObjectUtilities.js.map +1 -0
- package/dist/utilities/OpenPromise.d.ts +6 -0
- package/dist/utilities/OpenPromise.js +12 -0
- package/dist/utilities/OpenPromise.js.map +1 -0
- package/dist/utilities/PackageManager.d.ts +4 -0
- package/dist/utilities/PackageManager.js +46 -0
- package/dist/utilities/PackageManager.js.map +1 -0
- package/dist/utilities/RandomGenerator.d.ts +35 -0
- package/dist/utilities/RandomGenerator.js +149 -0
- package/dist/utilities/RandomGenerator.js.map +1 -0
- package/dist/utilities/TarballMaker.d.ts +4 -0
- package/dist/utilities/TarballMaker.js +50 -0
- package/dist/utilities/TarballMaker.js.map +1 -0
- package/dist/utilities/Timeline.d.ts +20 -0
- package/dist/utilities/Timeline.js +110 -0
- package/dist/utilities/Timeline.js.map +1 -0
- package/dist/utilities/Timer.d.ts +13 -0
- package/dist/utilities/Timer.js +70 -0
- package/dist/utilities/Timer.js.map +1 -0
- package/dist/utilities/Utilities.d.ts +68 -0
- package/dist/utilities/Utilities.js +305 -0
- package/dist/utilities/Utilities.js.map +1 -0
- package/dist/utilities/WasmMemoryManager.d.ts +142 -0
- package/dist/utilities/WasmMemoryManager.js +407 -0
- package/dist/utilities/WasmMemoryManager.js.map +1 -0
- package/dist/utilities/WebReader.d.ts +1 -0
- package/dist/utilities/WebReader.js +47 -0
- package/dist/utilities/WebReader.js.map +1 -0
- package/dist/utilities/WikipediaReader.d.ts +1 -0
- package/dist/utilities/WikipediaReader.js +31 -0
- package/dist/utilities/WikipediaReader.js.map +1 -0
- package/dist/voice-activity-detection/SileroVAD.d.ts +13 -0
- package/dist/voice-activity-detection/SileroVAD.js +58 -0
- package/dist/voice-activity-detection/SileroVAD.js.map +1 -0
- package/dist/voice-activity-detection/WebRtcVAD.d.ts +3 -0
- package/dist/voice-activity-detection/WebRtcVAD.js +53 -0
- package/dist/voice-activity-detection/WebRtcVAD.js.map +1 -0
- package/docs/CLI.md +234 -0
- package/docs/Development.md +3 -0
- package/docs/Engines.md +80 -0
- package/docs/Licenses.md +37 -0
- package/docs/Options.md +192 -0
- package/docs/Roadmap.md +16 -0
- package/docs/Technical.md +72 -0
- package/package.json +119 -19
- package/cli.js +0 -3
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare function alignMFCC_DTW(mfccFrames1: number[][], mfccFrames2: number[][], windowLength: number, distanceFunction?: "eucledian" | "cosine"): Promise<import("./SpeechAlignment.js").AlignmentPath>;
|
|
2
|
+
export declare function getCostMatrixMemorySizeMiB(sequence1Length: number, sequence2Length: number, windowLength: number): number;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { cosineDistancePrecomputedMagnitudes, createVectorForIntegerRange, eucledianDistance, magnitude } from "../math/VectorMath.js";
|
|
2
|
+
import { logToStderr } from "../utilities/Utilities.js";
|
|
3
|
+
import { alignDTWWindowed } from "./DTWSequenceAlignmentWindowed.js";
|
|
4
|
+
const log = logToStderr;
|
|
5
|
+
export async function alignMFCC_DTW(mfccFrames1, mfccFrames2, windowLength, distanceFunction = "eucledian") {
|
|
6
|
+
if (distanceFunction == "eucledian") {
|
|
7
|
+
const { path } = await alignDTWWindowed(mfccFrames1, mfccFrames2, eucledianDistance, windowLength);
|
|
8
|
+
return path;
|
|
9
|
+
}
|
|
10
|
+
else if (distanceFunction == "cosine") {
|
|
11
|
+
const indexes1 = createVectorForIntegerRange(0, mfccFrames1.length);
|
|
12
|
+
const indexes2 = createVectorForIntegerRange(0, mfccFrames2.length);
|
|
13
|
+
const magnitudes1 = mfccFrames1.map(magnitude);
|
|
14
|
+
const magnitudes2 = mfccFrames2.map(magnitude);
|
|
15
|
+
const { path } = await alignDTWWindowed(indexes1, indexes2, (i, j) => cosineDistancePrecomputedMagnitudes(mfccFrames1[i], mfccFrames2[j], magnitudes1[i], magnitudes2[j]), windowLength);
|
|
16
|
+
return path;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
throw new Error("Invalid distance function");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function getCostMatrixMemorySizeMiB(sequence1Length, sequence2Length, windowLength) {
|
|
23
|
+
const costMatrixMemorySizeMiB = sequence1Length * Math.min(sequence2Length, windowLength) * 4 / 1000000;
|
|
24
|
+
return costMatrixMemorySizeMiB;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=DTWMfccSequenceAlignment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DTWMfccSequenceAlignment.js","sourceRoot":"","sources":["../../src/alignment/DTWMfccSequenceAlignment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtI,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAEpE,MAAM,GAAG,GAAG,WAAW,CAAA;AAEvB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAuB,EAAE,WAAuB,EAAE,YAAoB,EAAE,mBAA2C,WAAW;IACjK,IAAI,gBAAgB,IAAI,WAAW,EAAE;QACpC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CACtC,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,YAAY,CACZ,CAAA;QAED,OAAO,IAAI,CAAA;KACX;SAAM,IAAI,gBAAgB,IAAI,QAAQ,EAAE;QACxC,MAAM,QAAQ,GAAG,2BAA2B,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QACnE,MAAM,QAAQ,GAAG,2BAA2B,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QAEnE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC9C,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAE9C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CACtC,QAAQ,EACR,QAAQ,EACR,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAC7G,YAAY,CACZ,CAAA;QAED,OAAO,IAAI,CAAA;KACX;SAAM;QACN,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;KAC5C;AACF,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,eAAuB,EAAE,eAAuB,EAAE,YAAoB;IAChH,MAAM,uBAAuB,GAAG,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;IACvG,OAAO,uBAAuB,CAAA;AAC/B,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { logToStderr } from "../utilities/Utilities.js";
|
|
2
|
+
const log = logToStderr;
|
|
3
|
+
export function alignDTW(sequence1, sequence2, costFunction, deletionEnabled = true) {
|
|
4
|
+
if (sequence1.length == 0 || sequence2.length == 0) {
|
|
5
|
+
return { path: [], pathCost: 0 };
|
|
6
|
+
}
|
|
7
|
+
const rowCount = sequence2.length;
|
|
8
|
+
const columnCount = sequence1.length;
|
|
9
|
+
// Compute accumulated cost matrix
|
|
10
|
+
const accumulatedCostMatrix = computeAccumulatedCostMatrix(sequence1, sequence2, costFunction, deletionEnabled);
|
|
11
|
+
// Find best path for the computed matrix
|
|
12
|
+
const path = computeBestPath(accumulatedCostMatrix, deletionEnabled);
|
|
13
|
+
// Best path cost is the bottom right element of the matrix
|
|
14
|
+
const pathCost = accumulatedCostMatrix[rowCount - 1][columnCount - 1];
|
|
15
|
+
return { path, pathCost };
|
|
16
|
+
}
|
|
17
|
+
function computeAccumulatedCostMatrix(sequence1, sequence2, costFunction, deletionEnabled = true) {
|
|
18
|
+
const rowCount = sequence2.length;
|
|
19
|
+
const columnCount = sequence1.length;
|
|
20
|
+
const accumulatedCostMatrix = new Array(rowCount);
|
|
21
|
+
// Initialize matrix
|
|
22
|
+
for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
|
|
23
|
+
accumulatedCostMatrix[rowIndex] = new Float32Array(columnCount);
|
|
24
|
+
}
|
|
25
|
+
for (let i = 1; i < columnCount; i++) {
|
|
26
|
+
accumulatedCostMatrix[0][i] = Infinity;
|
|
27
|
+
}
|
|
28
|
+
for (let i = 1; i < rowCount; i++) {
|
|
29
|
+
accumulatedCostMatrix[i][0] = Infinity;
|
|
30
|
+
}
|
|
31
|
+
// Fill out the matrix, go row by row
|
|
32
|
+
for (let rowIndex = 1; rowIndex < rowCount; rowIndex++) {
|
|
33
|
+
const previousRow = accumulatedCostMatrix[rowIndex - 1];
|
|
34
|
+
const currentRow = accumulatedCostMatrix[rowIndex];
|
|
35
|
+
for (let columnIndex = 1; columnIndex < columnCount; columnIndex++) {
|
|
36
|
+
const cost = costFunction(sequence1[columnIndex], sequence2[rowIndex]);
|
|
37
|
+
const up = previousRow[columnIndex]; // insertion
|
|
38
|
+
const left = currentRow[columnIndex - 1]; // deletion
|
|
39
|
+
const upAndLeft = previousRow[columnIndex - 1]; // match
|
|
40
|
+
currentRow[columnIndex] = cost + minimumOf3(up, deletionEnabled ? left : Infinity, upAndLeft);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return accumulatedCostMatrix;
|
|
44
|
+
}
|
|
45
|
+
function computeBestPath(costMatrix, deletionEnabled = true) {
|
|
46
|
+
const rowCount = costMatrix.length;
|
|
47
|
+
const columnCount = costMatrix[0].length;
|
|
48
|
+
const bestPath = [];
|
|
49
|
+
let rowIndex = rowCount - 1;
|
|
50
|
+
let columnIndex = columnCount - 1;
|
|
51
|
+
bestPath.push({
|
|
52
|
+
source: columnIndex,
|
|
53
|
+
dest: rowIndex
|
|
54
|
+
});
|
|
55
|
+
while (rowIndex > 0 || columnIndex > 0) {
|
|
56
|
+
const up = costMatrix[rowIndex - 1][columnIndex];
|
|
57
|
+
const left = costMatrix[rowIndex][columnIndex - 1];
|
|
58
|
+
const upAndLeft = costMatrix[rowIndex - 1][columnIndex - 1];
|
|
59
|
+
const smallestCostDirection = argIndexOfMinimumOf3(up, deletionEnabled ? left : Infinity, upAndLeft);
|
|
60
|
+
if (smallestCostDirection == 1) {
|
|
61
|
+
rowIndex -= 1;
|
|
62
|
+
}
|
|
63
|
+
else if (smallestCostDirection == 2) {
|
|
64
|
+
columnIndex -= 1;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
rowIndex -= 1;
|
|
68
|
+
columnIndex -= 1;
|
|
69
|
+
}
|
|
70
|
+
bestPath.push({
|
|
71
|
+
source: columnIndex,
|
|
72
|
+
dest: rowIndex
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return bestPath.reverse();
|
|
76
|
+
}
|
|
77
|
+
function minimumOf3(x1, x2, x3) {
|
|
78
|
+
if (x1 <= x2 && x1 <= x3) {
|
|
79
|
+
return x1;
|
|
80
|
+
}
|
|
81
|
+
else if (x2 <= x3) {
|
|
82
|
+
return x2;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
return x3;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function argIndexOfMinimumOf3(x1, x2, x3) {
|
|
89
|
+
if (x1 <= x2 && x1 <= x3) {
|
|
90
|
+
return 1;
|
|
91
|
+
}
|
|
92
|
+
else if (x2 <= x3) {
|
|
93
|
+
return 2;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
return 3;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=DTWSequenceAlignment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DTWSequenceAlignment.js","sourceRoot":"","sources":["../../src/alignment/DTWSequenceAlignment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { logToStderr } from "../utilities/Utilities.js";
|
|
2
|
+
const log = logToStderr;
|
|
3
|
+
export function alignDTWWindowed(sequence1, sequence2, costFunction, windowMaxLength) {
|
|
4
|
+
if (windowMaxLength < 2) {
|
|
5
|
+
throw new Error("Window length must be greater or equal to 2");
|
|
6
|
+
}
|
|
7
|
+
if (sequence1.length == 0 || sequence2.length == 0) {
|
|
8
|
+
return { path: [], pathCost: 0 };
|
|
9
|
+
}
|
|
10
|
+
// Compute accumulated cost matrix (transposed)
|
|
11
|
+
const { accumulatedCostMatrixTransposed, windowStartOffsets } = computeAccumulatedCostMatrixTransposed(sequence1, sequence2, costFunction, windowMaxLength);
|
|
12
|
+
// Find best path for the computed matrix
|
|
13
|
+
const path = computeBestPathTransposed(accumulatedCostMatrixTransposed, windowStartOffsets);
|
|
14
|
+
// Best path cost is the bottom right element of the matrix
|
|
15
|
+
const columnCount = accumulatedCostMatrixTransposed.length;
|
|
16
|
+
const rowCount = accumulatedCostMatrixTransposed[0].length;
|
|
17
|
+
const pathCost = accumulatedCostMatrixTransposed[columnCount - 1][rowCount - 1];
|
|
18
|
+
// Return
|
|
19
|
+
return { path, pathCost };
|
|
20
|
+
}
|
|
21
|
+
function computeAccumulatedCostMatrixTransposed(sequence1, sequence2, costFunction, windowMaxLength) {
|
|
22
|
+
const halfWindowMaxLength = Math.floor(windowMaxLength / 2);
|
|
23
|
+
const columnCount = sequence1.length;
|
|
24
|
+
const rowCount = Math.min(windowMaxLength, sequence2.length);
|
|
25
|
+
const accumulatedCostMatrixTransposed = new Array(columnCount);
|
|
26
|
+
// Initialize window start offsets array
|
|
27
|
+
const windowStartOffsets = new Int32Array(columnCount);
|
|
28
|
+
// Compute matrix column by column
|
|
29
|
+
for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {
|
|
30
|
+
// Create new column and add it to the matrix
|
|
31
|
+
const currentColumn = new Float32Array(rowCount);
|
|
32
|
+
accumulatedCostMatrixTransposed[columnIndex] = currentColumn;
|
|
33
|
+
// Compute window center
|
|
34
|
+
const windowCenter = Math.floor((columnIndex / columnCount) * sequence2.length);
|
|
35
|
+
// Compute window start and end offsets
|
|
36
|
+
let windowStartOffset = Math.max(windowCenter - halfWindowMaxLength, 0);
|
|
37
|
+
let windowEndOffset = windowStartOffset + rowCount;
|
|
38
|
+
if (windowEndOffset > sequence2.length) {
|
|
39
|
+
windowEndOffset = sequence2.length;
|
|
40
|
+
windowStartOffset = windowEndOffset - rowCount;
|
|
41
|
+
}
|
|
42
|
+
// Store the start offset in the array
|
|
43
|
+
windowStartOffsets[columnIndex] = windowStartOffset;
|
|
44
|
+
// Get target sequence1 value
|
|
45
|
+
const targetSequence1Value = sequence1[columnIndex];
|
|
46
|
+
// If first column, fill it only using the 'up' neighbor
|
|
47
|
+
if (columnIndex == 0) {
|
|
48
|
+
for (let rowIndex = 1; rowIndex < rowCount; rowIndex++) {
|
|
49
|
+
const cost = costFunction(targetSequence1Value, sequence2[windowStartOffset + rowIndex]);
|
|
50
|
+
const upCost = currentColumn[rowIndex - 1];
|
|
51
|
+
currentColumn[rowIndex] = cost + upCost;
|
|
52
|
+
}
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
// If not first column
|
|
56
|
+
const leftColumn = accumulatedCostMatrixTransposed[columnIndex - 1];
|
|
57
|
+
// Compute the delta between the current window offset and previous column's window offset
|
|
58
|
+
const windowOffsetDelta = windowStartOffset - windowStartOffsets[columnIndex - 1];
|
|
59
|
+
for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
|
|
60
|
+
// Compute the cost for current cell
|
|
61
|
+
const cost = costFunction(targetSequence1Value, sequence2[windowStartOffset + rowIndex]);
|
|
62
|
+
// Retrieve the cost for the 'up' (insertion) neighbor
|
|
63
|
+
let upCost = Infinity;
|
|
64
|
+
if (rowIndex > 0) {
|
|
65
|
+
upCost = currentColumn[rowIndex - 1];
|
|
66
|
+
}
|
|
67
|
+
// Retrieve the cost for the 'left' (deletion) neighbor
|
|
68
|
+
let leftCost = Infinity;
|
|
69
|
+
const leftRowIndex = rowIndex + windowOffsetDelta;
|
|
70
|
+
if (leftRowIndex < rowCount) {
|
|
71
|
+
leftCost = leftColumn[leftRowIndex];
|
|
72
|
+
}
|
|
73
|
+
// Retrieve the cost for the 'up and left' (match) neighbor
|
|
74
|
+
let upAndLeftCost = Infinity;
|
|
75
|
+
const upAndLeftRowIndex = leftRowIndex - 1;
|
|
76
|
+
if (upAndLeftRowIndex >= 0 && upAndLeftRowIndex < rowCount) {
|
|
77
|
+
upAndLeftCost = leftColumn[upAndLeftRowIndex];
|
|
78
|
+
}
|
|
79
|
+
// Write cost + minimum neighbor cost to the current column
|
|
80
|
+
currentColumn[rowIndex] = cost + minimumOf3(upCost, leftCost, upAndLeftCost);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return { accumulatedCostMatrixTransposed, windowStartOffsets };
|
|
84
|
+
}
|
|
85
|
+
function computeBestPathTransposed(accumulatedCostMatrixTransposed, windowStartOffsets) {
|
|
86
|
+
const columnCount = accumulatedCostMatrixTransposed.length;
|
|
87
|
+
const rowCount = accumulatedCostMatrixTransposed[0].length;
|
|
88
|
+
const bestPath = [];
|
|
89
|
+
let columnIndex = columnCount - 1;
|
|
90
|
+
let rowIndex = rowCount - 1;
|
|
91
|
+
while (columnIndex > 0 || rowIndex > 0) {
|
|
92
|
+
const windowStartIndex = windowStartOffsets[columnIndex];
|
|
93
|
+
const windowStartDelta = columnIndex > 0 ? windowStartIndex - windowStartOffsets[columnIndex - 1] : 0;
|
|
94
|
+
bestPath.push({
|
|
95
|
+
source: columnIndex,
|
|
96
|
+
dest: windowStartIndex + rowIndex
|
|
97
|
+
});
|
|
98
|
+
const upRowIndex = rowIndex - 1;
|
|
99
|
+
const upColumnIndex = columnIndex;
|
|
100
|
+
let upCost = Infinity;
|
|
101
|
+
if (upRowIndex >= 0) {
|
|
102
|
+
upCost = accumulatedCostMatrixTransposed[upColumnIndex][upRowIndex]; // insertion
|
|
103
|
+
}
|
|
104
|
+
const leftRowIndex = rowIndex + windowStartDelta;
|
|
105
|
+
const leftColumnIndex = columnIndex - 1;
|
|
106
|
+
let leftCost = Infinity;
|
|
107
|
+
if (leftColumnIndex >= 0 && leftRowIndex < rowCount) {
|
|
108
|
+
leftCost = accumulatedCostMatrixTransposed[leftColumnIndex][leftRowIndex]; // deletion
|
|
109
|
+
}
|
|
110
|
+
const upAndLeftRowIndex = rowIndex - 1 + windowStartDelta;
|
|
111
|
+
const upAndLeftColumnIndex = columnIndex - 1;
|
|
112
|
+
let upAndLeftCost = Infinity;
|
|
113
|
+
if (upAndLeftColumnIndex >= 0 && upAndLeftRowIndex >= 0 && upAndLeftRowIndex < rowCount) {
|
|
114
|
+
upAndLeftCost = accumulatedCostMatrixTransposed[upAndLeftColumnIndex][upAndLeftRowIndex]; // match
|
|
115
|
+
}
|
|
116
|
+
if (upCost == Infinity && leftCost == Infinity && upAndLeftCost == Infinity) {
|
|
117
|
+
log(`computeBestPath: Unexpected - all cost directions are equal to infinity (${columnIndex}, ${rowIndex}).`);
|
|
118
|
+
}
|
|
119
|
+
const smallestCostDirection = argIndexOfMinimumOf3(upCost, leftCost, upAndLeftCost);
|
|
120
|
+
if (smallestCostDirection == 1) {
|
|
121
|
+
rowIndex = upRowIndex;
|
|
122
|
+
columnIndex = upColumnIndex;
|
|
123
|
+
}
|
|
124
|
+
else if (smallestCostDirection == 2) {
|
|
125
|
+
rowIndex = leftRowIndex;
|
|
126
|
+
columnIndex = leftColumnIndex;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
rowIndex = upAndLeftRowIndex;
|
|
130
|
+
columnIndex = upAndLeftColumnIndex;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
bestPath.push({
|
|
134
|
+
source: 0,
|
|
135
|
+
dest: 0
|
|
136
|
+
});
|
|
137
|
+
return bestPath.reverse();
|
|
138
|
+
}
|
|
139
|
+
function minimumOf3(x1, x2, x3) {
|
|
140
|
+
if (x1 <= x2 && x1 <= x3) {
|
|
141
|
+
return x1;
|
|
142
|
+
}
|
|
143
|
+
else if (x2 <= x3) {
|
|
144
|
+
return x2;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
return x3;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function argIndexOfMinimumOf3(x1, x2, x3) {
|
|
151
|
+
if (x1 <= x2 && x1 <= x3) {
|
|
152
|
+
return 1;
|
|
153
|
+
}
|
|
154
|
+
else if (x2 <= x3) {
|
|
155
|
+
return 2;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
return 3;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=DTWSequenceAlignmentWindowed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DTWSequenceAlignmentWindowed.js","sourceRoot":"","sources":["../../src/alignment/DTWSequenceAlignmentWindowed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAGvD,MAAM,GAAG,GAAG,WAAW,CAAA;AAEvB,MAAM,UAAU,gBAAgB,CAAO,SAAc,EAAE,SAAc,EAAE,YAAoC,EAAE,eAAuB;IACnI,IAAI,eAAe,GAAG,CAAC,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;KAC9D;IAED,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;QACnD,OAAO,EAAE,IAAI,EAAE,EAAmB,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;KACjD;IAED,+CAA+C;IAC/C,MAAM,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,GAAG,sCAAsC,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC,CAAA;IAE3J,yCAAyC;IACzC,MAAM,IAAI,GAAG,yBAAyB,CAAC,+BAA+B,EAAE,kBAAkB,CAAC,CAAA;IAE3F,2DAA2D;IAC3D,MAAM,WAAW,GAAG,+BAA+B,CAAC,MAAM,CAAA;IAC1D,MAAM,QAAQ,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAE1D,MAAM,QAAQ,GAAG,+BAA+B,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;IAE/E,SAAS;IACT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAC1B,CAAC;AAED,SAAS,sCAAsC,CAAO,SAAc,EAAE,SAAc,EAAE,YAAoC,EAAE,eAAuB;IAClJ,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAA;IAE3D,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAA;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE5D,MAAM,+BAA+B,GAAmB,IAAI,KAAK,CAAe,WAAW,CAAC,CAAA;IAE5F,wCAAwC;IACxC,MAAM,kBAAkB,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;IAEtD,kCAAkC;IAClC,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,WAAW,EAAE,EAAE;QACnE,6CAA6C;QAC7C,MAAM,aAAa,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAA;QAChD,+BAA+B,CAAC,WAAW,CAAC,GAAG,aAAa,CAAA;QAE5D,wBAAwB;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;QAE/E,uCAAuC;QACvC,IAAI,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,mBAAmB,EAAE,CAAC,CAAC,CAAA;QACvE,IAAI,eAAe,GAAG,iBAAiB,GAAG,QAAQ,CAAA;QAElD,IAAI,eAAe,GAAG,SAAS,CAAC,MAAM,EAAE;YACvC,eAAe,GAAG,SAAS,CAAC,MAAM,CAAA;YAClC,iBAAiB,GAAG,eAAe,GAAG,QAAQ,CAAA;SAC9C;QAED,sCAAsC;QACtC,kBAAkB,CAAC,WAAW,CAAC,GAAG,iBAAiB,CAAA;QAEnD,6BAA6B;QAC7B,MAAM,oBAAoB,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;QAEnD,wDAAwD;QACxD,IAAI,WAAW,IAAI,CAAC,EAAE;YACrB,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,QAAQ,EAAE,EAAE;gBACvD,MAAM,IAAI,GAAG,YAAY,CAAC,oBAAoB,EAAE,SAAS,CAAC,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAA;gBACxF,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;gBAE1C,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,MAAM,CAAA;aACvC;YAED,SAAQ;SACR;QAED,sBAAsB;QACtB,MAAM,UAAU,GAAG,+BAA+B,CAAC,WAAW,GAAG,CAAC,CAAC,CAAA;QAEnE,0FAA0F;QAC1F,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,kBAAkB,CAAC,WAAW,GAAG,CAAC,CAAC,CAAA;QAEjF,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,QAAQ,EAAE,EAAE;YACvD,oCAAoC;YACpC,MAAM,IAAI,GAAG,YAAY,CAAC,oBAAoB,EAAE,SAAS,CAAC,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAA;YAExF,sDAAsD;YACtD,IAAI,MAAM,GAAG,QAAQ,CAAA;YACrB,IAAI,QAAQ,GAAG,CAAC,EAAE;gBACjB,MAAM,GAAG,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;aACpC;YAED,uDAAuD;YACvD,IAAI,QAAQ,GAAG,QAAQ,CAAA;YACvB,MAAM,YAAY,GAAG,QAAQ,GAAG,iBAAiB,CAAA;YAEjD,IAAI,YAAY,GAAG,QAAQ,EAAE;gBAC5B,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;aACnC;YAED,2DAA2D;YAC3D,IAAI,aAAa,GAAG,QAAQ,CAAA;YAC5B,MAAM,iBAAiB,GAAG,YAAY,GAAG,CAAC,CAAA;YAE1C,IAAI,iBAAiB,IAAI,CAAC,IAAI,iBAAiB,GAAG,QAAQ,EAAE;gBAC3D,aAAa,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAA;aAC7C;YAED,2DAA2D;YAC3D,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAA;SAC5E;KACD;IAED,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,CAAA;AAC/D,CAAC;AAED,SAAS,yBAAyB,CAAC,+BAA+C,EAAE,kBAA8B;IACjH,MAAM,WAAW,GAAG,+BAA+B,CAAC,MAAM,CAAA;IAC1D,MAAM,QAAQ,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAE1D,MAAM,QAAQ,GAAkB,EAAE,CAAA;IAElC,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC,CAAA;IACjC,IAAI,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAA;IAE3B,OAAO,WAAW,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;QACvC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAA;QACxD,MAAM,gBAAgB,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAErG,QAAQ,CAAC,IAAI,CAAC;YACb,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,gBAAgB,GAAG,QAAQ;SACjC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAA;QAC/B,MAAM,aAAa,GAAG,WAAW,CAAA;QACjC,IAAI,MAAM,GAAG,QAAQ,CAAA;QAErB,IAAI,UAAU,IAAI,CAAC,EAAE;YACpB,MAAM,GAAG,+BAA+B,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAA,CAAC,YAAY;SAChF;QAED,MAAM,YAAY,GAAG,QAAQ,GAAG,gBAAgB,CAAA;QAChD,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC,CAAA;QACvC,IAAI,QAAQ,GAAG,QAAQ,CAAA;QAEvB,IAAI,eAAe,IAAI,CAAC,IAAI,YAAY,GAAG,QAAQ,EAAE;YACpD,QAAQ,GAAG,+BAA+B,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAA,CAAC,WAAW;SACrF;QAED,MAAM,iBAAiB,GAAG,QAAQ,GAAG,CAAC,GAAG,gBAAgB,CAAA;QACzD,MAAM,oBAAoB,GAAG,WAAW,GAAG,CAAC,CAAA;QAC5C,IAAI,aAAa,GAAG,QAAQ,CAAA;QAE5B,IAAI,oBAAoB,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,IAAI,iBAAiB,GAAG,QAAQ,EAAE;YACxF,aAAa,GAAG,+BAA+B,CAAC,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,CAAA,CAAC,QAAQ;SACjG;QAED,IAAI,MAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,aAAa,IAAI,QAAQ,EAAE;YAC5E,GAAG,CAAC,4EAA4E,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAA;SAC7G;QAED,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAA;QAEnF,IAAI,qBAAqB,IAAI,CAAC,EAAE;YAC/B,QAAQ,GAAG,UAAU,CAAA;YACrB,WAAW,GAAG,aAAa,CAAA;SAC3B;aAAM,IAAI,qBAAqB,IAAI,CAAC,EAAE;YACtC,QAAQ,GAAG,YAAY,CAAA;YACvB,WAAW,GAAG,eAAe,CAAA;SAC7B;aAAM;YACN,QAAQ,GAAG,iBAAiB,CAAA;YAC5B,WAAW,GAAG,oBAAoB,CAAA;SAClC;KACD;IAED,QAAQ,CAAC,IAAI,CAAC;QACb,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;KACP,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,OAAO,EAAmB,CAAA;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU;IACrD,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACzB,OAAO,EAAE,CAAA;KACT;SAAM,IAAI,EAAE,IAAI,EAAE,EAAE;QACpB,OAAO,EAAE,CAAA;KACT;SAAM;QACN,OAAO,EAAE,CAAA;KACT;AACF,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU;IAC/D,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACzB,OAAO,CAAC,CAAA;KACR;SAAM,IAAI,EAAE,IAAI,EAAE,EAAE;QACpB,OAAO,CAAC,CAAA;KACR;SAAM;QACN,OAAO,CAAC,CAAA;KACR;AACF,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { logToStderr } from "../utilities/Utilities.js";
|
|
2
|
+
const log = logToStderr;
|
|
3
|
+
export function alignLevenshtein(sequence1, sequence2, getSubstitutionCost) {
|
|
4
|
+
const rowCount = sequence2.length + 1;
|
|
5
|
+
const columnCount = sequence1.length + 1;
|
|
6
|
+
// Compute accumulated cost matrix
|
|
7
|
+
const accumulatedCostMatrix = computeAccumulatedCostMatrix(sequence1, sequence2, getSubstitutionCost);
|
|
8
|
+
// Find best path for the computed matrix
|
|
9
|
+
const path = computeBestPath(accumulatedCostMatrix);
|
|
10
|
+
// Best path cost is the bottom right element of the matrix
|
|
11
|
+
const pathCost = accumulatedCostMatrix[rowCount - 1][columnCount - 1];
|
|
12
|
+
return { path, pathCost };
|
|
13
|
+
}
|
|
14
|
+
function computeAccumulatedCostMatrix(sequence1, sequence2, getSubstitutionCost) {
|
|
15
|
+
const rowCount = sequence2.length + 1;
|
|
16
|
+
const columnCount = sequence1.length + 1;
|
|
17
|
+
const accumulatedCostMatrix = new Array(rowCount);
|
|
18
|
+
// Allocate rows and initialize first column
|
|
19
|
+
for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
|
|
20
|
+
const newRow = new Float32Array(columnCount);
|
|
21
|
+
newRow[0] = rowIndex;
|
|
22
|
+
accumulatedCostMatrix[rowIndex] = newRow;
|
|
23
|
+
}
|
|
24
|
+
// Initialize first row
|
|
25
|
+
for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {
|
|
26
|
+
accumulatedCostMatrix[0][columnIndex] = columnIndex;
|
|
27
|
+
}
|
|
28
|
+
// Fill out the rest of the matrix, go row by row
|
|
29
|
+
for (let rowIndex = 1; rowIndex < rowCount; rowIndex++) {
|
|
30
|
+
const previousRow = accumulatedCostMatrix[rowIndex - 1];
|
|
31
|
+
const currentRow = accumulatedCostMatrix[rowIndex];
|
|
32
|
+
for (let columnIndex = 1; columnIndex < columnCount; columnIndex++) {
|
|
33
|
+
const upAndLeft = previousRow[columnIndex - 1];
|
|
34
|
+
const up = previousRow[columnIndex];
|
|
35
|
+
const left = currentRow[columnIndex - 1];
|
|
36
|
+
const smallestCostDirection = argIndexOfSmallestOf3(upAndLeft, up, left);
|
|
37
|
+
let computedCostForCurrentElement;
|
|
38
|
+
if (smallestCostDirection == 1) {
|
|
39
|
+
const subtitutionCost = getSubstitutionCost(sequence1[columnIndex - 1], sequence2[rowIndex - 1]);
|
|
40
|
+
computedCostForCurrentElement = upAndLeft + subtitutionCost;
|
|
41
|
+
}
|
|
42
|
+
else if (smallestCostDirection == 2) {
|
|
43
|
+
computedCostForCurrentElement = up + 1;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
computedCostForCurrentElement = left + 1;
|
|
47
|
+
}
|
|
48
|
+
currentRow[columnIndex] = computedCostForCurrentElement;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return accumulatedCostMatrix;
|
|
52
|
+
}
|
|
53
|
+
function computeBestPath(costMatrix) {
|
|
54
|
+
const bestPath = [];
|
|
55
|
+
let rowIndex = costMatrix.length - 1;
|
|
56
|
+
let columnIndex = costMatrix[0].length - 1;
|
|
57
|
+
while (rowIndex > 1 || columnIndex > 1) {
|
|
58
|
+
bestPath.push({
|
|
59
|
+
source: columnIndex - 1,
|
|
60
|
+
dest: rowIndex - 1
|
|
61
|
+
});
|
|
62
|
+
if (rowIndex == 1) {
|
|
63
|
+
columnIndex -= 1;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (columnIndex == 1) {
|
|
67
|
+
rowIndex -= 1;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const upAndLeft = costMatrix[rowIndex - 1][columnIndex - 1];
|
|
71
|
+
const up = costMatrix[rowIndex - 1][columnIndex];
|
|
72
|
+
const left = costMatrix[rowIndex][columnIndex - 1];
|
|
73
|
+
const smallestCostDirection = argIndexOfSmallestOf3(upAndLeft, up, left);
|
|
74
|
+
if (smallestCostDirection == 1) {
|
|
75
|
+
rowIndex -= 1;
|
|
76
|
+
columnIndex -= 1;
|
|
77
|
+
}
|
|
78
|
+
else if (smallestCostDirection == 2) {
|
|
79
|
+
rowIndex -= 1;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
columnIndex -= 1;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
bestPath.push({
|
|
86
|
+
source: 0,
|
|
87
|
+
dest: 0
|
|
88
|
+
});
|
|
89
|
+
return bestPath.reverse();
|
|
90
|
+
}
|
|
91
|
+
function argIndexOfSmallestOf3(x1, x2, x3) {
|
|
92
|
+
if (x1 <= x2 && x1 <= x3) {
|
|
93
|
+
return 1;
|
|
94
|
+
}
|
|
95
|
+
else if (x2 <= x3) {
|
|
96
|
+
return 2;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return 3;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=LevenshteinSequenceAlignment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LevenshteinSequenceAlignment.js","sourceRoot":"","sources":["../../src/alignment/LevenshteinSequenceAlignment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as API from "../api/API.js";
|
|
2
|
+
import { Timeline, TimelineEntry } from "../utilities/Timeline.js";
|
|
3
|
+
import { RawAudio } from "../audio/AudioUtilities.js";
|
|
4
|
+
export declare function alignUsingDtw(sourceRawAudio: RawAudio, referenceRawAudio: RawAudio, referenceTimeline: Timeline, windowDuration?: number): Promise<TimelineEntry[]>;
|
|
5
|
+
export declare function alignUsingDtwWithRecognition(sourceRawAudio: RawAudio, referenceRawAudio: RawAudio, referenceTimeline: Timeline, recognitionTimeline: Timeline, espeakVoice?: string, phoneAlignmentMethod?: API.PhoneAlignmentMethod, windowDuration?: number): Promise<Timeline>;
|
|
6
|
+
export declare function interpolatePhoneTimelines(sourceTimeline: Timeline, referenceTimeline: Timeline): Promise<Timeline>;
|
|
7
|
+
export declare function alignPhoneTimelines(sourceRawAudio: RawAudio, sourceWordTimeline: Timeline, referenceRawAudio: RawAudio, referenceTimeline: Timeline): Promise<Timeline>;
|
|
8
|
+
export declare function createAlignmentReferenceUsingEspeak(text: string, language: string, voice: string, insertSeparators?: boolean, rate?: number, pitch?: number, pitchRange?: number): Promise<{
|
|
9
|
+
rawAudio: RawAudio;
|
|
10
|
+
timeline: Timeline;
|
|
11
|
+
events: import("../synthesis/EspeakTTS.js").EspeakEvent[];
|
|
12
|
+
}>;
|
|
13
|
+
export declare function createAlignmentReferenceUsingEspeakForFragments(fragments: string[], voice: string, insertSeparators?: boolean, rate?: number, pitch?: number, pitchRange?: number): Promise<{
|
|
14
|
+
rawAudio: RawAudio;
|
|
15
|
+
timeline: Timeline;
|
|
16
|
+
events: import("../synthesis/EspeakTTS.js").EspeakEvent[];
|
|
17
|
+
}>;
|
|
18
|
+
export type AlignmentPath = AlignmentPathEntry[];
|
|
19
|
+
export type AlignmentPathEntry = {
|
|
20
|
+
source: number;
|
|
21
|
+
dest: number;
|
|
22
|
+
};
|
|
23
|
+
export type CompactedPath = CompactedPathEntry[];
|
|
24
|
+
export type CompactedPathEntry = {
|
|
25
|
+
first: number;
|
|
26
|
+
last: number;
|
|
27
|
+
};
|