FM synth, in your browser, at 2048 bytes
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
branches
compress
.gitignore
README.md
diagram.png
fonttool.html
index.html
uncompressed.html

README.md

2048b FM

More Intense

A more intense version of this is 1kilobyte, can be found here: khoin/1kfm

What is this?

This is a FM (PM) synthesizer that runs in your web browser. Its file size is 2048bytes (index.html). You can check out the commented source in uncompressed.html.

Features

  • 6 Operators
  • ADS (Attack, Decay, Sustain) Envelope
  • Theoretical 32-voice polyphony (on my computer, no keyboard events fired after holding down 6 keys)
  • Arbitrary operator routing. Any operators can route to any other operators, even self. They can be carriers and/or modulators.
  • Saving and loading patches
  • C4-A5 keyboard (corresponding to 2 top rows on your keyboard, Q to backslash).

Components

  • Bitmap font 0-9ADSICTO at 160 bytes + 59 bytes (for pixel drawing)
  • Bresenham line drawing at 159 bytes + 59 bytes (for pixel drawing)
  • DSP + keyboard mapping is at 668 bytes
  • The rest: GUI, mouse, patch save/load 754 bytes

Caveats

  • It is not possible for modulators (that does not go directly to output) to be silent. I did this so that we can skip calculations if an operator have zero volume.
  • No release envelope stage :c
  • No fixed frequency mode.
  • It is not a DX7 emulator :c I first wanted it to be one.
  • On my machine, if you don't have any modulation, it doesn't lag. But if you do, it usually lags out at 3-4 voices. On my machine, it appears that Firefox's script processor isn't as fast.
  • <meta charset=utf8> was added so the GUI would render correctly in Firefox and Edge.

Diagram of parameters

This part assumes you know synthesis concepts. Here's a diagram:

diagram

Example Patches

Acknowledgments

  • Thanks Werner for showing me more efficient way of PM/FM synthesis
  • p01 for such awesome 1k demos that got me into this.

License

Public Domain.