Sarah Klein

Mentor: Dr. Paul Richards
College of Fine Arts
"I was excited about the idea of collaborating with a faculty member on something that genuinely interested me - in learning and growing in a self-driven environment without conventional, graded evaluation. Additionally, I wanted to combine my two fields of study, music and technology."


Music Theory & Digital Arts and Sciences Engineering



Research Interests

  • Music Theory
  • Java Development
  • User Experience

Academic Awards

  • University Scholars Program(2016)
  • Microsoft Tuition Scholarship(2016-17)
  • Friends of Music Scholarship(2012-16)
  • Bright Futures Scholarship(2012-16)


  • UF Engineering Student Advisory Council


  • Foster with Gainesville Pet Rescue
  • Mentor for ProjectCSGirls

Hobbies and Interests

  • Upright Bass
  • Photography
  • Painting
  • Hiking

Research Description

Finding Algorithmic Patterns in Music
For a research project, I plan to create a computer program that dynamically writes music. With the help of my faculty mentor, I will analyze musical scores from a variety of composers in an attempt to determine the patterns and rules that exist in their music. I will then turn these patterns and rules into algorithms that will write music in the style of these composers. The program will utilize random chance when possible so that every composition is unique and allowing for an infinite number of possibilities. Users will be able to input preferences for the musical output such as duration of the work, instrumentation, range, style (Renaissance or Baroque, for example), or key/mode. The composing of the work will be done algorithmically. In the case of some styles, it may be possible to allow a user to input a theme or motive upon which the composition is based, but in more particular styles, such as a Bach Invention, that motive would have to satisfy a number of conditions. In this case, an incorrect user-supplied motive would have to be altered for the algorithm to work properly. The program will be written in Java using a Swing GUI and the JFugue library for playback. It will be an independent desktop application, though it will be able to export its music to MusicXML files, which can be opened in Finale, Sibelius, and most music notations software. During the development of this application, I expect to more deeply understand the patterns and rules behind a number of compositional styles. During the development process but after a prototype has been established, I will test my program on educated and informed musicians, including my faculty mentor. During these tests, I will gather feedback on both the application’s user interaction model as well as the legitimacy of the musical output. I suspect that trained musicians will hear the shortcomings in my algorithm, which will both help me improve this algorithm and allow investigation into the parts of a composition that most contribute to its style.