|
|
@@ -0,0 +1,55 @@ |
|
|
|
lastNoise: {} |
|
|
|
|
|
|
|
function isNoisy(username) { |
|
|
|
const now = +new Date() |
|
|
|
const then = VideoShare.lastNoise[username] || 0 |
|
|
|
console.log(now - then) |
|
|
|
} |
|
|
|
|
|
|
|
function notifySound(stream) { |
|
|
|
const audioContext = new AudioContext() |
|
|
|
const analyser = audioContext.createAnalyser() |
|
|
|
const microphone = audioContext.createMediaStreamSource(stream) |
|
|
|
const scriptProcessor = audioContext.createScriptProcessor(0, 1, 1) |
|
|
|
|
|
|
|
analyser.smoothingTimeConstant = 0.3 |
|
|
|
analyser.fftSize = 1024 |
|
|
|
|
|
|
|
microphone.connect(analyser) |
|
|
|
analyser.connect(scriptProcessor) |
|
|
|
scriptProcessor.connect(audioContext.destination) |
|
|
|
scriptProcessor.onaudioprocess = () => { |
|
|
|
const array = new Uint8Array(analyser.frequencyBinCount) |
|
|
|
analyser.getByteFrequencyData(array) |
|
|
|
const isLoud = array.reduce((a, b) => a + b) / array.length | 0 |
|
|
|
if(isLoud) { |
|
|
|
wire({kind: 'noise'}) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
function showNoise() { |
|
|
|
const now = +new Date() |
|
|
|
for([username, ts] of Object.entries(VideoShare.lastNoise)) { |
|
|
|
const isNoisy = (now - ts) < 100 |
|
|
|
const query = `.label-${username}` |
|
|
|
const el = document.querySelector(query) |
|
|
|
if(el && isNoisy) { |
|
|
|
el.style.color = 'lime' |
|
|
|
} |
|
|
|
else if (el) { |
|
|
|
el.style.color = 'white' |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
addEventListener('noise', ({detail: {source}}) => { |
|
|
|
VideoShare.lastNoise[source] = +new Date() |
|
|
|
}) |
|
|
|
|
|
|
|
addEventListener('load', () => { |
|
|
|
setInterval(showNoise, 100) |
|
|
|
doNotLog.add('noise') |
|
|
|
}) |
|
|
|
|
|
|
|
// VideoShare.notifySound(stream) |