Fall 2012»CSCI 180 Homework 3

CSCI 180 Homework 3

Assigned: Mon, Oct. 1, 2012
Due Date: Monday, Oct. 7
Due Time: 10:55am

Last modified on October 01, 2012, at 12:28 PM (see updates)

This is a pair-programming assignment (i.e., you may work with one partner). You may discuss the assignment only with your partner or the instructor.


This assignment focuses on:

  • creating interesting music with jMusic
  • MIDI melodies
  • MIDI percussion


Write a Jython program that transcribes an interesting song. This song should be at the same level of complexity as, say "When Johnny Comes Marching Home", or The Beatles' "Norwegian Wood".

The complete song should be 2-3 mins long.

Your transcription should have (at least):

  • a melody phrase (playing the melody),
  • a chord phrase (playing the chord progression), and
  • drums (or percussion).

This assignment is based on Chapters 2, 3, and 4 of our textbook.

Pitch & Rhythm Values

For a quick overview of music notation, see Ch. 2 of our textbook.

MIDI Percussion

For an overview of MIDI percussion, see Ch. 4 of our textbook.

MIDI has 16 channels (numbered 0 to 15). Of these, channel 9 is reserved for percussion. When adding notes to a part assigned to channel 9, the pitch of the notes determines which percussive instrument to use. Here are pitch numbers for some percussive instruments:

  • 36 (C2) -- Bass Drum
  • 38 (D2) -- Snare Drum
  • 42 (FS2) -- Hi Hat (closed)
  • 46 (AS2) -- Hi Hat (open)
  • 49 (DF3) -- Crash Cymbal

Appendix A has pitch constants for some percussive instruments.


Follow the Golden Rule of Style: "A program should be as easy for a human being to read and understand as it is for a computer to execute." [1]

In general, you should comment any variable, obscure statement, block of code, etc. you create.

Additionally, your code should always include opening comments as follows:

#   Author:    "Your names"
#   Email:      "Your email addresses"
#   Class:      CSCI 180
#   Assignment: HMWK3
#   Due Date:  The assignment's due date
#   Certification of Authenticity:     
#     < ! Delete one of the two statements below - also delete this comment ! >
#      We certify that this lab is entirely our own work.
#      We certify that this lab is our own work, but we received
#      some assistance from:  "add people's names, Web links, or other references"
#   Purpose: < ! Replace this comment with a simple, yet complete description of
#         what your program does - e.g., "This program plays Chopen's Nocturne,
#         Op 72. No. 1."  The description may be several sentences long. ! >


You will submit your assignment via OAKS. Be prepared to demo your music to the rest of the class. Your submission consists of:

  1. Your Python program. Give it a meaningful name.
  2. The MIDI file generated from your program.


Your grade will be based on how well you followed the above instructions, and the depth/quality of your work.

Some Interesting Submissions

Here are a few interesting earlier submissions:

  • Avril 14 (MIDI and Python), by Daniel Hanf
  • Nonsense (MIDI and Python), by Samuel Cooper (original)
  • Intro (MIDI and Python), by Hudson Jones
  • Take Five (MIDI and Python), by Johnathan Hegler and George Woolston
  • Changes (MIDI and Python), by John Thevos

Relevant Quote

"Any amount of work can be done in any amount of time... only the quality varies." ~Joao Meidanis


  1. Cooper, D. and Clancy, M. (1985) "Oh! Pascal", 2nd ed., W.W. Norton & Company, New York, p. 42.