Friday, April 13, 2007

project proposal

There has been some interest on the Summer of Code discussion list in seeing accepted proposals, so here's mine. Please note that the format is based on one provided to me by the mentoring organization, LispNYC.


Brian Gruber

Project Title

Music interchange format support for Gsharp


Functionality will be added to the Gsharp score editor allowing the importing and exporting of scores in the MusicXML format.

Benefits to the Lisp/Scheme Community

With support for this interchange format, users of Gsharp will be able to integrate it into a work environment that includes a bevy of other music software. Furthermore, composers not currently using Gsharp could be enticed to try it, assured that it will play well with the other tools they have become accustomed to.

Project Details

The project will focus on adding import/export functionality to the Gsharp score editor. Gsharp could be a powerful application for creating and editing sheet music, but currently work created in Gsharp is effectively stuck in Gsharp. This severely limits the application's utility.

MusicXML, an XML interchange format for sheet music, was specifically designed to provide an open format, usable by as many applications as possible. A long list of software reads and writes music data in this format, including other open source applications like Rosegarden, LilyPond and FOMUS (also written in Lisp).

The project will therefore focus on converting between Gsharp's internal data structure and MusicXML. It will be written entirely in Common Lisp with the object of being integrated into the application proper. It will utilize one of several existing Lisp libraries for working with XML. Development will begin with simple Lisp routines translating trivial, one-note scores between the two encodings. Score features supported in Gsharp will then be added one by one to both the importer and exporter.

Please note that the project description as posted on the LispNYC Summer of Code website suggests first creating a MIDI import module (MIDI export already exists, and will hopefully inform this project's work with MusicXML). This has been omitted from this proposal with the belief that time would be better spent focusing on MusicXML. There are already tools available for creating MusicXML from MIDI files, effectively reducing the problem of importing MIDI into Gsharp to the problem of importing MusicXML.


The first stage of the project will be Lisp routines that translate a very basic example between Gsharp's internal format and MusicXML (something like the MusicXML "hello world" example available at This should provide an opportunity to grow comfortable with both encodings. Also, this project will make use of an external XML library. Several are available and one will have to be selected. This simple first stage should provide a sanity check to make sure that selection was made prudently.

Development can then continue by adding support for progressively more complicated score features: accidentals; key signatures; note clusters; notes of different duration; multiple staffs; voices; beaming, etc. Each feature will be added to both the import and export code before moving on to the next, though major obstacles on one side or the other for any particular feature should not be allowed to hold up overall progress.

The final deliverable will take the form of a patch for Gsharp integrating the fully functional "Import MusicXML" and "Export MusicXML" routines with the application proper, ideally with menu entries to boot. The code should be able to export, and re-import, all of the examples currently shipping in the Scores directory with Gsharp.


Brian Gruber is currently completing his Master's degree in Music Technology at New York University. His thesis focuses on the application of algorithmic composition techniques in auditory displays; it attempts to attach emotional content to the results of trend analyses on data streams. Other projects at NYU have included: work with sonically-enhanced widgets involving Csound and MPEG-4 Structured Audio; modifying a pre-existing C++ sound processing library to be cross-platform by the use of PortAudio, libsndfile and GNU Autotools; a study of SIMD instructions on IA-32 processors for use in DSP applications; and a program for Max/MSP written with Java which processes mathematical statements written in MathML to provide a melodic "glance" at the statement intended for the blind and visually handicapped. In the course of his studies, he has created several algorithmic compositions using tools including Csound, RTCMix, Perl and Max/MSP.

Another project Brian executed while at NYU involved the use of XML to create unit generator code that could be used in a variety of signal processing applications. Frustrated that while many audio processing systems possessed great similarities, each one required slightly different code to achieve the same results, he implemented a system which captures the common functionality of unit generator functions in an XML format. Using XSL transformations and Make, this system is able to generate objects for either Max/MSP or PD on several platforms with one simple command.

While at NYU, Brian worked in the Enterprise Application Infrastructure group at Morgan Stanley. There, his projects included: modifying a 3rd-party bug-tracking system (Jira) to interface with a 3rd-party source-control system (Perforce); creating a prototype Enterprise Change Management system which would track C++ library dependencies firm-wide; and a web application allowing firm developers to add pre-existing projects to a centralized automated build infrastructure. This last project involved the use of JDOM and XSLT to read, write and modify the XML configuration files used by the build daemon.

The bulk of Brian's coding experience has been in C, C++, Java and Perl. Recent projects have also included code written Python and IA-32 assembly language. He first became interested in functional languages when taking courses in Programming Languages and Translators and Mathematical Logic in the same semester as an undergraduate. His interest was once again piqued in graduate school when, while doing research on algorithmic composition, he discovered the existence of the LispNYC Music Special Interest Group. In 2006 he bit the bullet and, for fun, learned Common Lisp. He hopes this experience will help him to both firm up that knowledge and make him an active member of the musical Lisp community.

Brian graduated cum laude from Columbia University in 2003 with a degree in Computer Engineering. It was at Columbia that he began his formal studies in music theory. He has also studied music in the form of piano and voice lessons, and has been performing on-stage since he was ten years old.

Thursday, April 12, 2007

I proclaim this

Well, no email yet, but Google's webpage confirms it. I am doing Summer of Code. The project will be with LispNYC and will entail adding MusicXML import/export functionality to Gsharp. Further reports here as events warrant.