<< Chapter < Page Chapter >> Page >
This mini-project will develop your ability to interpret the binary file listing of a standard MIDI file. You will first parse the file into its component elements (headers, MIDI messages, meta-events, and delta-times), and then analyze your results.

Objective

MIDI files consist of three types of data: (1) MIDI events, (2) timing information, and (3) file structure information (file header and track headers). Your task in this mini-project is to parse a MIDI file by hand by examining the individual bytes of the file. Once you can successfully parse a file, you will be well-positioned to write your own software applications that can create standard MIDI files directly, or even to read the file directly (a challenge!).

If you have not done so already, please study the pre-requisite modules, MIDI Messages and Standard MIDI Files . You will need to refer to both of these modules in order to complete this activity.

Part 1: parse the file

The file to be parsed is available here: parse_me.mid (MIDI files are binary files, so right-click and choose “Save As” to download the file). If you wish, you can use a hexadecimal editor such as XVI32 to display the bytes, otherwise you can refer to the XVI32 screenshot below:

Hexadecimal listing of the 'parse_me.mid' file

The byte position (address) is shown on the far left panel, the hexadecimal representation of each byte in the file is shown in the central panel, and the ASCII representation of each byte is shown in the right panel. Most of the ASCII characters look like gibberish, but important landmarks such as the track chunk ID ( MTrk ) are easily visible.

Interpret each part of the file, and list your results in tabular format, like this (use hexadecimal notation for the “Starting Address” column):

Remember, a byte value of 0xFF signifies the beginning of a meta-event. Also, remember the concept of running status , so be on the lookout for MIDI messages whose first byte is NOT a status byte, i.e., whose MSB is clear. Take a look at the following video if you need some assistance:

[video] Walk through the MIDI file "parse_me.mid" at a high level, then show some parsing examples at the beginning of the file.

Part 2: analyze your results

Determine the following information for the MIDI file:

  • File format (Type 0, 1, or 2)
  • Number of tracks
  • Number of distinct channels used
  • Number of distinct voices (instruments) used (look for Program Change messages)
  • Number of ticks per quarter note
  • Shortest two non-zero delta times, reported both in ticks and in microseconds (hint: the timing information you need here is derived from information in two distinct places)
  • Top two longest delta times, both in ticks and in microseconds
  • Minimum non-zero note-on velocity, and its channel and note number
  • Maximum note-on velocity, and its channel and note number
  • Total number of meta-events

If you have not done so already, listen to parse_me.mid (click the link to launch your default music player application). How do your parsing and analysis results compare to what you hear?

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Musical signal processing with labview (all modules). OpenStax CNX. Jan 05, 2010 Download for free at http://cnx.org/content/col10507/1.3
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Musical signal processing with labview (all modules)' conversation and receive update notifications?

Ask