exclude channels

This commit is contained in:
Lewis Moten
2024-05-07 00:55:02 -04:00
parent 52249ee8e3
commit 887a4acdeb

View File

@@ -14,6 +14,8 @@ var MAX_AMPLITUDE = 300; // Higher than 255 to give us space
var pauseTimeoutId; var pauseTimeoutId;
var sampleIntervalIds = []; var sampleIntervalIds = [];
let EXCLUDED_CHANNELS = [];
var TEXT_TO_SEND = "U"; var TEXT_TO_SEND = "U";
var RANDOM_COUNT = 128; var RANDOM_COUNT = 128;
var MAX_BITS_DISPLAYED_ON_GRAPH = 79; var MAX_BITS_DISPLAYED_ON_GRAPH = 79;
@@ -200,6 +202,7 @@ function updateFrequencyResolution() {
function showSpeed() { function showSpeed() {
const segmentsPerSecond = 1000 / SEGMENT_DURATION; const segmentsPerSecond = 1000 / SEGMENT_DURATION;
const channels = getChannels(); const channels = getChannels();
const allChannels = getChannels(true);
const bitsPerSegment = channels.length; const bitsPerSegment = channels.length;
const baud = bitsPerSegment * segmentsPerSecond; const baud = bitsPerSegment * segmentsPerSecond;
const bytes = baud / 8; const bytes = baud / 8;
@@ -221,9 +224,24 @@ function showSpeed() {
const channelList = document.getElementById('channel-list'); const channelList = document.getElementById('channel-list');
channelList.innerHTML = ""; channelList.innerHTML = "";
channels.forEach(([low, high]) => { allChannels.forEach(([low, high], i) => {
const li = document.createElement('li'); const li = document.createElement('li');
li.textContent = `Low: ${low} Hz High: ${high} Hz`; const label = document.createElement('label');
li.appendChild(label);
const checkbox = document.createElement('input');
checkbox.type = 'checkbox';
checkbox.checked = !EXCLUDED_CHANNELS.includes(i);
checkbox.addEventListener('input', event => {
if(event.target.checked) {
EXCLUDED_CHANNELS = EXCLUDED_CHANNELS.filter(channel => channel !== i)
} else {
EXCLUDED_CHANNELS.push(i);
}
showSpeed();
})
label.append(checkbox);
const text = document.createTextNode(`Low: ${low} Hz High: ${high} Hz`);
label.append(text);
channelList.appendChild(li); channelList.appendChild(li);
}) })
handleTextToSendInput(); handleTextToSendInput();
@@ -386,18 +404,24 @@ function applyErrorCorrection(bits) {
} }
return encodedBits; return encodedBits;
} }
function getChannels() { function getChannels(includeExcluded = false) {
var audioContext = getAudioContext(); var audioContext = getAudioContext();
const sampleRate = audioContext.sampleRate; const sampleRate = audioContext.sampleRate;
const fftSize = 2 ** FFT_SIZE_POWER; const fftSize = 2 ** FFT_SIZE_POWER;
const frequencyResolution = sampleRate / fftSize; const frequencyResolution = sampleRate / fftSize;
const channels = []; const channels = [];
const pairStep = frequencyResolution * (2 + CHANNEL_FREQUENCY_RESOLUTION_PADDING) * FREQUENCY_RESOLUTION_MULTIPLIER; const pairStep = frequencyResolution * (2 + CHANNEL_FREQUENCY_RESOLUTION_PADDING) * FREQUENCY_RESOLUTION_MULTIPLIER;
let channelId = -1;
for(let hz = MINIMUM_FREQUENCY; hz < MAXIMUM_FREQUENCY; hz+= pairStep) { for(let hz = MINIMUM_FREQUENCY; hz < MAXIMUM_FREQUENCY; hz+= pairStep) {
const low = hz; const low = hz;
const high = hz + frequencyResolution * FREQUENCY_RESOLUTION_MULTIPLIER; const high = hz + frequencyResolution * FREQUENCY_RESOLUTION_MULTIPLIER;
if(low < MINIMUM_FREQUENCY) continue; if(low < MINIMUM_FREQUENCY) continue;
if(high > MAXIMUM_FREQUENCY) continue; if(high > MAXIMUM_FREQUENCY) continue;
channelId++;
if(!includeExcluded) {
if(EXCLUDED_CHANNELS.includes(channelId)) continue;
}
channels.push([low, high]); channels.push([low, high]);
} }
return channels; return channels;