JUCE and Windows 8

So for those not following BUILD, here’s the short notes as it relates to JUCE:

There are 3 hardware platforms: x86, x64, ARM
There are 2 main API platforms: Desktop, Metro

Desktop: Includes Win32, the old C based API that has been around for ever. More APIs were added to it.
Metro: Includes WinRT, a completely new C++ based API. Also includes access to a subset of the Win32 API.

x86, x64 can run apps based on both platforms Desktop and Metro
ARM can only run apps based on Metro

x86, x64 can run any application using any API and installed from anywhere (aka Open)
ARM can only run applications using Microsoft approved APIs (Metro) and ONLY be installed from the Windows Store (aka Walled Garden).
The Windows Store has a 70/30 revenue split and is a curated store. Apps have to go through an approval process before they reach the store. Upgrades will likely go through this process as well so it make take days for an update to reach your users like on the iOS/Mac App Store.

So existing JUCE apps will run on Windows 8 x86, x64 without issue. Existing JUCE apps will not run on Windows 8 ARM.
Metro support will need to be added to JUCE. Thankfully, JUCE is somewhat there. The “subset of Win32” includes Direct2D, DirectWrite and WASAPI among other modern APIs. JUCE has partial or full support for these APIs.

There is no MIDI support in Metro. This means there is no MIDI support on the ARM platform.
It is unlikely that ASIO, OpenGL, OpenGL ES will ever become an approved Microsoft API so don’t expect support for such 3rd party APIs to reach ARM.
Windows 8 ARM should support all USB 1 Audio Interfaces out of the box since windows has USB 1 Audio Class Complaint Drivers and they should work via WASAPI.
Windows 8 likely does not support the USB 2 Audio Class as neither Vista or 7 does.
Not sure if hardware vendors are allowed to make ARM USB drivers. Might be a problem for vendors who write non class complaint drivers.

WinRT API - http://msdn.microsoft.com/en-us/library/windows/apps/br211377
Subset of Win32 APIs available in Metro - http://msdn.microsoft.com/en-us/library/windows/apps/br211669
Example Source Code of Metro - http://code.msdn.microsoft.com/windowsapps/

no MIDI on ARM, that sucks.

Indeed. It’s unfortunate that they didn’t create a new MIDI API when they were developing WASAPI for Vista. It was probably a business decision, but still Cakewalk has/had a close relationship with Microsoft which heavily influenced the design and development of WASAPI. I wonder why they didn’t push for a new MIDI API while they were at it.

Its crazy that the MIDI API we’re all using was built for Windows 3.0 back in 1991. The last MIDI API Microsoft wrote was DirectMusic in 1996 and only parts of it are available for Vista/7 and x64.

Perhaps if everyone piles into the following forum post:

http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/72f78574-02c3-4986-8d5f-623b31c89765

and makes their voice heard, maybe Microsoft will listen and put MIDI in there before the Win 8 API freeze (which may or may not have happened already).

Actually, there is now a final USB 2.0 audio spec, and it is possible to build USB 2.0 audio class compliant devices. Mac OS X has a working USB 2.0 audio driver as of Snow Leopard. AFAIK, Windows doesn’t have a similar driver.

Matt

Looks like you are right. The USB 2.0 audio class was standardized in 2006. There is support in OS X 10.6 and Linux but none on Windows, even though Microsoft helped author the spec.

It looks like they took it under consideration when planning for Windows 8, I don’t think it made it though.