Update (2026-06-17): v2 is now live and linked from the main app via the v2 beta tab. It mirrors v1's look and flow — search, play, pause, seek, share links, plus a short WAV-clip export. The authentic synthesis works. The open problem below — arranging arbitrary MIDI onto the Game Boy's handful of fixed, mostly-monophonic voices — is still unsolved, and that's what help is wanted on.
TL;DR
The engine that's live on wario.style is fun, but if we're honest it sounds more like a SNES than a Game Boy. It leans on Web Audio's stock oscillators (square, triangle, sine, sawtooth) with filters, mapped to musical roles. Broad and lush, not strictly accurate.
We took a run at a V2 that goes for a genuinely authentic Game Boy sound. We got the hard synthesis parts working, then hit a wall on the unglamorous but actually-hard problem: mapping arbitrary MIDI onto a small set of fixed channels. So we shipped it as a rough beta and opened it up. The code is all here if anyone fancies the challenge.
A note on method
This is closer to alchemy than engineering — medieval monks grinding away trying to turn lead into gold, with no real theory for why any of it should work. v1 is the model that landed, and we probably only got there because we weren't burdened with the technical belief that it should work on paper. We just tried things until something sounded right. It does. v2 is the same trick: on paper it really shouldn't work either, but it sounds pretty good.
Try it live
It's live at https://www.wario.style/v2.html (also reachable via the v2 beta tab on the main site). Search a song and hit play. The synthesis is solid; the MIDI arranging is the rough part described below, so results vary.
What V2 got right (the synthesis)
The sound generation is real Game Boy, not an impression of it:
One honest liberty: it runs 8 channels (4 pulse, 2 wave, 2 noise) rather than a real DMG's 4. So "extended Game Boy" is more accurate than "Game Boy", but the timbre is the genuine article.
Where we hit the wall (MIDI to channels)
Real-world MIDI is messy: arbitrary track counts, inconsistent instrument assignments, drums sometimes on channel 10 and sometimes not, and chords sitting on parts that can only play one note at a time. Squeezing all that down onto a handful of fixed, mostly-monophonic Game Boy voices and still having it sound like the song is the real problem.
Our attempt analyses each track for a role (drums, bass, lead, harmony, pad, fx), routes it to a channel pool, and arpeggiates chords to fake polyphony:
It holds up on tidy MIDIs and falls apart on messy ones: misread roles, collapsed chords, drums in the wrong place, voices stealing each other. Good enough to prove the synthesis, not good enough to ship.
Want to have a play?
It's all in src-v2/. To run the V2 page locally:
npm install
npm run dev
# then open the /v2.html route Vite prints
(You can also run it locally as above to hack on the engine.)
If MIDI arranging or chiptune is your thing, ideas and PRs are very welcome. The synthesis is the fun part and it already works. The interesting unsolved bit is the arranging: how would you map a full multi-track MIDI onto 4 to 8 fixed Game Boy voices and keep it musical?
Non-commercial hobby project, so no pressure and no deadlines. Just felt worth opening up rather than letting it rot in a branch.
TL;DR
The engine that's live on wario.style is fun, but if we're honest it sounds more like a SNES than a Game Boy. It leans on Web Audio's stock oscillators (square, triangle, sine, sawtooth) with filters, mapped to musical roles. Broad and lush, not strictly accurate.
We took a run at a V2 that goes for a genuinely authentic Game Boy sound. We got the hard synthesis parts working, then hit a wall on the unglamorous but actually-hard problem: mapping arbitrary MIDI onto a small set of fixed channels. So we shipped it as a rough beta and opened it up. The code is all here if anyone fancies the challenge.
A note on method
This is closer to alchemy than engineering — medieval monks grinding away trying to turn lead into gold, with no real theory for why any of it should work. v1 is the model that landed, and we probably only got there because we weren't burdened with the technical belief that it should work on paper. We just tried things until something sounded right. It does. v2 is the same trick: on paper it really shouldn't work either, but it sounds pretty good.
Try it live
It's live at https://www.wario.style/v2.html (also reachable via the v2 beta tab on the main site). Search a song and hit play. The synthesis is solid; the MIDI arranging is the rough part described below, so results vary.
What V2 got right (the synthesis)
The sound generation is real Game Boy, not an impression of it:
src-v2/audio/synthesis/LFSR.tssrc-v2/audio/synthesis/DutyCycle.tssrc-v2/audio/synthesis/WaveTable.tsAPUthat coordinates the channels.One honest liberty: it runs 8 channels (4 pulse, 2 wave, 2 noise) rather than a real DMG's 4. So "extended Game Boy" is more accurate than "Game Boy", but the timbre is the genuine article.
Where we hit the wall (MIDI to channels)
Real-world MIDI is messy: arbitrary track counts, inconsistent instrument assignments, drums sometimes on channel 10 and sometimes not, and chords sitting on parts that can only play one note at a time. Squeezing all that down onto a handful of fixed, mostly-monophonic Game Boy voices and still having it sound like the song is the real problem.
Our attempt analyses each track for a role (drums, bass, lead, harmony, pad, fx), routes it to a channel pool, and arpeggiates chords to fake polyphony:
src-v2/audio/midi/ChannelMapper.ts- the routingsrc-v2/audio/midi/TrackAnalyzer.ts- the role detectionsrc-v2/audio/midi/Arpeggiator.ts- chord to arpeggioIt holds up on tidy MIDIs and falls apart on messy ones: misread roles, collapsed chords, drums in the wrong place, voices stealing each other. Good enough to prove the synthesis, not good enough to ship.
Want to have a play?
It's all in
src-v2/. To run the V2 page locally:npm install npm run dev # then open the /v2.html route Vite prints(You can also run it locally as above to hack on the engine.)
If MIDI arranging or chiptune is your thing, ideas and PRs are very welcome. The synthesis is the fun part and it already works. The interesting unsolved bit is the arranging: how would you map a full multi-track MIDI onto 4 to 8 fixed Game Boy voices and keep it musical?
Non-commercial hobby project, so no pressure and no deadlines. Just felt worth opening up rather than letting it rot in a branch.