exclude channels
This commit is contained in:
30
index.js
30
index.js
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user