News for hackers. Stuff that matters.
Re:Variable duty cycle square waves with the Web Audio API by sapiogenesis on Monday April 07, 2025 @02:33PM (#43614484)
I agree. There’s a bit of mental overhead related to working with audio worklets (you have to load them from an URL or a blob URL, etc.) but for square waves in particular the logic should be fairly straighforward, the process function just needs to output 1 or -1 for any given sample.
Re:Variable duty cycle square waves with the Web Audio API by Blackthorn on Monday April 07, 2025 @03:31PM (#43615004)
It needs to do a lot more than that if you want to have something that doesn't alias like crazy. And significantly more if you want it to sound like a game boy.
Re:Variable duty cycle square waves with the Web Audio API by gmueckl on Monday April 07, 2025 @04:17PM (#43615509)
Well, the output of the wave shaper approach in the article is exactly the same sharp digital square wave that you'd get from a trivial square wave generator.

But I overlooked the point that the GP mentions that the processor source code must be loaded from a separate JS file. That's some quite annoying overhead.

Re:Variable duty cycle square waves with the Web Audio API by Blackthorn on Monday April 07, 2025 @04:55PM (#43615841)
What I was trying to imply was that it's not enough to build a square wave generator to sound like a game boy. Even if that generator in the game boy was a perfect square wave generator, which I'm not sure it is.

The sound created by that generator passes through a fairly complicated filter known as The game boy's speaker. To properly create a game boy sound, you need to find or take an impulse response of that speaker and convolve it with the output of your oscillator.

Re:Variable duty cycle square waves with the Web Audio API by gmueckl on Monday April 07, 2025 @07:07PM (#43616886)
Well, and a single recorded impulse response is probably not enough, either, if you want to be super accurate. The directivity pattern is probably awful and shaping the sound as well.

I know all of that. But I just didn't want to get into these details in this thread.