create binary audio signal for key press

This commit is contained in:
Lewis Moten
2024-05-01 00:43:50 -04:00
parent a019a31d0b
commit edfb3944fd

View File

@@ -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)();