Finally, route audio, MIDI, sync, and data between apps however you like - one solution, free.

Finally, route audio, MIDI, sync, and data between apps however you like – one solution, free.

iOS now offers lots of options for using apps together, but – that’s part of the problem. The solutions are piecemeal. There’s inter-app MIDI. There’s Audiobus, which does audio, but requires the purchase of a separate app. Then you need something else for sharing data. And something else for sync. Confused yet? (Hey, it’s easy, just remember: Audiobus, WIST, AudioCopy, AudioPaste, Core MIDI and inter-app MIDI, and… yeah.)

By the time you’re done, you’ve actually had to buy new apps just to get things working together, and you have a number of different technologies just to do some basic things you might expect would be intuitive.

JACK adds yet another technology to this picture, but it might also bring relief. It’s free – no cost to download on iOS, and based on the free and open source JACK on Mac, Windows, and Linux. You can get it right now. It does, its developers say, everything: audio, MIDI, sync, and data sharing in any arbitrary combination you like. It’s high performance, both optimized for efficient processing and low latency. And encouraging adoption, the SDK is available to all developers; you don’t even have to fill out a form first.

That’s not to say JACK faces an easy battle into the iOS ecosystem. The user interface is powerful, yes, but some users may not grasp dragging connections between apps quite as easily as Audiobus’ dead-simple (though much less flexible) routing. Mainly, there’s the matter of timing: iOS users (and developers) may at this point have so much fatigue with all these solutions that anything new is likely to face resistance, no matter how good it is.

But if JACK can deliver what it’s promising on iOS, it looks really, really, really good. And it’s one solution for sharing data, audio, MIDI, and sync. That sets it apart from everything that came before. So, the choice is either lots of solutions, each put up by individual developers, based on ad-hoc solutions to components of the problem, or one existing, open standard that does everything. I think a number of developers and users will be testing this in the hope that the latter can work.

Here’s what’s encouraging: right now, you can look at that code that would add JACK support, and download the SDK without convincing someone to let you do so. And I don’t doubt that you could add this support in under an hour as the site claims. (Developers: you can release commercial apps, as they’ve released this iOS version under special license terms, not the GPL, which is problematic on iOS and, potentially, for commercial use.)

Update: Audiobus released its SDK publicly yesterday, an indication of just how fast this scene is moving. The documentation is copious and comes with loads of sample projects and the like:

http://developer.audiob.us

The Audiobus developers have done an exceptional job, and I think they create a strong incentive for Audiobus support – and have the momentum. However, it is worth saying as a developer, implementing JACK support is actually vastly easier than implementing Audiobus support. In fact, the API is very similar to our API for libpd, the open source embeddable Pure Data engine – partly because libpd’s audio API was modeled on a simplified JACK API (though that’s a long story).

Both give developers a bunch of functionality, and almost no particular license obligation, for free. The answer to the question, “will some developers support all of the above and see what sticks?” Yes, probably. But it is worth saying: JACK does a lot more, and the amount of code you have to add it almost comically trivial. Some developers have probably already spent more time reading this article or replying to comments than it’d take to do.

The project description from the developer reads almost like a manifesto:

JACK is more than just one iOS app. It is a system that connects the music and audio world on your iOS device. JACK allows audio channels and MIDI ports of your audio & music apps to be connected with each other. It does not force a predefined schema in which way apps shall be connected with each other. You can freely connect them in any way you want, intuitively like drawing on a paper. Besides audio & MIDI interconnection, JACK provides other very useful mechanisms to let your audio apps work together like never before. For example record/playback synchronization between DAWs and sequencer apps. Arbitrary data sharing among apps and much more. Even though JACK is quite new on iOS, it already came a long way. Providing you the most professional and powerful environment for your audio apps, highly optimized with explicit multi core support, low latency and maturity which it gained over many years of usage and development on other operating systems already. JACK is an open standard, which can freely be supported by anybody.

Current Features:

Audio connections between apps and external devices.
MIDI connections between apps and external devices.
Record/Playback synchronization between apps.
Multi Core CPU support for high performance (parallelized internal audio graph).
Low Latency Performance (configurable, i.e. 2ms buffer sizes).
Arbitrary, custom data sharing among apps (allows easy extensions of the system).
Arbitrary amount of audio & MIDI ports per app, changeable at runtime.
Intuitive user interface that allows you to easily manage all audio and MIDI connections, environment settings, monitor current overall CPU usage and more …

As always, for external audio/MIDI, you need a supported device.

But if you have iOS 5, you can try this now. We just need apps that support JACK for it to be useful. But – yes, I’ll be testing this, as this for me starts to suggest a workflow I’d actually want to use in a way that these other bits and pieces weren’t. Nice work by Christian Schoenebeck bringing this to the platform.

http://www.crudebyte.com/jack-ios/

See also the developers’ very cool free MIDI monitor.

jackios_graph

jackios_settings

jackiosrouting