MIDI synthesizer

A very small MIDI synthesizer. It is procedural, so it doesn’t require any data other than MIDI files to play. There are two versions and you can listen to both of them running in your browser. The first one is written in C++ and supports many platforms. The second one is written in JavaScript specifically for Web.

Currently, the JavaScript version is newer and has better sound quality. Especially, its guitars and violins are way better. JavaScript version also supports MIDI keyboards. However, the C++ version implements reverberation, has better instrument volume balance and has a couple of drums implemented by using physical modelling. Its compiled (Windows or Linux) version can also save the result to a WAV file. It doesn’t support MIDI keyboards, because its current architecture is not optimized for real-time input.

You can find more details about how both synthesizers work on the JavaScript version’s GitHub page.

JavaScript version

You can listen to some samples here. There you can also see how to embed it on your site or on a forum that supports HTML and iframes. And here you can try all the features:

  • play with a MIDI keyboard:
    • use Chrome-based browser
    • connect your MIDI device
    • then open/refresh the page
    • then press any key or click anywhere to unmute
  • play with the computer keyboard
  • play any MIDI file you have

C++ version

  • GitHub - is currently part of Intra but I’m going to move it to its own repository soon. Just build Intra CMake project and you will find MusicSynthesizer binary inside your build directory. Or you can listen to the web version.

Tested to build and run on:

  • Windows
  • Linux
  • FreeBSD
  • Web via Emscripten, you can listen to the MIDIs from the table below or open your own MIDI

Listen to the C++ version online

NameSize
Enable JavaScript to see the table.