Roberts, Daniel
 
JAM: Java AudioMachine

Daniel W. Roberts

Presentation Date: 5/2/03

Advisor: Rebecca Bruce



 

I have always had a high level of appreciation for voice manipulation.  Even my childhood cartoons that used pitch manipulations interested me.  It intrigued me that someone?s voice could be completely changed into something amazingly surreal.   It was a disappointment in my college years that there were no courses that touched on programming concepts concerning audio.  As a result, for my Senior project, I chose to work with the Java 1.4.1 implementation supplied by Sun to gain valuable experience designing and implementing an application that will record and manipulate strings of sound in a user-friendly way.  I chose Java because of its platform independence and the existing libraries of code that support sound operations.

The main focus of this project was to layer pre-recorded audio and to manipulate the pitch.  Initially, I had problems successfully combining two separate bytes of pre-recorded audio without producing an undesirable sound.   I had created  two separate byte arrays to read in information from two separate audio input streams, representing the files that I wanted to layer.  Effectively layering these byte arrays proved to be extremely time consuming.  Although I had the most difficult time with the layering function, it took much less code than many of the other functions.   Many of the other functions (fade in, fade out, loop) actually borrowed a vast majority of code from the layer function and only changed the algorithm at the end to suit each one?s individual needs.

Whereas the layer function proved to be challenging, the pitch function was fairly straightforward.  I used a float control to manipulate the sampling rate value of the target data line.  At my advisors suggestion, I replaced  the pitch button with a slider to allow for optimal manipulation of the recorded sound.  I also added major and minor ticks to the slider to aid in navigation..

Perhaps, the most burdensome part of the project was designing the Graphical User Interface.  I struggled to find a design that would feel comfortable to use, yet be aesthetic as well. In the end, I decided  to use a combination of GridbagLayouts and Borderlayouts to design a GUI that I feel is user friendly and stylish.

In the future, I will experiment with audio compression and enhancing the GUI to provide a visual representation of the sound.  In addition, I would like to add reverberation, pan, and gain buttons.  Overall, I have broadened my skills in java and developed a great appreciation for the Java Sound API..