List of Footnotes

  1. This can be done by either using or writing a set of library routines that implement common operations on musical data structures, or successively modifying an existing program that plays music by direct manipulation of appropriate hardware.
  2. Moxie is a system devised by Douglas Collinge of the University of Victoria. It runs on a Synclavier I music synthesizer, although a version exists in the Forth language.
  3. This thesis will not attempt to describe or even explain the meanings of many words associated with musical theory or performance. An 'intuitive' or practical understanding of music is sufficient for one to be able to grasp the concepts underlying the thesis. If the reader finds the meaning of any word relating to music obtuse, a dictionary of musical terminology may prove useful.
  4. The chapter entitled Literature Review discusses at least one such example.
  5. The model of representation often governs the method used in quantizing the musical stream into symbols. Even a model that attempts to treat music continuously rather than discreetly quantizes music into continuous subcomponents.
  6. Currently, the player takes a text file containing note specifications and converts these into a stream of MIDI (Musical Instrument Digital Interface) byte codes which are sent to a MIDI interface. Refer to to the Appendix entitled Summary and Description of MIDI for a guide to the format and specifications of the digital interface.
  7. see Appendix entitled Summary and Description of MIDI
  8. An octave is musical terminology for a arithmetical operation on the pitch of a note. Increasing a note by one octave will cause a doubling of the frequency of the pitch of a note. Similarly, decreasing a note by one octave will cause a halving of the frequency of the pitch.
  9. An octave within the audio frequency spectrum is divided (not quite) equally into 12 semitones. Most Western musical instruments divide an octave using a method called equal temperament. It is important to note that Rubato does not assume pitches of notes specified. It assigns each individual note to a specific pitch number. Each pitch number is known to be mapped to a given frequency on a typical music synthesizer. If a synthesizer with a different mapping of pitch numbers to actual pitches is connected to a computer equipped with the Rubato system, Rubato is none the wiser.
  10. Control flow statements may also be employed within a chord, but they are less useful in this context due to the fact that all entities within a chord are 'executed' or performed simultaneously.
  11. A note, chord or phrase declaration is simply a 'null' binding, e.g. note notename, phrase phrasename, or chord chordname, which associates a name with an entity but does not actually make a binding.
  12. These are implementation defined values. Currently, MININT == -32768 and MAXINT == 32767.
  13. This is an implementation defined value. In the current implementation, MAXPOS == 32767.
  14. block objects are either notes, phrases, chords, envelopes or statements.
  15. Parameters are either numbers (including variables and function values), notes, phrases, chords, templates, envelopes, functions or procedures.
  16. In designing the Rubato machine, I am heavily indebted to the design of the Plus machine which is due to Ken Robinson of the Department of Electrical Engineering and Computer Science at the University of New South Wales (UNSW). My reference to the Plus machine is taken from pp. 23-9 of the Supplementary Notes for CS3 Compiler Construction, Lent Term 1986, Basser Department of Computer Science, University of Sydney.
  17. The current implementation has MININT == -32768 and MAXINT == 32767.
  18. Of course, the current implementation does not encode any performance rules at all. However, should the implementation be extended in the future ...
  19. In this implementation, the code and data stores are separate.
  20. The Microsoft C Compiler Version 4.00 used to generate the executable files allows a program to access the full 1 Mbyte address space of the processor despite the 16-bit address limitation. Whenever an area of memory outside the current addressing limits is accessed, the compiler generates code that manipulates the processor's segment registers. The far keyword indicates to the compiler to reserve 32 bits for the address of an object rather than the usual 16 bits.

Back to: Table of Contents


Created on Sat Feb 21 20:21:24 1998 using a perl script called m2h from original troff mm document.
Click here to download a copy of m2h.

Author: Chris Tham
Email: Chris_Tham@hp.com