Welcome to ShaderSynth!
The synthesizer that runs on your video card and you can code yourself in shader language.
It is still under construction by me, Andre van Kammen. The goal is to create a free tool for musicians and
programmers to create and show off new synthesizers (shaders), instrument templates and eventually music
pieces. You can mail me if you want, {MyFullNameWithoutSpaces}@gmail.com. It's written in plain vanilla ES6
classes and hardly uses external code. (only a jasmid copy for reading midi)
Current state of development:
Midi input
This only works in webkit based browsers (Chrome, Opera and the new Edge) safari doesn't support it because
Apple I guess. And Firefox also doesn't implement it. It supports MidiKeyboards, just connects to the 1st one
it finds at start. It does pitch by time manipulation and keys, velocity, pan and volume in the default shader
code. You can use modulation, pressure, aftertouch, releaseVelocity and other controls in your shader(s). I'm
still working on all the variable names for controls. You can see them in control-names.
Shader editor
It does syntax highlighting and it's implemented by a content-editable div in the browser. It does automatic
indentation, brace highlighting and it works best in webkit based browsers. Don't be scared if indentation
becomes strange while typing it wil correct if you finish the line. Compile can be done with the key
combination {alt-enter} or the button in the top left, currently it wil replace the shader with the same
name in the synth engine so you can experiment with it. Changes are stored after successful compile overwriting
the original, I'm thinking about some versioning here but not yet implemented.
Midi map
Here you can tell which instrument program should be used for which midi event. This is now functional and the
settings get stored in localstorage for the time being because I still need to develop the backend and storage.
Instruments
Here you can create instruments that use multiple shaders to create an instrument, the input shader generates
the wave, pre-effect can then be run on a per note basis and after mixing the post effects (not implemented yet)
can add reverbs etc. Currently just edits the instruments and shaders in local storage, effects still need a
calculation to tell how much history they need since this eats up video card memory.
Controls
This currently creates a list of all used controls from midi keyboards and midi files. It is meant to be a basis
for the upcoming variables and their presets.
Midi loading
It can load midi-files and supports most of it like tempo, pitch, modulation, pan(stereo), sustain pedal and
of course the notes.There is a BIT-MIDI loader tab which you can use to load midi files from the bitmidi site,
I've got approval from the maker.
Track and timeline
Created a WebGL timeline viewer (version2) which handles notes without a fuss (v1 did it in divs which trashed
the browser)You can pan, zoom and move the notes, controls are not shown yet. Tracks parts are still messy and
need work, but i will focus on the synth engine 1st.
You can support me on Patreon