Daniel Smith Final Project Music 220a Fall 2008
The central idea for my final project, which I viewed as a sort of partial synthesis of the knowledge I gained over the course of Fall quarter 2008, was to turn a computer keyboard into a somewhat realistic guitar substitute (in terms of what it is like to play a guitar) with some different custom ChucK guitar models and the ability to move sound between channels.
Essentially the project is a application for guitar simulation called: Java Keytar.
I aimed to create this "guitar simulator" as follows:
Strings Treating user clicks of the right-shift, enter, backslash, backspace, and F12 keys as string plucks of the E, A, D, G, and B strings respectively.
Frets The rows of keys, beginning with "Z, A, Q, 1, F1" are supposed to simulate the frets. So pressing any key in that row (Z, A, Q, 1, F1) is supposed to simulate pressing down either the E, A, D, G, B string respectively, at the first fret.
Music 220a has essentially opened my eyes to the enormous economy of means that exists for creating music and working with sound through computers and technology on a whole.
For me, especially sparked by one of the later lectures, Music 220a raised the following question:
do all modern technologies dream of making music?
I conclude, with this assignment, that this assertion is indeed valid.
I began this quarter not knowing much about programming, computer music, or their connection - but somewhere in the quarter I started, not only learning the very basic foundations of programming and computer music, but seeing the connections that exist between their worlds.
I really began learning about programming ten weeks ago, simultaneously in two different classes - CS106a and Music 220a. For this final project I decided to synthesize my new knowledge of programming in Java and ChucK to allow Java to dream of creating music, and working with ChucK to really create the music, and the effect a user can have on the sound.
I began this process by building purely in Java, using Eclipse as my tool. I created an "engine" that essentially is a program that allows the user to "Jam" and select one of four guitars with which to "Jam" that all sound different. Additionally, the engine allows users to write their own music using a "Write" option. They can write songs to files, which can actually be played back using the program. The user can play along, if he or she desires, while their original song is playing.
After the main keytar "engine" was completed, I moved to working with ChucK to really allow my Java engine to act like a guitar. I created four different .ck files that I used to "model" the guitar sounds for the keytar.
The Guitar Models
The keytar player can select four different keytar sounds - clean, chorus, classic distortion, and metallic distortion.
Clean keytar was "modeled" using the StifKarp Ugen in ChucK. Chorus keytar was also modeled with StifKarp, but with chorus added. Classic Distortion keytar was modeled with a SinOsc going through ADSR and delay. Metallic Distortion keytar was modeled with a SqrOsc going through ADSR and delay.
The models are obviously not beautiful guitar synths, but I like to think that when Java dreams of sounding like a guitar, he/she/it hears itself as the Java.ChucKeytar.
I have created a .ck file that, according to mouse movement, will pan sound between two channels (left if the mouse moves left and vice-versa).
It is not native to the Java.ChucKeytar, but it does work with the Java.ChucKeytar.