When Symbolic Composer compiles a MIDI file it does not include any time-signature data. This can present something of a problem when composing music outside the regular 4/4 meter.

Consider a recent composition like Nigel Morgan’s Migrations. The default SCOM output looks like this when imported to notation program:

The score-writer’s basic interpretation of the piece in 4/4 meter doesn’t do the composer any favours, for one thing he wrote it with a principal beat of sixteenths in mind! To start work on the composition in the score writer at this stage is asking for trouble – so many barlines to remove and insert, time-signatures to add, groups to un-beam and re-beam… not to mention note-values needing to be reinterpreted when they fall across bar lines! In short, there is a lot of potential for getting in a mess quickly.

Our previous approach to this problem was to take the SCOM output into a MIDI sequencer, such as Metro, before importing it to the score-writer. Every time-signature would then be entered by hand as MIDI events on track 0. Working from a list of SCOM zone-lengths (which are often analogous to time-signatures) this approach worked pretty well… although it was time-consuming. One of the Six Concertos may, for example, have around 200 time-signature changes – taking a couple of hours to input and still having some scope for error if one accidentally skips a time-signature or enters the wrong values.

We have therefore decided that it would not only save us time but also be in the interests of other composers in the SCOM community to provide a method to automate time-signature insertion. We have recently made available the first version of the Zone2MIDI tool, written in Ruby, and available here:


To use this software, first export your (SCOM) composition to a MIDI file.

Next, open up a new text file (if using Text Edit, remember to select Format > Make Plain Text). Paste in a list of zone lengths from the SCOM interpreter, for example:

(11/16 1/8 3/16 1/8 1/2 13/16 9/16 7/16 3/8 3/4 5/16 3/8 3/8 1/4
11/16 5/16 13/16 1/8 3/4 5/8 5/8 9/16 5/8 3/8 1/2 7/16 3/4 1/4 11/16 
1/2 11/16 1/2 11/16 1/2 13/16 9/16)

Save this as a text (.txt) file.

Put both the MIDI file and text file in the zone2midi directory and either:

1)    Double click the file (OS X users). This will run the script with a prompt to ask you for the names of your midi, text and output files:


2) Run the script from Terminal with the following arguments:

      ruby zone2midi.rb inputfile.mid zonefile.txt outputfile.mid

Once the script has executed the output MIDI file will have all necessary time-signature data written to track 0. Importing it into your score writer should give you more easily interpretable musical data:

Output from Zome2MIDI has been successfully tested with Sibelius, Finale, Logic and Nightingale.


The installation of this script is fairly simple. Users of OS X 10.6 and above should have little problem getting it going if they follow these steps (other users, see below):

  1. Download and unarchive it into your User directory.
  2. Open Applications/Utilities/Terminal.
  3. Type: gem install midilib
    This should install the Ruby library used by the script.
  4. Close the Terminal window.
  5. Run the script using one of the methods detailed above.

The next release of Zone2MIDI will be bundled as an OS X app and Windows executable. Meanwhile, users of OS X prior to 10.6 and Windows should install Ruby to their machines using the instructions here.

Installation of Ruby was quickly and painlessly done on my own platform (OS X 10.5) by copying and pasting instructions from this page into a Terminal window.

Many thanks for Jim Menard for writing Midilib, without which this would not have been possible!

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s