I spent the day today trying to figure out how we could emulate a reel machine on iOS. It's been a while since I've looked for audio libraries on iOS, and it seems the field has changed. FMOD now has a pretty established API -- unfortunately it's in Obj-C++, but I have written wrappers around that.
A reel machine is unique in that it must have both stitching arbitrary sections of audio files and reversal of the entire tape. Thus there is both a 'subsound' playhead position and a 'total' position and velocity. In the future we will need to dynamically splice out user-designated sections of tape while the reel is loaded.
Toward this goal, I successfully tweaked a channel mixing example to reverse a sound and change frequency values in real-time.
The "realtimestitching" example provided by FMOD showed how to perform stitching in real-time with streams. But I've figured out that streams cannot be played in reverse with FMOD, nor can they be seeked to a subframe, so streams are out of the bag (this is because the fancy features are only provided in the FMOD_SOFTWARE mode, which requires sounds to be preloaded). Most likely I will have to change the code to load whole sounds on-the-fly -- whether or not this will work, we shall see. If not the last resort is loading all of the sounds into a single sentence at once.
The good news is that once this is done, the audio part of the SpokenWeb app will be finished, and we can begin experiments with all the functionality in earnest.
Visuals will require a 3D tape ribbon simulation, but having already transferred verlet rope code from JavaScript into Obj-C for Jarbles, I might be able to use the (2D) rope code (or generalize to 3d, if it's not too difficult) on top of a sequence of 3D rectangles chained together. The nice part is that the tape audio can remain separate from these visuals. But all-in-all unless I want to code a 2D rigid body physics simulator from scratch again, I need to look into visual libraries with little overhead. In the past, Cocos-2D was overkill and lagged the app when it shouldn't have. But when dealing with 3-d 2-d hybrids there's not a lot of choice to go for.
Anyway -- I'll retool the audio code tomorrow and cross my fingers.