Web Audio/MIDI APIs?
So Wulfcode is written in Java. I know, I know: for one reason or another (out-of-touch academia; previous jobs; obscure requirements; Symbian's brief reign of mobile app terror), I've ended up with a working knowledge of it and I can knock up desktop applications pretty quickly. Wulfcode takes advantage of a few modernish Java features like decent OS look-and-feel support across different platforms, window transparency, split-window panels, and a variety of useful methods from which I was able to stitch together a decent text input/parser interface customised exactly the way I wanted it.
The main problem with Java is the Java Sound API. It's horrible at keeping time as the virtual machine's garbage collection runs in the background on mercurial gusts of its own capricious wind, so you often get a few beats of solid BPM-locked output followed by a few beats of rhythmic car-crash before it finds its place again. Wulfcode by default takes its clock from an external source - e.g. a DAW or a hardware sequencer - but even then it's a bit wobbly.
The other big problem with Java (or at least the only other one that I have time to deal with here) is OS manufacturers' increasing unwillingness to implement it properly. MacOS is now my weapon of choice, but Apple's current implementation of Java MIDI is a horrible shambles: it drops a lot of messages, flat-out ignores MIDI status bytes greater than 0xf0 so can't handle sysex/clock/timecode, ignores timestamps, and only lists devices in an oblique and unhelpful way. So really, nobody should be using MIDI for Java, and the fact that Wulfcode works fairly well bears testament to how much of my life I've carelessly wasted on it.
My alternatives are limited (otherwise I'd never have used Java), but a recent mobile app dev job I did for a client made me aware of Electron, the Chrome/Node app wrapper that GitHub use for their text editor Atom. Essentially it's a bit like hybrid mobile app development in that you write most of your app in HTML/CSS/JS, but while hybrid mobile development eventually involves compiling against target platform APIs (iOS, Android, etc.) Electron just bundles your resources in with a prebuilt shell executable that reads your config and essentially runs a sandboxed version of Chromium that contains your UI and logic.
Which means: WEB AUDIO API AND WEB MIDI API! Hooray! I've been looking at these on and off for other projects, and I've used them in a few handy utilities for controlling my hardware synths or managing their patch banks. They're pretty great, and would even give Wulfcode scope for generating its own sound without my having to reinvent too many wheels. More importantly, as far as I can tell, they run their timing against the computer's native, bare-metal clock signal rather than the horribly inaccurate (even worse than Java) Javascript timer - also a victim of garbage collection.
Lots of advantages of Wulfcode Java could be retained in Wulfcode 'Electron' - window transparency, secondary output windows, a vast range of handy node.js libraries that would replicate lots of Java helper classes I've used - but it would still be portable across OS X, Linux and Windows. Actually, it would be even more portable - once given security permissions, Web MIDI and Audio work happily in the browser with local hardware; if Wulfcode wasn't dependent on server-side JS, it could be used by anyone in the browser. Show up for a gig, laptop's broken, just borrow one and hit up the Wulfcode page!
(Note: running stuff in the browser is a weird fetish of mine that's never actually solved a real-life problem in the past. My chiptune DJ software Chipdisco - dual-deck Amiga MOD/PC XM playback - ran in the browser until the Java web applet browser plugin was banned by the entire civilised world for being full of security holes. I'd also like to redo that in Web Audio/MIDI some day.)
So I'll knock up a prototype, see what happens.











