mirror of
https://github.com/lewismoten/data-over-audio.git
synced 2026-04-20 21:26:24 +08:00
allow choice of wave forms
This commit is contained in:
@@ -59,6 +59,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h2>Configuration</h2>
|
<h2>Configuration</h2>
|
||||||
|
Wave Form: <select id="wave-form" value="sine">
|
||||||
|
<option value="sine">Sine Wave</option>
|
||||||
|
<option value="square">Square Wave</option>
|
||||||
|
<option value="sawtooth">Sawtooth Wave</option>
|
||||||
|
<option value="triangle">Triangle Wave</option>
|
||||||
|
</select><br>
|
||||||
Segment Duration: <input id="bit-duration-text" type="number" min="0" max="1000" value="190">ms<br>
|
Segment Duration: <input id="bit-duration-text" type="number" min="0" max="1000" value="190">ms<br>
|
||||||
Amplitude Threshold: <input id="amplitude-threshold-text" type="number" min="0" max="100" value="75"><br>
|
Amplitude Threshold: <input id="amplitude-threshold-text" type="number" min="0" max="100" value="75"><br>
|
||||||
Minimum Frequency: <input id="minimum-frequency" type="number" min="20" max="20000" value="900"><br>
|
Minimum Frequency: <input id="minimum-frequency" type="number" min="20" max="20000" value="900"><br>
|
||||||
|
|||||||
16
index.js
16
index.js
@@ -20,8 +20,8 @@ var MAX_BITS_DISPLAYED_ON_GRAPH = 79;
|
|||||||
var SEGMENT_DURATION = 30;
|
var SEGMENT_DURATION = 30;
|
||||||
var AMPLITUDE_THRESHOLD_PERCENT = .75;
|
var AMPLITUDE_THRESHOLD_PERCENT = .75;
|
||||||
var AMPLITUDE_THRESHOLD = 160;
|
var AMPLITUDE_THRESHOLD = 160;
|
||||||
var MINIMUM_FREQUENCY = 80;
|
var MINIMUM_FREQUENCY = 400;
|
||||||
var MAXIMUM_FREQUENCY = 18017;
|
var MAXIMUM_FREQUENCY = 14650;
|
||||||
var LAST_SEGMENT_PERCENT = 0.6;
|
var LAST_SEGMENT_PERCENT = 0.6;
|
||||||
var FFT_SIZE_POWER = 9;
|
var FFT_SIZE_POWER = 9;
|
||||||
var FREQUENCY_RESOLUTION_MULTIPLIER = 2;
|
var FREQUENCY_RESOLUTION_MULTIPLIER = 2;
|
||||||
@@ -29,6 +29,7 @@ let CHANNEL_FREQUENCY_RESOLUTION_PADDING = 2;
|
|||||||
var SMOOTHING_TIME_CONSTANT = 0;
|
var SMOOTHING_TIME_CONSTANT = 0;
|
||||||
var HAMMING_ERROR_CORRECTION = true;
|
var HAMMING_ERROR_CORRECTION = true;
|
||||||
let PERIODIC_INTERLEAVING = true;
|
let PERIODIC_INTERLEAVING = true;
|
||||||
|
let WAVE_FORM = "triangle";
|
||||||
|
|
||||||
const ERROR_CORRECTION_BLOCK_SIZE = 7;
|
const ERROR_CORRECTION_BLOCK_SIZE = 7;
|
||||||
let CHANNEL_OVER = -1;
|
let CHANNEL_OVER = -1;
|
||||||
@@ -75,7 +76,10 @@ function handleWindowLoad() {
|
|||||||
receivedChannelGraph.addEventListener('mouseout', handleReceivedChannelGraphMouseout);
|
receivedChannelGraph.addEventListener('mouseout', handleReceivedChannelGraphMouseout);
|
||||||
receivedChannelGraph.addEventListener('mousemove', handleReceivedChannelGraphMousemove);
|
receivedChannelGraph.addEventListener('mousemove', handleReceivedChannelGraphMousemove);
|
||||||
receivedChannelGraph.addEventListener('click', handleReceivedChannelGraphClick);
|
receivedChannelGraph.addEventListener('click', handleReceivedChannelGraphClick);
|
||||||
|
document.getElementById('wave-form').value = WAVE_FORM;
|
||||||
|
document.getElementById('wave-form').addEventListener('change', (event) => {
|
||||||
|
WAVE_FORM = event.target.value;
|
||||||
|
})
|
||||||
document.getElementById('pause-after-end').checked = PAUSE_AFTER_END;
|
document.getElementById('pause-after-end').checked = PAUSE_AFTER_END;
|
||||||
document.getElementById('error-correction-hamming').checked = HAMMING_ERROR_CORRECTION;
|
document.getElementById('error-correction-hamming').checked = HAMMING_ERROR_CORRECTION;
|
||||||
document.getElementById('error-correction-hamming').addEventListener('change', event => {
|
document.getElementById('error-correction-hamming').addEventListener('change', event => {
|
||||||
@@ -447,7 +451,7 @@ function sendBits(bits) {
|
|||||||
var oscillator = audioContext.createOscillator();
|
var oscillator = audioContext.createOscillator();
|
||||||
|
|
||||||
oscillator.connect(destination);
|
oscillator.connect(destination);
|
||||||
oscillator.type = 'sawtooth';
|
oscillator.type = WAVE_FORM;
|
||||||
oscillators.push(oscillator);
|
oscillators.push(oscillator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -706,10 +710,10 @@ if((sampleDuration / SEGMENT_DURATION) < LAST_SEGMENT_PERCENT) return;
|
|||||||
const correctEncodedBits = packetReceivedBits.filter((b, i) => i < encodedBitCount && b === EXPECTED_ENCODED_BITS[i]).length;
|
const correctEncodedBits = packetReceivedBits.filter((b, i) => i < encodedBitCount && b === EXPECTED_ENCODED_BITS[i]).length;
|
||||||
const correctedDecodedBits = packetDecodedBits.filter((b, i) => i < decodedBitCount && b === EXPECTED_BITS[i]).length;
|
const correctedDecodedBits = packetDecodedBits.filter((b, i) => i < decodedBitCount && b === EXPECTED_BITS[i]).length;
|
||||||
document.getElementById('received-data-error-percent').innerText = (
|
document.getElementById('received-data-error-percent').innerText = (
|
||||||
Math.floor((1 - (correctEncodedBits / encodedBitCount)) * 1000) * 0.1
|
Math.floor((1 - (correctEncodedBits / packetReceivedBits.length)) * 1000) * 0.1
|
||||||
).toLocaleString();
|
).toLocaleString();
|
||||||
document.getElementById('decoded-data-error-percent').innerText = (
|
document.getElementById('decoded-data-error-percent').innerText = (
|
||||||
Math.floor((1 - (correctedDecodedBits / decodedBitCount)) * 1000) * 0.1
|
Math.floor((1 - (correctedDecodedBits / packetDecodedBits.length)) * 1000) * 0.1
|
||||||
).toLocaleString();
|
).toLocaleString();
|
||||||
document.getElementById('decoded-text').innerHTML = packetDecodedBits.reduce(textExpectorReducer(EXPECTED_TEXT), '');
|
document.getElementById('decoded-text').innerHTML = packetDecodedBits.reduce(textExpectorReducer(EXPECTED_TEXT), '');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user