As we talked on Reddit (I released my synth today, Viktor NV-1: http://nicroto.github.io/viktor/) I definitely need to add QWERTY keyboard playability.
Also - url sharing of presets... that's a great idea! Viktor uses local storage so you can save presets and allows you to export and import libraries of presets (in json files), but file sharing is harder than a url.
I think there is something wrong with the way your envelope works, though. I hear clipping when I change notes. In my case it took a lot of time tuning the envelope, before it became really playable through a keyboard and still as you know, in Firefox there is an issue with AudioParam.setTargetAtTime starting or arriving at a value close to 0.
Congrats on making #1 page on HN. Couple of hours after you, my submission didn't even get an upvote. :P
Not sure if 1024x768 is a good minimum resolution. I have an 13" ultrabook with a FHD screen, so thanks to the high DPI settings websites think it's 720p (so it won't load for me). Also few screens use 1024x768... 720p is more common, as is 1024x600 for some devices like tablets and netbooks.
Just had a play with this. Very nice! The real juno lets you turn on both choruses at the same time though :)
(Also I cant seem to get the release to work on the envelope.)
If anyone is interested in an accurate emulation of this classic synth, heres one that sounds largely identical to the real thing and is very reasonably priced: http://kunz.corrupt.ch/products/tal-u-no-lx
In Firefox the envelope release is broken, and overall performance seems worse compared to Chrome, for reasons I haven't really bothered to investigate deeply. It mostly works in Safari, but Safari does something different with garbage collection of audio nodes, so the note-stealing behavior doesn't work right.
Basically, use Chrome for now if you want it to play nice. WebMIDI is only supported in Chrome anyhow.
Also, 100% agreed on TAL U-NO-LX, it's one of my favorite plug-ins and the price is great!
MIDI is well past its prime. It places unnecessary limitations on musical expression. I'd like to see browsers (and instruments) adopting Open Sound Control.
One could argue that it places necessary limitations on musical expression that allowed it to flourish. Defining scales, etc in the protocol left some issues w/ microtonal stuff. The timing protocol is a bit squidgy for beat matching, but if you look at OSC everyone creates their own namespace and instead of one protocol you have a bunch of devices with different mapping conventions.
I would say the 0-127 range of controls hurts midi more than anything, if someone just bumped midi to osc's range most people would be happy. HD MIDI does that and may end up usurping OSC before OSC even gets traction: http://www.midi.org/aboutus/news/hd.php
I think you really nailed that - OSC is a useful protocol, and it's definitely been used important in computer music (Supercollider for example uses OSC as the protocol for messages from the language to the server).
But the beautiful thing about MIDI is how plug-and-play it is, because of the one standard. You can plug one keyboard into another and boom, you have an instant controller. I can't see that functionality in OSC's future.
0-127 is really limiting though - I've tried using faders where 0 is no volume, and 127 is max volume, and it just doesn't feel like there is enough resolution to fine-tune things.
Re the 0-127 range, you may be familiar with this, but many devices are capable of sending 14-bit MIDI messages by combining 2 different MIDI CCs, allowing for much finer control. 106.js supports both 7 and 14-bit messages.
Wow, looking at that it looks like my old (lost?) Peavey PC-1600 could send 14 bit messages. In the end I think a lot of the problem is also fixable with better interpolation and mapping, but I've definitely ended up sitting in the range I want on a synth mapping, but getting clicks when I touch a knob. Pretty interesting to think 14 bit midi has been around for so long but it hasn't really taken off. https://en.wikipedia.org/wiki/NRPN whenever I go into the midi standard I end up finding neat stuff. These days USB MIDI and bluetooth MIDI have also kept it alive while OSC is still lost in a web of standards all different, great for communicating when one dev is on the send and receive side, but bad for easy interop.
I love how its so simple you can bit bang it, but yeah, 128 values ain't enough. 14 bit midi is a dodgy hack. When you get used to turning knobs on analog gear, using midi to control complex modern digital synths feels barbaric.
(TBF if I think 14 bit midi is a hack then I should really be against OSC)
MIDI just freaking works. I've seen someone fight to setup OSC for about 20 minutes (and failing) in a particular DAW, and the creative process of just plugging my hardware synths together with a sequencer - no computers involved, and having it work is awesome.
I agree channel routing is annoying, but for most things I do (electronic music) it's not limiting. Am I wanting to sequence a Harken (sp) Continuum with full aftertouch and funky envelopes? Not so much.
I dread the day everything requires a computer, and the MIDI cable is an amazing beast for having lived as long as it's lived. It's somewhat like a shark or crocodile in that respect.
I agree it's not beautiful to automate a smooth filter sweep but in general, it's a great thing.
The thing about OSC is that its kind of too Open - its really a raw layer that various protocols similar to MIDI could run on top of, but the standard itself only defines how messages and types are structured.
It doesn't specify anything like pitches, tempos, control messages, envelope triggers. (In fact why is it even called "Sound Control" ? There's nothing specific to sound in it.)
It isn't a standard there that let's people just plug things into each other. Each program that uses it has completely different APIs.
I think there needs to be an initiative from developers and manufacturers to make establish standards that run on top of OSC to make it useful.
Is there such a thing as an "OSC file" that can be played back like a MIDI file? If not, I think it's a critical reason why OSC has yet to see wider adoption — or is, at least, a symptom of the reason.
I guarantee this is why! This is a first step for this whole thing, it only makes sense to get the most widely-supported (and arguably simplest) implementation out first.
Very nice. I dabbled in building a web synth not too long ago. Volume envelopes were a pain in the butt. I could never seem to manage to resolve the annoying clicking from volume changes. I also incorporated a fft visualizer in the middle of the synth, but this really bogged it down and made the audio extremely choppy. This synth is much nicer :P
There are lots of websynths that respond to MIDI note messages, and I've seen some that respond to CCs as well -- e.g. the midi-synth [1] by Chris Wilson (editor of the WebAudio and WebMIDI specs) -- but in that case, the CC messages are hardcoded to the UI. (It also doesn't support 14-bit messages.)
In 106.js, every UI control is arbitrarily assignable to any MIDI CC message, so you can map it to your device however you like. That's a feature I'm used to ("MIDI learn") from desktop DAWs, but haven't seen in any other websynths yet.
You won't be able to see the UI for this feature at all unless you've got a MIDI controller plugged in, though.
Hm, yeah, that would be a cool thing to publish separately. The MIDI mapping code is pretty much isolated to these two objects [1] [2], but I'd have to do a little thinking about how people would want to use it, and separating it from Backbone would take some work.
Well, the real 106 doesn't have an arpeggiator either (without mods anyway) -- only the 6/60 do. I don't think it'd be too hard to implement one though, so I may do that soon.
note to self: don't comment on HN until you've had your coffee. my comment was cranky and jealous. :)
i built learn functionality into my MIDI library for browser based UIs in 2012: https://github.com/kn0ll/midi.io unfortunately my synths that use them are long gone. i developed this as the WebMIDI spec was being published and long before it was available in the browser (which is why i'm using web sockets for UDP communication).
anyway, i really did mean "good job mate", your app is awesome.
As we talked on Reddit (I released my synth today, Viktor NV-1: http://nicroto.github.io/viktor/) I definitely need to add QWERTY keyboard playability.
Also - url sharing of presets... that's a great idea! Viktor uses local storage so you can save presets and allows you to export and import libraries of presets (in json files), but file sharing is harder than a url.
I think there is something wrong with the way your envelope works, though. I hear clipping when I change notes. In my case it took a lot of time tuning the envelope, before it became really playable through a keyboard and still as you know, in Firefox there is an issue with AudioParam.setTargetAtTime starting or arriving at a value close to 0.
Congrats on making #1 page on HN. Couple of hours after you, my submission didn't even get an upvote. :P