From 7df77274cd572f106030156a397eb253887316d5 Mon Sep 17 00:00:00 2001 From: Henry Prince Date: Sun, 26 Jan 2025 20:23:00 -0500 Subject: [PATCH 1/6] Implement the spread first by defining a min and max wait time. This will convert over to input-driven variables soon. --- src/js/util.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/js/util.js b/src/js/util.js index c35885f..5f4ecf3 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -426,10 +426,16 @@ export function normalizeStationGain(stations) { * @param {number} audioLock - Base time offset for playback start. */ export function respondWithAllStations(stations, audioLock) { + const MINIMUM_DELAY = 0.25; // Minimum offset after audioLock + const RANDOM_RANGE = 1.75; // How much additional delay to randomize + console.log("<-- Responding with stations: " + stations.map(station => station.callsign)); stations = normalizeStationGain(stations); for (let i = 0; i < stations.length; i++) { - let responseTimer = stations[i].player.playSentence(stations[i].callsign, audioLock + Math.random() + 0.5); + const randomDelay = MINIMUM_DELAY + (Math.random() * RANDOM_RANGE); + console.log(`Playing ${stations[i].callsign} after delay of ${randomDelay} seconds`); + + let responseTimer = stations[i].player.playSentence(stations[i].callsign, audioLock + randomDelay); updateAudioLock(responseTimer); } } From d878dd1cb6c1aa7c49f2c86fff0100f31cb6b797 Mon Sep 17 00:00:00 2001 From: Henry Prince Date: Sun, 26 Jan 2025 21:18:38 -0500 Subject: [PATCH 2/6] Add minWait and maxWait to the Tone and Volume Row. --- src/index.html | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/index.html b/src/index.html index 50a2f61..aba0bb3 100644 --- a/src/index.html +++ b/src/index.html @@ -233,31 +233,48 @@
Responding Station Settings
-
-
+
+
- +
-
+
- +
-
+
- +
-
+
- + +
+
+ + +
+
+ +
+
From abb48fc326c02eb815dab6cfbc5b675ab1a86198 Mon Sep 17 00:00:00 2001 From: Henry Prince Date: Sun, 26 Jan 2025 21:34:33 -0500 Subject: [PATCH 3/6] Add minWait and maxWait into the global inputs object --- src/js/inputs.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/js/inputs.js b/src/js/inputs.js index 15b36f9..97c6a1a 100644 --- a/src/js/inputs.js +++ b/src/js/inputs.js @@ -45,6 +45,8 @@ function getDOMInputs() { // convert volumes to a float between 0 and 1 minVolume: parseFloat(document.getElementById('minVolume').value) / 100, maxVolume: parseFloat(document.getElementById('maxVolume').value) / 100, + minWait: parseFloat(document.getElementById('minWait').value), + maxWait: parseFloat(document.getElementById('maxWait').value), // Checkboxes & Radio usOnly: document.getElementById('usOnly') From 2388efeee49f37c3bbe07dc6766541b072cca83b Mon Sep 17 00:00:00 2001 From: Henry Prince Date: Sun, 26 Jan 2025 21:37:18 -0500 Subject: [PATCH 4/6] Change min and max delay to use the input value rather than being hardcoded. Also remove debugging print statements. I moade the choice to get the inputs on every invocation because it's not that expensive and it'd be nice to be able to change these values on the fly. --- src/js/util.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/js/util.js b/src/js/util.js index 5f4ecf3..f33ede4 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -1,5 +1,6 @@ import {createMorsePlayer, updateAudioLock} from "./audio.js"; import {getCallingStation} from "./stationGenerator.js"; +import {getInputs} from "./inputs.js"; /** * Compares the source and query strings based on specific fuzzy match criteria. @@ -426,14 +427,16 @@ export function normalizeStationGain(stations) { * @param {number} audioLock - Base time offset for playback start. */ export function respondWithAllStations(stations, audioLock) { - const MINIMUM_DELAY = 0.25; // Minimum offset after audioLock - const RANDOM_RANGE = 1.75; // How much additional delay to randomize + + let inputs = getInputs(); + + let minDelay = inputs.minWait; + let maxDelay = inputs.maxWait; console.log("<-- Responding with stations: " + stations.map(station => station.callsign)); stations = normalizeStationGain(stations); for (let i = 0; i < stations.length; i++) { - const randomDelay = MINIMUM_DELAY + (Math.random() * RANDOM_RANGE); - console.log(`Playing ${stations[i].callsign} after delay of ${randomDelay} seconds`); + const randomDelay = minDelay + (Math.random() * maxDelay); let responseTimer = stations[i].player.playSentence(stations[i].callsign, audioLock + randomDelay); updateAudioLock(responseTimer); From ace45c026c415a04e5730ae894f7a4c30674f96f Mon Sep 17 00:00:00 2001 From: Henry Prince Date: Wed, 29 Jan 2025 19:45:41 -0500 Subject: [PATCH 5/6] Cleanup debugging statements --- src/js/stationGenerator.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/js/stationGenerator.js b/src/js/stationGenerator.js index 78a121e..fb4f090 100644 --- a/src/js/stationGenerator.js +++ b/src/js/stationGenerator.js @@ -143,14 +143,8 @@ function getRandomUSCallsign(formats) { possiblePrefixes = US_CALLSIGN_PREFIXES_WEIGHTED; } - console.log("Chosen format: ", format); - - console.log("Possible prefixes: ", possiblePrefixes); - const prefix = weightedRandomElement(possiblePrefixes); - console.log("Prefix: ", prefix); - let prefixLettersToGenerate = parseInt(format.slice(0, 1)) - prefix.length; switch (format) { From 7bbe3ad21c391eda29d30c17dcdcb76799a75245 Mon Sep 17 00:00:00 2001 From: Henry Prince Date: Wed, 29 Jan 2025 19:55:12 -0500 Subject: [PATCH 6/6] Add upper and lower validation to min and max wait --- src/js/util.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/js/util.js b/src/js/util.js index f33ede4..9e3a2a8 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -430,8 +430,9 @@ export function respondWithAllStations(stations, audioLock) { let inputs = getInputs(); - let minDelay = inputs.minWait; - let maxDelay = inputs.maxWait; + // Ensure minWait is between 0 and 2, and maxWait is between 0 and 5 + const minDelay = Math.max(0, Math.min(inputs.minWait, 2)); + const maxDelay = Math.max(0, Math.min(inputs.maxWait, 5)); console.log("<-- Responding with stations: " + stations.map(station => station.callsign)); stations = normalizeStationGain(stations);