Hosts software Web MIDI Synths that implement a superset of the Web MIDI API Output Device interface.
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.
WebMIDI
consoleSf2Synth
cwMIDISynth
cwMonoSynth
residentSf2Synth
.gitattributes
.gitignore
License.md
README.md
host.html
host.js
hostStyleSheet.css

README.md

Web MIDI Synth Host

This is a Web MIDI application, written in HTML5 and Javascript. It can be tried out at
https://james-ingram-act-two.de/open-source/WebMIDISynthHost/host.html

This project is unofficial, but is intended to further the discussion about software synths at Web MIDI API issue 124.
It can also be used to develop any new Web MIDI Synth [1] without having to create a GUI:

  1. clone this project
  2. create a new directory, at the top level of the project, for the new synth's files
  3. create a file that describes the new synth's interface using one the existing synth definition files [2] as a model.
  4. implement the interface, and include the synth's file(s) at the bottom of the host.html file

Hosted Synthesizers:

  • MIDI synth (Chris Wilson)
    This is Chris' MIDI synth (repository, application) without its original GUI. I have tried to keep closely to the code in the original files while using simple MIDI controls whose values are in the range 0..127. It would, of course, be possible to get nearer to the original settings by using hi- and lo-byte controllers (as standard MIDI does). Issues with this synthesizer should be raised at its own repository.
  • monosynth (Chris Wilson) A very simple synth. The original is here.
  • ResidentSf2Synth
    This is almost entirely gree's sf2synth.js synthesizer, but I have adapted the code to my own style, and changed both the soundFont and synthesizer code so that soundFonts can be cached and changed at runtime. I am not a Web Audio or SoundFont specialist, so would especially welcome any help in developing the code. Issues with the ResidentSf2Synth should be raised here, in this repository.
  • consoleSf2Synth
    This is a minimal synth that simply echoes the messages it receives to the console without producing sound. It could be used as a stub when writing a new synthesizer. Issues with the consoleSf2Synth should be raised here, in this repository.

SoundFonts:

The soundFonts directory has been seeded with sf2 soundFont files created from the Arachno soundFont using the Viena soundFont editor. Any sf2 soundFont can, of course, be used.

Other Host Applications:

Web MIDI synths can easily be lifted out of this host and used in other Web applications. Simply copy the synth's directory and the WebMIDI directory in parallel somewhere where the new host can access the files, and then link the files to the new host.
There are some simple applications that implement this pattern at:
SimpleSoundFontSynthHost, (GitHub), SimpleMIDISynthHost, (GitHub) and SimpleMIDISynthHost2, (GitHub)
If there are any issues relating to these demo applications, please raise them here in this repository.

December 2015 (updated February, November 2016, June 2017)
James Ingram

[1] A "Web MIDI Synth" is a software synth that uses the Web Audio API to implement the Output Device interface defined in the Web MIDI API. Web MIDI Synths can be used online independently of browser implementations of the Web MIDI API.

[2] Web MIDI Synth interface definitions can be found in:

  • cwMIDISynth/cwMIDISynth.js
  • cwMonoSynth/cwMonoSynth.js
  • residentSf2Synth/residentSf2Synth.js
  • consoleSf2Synth/consoleSf2Synth.js