diff --git a/js/ui.js b/js/ui.js
index 6f469cd0..37f3b227 100644
--- a/js/ui.js
+++ b/js/ui.js
@@ -436,7 +436,7 @@ function zoomSpec(direction) {
}
}
// Keep playhead at same time in file
- position = (timeNow - bufferBegin) / windowLength;
+ position = clamp((timeNow - bufferBegin) / windowLength, 0, 1);
// adjust region start time to new window start time
let region = getRegion();
if (region) {
@@ -623,7 +623,7 @@ function customAnalysisAllMenu(saved){
Ctrl+A`;
enableMenuItem(['reanalyseAll']);
} else {
- analyseAllMenu.innerHTML = `upload_file Analyse All Open Files
+ analyseAllMenu.innerHTML = `search Analyse All Open Files
Ctrl+A`;
disableMenuItem(['reanalyseAll']);
}
@@ -830,7 +830,7 @@ async function onOpenFiles(args) {
resetDiagnostics();
// Store the file list and Load First audio file
fileList = args.filePaths;
- fileList.length > 1 && worker.postMessage({action: 'check-all-files-saved', files: fileList});
+ fileList.length > 1 && fileList.length < 25_000 && worker.postMessage({action: 'check-all-files-saved', files: fileList});
STATE.openFiles = args.filePaths;
// Sort file by time created (the oldest first):
if (fileList.length > 1) {
@@ -1186,6 +1186,9 @@ async function resultClick(e) {
}
}
+function clamp(value, min, max){
+ return Math.min(Math.max(value, min), max);
+}
const loadResultRegion = ({ file = '', start = 0, end = 3, label = '' } = {}) => {
start = parseFloat(start);
@@ -1194,7 +1197,7 @@ const loadResultRegion = ({ file = '', start = 0, end = 3, label = '' } = {}) =>
if (windowLength <= 3.5) windowLength = 6;
bufferBegin = Math.max(0, start - (windowLength / 2) + 1.5)
const region = { start: Math.max(start - bufferBegin, 0), end: end - bufferBegin, label: label };
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
postBufferUpdate({ file: file, begin: bufferBegin, position: position, region: region })
}
@@ -2410,7 +2413,7 @@ function onChartData(args) {
setTimelinePreferences();
if (fileLoaded) {
// Reload wavesurfer with the new timeline
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
postBufferUpdate({ begin: bufferBegin, position: position })
}
updatePrefs('config.json', config)
@@ -2516,7 +2519,7 @@ function onChartData(args) {
},
PageUp: function () {
if (currentBuffer) {
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
bufferBegin = Math.max(0, bufferBegin - windowLength);
postBufferUpdate({ begin: bufferBegin, position: position })
}
@@ -2532,7 +2535,7 @@ function onChartData(args) {
},
PageDown: function () {
if (currentBuffer) {
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
bufferBegin = Math.min(bufferBegin + windowLength, currentFileDuration - windowLength);
postBufferUpdate({ begin: bufferBegin, position: position })
}
@@ -2550,7 +2553,7 @@ function onChartData(args) {
const skip = windowLength / 100;
if (currentBuffer) {
wavesurfer.skipBackward(skip);
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
if (wavesurfer.getCurrentTime() < skip && bufferBegin > 0) {
bufferBegin -= skip;
postBufferUpdate({ begin: bufferBegin, position: position })
@@ -2561,7 +2564,7 @@ function onChartData(args) {
const skip = windowLength / 100;
if (wavesurfer) {
wavesurfer.skipForward(skip);
- const position = Math.max(wavesurfer.getCurrentTime() / windowLength, 1);
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
if (wavesurfer.getCurrentTime() > windowLength - skip) {
bufferBegin = Math.min(currentFileDuration - windowLength, bufferBegin += skip)
postBufferUpdate({ begin: bufferBegin, position: position })
@@ -2572,7 +2575,7 @@ function onChartData(args) {
if (e.shiftKey) {
if (wavesurfer.spectrogram.fftSamples > 64) {
wavesurfer.spectrogram.fftSamples /= 2;
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
postBufferUpdate({ begin: bufferBegin, position: position, region: getRegion(), goToRegion: false })
console.log(wavesurfer.spectrogram.fftSamples);
}
@@ -2584,7 +2587,7 @@ function onChartData(args) {
if (e.shiftKey) {
if (wavesurfer.spectrogram.fftSamples > 64) {
wavesurfer.spectrogram.fftSamples /= 2;
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
postBufferUpdate({ begin: bufferBegin, position: position, region: getRegion(), goToRegion: false })
console.log(wavesurfer.spectrogram.fftSamples);
}
@@ -2596,7 +2599,7 @@ function onChartData(args) {
if (e.shiftKey) {
if (wavesurfer.spectrogram.fftSamples <= 2048) {
wavesurfer.spectrogram.fftSamples *= 2;
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
postBufferUpdate({ begin: bufferBegin, position: position, region: getRegion(), goToRegion: false })
console.log(wavesurfer.spectrogram.fftSamples);
}
@@ -2608,7 +2611,7 @@ function onChartData(args) {
if (e.shiftKey) {
if (wavesurfer.spectrogram.fftSamples <= 2048) {
wavesurfer.spectrogram.fftSamples *= 2;
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
postBufferUpdate({ begin: bufferBegin, position: position, region: getRegion(), goToRegion: false })
console.log(wavesurfer.spectrogram.fftSamples);
}
@@ -4014,7 +4017,7 @@ function onChartData(args) {
// High pass threshold
const showFilterEffect = () => {
if (fileLoaded) {
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
postBufferUpdate({ begin: bufferBegin, position: position, region: getRegion() })
}
}
@@ -4369,7 +4372,7 @@ DOM.gain.addEventListener('input', () => {
DOM.gainAdjustment.textContent = element.value + 'dB'; //.toString();
config.audio.gain = element.value;
worker.postMessage({action:'update-state', audio: config.audio})
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
fileLoaded &&
postBufferUpdate({ begin: bufferBegin, position: position, region: getRegion(), goToRegion: false })
break;
@@ -4377,7 +4380,7 @@ DOM.gain.addEventListener('input', () => {
case 'normalise': {
config.audio.normalise = element.checked;
worker.postMessage({action:'update-state', audio: config.audio})
- const position = wavesurfer.getCurrentTime() / windowLength;
+ const position = clamp(wavesurfer.getCurrentTime() / windowLength, 0, 1);
fileLoaded &&
postBufferUpdate({ begin: bufferBegin, position: position, region: getRegion(), goToRegion: false })
break;
diff --git a/js/worker.js b/js/worker.js
index 4885c5a6..2cfd3c80 100644
--- a/js/worker.js
+++ b/js/worker.js
@@ -926,7 +926,7 @@ function onAbort({
const getDuration = async (src) => {
let audio;
- return new Promise(function (resolve) {
+ return new Promise(function (resolve, reject) {
audio = new Audio();
audio.src = src.replace(/#/g, '%23'); // allow hash in the path (https://github.com/Mattk70/Chirpity-Electron/issues/98)
audio.addEventListener("loadedmetadata", function () {
@@ -939,6 +939,10 @@ const getDuration = async (src) => {
resolve(duration);
});
+ audio.addEventListener('error', (error) => {
+ UI.postMessage({event: 'generate-alert', message: 'Unable to decode file metatada'})
+ reject(error)
+ })
});
}