-
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.
-
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.
-
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.
-
The chapter entitled
Literature Review
discusses at least one such example.
-
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.
-
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.
-
see Appendix entitled
Summary and Description of MIDI
-
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.
-
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.
-
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.
-
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.
-
These are implementation defined values. Currently, MININT == -32768 and
MAXINT == 32767.
-
This is an implementation defined value. In the current implementation,
MAXPOS == 32767.
-
block objects are either notes, phrases, chords, envelopes or statements.
-
Parameters are either numbers (including variables and function values), notes,
phrases, chords, templates, envelopes, functions or procedures.
-
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.
-
The current implementation has MININT == -32768 and MAXINT == 32767.
-
Of course, the current implementation does not encode any performance rules
at all. However, should the implementation be extended in the future ...
-
In this implementation, the code and data stores are separate.
-
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