<< Chapter < Page | Chapter >> Page > |
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.
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:
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:
Determine the following information for the MIDI file:
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?
Notification Switch
Would you like to follow the 'Musical signal processing with labview (all modules)' conversation and receive update notifications?