xwsxethan / MusicScoring

Code and paper for automatically generating a difficulty score for a piece of music.
7 stars 1 forks source link

MusicScoring

This is a private repository for the research project I'm working on for my master's thesis. The code generates a difficulty/complexity measurement for a piece of music written in music xml. The paper will eventually be a software research paper to be submitted to conference.

In the current version, the supplied jar file outputs the complexity score via JSON for supplied a MusicXML file (.xml not .mxl) and difficulty level. To set the piece of music, specify the full path to an xml file as a command line parameter. To set the difficulty setting, specify a number 1-5 inclusive representing the difficulty (1 is lowest, 5 is highest) as a command line parameter. Each of these can also be turned on via the webpage. For debugging purposes, logging can be turned on in the source code only, not via command line or web page. All of these can be changed simultaneously and can appear in any order as command line or web page parameters.

The difficulty settings are read in from supplied xml files under the ConfigFiles folder. Separate files for Beginner, Novice, Intermediate, Advanced, and Professional playing levels are supplied. Each of these are currently the same, so will produce identical output (which is why they cannot be changed via the web page at this time). However they will be refined later based on input from experts in the field. Furthermore, individual difficulty levels will be provided later so one can set their own custom level.

This version traces difficulty by allocating difficulty points for each note and interval. Each note and interval (usually specified by ranges of notes/intervals) is assigned a specific score, typically an integer between 1 and 10. Whenever that note/interval is encountered, that score is multiplied by some additional components and then added to the running tally of scores. At the end, the overall score is output. The additional components that make up the multipliers are the speed/tempo (notes/minute), the dynamic level (ppppp-fffff), the articulations (regular, staccato, tenuto, slurred, accented, or strongly accented), and the key signature (7 flats-7 sharps). Each of these are similarly assigned a specific score, typically between 0.5 and 2. Except for speed/tempo, each of these are applied immediately at the time a note/interval is encountered. The speed/tempo multiplier is applied at the end when the total notes and total time have been counted, for simplicity.

The WebCode section provides an html interface to execute the program. This repository is configured to automatically work with the web code. Simply copy the entire contents of the WebCode directory to an open web server directory then allow access, and it should work. When building from source code, some configuration may be necessary. The provided workspace2.xml file is an ant build file that should push new builds of the jar file to the WebCode directory automatically from eclipse. Some additional configuration may be necessary to correct path issues on different systems, but overall the process should be fairly intuitive.

Further notes about the current status of the project can be found in the wiki, the notes associated with each release/commit/issue, and my personal research log.