mirror of
https://github.com/lewismoten/data-over-audio.git
synced 2026-04-21 21:46:23 +08:00
increase frequency duration
This commit is contained in:
44
index.js
44
index.js
@@ -15,7 +15,7 @@ var MAX_DATA_POINTS = 1024;
|
|||||||
var FREQUENCY_TONE = 18000;
|
var FREQUENCY_TONE = 18000;
|
||||||
var FREQUENCY_HIGH = 900;
|
var FREQUENCY_HIGH = 900;
|
||||||
var FREQUENCY_LOW = 1200;
|
var FREQUENCY_LOW = 1200;
|
||||||
var FREQUENCY_DURATION = 100;
|
var FREQUENCY_DURATION = 400;
|
||||||
var FREQUENCY_THRESHOLD = 50;
|
var FREQUENCY_THRESHOLD = 50;
|
||||||
|
|
||||||
function handleWindowLoad() {
|
function handleWindowLoad() {
|
||||||
@@ -126,8 +126,13 @@ function handleListeningCheckbox(e) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function received(value) {
|
||||||
let listen = '';
|
receivedDataTextarea.value += value;
|
||||||
|
receivedDataTextarea.scrollTop = receivedDataTextarea.scrollHeight;
|
||||||
|
}
|
||||||
|
let bitStarted;
|
||||||
|
let bitHighStrength = [];
|
||||||
|
let bitLowStrength = [];
|
||||||
function analyzeAudio() {
|
function analyzeAudio() {
|
||||||
if(!analyser) return;
|
if(!analyser) return;
|
||||||
if(!microphoneNode) return;
|
if(!microphoneNode) return;
|
||||||
@@ -146,17 +151,38 @@ function analyzeAudio() {
|
|||||||
var i = Math.round(hz / length);
|
var i = Math.round(hz / length);
|
||||||
return frequencyData[i];
|
return frequencyData[i];
|
||||||
}
|
}
|
||||||
|
const sum = (total, value) => total + value;
|
||||||
|
function evaluateBit(highBits, lowBits) {
|
||||||
|
let highCount = highBits.reduce(
|
||||||
|
(count, highAmplitude, i) =>
|
||||||
|
count += highAmplitude > lowBits[i] ? 1 : 0
|
||||||
|
, 0
|
||||||
|
);
|
||||||
|
return highCount >= (highBits.length / 2) ? '1' : '0';
|
||||||
|
}
|
||||||
|
|
||||||
var high = canHear(FREQUENCY_HIGH);
|
var high = canHear(FREQUENCY_HIGH);
|
||||||
var low = canHear(FREQUENCY_LOW);
|
var low = canHear(FREQUENCY_LOW);
|
||||||
if(high || low) {
|
if(high || low) {
|
||||||
listen += amplitude(FREQUENCY_HIGH) > amplitude(FREQUENCY_LOW) ? '1' : '0';
|
const now = performance.now();
|
||||||
} else {
|
if(bitStarted) {
|
||||||
if(listen !== '') {
|
if(now - bitStarted > FREQUENCY_DURATION) {
|
||||||
receivedDataTextarea.value += listen + '\n';
|
received(evaluateBit(bitHighStrength, bitLowStrength));
|
||||||
receivedDataTextarea.scrollTop = receivedDataTextarea.scrollHeight;
|
bitHighStrength.length = 0;
|
||||||
|
bitLowStrength.length = 0;
|
||||||
|
bitStarted = now;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bitStarted = now;
|
||||||
|
}
|
||||||
|
bitHighStrength.push(amplitude(FREQUENCY_HIGH));
|
||||||
|
bitLowStrength.push(amplitude(FREQUENCY_LOW));
|
||||||
|
} else {
|
||||||
|
if(bitStarted) {
|
||||||
|
bitStarted = undefined;
|
||||||
|
received(evaluateBit(bitHighStrength, bitLowStrength));
|
||||||
|
received('\n');
|
||||||
}
|
}
|
||||||
listen = '';
|
|
||||||
}
|
}
|
||||||
requestAnimationFrame(analyzeAudio);
|
requestAnimationFrame(analyzeAudio);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user