• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • Web Audio Echo?

    April 18th, 2020
    tech  [html]

    Update 2020-04-19: this actually can be done fully in the AudioWorklet: echo-demo-v2. Thanks stellartux!

    Update 2020-05-07: by tweaking some configuration you can get substantially lower latency; see echo-demo-v4 and AudioWorklet Latency.

    The hello world of audio processing is an echo:

    def processAudio(samples):
      return samples
    
    You take a buffer of samples and then return them unmodified, echoing the audio back out. For example, when I built my bass whistle, that's where I started.

    Today David and I were trying to see if we could build my bucket-brigade singing idea in the browser, and we couldn't find a fully worked echo example. I now have something that works, but it's kind of silly and it seems like there must be a better way.

    The way I would expect this to work with the (new, experimental, not supported everywhere yet) Web Audio API is that you write an AudioWorklet. This is a way to set up JS to run off the main thread, where number crunching won't block the UI and make the page unresponsive. I'd like to attach the worklet's input to the microphone, output to the speaker, and that would be it. Except, as far as I can tell, there's no way to pipe the microphone directly to an AudioWorklet.

    To read audio samples from the user the recommendation is to make a ScriptProcessorNode and give it an audioprocess callback. This runs on the main thread, though, and so when you look at MDN this is marked as deprecated (crbug.com/1073292). It says to use AudioWorklet instead, and I wish I could!

    What I ended up doing was recording the audio on the main thread, messaging that over to the worklet, and the having the worklet play it. Here's a demo, which relies on experimental Web Audio features that so far are only implemented in Blink-based browsers: echo-demo.

    Comment via: facebook, lesswrong

    Recent posts on blogs I like:

    Children’s podcast recommendations

    I’ve emailed my list to enough friends that I should really just post it. Podcasts have been a big part of Lily’s life since around age 4. Before that, she spent a lot of her time demanding of any available adult, “READ. READ TO ME” (once she literally as…

    via The whole sky October 11, 2020

    Collections: Iron, How Did They Make It, Part IVa: Steel Yourself

    This week, we continue our four(and a half)-part (I, II, III, IVa, IVb) look at pre-modern iron and steel production. Last week, we looked at how a blacksmith reshapes our iron from a spongy mass called a bloom first into a more workable shape and then fi…

    via A Collection of Unmitigated Pedantry October 9, 2020

    High-Speed Rail and Cities

    When preparing various maps proposing high-speed rail in Germany, I was told that it looks nice but it overfocuses on the largest cities and not about connecting the entirety of the country. I’ve seen such criticism elsewhere, asserting that high-speed ra…

    via Pedestrian Observations October 8, 2020

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact