create binary audio signal for key press
This commit is contained in:
33
index.js
33
index.js
@@ -1,5 +1,6 @@
|
||||
var audioContext;
|
||||
var sendButton;
|
||||
var textToSend;
|
||||
var isListeningCheckbox;
|
||||
var microphoneStream;
|
||||
var microphoneNode;
|
||||
@@ -11,6 +12,9 @@ var MAX_DATA_POINTS = 1024;
|
||||
|
||||
// 20 to 20,000 - human
|
||||
var FREQUENCY_TONE = 18000;
|
||||
var FREQUENCY_HIGH = 900;
|
||||
var FREQUENCY_LOW = 1200;
|
||||
var FREQUENCY_DURATION = 100;
|
||||
|
||||
function handleWindowLoad() {
|
||||
// grab dom elements
|
||||
@@ -18,12 +22,41 @@ function handleWindowLoad() {
|
||||
isListeningCheckbox = document.getElementById('is-listening-checkbox');
|
||||
receivedDataTextarea = document.getElementById('received-data');
|
||||
receivedGraph = document.getElementById('received-graph');
|
||||
textToSend = document.getElementById('text-to-send');
|
||||
|
||||
// wire up events
|
||||
sendButton.addEventListener('click', handleSendButtonClick);
|
||||
isListeningCheckbox.addEventListener('click', handleListeningCheckbox);
|
||||
textToSend.addEventListener('keypress', handleTextToSendKeypress);
|
||||
}
|
||||
|
||||
function handleTextToSendKeypress(event) {
|
||||
var keyCode = event.which || event.keyCode;
|
||||
var bits = keyCode.toString(2)
|
||||
.padStart(8, '0')
|
||||
.split('')
|
||||
.map(Number);
|
||||
sendBits(bits);
|
||||
}
|
||||
function getFrequency(bit) {
|
||||
return bit ? FREQUENCY_HIGH : FREQUENCY_LOW;
|
||||
}
|
||||
function sendBits(bits) {
|
||||
var audioContext = getAudioContext();
|
||||
var oscillator = audioContext.createOscillator();
|
||||
var duration = bits.length * FREQUENCY_DURATION;
|
||||
for(var i = 0; i < bits.length; i++) {
|
||||
if(i > 0 && bits[i] === bits[i-1]) continue;
|
||||
var offset = ((i * FREQUENCY_DURATION)/1000);
|
||||
oscillator.frequency.setValueAtTime(
|
||||
getFrequency(bits[i]),
|
||||
audioContext.currentTime + offset
|
||||
);
|
||||
}
|
||||
oscillator.connect(audioContext.destination);
|
||||
oscillator.start();
|
||||
window.setTimeout(function() { oscillator.stop(); }, duration);
|
||||
}
|
||||
function getAudioContext() {
|
||||
if(!audioContext) {
|
||||
audioContext = new (window.AudioContext || webkitAudioContext)();
|
||||
|
||||
Reference in New Issue
Block a user