The orignial concept was for a 12 x 12 grid to have 1 note for a full scale for each row. Combined for a full 144 keyscape where you can run the Game of Life on. The prototype was created using Max MSP [Version 9.1].
Once created the main problem I found was that it created a lot of atonal cords and sounds which is inherent in the Game of Life as it requires squares to be '1 step' away to really have any effect. This is forwarded for the creation of the smaller 8 x 8 grid, which will be coverd later. It was at this point where the idea for a Metrenome as well as the ADSR required for the generation of sound to be played were added into the device.
With the shrinking of the grid to an 8 x 8 grid, this forced us to move away from the 12 notes for each row and was intern replaced with a Scale:
| 1, 2, 3, 4, 5, 6, 7, 8| - Column
| I, II, III, IV, V, VI, VII,VIII| - Order
| A, B, C, D, E, F, G, A | - Notes [A Minor Scale]
This works well as if you use a Blinker [3 cells in a line], it will play A, b, C which has some more musical representation. This came with the next main change that came from the second design, the underlying MIDI Mapping. As explained a scale in one line works better then 12 nodes atonally bu does not create a typical chord [I, III, V], this lead to the chord mapping to change to:
| 1, 2, 3, 4, 5, 6, 7, 8| - Column
| I, III, V, VII, II, IV, VI,VIII| - Order
| A, C, E, G, B, D, F, A | - Notes [A Minor Scale]
Now if we use a Blinker we naturally produce a chord A, C, E [A Minor Triad]. The design of the MIDI mapping allows for a more musical control from the user and can feel like the turning of a guitar differently to the standard EADGBE.
The second main change was the finalisation of the inputs which includes the following:
5 Rotary Encoders [Att, Dec, Sus, Rel, BPM]
2 Toggles [External, Internal]
1 Button [Step]
1 Light Sensor
8 x 8 LED Button Grid
The third design change came from trying to optimize the reading and writing between Arduino and Max. For design one and two the Game of Life logic was being applied inside the Max device and would output the grid values back to the Arduino to update the lights. The speed difference between sending and receiving these changes were miniumal and I saw no problem with it however. While trying to get higher BPMs (120+) I was running into the problem that the write time was longer then the delay between the next read time.
One of the other main benifits with making it internal working is we can reduce the amount of write requests we need to do from Max to Arduino. By reading button presses from the physical Cela directly with Arduino we do not have to wait for Max to send it and we can only send button presses from Max when they happen and doesn't have to be everytime.