The Faceless Bassª

A project in sound by Jacob Wittenberg




As a jazz pianist and MST major, IÕm constantly attempting to create technology and interfaces that can enhance the field of live performance.    With this project, I strived to create a virtual bass player.   Who could possibly complain about having an invisible bass player with impeccable time? Not to mention the fact that this bass player will always be at rehearsal on time (without the sassy comments, too!)  While this project will surely extend beyond my time in 220C, IÕve made great progress.  Currently, one needs only input a tempo, the chord changes and lengths of a tune, and the Faceless Bassª will be able accompany you.  The sample tune IÕve prepared, ÒAll the Things You AreÓ, took me 1 minute to type into the program, saving me a ton of time.  Unfortunately, I havenÕt worked in actual bass samples to the program yet, so a TriOsc simulates the bass noise.  Additionally, there are very few levels of randomness thatÕd make the bass player more realistic, but these changes wonÕt present a huge obstacle in the future.  My goal for this quarter was to create an accompanist, and thatÕs what IÕve done.


The Code:


            IÕve included the links to the two chuck programs necessary to run the Faceless Bass— and  The programs are fairly well commented, so thereÕs no huge need to explain in detail how they work.  However, I will give some instructions and explanations.




The Process (explanations and brief history):


            To begin, I needed a mechanism that would be able to read chord changes (strings) and convert them into notes that either a bass sample would emulate or a TriOsc would play.  To do this, I used a large array, and a very inefficient code.  Essentially, chuck reads through the array to see if a string matches each possible note, and if it does, it tells the program to start a bassline from that note.  Furthermore, the program analyzes the string to find the target note and makes a bassline that flows to the next chord change.  Getting this mechanism to work with targeting was the largest obstacle I faced in this project.  Once that was done, all I did was fine-tuning to enable users to customize chord lengths, minor/major sonorities, etc.  I canÕt explain how many hours I spent trying to work out formulas to synthesize smooth basslines between major, minor that werenÕt invasive.  Additionally, I built in a randomizer that occasionally syncopates the first beat of the chord.  This adds unexpected variety and also mimics realistic bass players.  Changing the chord lengths was an additional challenge.  I wanted the Faceless Bassª to be able to play chord changes of varying times without losing the walking bass feel, and so it took a lot of monkeying around with different note combinations to create that effect. 



How to Use The Program:


1)   Find jazz song you want to play

2)   Open

3)   Indicate tempo (in bpm)

4)   Type in chord changes using quotation marks and enharmonically spell all accidentals as flats (F# = Gb, d# = eb, and so on)

5)   Type in corresponding lengths of chords

a.     4 = Two-Measure long chord

b.     2 = one- measure long chord

c.      1 = half-measure long chord

6)   Open (be sure to check your directory so that Machine.add adds an existing file)

7)   Add to the virtual machine.

8)   Press space bar to initiate a 4 beat metronome countdown into the song

9)   Play song

10)                  Press delete at any time to immediately remove the bass player.

11)                  Enjoy a life of musical prosperity and endless awesomeness.



Special Thanks:


Thanks to the class of 220C for helping me with ideas and suggestions for the project.  Thanks specifically to Chris Chafe, my academic advisor.  Additionally, IÕd like to thank all jazz bass players for unknowingly giving me a template to model you.


Future Research and Developments:


I hope to include bass samples to make the sound more realistic.  As well, IÕd like to incorporate more randomness so that the bassline doesnÕt sound super repetitive (though sampling will solve a lot of that).  Furthermore, IÕd like to modify the program so that you can input jazzier chords such as C7, C-7, C7#11, and the program will know what to do.  Additionally, utilizing other programs to create an interface or library where you simply type the tune you want to play, and thereÕs a more user-friendly way to input chord changes and lengths would be desirable in the future.