{"items": [{"author": "stellartux", "source_link": "https://www.lesswrong.com/posts/Bp94yBFMnucFbZ3eP#SquZABCBJiyNBiMWX", "anchor": "lw-SquZABCBJiyNBiMWX", "service": "lw", "text": "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)()<br>const micStream = await navigator.mediaDevices.getUserMedia({ audio: true })<br>const micNode = new MediaStreamAudioSourceNode(audioCtx, { mediaStream: micStream })<br>micNode.connect(yourAudioWorkletNode)<br>yourAudioWorkletNode.connect(audioCtx.destination)", "timestamp": 1587291298}, {"author": "jkaufman", "source_link": "https://www.lesswrong.com/posts/Bp94yBFMnucFbZ3eP#hdWuQ3ySHdofMcHzD", "anchor": "lw-hdWuQ3ySHdofMcHzD", "service": "lw", "text": "&rarr;&nbsp;Awesome!  This works: https://www.jefftk.com/echo-demo-v2  Thanks so much!\n", "timestamp": 1587309890}, {"author": "eapache", "source_link": "https://www.lesswrong.com/posts/Bp94yBFMnucFbZ3eP#eczWbLsvfs522D7kr", "anchor": "lw-eczWbLsvfs522D7kr", "service": "lw", "text": "Reading this (and discussing more ideas with my own chorus) made me think of another possible variation that might actually allow some form of online rehearsal: having one person&apos;s stream fan out to everyone else to sing against, and then gathering all of those feeds back into one collected stream (synchronized based on the &quot;master&quot; stream timestamps) for somebody else to listen to. This splits the usual role of director into two: conductor and feedback-giver, and you still can&apos;t hear the rest of the group you&apos;re singing with, but at least it allows some form of live feedback necessary for a practical rehearsal.", "timestamp": 1587427450}, {"author": "jkaufman", "source_link": "https://www.lesswrong.com/posts/Bp94yBFMnucFbZ3eP#km96y4Y38TyTazxWn", "anchor": "lw-km96y4Y38TyTazxWn", "service": "lw", "text": "&rarr;&nbsp;If you do it as a bucket brigade instead of a fanout then person N can listen to N-1 earlier people as they play: https://www.jefftk.com/p/series-singing\n", "timestamp": 1587428544}, {"author": "eapache", "source_link": "https://www.lesswrong.com/posts/Bp94yBFMnucFbZ3eP#ZLBpDcH7JnccfZMnE", "anchor": "lw-ZLBpDcH7JnccfZMnE", "service": "lw", "text": "&rarr;&nbsp;&rarr;&nbsp;Yes, though the total latency of the system becomes the sum across all N members. For large groups (my chorus is 60+ people) that may end up being prohibitive just for cases where e.g. the feedback giver wants to pause the singing and give some feedback. I\u2019m honestly not sure, this is all quite speculative. Thank you for sparking some thoughts though!\n", "timestamp": 1587471551}, {"author": "jkaufman", "source_link": "https://www.lesswrong.com/posts/Bp94yBFMnucFbZ3eP#xzthZLyudnu2Jz52y", "anchor": "lw-xzthZLyudnu2Jz52y", "service": "lw", "text": "&rarr;&nbsp;&rarr;&nbsp;&rarr;&nbsp;I wonder if conductor -&gt; (strongest singer in every section) -&gt; (everyone else) -&gt; (feedback giver) would be a good compromise? Latency isn't too high, but people are also hearing their leaders.\n", "timestamp": 1587472426}, {"author": "eapache", "source_link": "https://www.lesswrong.com/posts/Bp94yBFMnucFbZ3eP#snE2iHwXjW8ux4o9z", "anchor": "lw-snE2iHwXjW8ux4o9z", "service": "lw", "text": "&rarr;&nbsp;&rarr;&nbsp;&rarr;&nbsp;&rarr;&nbsp;Yes that does seem like it would be a good compromise.", "timestamp": 1587485810}]}