diff --git a/Help/keyboard.html b/Help/keyboard.html index 43263587..1662d625 100644 --- a/Help/keyboard.html +++ b/Help/keyboard.html @@ -11,11 +11,11 @@
File handling
- Ctrl-O + Ctrl+O Show file open dialog - Ctrl-S + Ctrl-S Save detections to the records archive. @@ -24,116 +24,116 @@
Analysis
- Ctrl-A + Ctrl-A Analyse the current file. - Shift-Ctrl-A + Shift-Ctrl-A Analyse all open files. - Esc + Esc Stop analysis - Ctrl-Tab + Ctrl-Tab Toggle between exploring the archive and the latest analysis results. This allows you to compare current detections with those you've previously recorded.
Transport Controls
- SpaceBar + SpaceBar Toggle Play/Pause the audio - P + P Play the selected region. Only active if a region has been selected. - Ctrl-C + Ctrl-C Centre the spectrogram at the current playhead position. - Ctrl-G + Ctrl-G Go to position in file - Home (Fn + ArrowLeft) + Home (Fn + ArrowLeft) Move the playhead to the beginning of the file - End (Fn + ArrowLeft) + End (Fn + ArrowLeft) Move the playhead to the end of the file - PgUp (Fn + ArrowUp) + PgUp (Fn + ArrowUp) Move the playhead back by a screen width - PgDn (Fn + ArrowDown) + PgDn (Fn + ArrowDown) Move the playhead forward by a screen width - Left arrow (←) + Left arrow (←) Move the playhead forward. - Right arrow (→) + Right arrow (→) Move the playhead backward. - Tab or Down Arrow (↓) + Tab or Down Arrow (↓) Skip to the next detection - Shift Tab or Up Arrow (↑) + Shift Tab or Up Arrow (↑) Skip back to the previous detection
Spectrogram
- Plus (+) + Plus (+) Zoom in on the spectrogram. When zooming, Chirpity automatically adjusts the short-time Fourier transform (STFT) window size to optimize the spectral resolution - Minus (-) + Minus (-) Zoom out the spectrogram. When zooming, Chirpity automatically adjusts the STFT window size to optimize the spectral resolution - Ctrl Plus (+) + Ctrl Plus (+) Manually reduce the spectrogram window size. Adjusting the window size has the effect of sharpening / blurring the calls in the spectrogram. - Ctrl Minus (-) + Ctrl Minus (-) Manually increase the spectrogram window size - Ctrl-T + Ctrl-T Toggle between Timecode and Time of Day
Records
- Delete or Backspace + Delete or Backspace Delete current record - Ctrl-Z + Ctrl-Z Restore deleted record(s) - Ctrl-V + Ctrl-V Validate the current active record (confirm the detection) diff --git a/js/ui.js b/js/ui.js index f9e0f735..264e3ed9 100644 --- a/js/ui.js +++ b/js/ui.js @@ -3353,8 +3353,6 @@ function formatDuration(seconds){ STATE.mode !== 'explore' && enableMenuItem(['save2db']) } if (STATE.currentFile) enableMenuItem(['analyse']) - - adjustSpecDims(true) } @@ -3454,6 +3452,7 @@ function formatDuration(seconds){ return } if (index <= 1) { + adjustSpecDims(true) if (selection) { const selectionTable = document.getElementById('selectionResultTableBody'); selectionTable.textContent = ''; @@ -5000,7 +4999,7 @@ async function readLabels(labelFile, updating){ // If we haven't clicked the active row or we cleared the region, load the row we clicked if (resultContext || hideInSelection || hideInSummary) { // Lets check if the summary needs to be filtered - if (!(inSummary && target.closest('tr').classList.contains('text-warning'))) { + if (inSummary && ! target.closest('tr').classList.contains('text-warning')) { target.click(); // Wait for file to load await waitForFileLoad(); } @@ -5230,11 +5229,19 @@ async function readLabels(labelFile, updating){ function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } - - async function waitForFileLoad() { - while (!fileLoaded) { - await delay(100); // Wait for 100 milliseconds before checking again - } + let fileLoadRetryCount = 0 + function waitForFileLoad() { + let maxRetries = 20; + return new Promise((resolve) =>{ + setTimeout(() =>{ + if (fileLoaded) resolve(fileLoadRetryCount = 0) + else { + console.log('retries: ', ++fileLoadRetryCount) + resolve(waitForFileLoad()) + } + }, 100) + if (fileLoadRetryCount >= maxRetries) resolve(fileLoadRetryCount = 0) + }) } async function waitForLocations() { diff --git a/js/worker.js b/js/worker.js index 8ca2e263..7149349e 100644 --- a/js/worker.js +++ b/js/worker.js @@ -1146,7 +1146,7 @@ async function notifyMissingFile(file) { const row = await diskDB.getAsync('SELECT * FROM FILES WHERE name = ?', file); if (row?.id) missingFile = file UI.postMessage({ - event: 'generate-alert', type: 'error', + event: 'generate-alert', type: 'warning', message: `Unable to locate source file with any supported file extension: ${file}`, file: missingFile }) @@ -1520,7 +1520,7 @@ const getPredictBuffers = async ({ predictionsRequested[file] = 0; const samplesInBatch = sampleRate * BATCH_SIZE * WINDOW_SIZE - const highWaterMark = samplesInBatch * 2; + const highWaterMark = samplesInBatch * 2; let chunkStart = start * sampleRate; if (STATE.detect.backend === 'tensorflow'){ @@ -3727,7 +3727,7 @@ async function convertAndOrganiseFiles(threadLimit) { const attempted = successfulConversions + failedConversions; // Create a summary message let summaryMessage; - let type = 'notice'; + let type = 'info'; if (attempted) { summaryMessage = `Processing complete: ${successfulConversions} successful, ${failedConversions} failed.`;