Spring 2011»CSCI 180 Homework 1

CSCI 180 Homework 1

Assigned Date: Friday, Mar. 4, 2011
Due Date: Wednesday, Mar. 23, 2011
Due Time: 9:00am

Last modified on May 13, 2011, at 11:58 AM (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


In class we worked through several programs that put all jMusic data structures into practice (see Ch4 of the jMusic book). We looked at:

  • a program that creates a drum pattern consisting of kick, snare and hi-hat sounds;
  • a program that creates a canon; and
  • a program that creates a minimalist piece (Piano Phase by Steve Reich).

As mentioned earlier, 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. Again, 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

Here are more pitch numbers for percussive instruments.


Write a Jython program that generates an interesting piece of music. You have these options:

  1. Find an interesting minimalist piece (e.g., by Philip Glass), and transcribe it in jMusic.
  2. Find a song you like, and transcribe it in jMusic.
  3. Or, create your own song in jMusic. If so, the song needs to have both a melody and drums (all done in MIDI via jMusic).


Here is a quick overview of music notation for note pitches.

Rhythm Values

Here is a quick overview of music notation for note durations (rhythm values).

  • jMusic defines the following note durations for convenience.
    • It includes both American and British names. For example,
      • whole note = semibreve
      • half note = minim
      • quarter note = crochet
      • eighth note = quaver

MIDI Instruments

jMusic provides the following MIDI 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 Name(s)>
#   Email:      <Your email address(es)>
#   Class:      CSCI 180, Section 1
#   Assignment: HMWK1
#   Due Date:   <The assignment's due date>
#   Certification of Authenticity <remove one of the following>:     
#      I certify that this lab is entirely my own work.
#      I certify that this lab is my own work, but I received
#      some assistance from:  <Name(s)>
#   Purpose: <Provide a simple, yet complete description of the task being
#         performed by this program. It may be several sentences long.>


You will submit your assignment via OAKS (Dropbox folder). 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 Earlier Submissions

Here are a few interesting submissions:

  1. Disturbed (MIDI and Python), by Andrew Armstrong
  2. Water Spring (MIDI and Python), by Evan Kosin
  3. Lux Aeterna (MIDI and Python), by Jacob Song
  4. Girls Just Wanna Have Fun (MIDI and Python), by Leslie Stovall and Megan Hoffspiegel

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.