Congratulations! The hard bit is done! Ha ha :)
Maybe it's worth chatting (IRC or skype perhaps) about plans sometime?
Some comments interspersed:
2010/4/22
glasto...@googlemail.com <
glasto...@googlemail.com>:
> As of now, the SC-A checked in to github is working properly! Wooooo!
>
> Which is to say it goes "ping", we still need to add more features to
> make it useful to other people (except people that want to annoy their
> dog. It's good at that already). At the end of this mail is a list
> of things which I believe SC-A needs to do in order to be cool and
> useful. Feel free to delete things, append things, volunteer for
> things, or just argue :)
>
> Next Wednesday I'll put it on a wiki page with github Issue numbers
> for tasks, and the name of anyone who's working on each task too.
> This should make it easy to share if anyone wants to chip in.
>
> Thanks,
>
> Alex
>
> ---
> 1) Be able to start and stop a SuperCollider session using Intents
> sent to a Service
>
> This would be a solid, Android-like way to let other apps use us.
>
> Medium-easy to write a service which starts and stops at will. Making
> lifetime management stable will be a lot of headache though.
Yes, this is critical really.
> 2) Be able to receive OSC from another process...
>
> It's our interface onto the world.
>
> 2.1) ...via TCP
>
> This will make us compatible with existing SC software, and facilitate
> remote use.
>
> Probably fairly easy to call the already-present SC_ComPort code to
> serve up sockets onto the server.
>
> 2.2) ...via Intents
>
> This will make us friendlier to Android apps. Perhaps we could even
> provide a wrapper Java class?
>
> This is more work than 2.1, but we've already got OSCMessages creating
> the synth, so it'd be fleshing that code out.
Well we don't *really* already have OSC messages doing anything since
the C code simply has a make_synth() command which acts as if it was
passing an OSC message in from the real world - so there's no generic
OSC passing happening at the moment.
The route from test program to proper Service with access by TCP
and/or Intents seems to be mainly in designing an AIDL/Intent
interface which provides two-way OSC communication with scsynth. The
protocol is conceptually simple (there are only two types of payload -
message or bundle - and the set of parameter types is small) but
unfortunately quite polymorphic, which doesn't match the
strongly-typed approach needed for AIDL/Intents. So an alternative is
to implement a hook for each of scsynth's commands (there are 63 of
them) to be passed in either direction.
> 3) More UGens
>
> More unit generators means we can support more and exciting
> synthesizers.
Yes!
> 3.1) Add all the default UGens to the build
>
> We're still not loading all of them
>
> Should be easy to write a script which just hoovers them up into the
> Android.mk file
The build file is very repetitive, for all the different plugin libs -
doing it with a script would be fine but it's a shame the Android.mk
file syntax doesn't let us do a simple loop construct.
> 3.2) Have a way for users to install more UGens
>
> This could be fiddly, as you can't keep DLLs in the SD card. To solve
> this problem in the past I have put plugins into their own .apk and
> used Intents to discover them.
Frankly I'd put this as very low-priority. It's an "advanced user"
scenario, and we get advantages if we have a single consistent base of
available ugens. As long as we provide the full core set I don't think
there's much need to do this.
> 4) More synth definitions
>
> Currently, you need to get hold of a default.scsyndef file and dump it
> in your sd card before you can hear anything. We should provide a few
> synth definitions for people to use, and maybe an intent for adding
> them as files.
"an intent for adding" synthdefs should not be needed, since that
should be subsumed under the OSC interface (scsynth can be streamed a
synthdef file by /d_recv or told to load it from the SD card by
/d_load).
Providing synthdefs is a bit tricky cos we can't easily bundle them in
the app, they handle easier if they're on the SD card. Maybe some java
code in the app that copies the basic bunch of synthdef files to SD if
not found?
> 5) Tests
>
> This could be quite fun- what better way to test a synth than to make
> something that uses it? Ideally I'd quite like to see some automated
> integration tests too, but I'm not going to be a nazi about it until
> we've got everything working- we are building on a very stable
> foundation.
There's already a unit-testing scheme but that's sclang-based. I
wonder how straightforward it would be to have scsynth-on-android
controlled by sclang-on-laptop? Obviously that'd be great for many
reasons, but one reason is the unit tests would run straightaway.
> 6) Optimisation
>
> It's a bit crackly at the moment, especially when my mail client kicks
> in... I don't think it needs to be- what can we do to optimise?
Yes, a bit crackly on my lower-spec phone even without other stuff
going on. Optimisation will be the long-haul IMHO, and that's how it
should be - remember the old line about "premature optimisation"...
> 7) Upstream integration
>
> How best to handle our sources from supercollider.sourceforge? I'd
> like to have a little script that you can say "build SC-A against
> SuperCollider version <N>" and it does and you can test it.
We should think carefully about whether to stick with a single SVN
revision or to keep tracking trunk. It can complicate things to keep
updating all the time (I tried to add a plugin source file and got
caught out by an update to a header file). On the other hand, maybe
git has good features for tracking upstream? I haven't used those so
let me know if so. Otherwise, I have no way of knowing which SVN
revision is in git... So unless we have good tracking tools/awareness
it might be helpful to only update from upstream occasionally.
If there's code that needs to go upstream in order to simplify this
then I think we can do that (along similar lines to the iphone code
added in upstream). The native "audio driver" code for android
perhaps.
Dan