The ReactPad is a music app for the iPhone based on the ReacTable. By adding pieces to the ReactPad, you can create different types of sounds and explore different shapes of music synthesis. Each piece has assigned one different function, that you can modify by rotating it. The ReactPad can also use your voice as an input, save and load patches over the Internet, and even use the accelerometer to move the pieces around the pad!
CLICK HERE TO DOWNLOAD (XCode with the latest SDK required). All required libraries are included in this package.
The ReactPad and the STK and Mopho API come in the same package (that you can download from here).
To install them on your iPhone, open the ReactPad.xcodeproj with your latest version of the XCode with the SDK 3.1.2. or higher, Choose to compile for Device (IT WON'T WORK ON THE iPHONE SIMULATOR), click Build'n'Go and you're ready to Go!
The ReactPad is an iPhone app to synthesize sounds and music. It makes use of different Pieces that are mapped to different sound generators or effects. These Pieces have different paramaters that can be modified by rotating them. Usage description below:
Add a Piece
To add a new Piece, double tap to the screen. A picker will appear and you will be able to add the piece.
Zoom and Pan:
You can zoom and pan the ReactPad. To zoom, just pinch on the screen. To pan, place a finger in the screen in a place where there is no piece and move it (when you have zoomed in, otherwise it won't pan).
Move a Piece
You can also move the pieces by placing a finger on the piece and moving it.
Rotate a Piece
To rotate a piece, place two fingers in the piece and otate your fingers (it is easier if you have zoomed in first).
Remove a Piece
To remove a piece, double tap in a piece and it will disappear.
There are 8 different Pieces divided into two categories: Sound Generators and Sound Filters/FXs. The Sound Filters/FX modify the sound that comes out from the Sound Generators. One Sound Generator can have multiple Sound Filters/FX in cascade. The link between pieces show the real signal that the piece is creating.
- Sine Wave: Sound Generator that generates a sine wave. The frequency is 440Hz and it can be changed by rotating it.
- Square Wave: Sound Generator that generates a square wave. The frequency is 440Hz and it can be changed by rotating it.
- Mic Input: Sound Generator that gets the signal from the microphone of the iPhone. You can change it's amplitude by rotating it.
- Sample: Sound Generator that reads from an audio file. Right now the sampled song is "Vida" by Sargon. You can change it's amplitude by rotating it.
- Noise: Sound Generator that generates white noise. You can change it's amplitude by rotating it.
- LFO: Sound Filter that Low Frequency Modulates the input signal. The frequency is 18Hz and it can be changed by rotating it.
- Low Pass Filter: Sound Filter that filters the Low Frequencies from the input. You can change the range by rotating it.
- High Pass Filter: Sound Filter that filters the High Frequencies from the input. You can change the range by rotating it.
By pressing the "i" button, you will go to the settings page where you can do the following:
- Gravity: You can turn on/off the gravity. When it is on, you can move the iPhone/iPod Touch and the gravity will move the pieces across the ReactPad
- Reverb: You can turn on/off the reverb that apply to all of the pieces.
- Shake: You can turn on/off the shake movement. If it's turned on, you can shake your device to remove all the pieces on the ReactPad
- Save Patch: You can save the current patch into a global database.
- Load Patch: You can load a random patch into the ReactPad. Right now it chosses a random patch from the Internet.
Since this is a relatively big project, I spent a lot of time designing the code, making it reusable and scalable. The ReactPad is based on the ReactPad class, which has an array of Pieces. The object Piece is a super class of any of the different types of Pieces. So right now there are 8 different classes for the Pieces (one for each Piece type: sine wave, square wave, ...). These classes inherit from Piece, and they implement the virtual function "render" and "tick". The "tick" function is based on the STK tick methods, so each piece has its own different tick to create a different audio signal. Each Piece has also a pointer to the next and previous Pieces in case it is found in a Path. Each Piece has a GLLine that represents the connection between pieces and that shows the actual signal taht the Piece is generating.
For the Networking, I am using the dedicated server DING (http://ding.stanford.edu), and to store and load the patches I have a data base of patches and pieces that store the correct parameters that then can be recall in the future. This is being done by some PHP scripts and the ASI API.
For more information about the implementation, please, refer to the Source Code, which is full of comments and relatively easy to follow.