You can pipe a microphone directly to AudioWorklet, using MediaStreamAudioSourceNode. Do the following in the main scope, then you can access the mic input as the input
parameter of process()
in the worklet scope.
const audioCtx =
new
(window.AudioContext || window.webkitAudioContext)()
const micStream = await navigator.mediaDevices.getUserMedia({ audio: true })
const micNode = new MediaStreamAudioSourceNode(audioCtx, { mediaStream: micStream })
micNode.connect(yourAudioWorkletNode)
yourAudioWorkletNode.connect(audioCtx.destination)
The field of information theory for calculating how much data can be thrown away while minimising distortion is called rate-distortion theory, and the term for compression with some intentional data loss is lossy compression. This article on JPEGs is an interesting start on some lossy compression techniques, in particular the explanation of Discrete Cosine Transforms. https://parametric.press/issue-01/unraveling-the-jpeg/
I don't know of any resources, but I moderated a community once, and did absolutely no research and everything turned out fine. There were about 15 or so core members in the community and maybe a couple of hundred members in total. My advice is to make explicit rules about what is and is not allowed in the community, and try to enforce them as evenly as possible. If you let people know what's expected and err on the side of forgiveness when it comes to rule violations, most people in the community will understand and respect that you're just doing what's necessary to keep the community running smoothly.
We had two resident trolls who would just say whatever was the most aggravating thing they could think of, but after quite a short time people learned that that was all they were doing and they became quite ineffective. There was also a particular member that everyone in the community seemed to dislike and was continually the victim of quite harsh bullying from most of the other people there. Again, the hands off approach seemed to work best, as while most people were mean to him, he often antagonised them and brought more attacks onto himself, so I felt it wasn't necessary for me to intervene, as he was making everything worse for himself. So yeah, I recommend being as hands off as possible when it comes to mediating disputes, only intervening when absolutely necessary. That being said, when moderating, you are usually in a position to set up games and activities in a way that the rest of community would be less inclined to do, or not have the moderator powers necessary to set up.
If I were you I'd focus most of my energy on setting up ways for the community to interact constructively, it will most likely lead to there being fewer disputes to mediate, as people won't start arguments for the sake of having something to talk about.
I saw this before the meeting happened but couldn't get off work on such short notice, but would be interested in future meetups.
I'd recommend Brave (
brew install brave-browser
) over Chrome if you care about privacy at all. It's a Chromium based browser so has feature parity with Chrome, but it doesn't send your personal information to the Google hivemind. Built-in ad-blocker too, and per-site noscript making it convenient to only run JS on sites you trust.