Submitted in partial fulfillment for the Minor in Applied Music Technology.

Developing the ability to recognize intervals has always been a tedious process. MusTT (short for Musicianship Training Tool) is a program written in Python that intends to improve upon existing interval practice methods. In recent years, apps like Tenuto have done well to make learning how to identify intervals an independent activity. However, many students become quickly disinterested. Furthermore, Tenuto and the like fail to work alongside reference songs which are so commonly used to help identify intervals.

With so many possibilities but so little time, I decided to focus on two main objectives to complete by the end of the school year. These objectives offered the most significant points of difference from pre-existing interval training apps. The first was to implement reference songs. Reference songs are commonly used to teach intervals by associating each interval with a distinct song. The second objective was to make ear training more exciting by incorporating game-like elements.

The Main Menu features a central column with push buttons for selecting the desired game mode. To the right of each push button is another button that opens a pop-up giving additional details. Normal, Hard, Expert, and Survival Modes have progressively fewer lives. Normal Mode has nine, Hard Mode has six, Expert Mode has three, and Survival Mode has just one.

Incorrect responses lower the number of lives or hearts. The objective of each of these modes is to answer 30 intervals correctly before running out of lives. If the player is successful or unsuccessful, a pop-up appears asking the player whether they want to play again. In Easy Mode, the player has unlimited lives, represented by an invincibility star.

In the bottom right corner of the Main Menu are two more buttons leading to two more pop-ups. Here, the player can find a list of all the ascending and descending intervals implemented next to their associated reference songs. I have chosen these reference songs for their popularity and catchiness, but I eventually want to make this list customizable.

Unlike the other game modes, Practice Mode allows the player to customize the different aspects of the game. The player can choose which direction the intervals will play and toggle on or off certain intervals and hints. Intervals that are toggled off appear lighter and are not selectable on the next screen. The progress bar becomes more green with correct responses and more red with incorrect responses. The text above also keeps score of the correct responses and total questions answered. In each mode, a correct response flashes green and an incorrect response flashes red.

While the majority of the program is written in Python, communication with Sonic Pi using Open Sound Control (OSC) is necessary in order to play the intervals and songs. Each of the song references are stored as individual Ruby (rb.) files containing the song’s opening note values and durations. The files are scoured using RegEx and read by a master Sonic Pi file. When the hint button is pressed, the appropriate reference song is triggered and transposed to match the played interval’s starting note.

In the future, I would love to work on a more elaborate mobile app or upload the code onto a handheld device like a Raspberry Pi. Below are some additional features and aesthetic components that I would like to see:

  • The ability to choose from a variety of different reference songs
  • Reference songs that include harmony
  • High scores for the survival game mode (one life with a timer)
  • Animated hearts, stars, and other icons
  • Custom backgrounds for each interface
  • Other games like chord identification, rhythm training, and more
  • Progress reports that track usage and improvement over time