Neon detection

Use runtime check to detect Neon. Also add some copyright headers.
Bump version to 0.93

This commit corresponds to version 0.93 released to the Play Store.
FIR filter implementation

This is a FIR filter with NEON speedup. The NEON version has been tested
for accuracy against the scalar one, and there is simple benchmarking
code in place as well.
Half-rate FIR implementation

This commit is a test implementation of a half-rate FIR structure
(basically a Toom-Cook). It's not bad in the scalar case, but the
benefit is marginal at best in NEON.
More robust USB MIDI keyboard handling

This patch implements better USB MIDI handling, including listening for
detach, and handling the case where it's connected while the activity is
active.
Minor cleanups to USB MIDI handling

In testing, the releaseInterface() call was found to be unreliable, so
this patch omits the call. Also minor copyright header fix.
Only unregister USB receiver if it was registered

This will probably prevent a crash on pre-Honeycomb devices.
Tweak buffer size

Empirical testing reveals that a smaller buffer size improves two
separate issues. First, it gives much better results on devices that
misreport their buffer size (Moto X is one, and it avoids a crash given
that the reported buffer size was larger than the static allocation for
the synth internal buffer). Second, even on devices that correctly
report the buffer size, it reduces internal buffering in the OpenSL ES
implementation, so this change reduces latency without impacting
robustness.
More refined USB MIDI handling

This patch puts up a permissions dialog when needed for connecting a USB
MIDI device. It also avoids scanning the bus when the device is known
from the intent. This should make cases where there are multiple devices
on the USB bus more graceful.
Move ownership of native synth to service

This patch moves the ownership of the NDK synthesizer from an activity
(PianoActivity2) to a service, so that the same synthesizer may be
shared by multiple activities.

Note: this change repurposes an existing class that was used by the old
Java synthesizer. Those code paths will no longer work, and should be
aggressively deleted.
Move USB device to SynthesizerService

This patch moves the connection to the USB MIDI keyboard from a single
activity to the SynthesizerService so that it can run while the user
switches between more than one activity.

Note that in the current state, there are problems when the device is
detached when the service isn't running.
Move USB bus scan to SynthesizerService

This patch moves the scan of the USB bus to the service, while plumbing
the display of the permission dialog to the activity that binds it. Also
a little cleanup of the USB device thread (less logging, using a hacky
timeout to make sure the thread gets shut down properly).
MIDI core handling improvements

A bunch of improvements to core MIDI handling. New functionality to
decode directly from a byte array (so you don't have to go through
InputStream), as well as more efficient and more concise code for
MessageOutputProcessor, plus some bug fixes.

Note that the tests haven't been run, maybe that would be a good idea.
Update controller views from MIDI keyboard

This patch adds plumbing so that changing the controller values from
a USB MIDI keyboard updates the knob views as well.
Update piano view from MIDI keyboard

This patch plumbs note on/off messages from the USB MIDI keyboard to
the piano view, so it's possible to see the notes being played.

Also contains some small UI improvements, like scaling some things to
the device density.
Update release to 0.94

This is the version released to the Play Store as version 0.94.
Midi plumbing refactoring

The reverse channel from the SynthesizerService to the views has been
refactored a bit so it's just a standard MidiListener interface rather
than a whole bunch of listeners for individual messages.
Fix bug in multi-packet USB MIDI messages

When a bulk transfer contained more than one packet, the wrong one was
being extracted.
Start new keyboard view

This patch contains a new keyboard view with an adjustable layout.
As of this version, it draws and displays notes from the MIDI keyboard
but doesn't handle any of its own touch events.
Crude touch processing for keyboard view

This patch adds crude touch processing (non multitouch, no tracking),
but it's enough to noodle out melodies to validate the new approach.

The patch also wires up the new view and starts to make some style
changes (holo light theme).