Table of Contents

Introduction

Getting Started

Possible Questions & Troubleshooting Tips

Menu Options

File New (CTRL + N)

File Open (CTRL + O)

File Save (CTRL + S)

File Save As (CTRL + A)

File Exit (ALT + F4)

Edit Random Probabilities (CTRL + R)

Edit Conditional Probabilities (CTRL + P)

Help Contents	 Brings you to this screen

Help About	 Shows some information and registration info

Miscellany

References

Acknowledgements

Technical Notes

How to Register

Disclaimers & Legal Stuff


Introduction

Welcome to the Aleatoric Composer!  This was created for my MSCS project at Temple University in Philadelphia, PA.  I thought it would be fun to distribute it around the world and try to make the mega-bucks that come with writing a shareware product.

I hope you enjoy fooling around with it.  If you like it, you can register it for a very reasonable fee.  My next version will probably feature some neat things I hope to learn in the area of Artificial Intelligence, such as implementing a Neural Network in creating music.  If you're registered you can stay abreast of any upgrades or bug fixes.  Not that I would have written anything with a bug in it, nudge, nudge!

The program itself is sequencer style, that is, you have many tracks you can add, edit, and delete, each of which can have its own Time Signature, Tempo, Sound Patch, and MIDI Channel.  Plus, the program generates MIDI files which you can import into your favorite sequencer (such as Cakewalk for Windows) or even a score notation program to print out your favorite generated riffs!  The program plays songs you create, so you don't need any external sequencer software besides the one you installed with Windows (whether you know it or not).  It'll work with anything from a 2nd hand Adlib card to a Synclavier.


Getting Started

In the Aleatoric Composer, you set up tracks for a song using the Edit Random Probabilities or Edit Conditional Probabilities menu options which take you to the Track View screen.  Think of a track in the program as laying down part of a song on a multi-track tape recorder.  If you are familiar with MIDI and sequencing with computers, you know what I'm talking about.  Each track has different parameters you can control:

Tempo

Volume

Time Signature

Patch

MIDI Channel

Start and End Measure

Octave Displacement

You can also enter a description for the track.

A track is monophonic, that is, at any instant one note is playing on a track.  Of course, you can create other tracks so that you hear more than one note at a time, or create strange contrapuntal arrangements.  Future versions of this program will probably have support for system and user-generated chords.  Another reason to register!  The most important thing to enter, however, is the different probabilities for each note or rhythm you want to play in your track.  The method for entering depends on whether you are entering Random or Conditional probabilities (based on your menu selection).  Also, it is important to enter the Random Rhythm or Conditional Rhythm for the notes you have selected using either method.

Bear in mind that you cannot exceed the capabilities of your sound card.  If you have a card that only supports six different voices at any one time, you shouldn't bother trying to write a song that is playing 10 notes at once.


Random Probability Description

Random probability (as used in this program) is the probability that a note (or rhythm event) will occur at any given time.  Normally, all the probabilities of an event add up to 1.  In this program the computer normalizes the probability values you enter so that they conform to this rule.  So if you enter a few notes all with value 10, you get the same distribution as if you entered the notes with a value of 99 each.  This way, you don't have to worry about if your probabilities add up to 1.  What you are really entering is the relative probability weightings of each note or rhythm.

For example, imagine part of the Random Edit screen looks like this after editing:

What this tells you is that you have selected the notes C, E, G, and a high C with weights of 5, 7, 8, and 2 respectively.  The sum of these weights are 22, so at any time the probability of the low C being played is 5/22, the E is 7/22, etc.  An easier way to think of it is in terms of odds, e.g. the odds are greatest that the G will be played, and lower that the high C will be played at any moment.  Thus, my program has much in common with your neighborhood bookie, although it won't run out of town if you beat it.  The worse that can happen is a General Protection Fault in Windows, but that's what CTRL+ALT+DELETE is for!

Still unclear?  Try this.  If you have defined many notes in an 8-measure track with high probabilities, and add a note with a low probability, over the whole track that note should appear with less frequency than the notes with high probabilities.  The higher the number you enter, the greater the chance that note will show up when you finally Generate the song.

Also, in this program you have the option of choosing various standard random probability distributions to assist you in note probability selections.  You enable a note for the probability distribution to operate on by simply giving that note a value greater than 0.  The notes will magically appear before your eyes with numbers that match the probability distribution you selected.


Conditional Probability Description

Conditional probabilities are kind of a mixed blessing.  While they allow you greater control and produce more interesting pieces of music (in my opinion), they are also more complicated to work with.

In a conditional probability, the value of the current note selected depends on what was the last note (or rhythm, also).  The hard part is that you must keep track of which notes are leading to or came from.  This is necessary because your track can hit a dead-end (no next possible note or rhythm) or a wierd loop (note or rhythm keeps feeding back to itself or another note).

So lets look at an example.  Imagine you have clicked on middle C as your From note, and now you are prompted to enter the To notes:

This will probably look familiar to you from your work with the Random Probability Screen.  What this tells you is that coming from middle C, you have a 5/22 chance of staying at middle C, a 7/22 chance of moving to E in the next event, etc.  Do you see that if you only had selected middle C again as a probability, it would just stay on middle C until the end measure?

Also, if you have no note setup for G to go to, if it moves from C to G in the course of generating the track, the sound will simply stop.  A neat effect you may wish to try is to setup a loop: e.g. have C go to G and then G go back to C, etc.  Check out the file cmajor.cmc to see how I have it loop through a C major scale using conditional probabilities.  This is where the power lies, as using random probabilities won't allow you to control which note of the scale is occuring in the order I want it to play.


What is Aleatoric Composition?

What is Aleatoric Composition

My dictionary defines aleatoric as 'pertaining to chance or probability.'  This is precisely how this program makes music using either random or conditional probabilities.  This has been used many times before not only in computer music but classical music as well!  Mozart once wrote a piece by using dice to determine what would be the next phrase (Musical Dice Game, k. 294d).  More recently (well, the 1960's at least), composers such as John Cage and Lejaren Hiller have used this type of composition in their works (see HPSCHD in References).  In fact, HPSCHD makes use of Mozart's Musical Dice Game a number of times in the performance!


So what do I do now?

Well, you could try the pre-made files I've provided (extension .CMC).  Try loading a file through File - Open, then select the appropriate menu selection (Random or Conditional).  You'll see the appropriate Track View screen and options to Add, Edit, or Delete tracks.  See the Generate button?  Click on that and hopefully you'll hear some noise.  Hit Cancel when you get tired of it.  If you hear no noise, refer to Why is no sound coming out?.


Why is no sound coming out?

For Aleatoric Composer to make sound, you need a sound or MIDI card installed in your computer, with the appropriate drivers for your card installed under Windows.  Also, of course, you need to have your sound card hooked up to an amplifier or speakers, or your MIDI card connected to your synthesizers and drum machines, then to an amplifier.

The program uses the MCI Sequencer, so this must be installed as well as the Timer.  You will also need to enable the MIDI Mapper.  Since I assume your sound card or synthesizer is following the General MIDI specification, it's a good idea to have that set up for the proper card as well (via the MIDI Mapper).  In this specification, MIDI Channel 10 should be set for Drum/Percussion sounds, which is the default if you select MIDI Channel 10 (or 'Drums' for the PATCH) in the program.  I'm pretty sure a standard installation of Windows loads the MCI Sequencer, Timer, and MIDI Mapper by default, so you most likely have this already present on your system.  Even if you don't have a sound card, you can play around with the program and generate MIDI Files.  In this way, you can play the file on an external sequencer or give it to a friend who has the capability to play MIDI files on their system.

A nice and easy test is to try and play the canyon.mid MIDI file (which came with Windows) through the Media Player.  Also, I have provided a few MIDI files I generated with this program, which should be located in the directory where you installed the program.  Media Player is usually in the Accessories group in Windows.

If you can hear this file playing, then you should be able to hear output from my program, since it uses the same settings as the Media Player.  If you don't hear anything, click on Control Panel - Drivers in the Main group and make sure you have the necessary drivers loaded for your sound card:  MCI Sequencer, MIDI Mapper, and Timer.  You may get a message saying that the file won't play properly.  You can disable this in the future -- what they're trying to tell you is that you don't have a General MIDI setup (or so it thinks).  So when my program asks for a trumpet you may hear a cow mooing instead.

This program produces stuff that sounds like John Cage did it (which he did, with Lejaren Hiller at the University of Illinois in the 1960's, see HPSCHD in References), but it shouldn't be doing anything resembling his piece 4' 33.  So if you're still hearing silence, check that you have not created a track that is playing too fast for the sound patch you have selected.  For example, if you have selected 16th and 32nd notes at a tempo of 200 beats per minute using a Soft String patch, you probably won't be able to hear it.  Finally, make sure the Volume isn't 0!

If you hear sound by playing a MIDI file via the Media Player but not through my program then I'm stumped.  But don't give up!  Since I allow you to save MIDI files in the program, simply keep Media Player in an open window.  Then you can save a MIDI file with my program, and open and play it through the Media Player.  This may sound annoying but what can I do, buy you a new sound card?  From the money I expect to make off this program, I'll be lucky to buy myself lunch.


Who is this program for?

This program is for anyone who is interested in creating music and happens to have Windows 3.1, an 80386SX or higher class computer, and a soundcard (Gravis UltraSound, AdLib, Soundblaster, etc.) or MIDI Card (Music Quest, Roland MPU401, etc.) with appropriate drivers for Windows.  I suppose a VGA monitor or better wouldn't hurt either.  This program does not use WAV files, therefore a PC Speaker driver isn't gonna work.  I've seen second-hand sound cards for less than $50, so if you can afford a computer that can run Windows you can surely afford a sound card!

This program is also for anyone with a spare dollar, which is anybody who has the equipment to run it (see How to Register ).

Remember the old song Brother Can You Spare a Dime?  Well inflation has gone up quite a bit since then.


How do I get drums to play?

This is easy enough.  As mentioned elsewhere, MIDI Channel 10 is reserved for drums and percussion.  So all you have to do is select MIDI Channel 10 on either the Conditional or Random Probability Edit screen, and you're all set up for drums for that track.  Or you can select the last patch in the Patch box called, remarkably enough, Drums.

Now you may well ask, what drum sounds will come out?  The General MIDI spec has pre-defined drum sounds that correspond with each note.  Of course, if you don't have General MIDI enabled for your MIDI Mapper, or your sound card doesn't support all of these sounds, you may run into trouble upon playback.  Try the drumsolo.cmc file to test your equipment's capabilities to play drum sounds (and to test your neighbor's patience).

Here is a little chart to help pick the right drum sounds.  The notes start at the lowest C on the keyboard (if Octave Displacement is 0).  Annoyingly enough, they start at the low B with an Acoustic Bass Drum.  If you really want to hear this Acoustic Bass Drum, set your Octave Displacement to -1 and shift all the note positions shown below up one octave.

B2	Acoustic Bass Drum	(see comment above)

C3	Bass Drum 1

C3#	Side Stick

D3	Acousic Snare

D3#	Hand Clap

E3	Electric Snare

F3	Low Floor Tom

F3#	Closed High-Hat

G3	High Floor Tom

G3#	Pedal High-Hat

A3	Low Tom

A3#	Open High-Hat

B3	Low-Mid Tom

C4	High-Mid Tom

C4#	Crash Cymbal 1

D4	High Tom

D4#	Ride Cymbal 1

E4	Chinese Cymbal

F4	Ride Bell

F4#	Tambourine

G4	Splash Cymbal

G4#	Cowbell

A4	Crash Cymbal 2

A4#	Vibraslap

B4	Ride Cymbal 2

C5	High Bonga

C5#	Low Bongo

D5	Mute High Conga

D5#	Open High Conga

E5	Low Conga

F5	High Timbale

F5#	Low Timbale

G5	High Agogo

G5#	Low Agogo

A5	Cabasa

A5#	Maracas

B5	Short Whistle

C6	Long Whistle

C6#	Short Guiro

D6	Long Guiro

D6#	Claves

E6	High Wood Block

F6	Low Wood Block

F6#	Mute Cuica

G6	Open Cuica

G6#	Mute Triangle

A6	Open Triangle


Edit Random Probabilities

On this screen, you have the standard track settings that you can edit, as well a description of the track:

Tempo

Volume

Time Signature

Patch

MIDI Channel

Start and End Measure

Octave Displacement

The little boxes at the top surrounding the keyboard are where you enter the relative random probabilities for the notes you are interested in.  As you can imagine, the different notes on the keyboard correspond to the note value of the box above or below the key.   The note in the middle of the screen is, guess what?, middle C (unless you have fiddled with the Octave buttons already).

Use the tab keys or the mouse to move around to the different boxes.  They will be normalized by the computer to produce standard probabilities, in which the sum of the probabilities equals 1.  So, for example, if you pick 10 notes all with a probability of 20, you get the same probability distribution as if you picked the 10 notes all with a probability of 1 or 99.  The fun starts when you have different probabilities for each note, as one note may be favored more than another.

A value of 0, of course, means that note will not be played in your Track.

The higher the number, the greater the chance or odds that note or rhythm will be played in your track.  The different Probability Distributions on this screen let you play around with some standard probability functions.   The distributions only work for those notes which have a greater value than 0, so first select the notes you are interested in and then you can try the different probability functions.  Remember, however, that you do not have to select a distribution, you can simply put in your own values for the different notes.

On this screen you have six standard  Probability Distributions which you may wish to try.  It will operate on notes that have a value higher than 0.

HINT:  The Toggle button turns all the notes off or on to do a lot of selections at once.


Random Rhythm Probabilities

On this screen you enter the random probabilities for your rhythm selections.  They can consist of whole, half, quarter, eighth, sixteenth, or thirty-second notes.  Just use the cursor, Page Up/Down Keys, or the mouse to position the scroll bar.  The reason I used scroll bars instead of typing values is because I figured you'd be using the mouse by now.  Plus I like scroll bars.  You also have the six Probability Distributions if you wish to try them out.  They operate on rhythm selections that have a probability setting higher than 0.


Edit Conditional Probabilities

On this screen, you have the standard track settings that you can edit, as well a description of the track:

Tempo

Volume

Time Signature

Patch

MIDI Channel

Start and End Measure

Octave Displacement

On the top of this screen, the text boxes from the Edit Random Probability screen are replaced by check boxes.  In a check box, clicking the mouse on the box (or hitting the space bar) places a check in the box.  When the box is checked, another keyboard window appears below your current one.  This should be familiar from the Edit Random Probability screen, and is where you enter the numerical values for the note you just clicked on.  The check box note is the From note while the notes in the standard random probability window are the To notes.  Refer to the section Conditional Probability Description for more information.

Hit the OK button to accept your probabilities, or CANCEL to abort your selections (and turn off the check in the previous box).  To help you remember which notes you have selected, the Check Boxes automatically turn on to correspond with the note numbers you have entered in the Set Conditional Probabilities screen.  Think about it, in Conditional Probabilities it is possible to get into a dead end, since you may select some notes TO which in turn do not lead anywhere.  By automatically turning on the appropriate check boxes, I'm simply trying to help remind you of which notes to worry about.  If you don't enter anything in the check boxes that are automatically turned on, they will be turned off when you click on the main OK button (in case you love sudden stops in your music)!


Conditional Rhythm Probabilities

This is a little different than the Random Rhythm Probability screen, because I couldn't fit 36 scroll bars here.  So just type in a probability as before.  Remember, try to avoid dead ends!  The vertical columns are the FROM rhythms and the horizontal rows are the TO rhythms.

Conditional probabilities can be a pain, but they allow you to come up with nicer stuff (I think) if you have the patience to follow them through.  It's kind of like writing a computer program with a lot of GOTO statements, if you get my drift.


Tempo

This sets the speed of the song in beats per minute (bpm).  The range is from 10 (very slow) to 400 (faster than the fastest thrash metal).  Note, however, some sequencers only support up to about 250 bpm, so you will have to use excessive speed with caution.  Plus, it might worry your neighbors.

Be careful that you set the Tempo at discrete start and end measure boundaries.  For example, if you have measures 1 to 4 defined as 120 bpm, don't make another track from measures 3 to 8 with a tempo of 200 bpm.  This kind of thing is frowned upon by MIDI sequencers, and while you may be able to play it, your MIDI file may not be exportable to other sequecers.  It is perfectly acceptable to make another track from measures 5 to 8 with a tempo of 200 bpm, since this new tempo starts after the other track has finished (with it's corresponding tempo).


Description

Enter a description for the track, up to 50 characters long.


Time Signature

Enter the numerator and denominator of the time signature for the track.  You can pick any number from 1 to 99 for the numerator, but the denominator must be either 1, 2, 4, 8, 16, 32.  Also, bear in mind that your rhythm probability settings play a large part.  For example, even if you pick something wierd like 37/16 time, if you just use whole and half notes you probably won't get the feel of good old-fashioned 37/16 time.

As in the warning on the Tempo help topic, make sure that your Time Signature changes start at discrete measure boundaries.  For example, don't define measures 1 to 4 on a track as 4/4 time, then define measures 2 to 5 on another track as 7/8 time.  Split up your tracks to conform to discrete boundaries for Time Signature and Tempo changes.


Octave Displacement

These buttons allow you to extend the range of the notes output by plus or minus two octaves!  Use with caution, as very high notes (highest C at +2) may drive your pet dog crazy.  Using these Octave Displacements you have the full sonic territory necessary to derive Beethoven's 9th Symphony or Charlie Parker's solo break to Another Night in Tunisia, so get busy!


Measure Start and End

Start and End Measures

Believe it or not, this is where you input the Start and End Measures for the track.  The measures are inclusive, e.g. if Start = 1 and End = 4 the track starts at the 1st beat of the first measure and ends at the last bend of the 4th measure (right up to the start of the 5th measure).  Depending on your RHYTHM probability selections, however, it's possible that the last note may bleed over into the next measure.


Volume

While I was tempted to make the range from 0 to 11 a la Nigel Tufnel's famous Marshall Amp, I decided to stick with standard MIDI conventions for volumes from 0 (silence) to 127 (maxxed out).  Every volume in a track will have the volume that you set here, so what you are really setting is the relative volumes between tracks.  Also, some patches may be louder than others, so you may need to set the volume to balance out the tracks.

For more advanced volume (and Left to Right pan) settings, you should import the MIDI file generated into a good MIDI Sequencer program that allows velocity scaling and other niceties.


MIDI Channel

Select the MIDI Channel from 1 to 16.  Channel 10 is reserved for drums & percussion.  A MIDI Channel is simply a method for separating your sounds and tracks from each other.  Think of a TV Channel -- you may have forty channels coming in at once yet you can pick one of them and get a distinct signal.  MIDI pros are probably groaning over my terrible analogy, but you get the picture (whoops, sorry about that bad pun).


Patch

This is where you pick the sound you want played on this track.  You have 128 sounds provided by the General MIDI specification, which should be sufficient for most needs.  If you select Drums (the very last patch) the MIDI Channel changes to 10 (which is the drums & percussion channel).

Here is a listing of the sounds in order of their General MIDI patch number.  The last patch (Drums) isn't really in the General MIDI standard, I just added it for information only if you select MIDI Channel 10 or need a simpler way select Drums for your track.

  0	Acoustic Grand Piano

  1	Bright Acoustic Piano

  2	Electric Grand Piano

  3	Honky-tonk Piano

  4	Rhodes Piano

  5	Chorused Piano

  6	Harpsichord

  7	Clavinet

  8	Celesta

  9	Glockenspiel

 10	Music Box

 11	Vibraphone

 12	Marimba

 13	Xylophone

 14	Tubular Bells

 15	Dulcimer

 16	Hammond Organ

 17	Percussive Organ

 18	Rock Organ

 19	Church Organ

 20	Reed Organ

 21	Accordion

 22	Harmonica

 23	Tango Accordion

 24	Acoustic Guitar (nylon)

 25	Acoustic Guitar (steel)

 26	Electric Guitar (jazz)

 27	Electric Guitar (clean)

 28	Electric Guitar (muted)

 29	Overdriven Guitar

 30	Distortion Guitar

 31	Guitar Harmonics

 32	Acoustic Bass

 33	Electric Bass (finger)

 34	Electric Bass (pick)

 35	Fretless Bass

 36	Slap Bass 1

 37	Slap Bass 2

 38	Synth Bass 1

 39	Synth Bass 2

 40	Violin

 41	Viola

 42	Cello

 43	Contrabass

 44	Tremolo Strings

 45	Pizzicato Strings

 46	Orchestral Harp

 47	Timpani

 48	String Ensemble 1

 49	String Ensemble 2

 50	SynthStrings 1

 51	SynthStrings 2

 52	Choir Aahs

 53	Voice Oohs

 54	Synth Voice

 55	Orchestra Hit

 56	Trumpet

 57	Trombone

 58	Tuba

 59	Muted Trumpet

 60	French Horn

 61	Brass Section

 62	Synth Brass 1

 63	Synth Brass 2

 64	Soprano Sax

 65	Alto Sax

 66	Tenor Sax

 67	Baritone Sax

 68	Oboe

 69	English Horn

 70	Bassoon

 71	Clarinet

 72	Piccolo

 73	Flute

 74	Recorder

 75	Pan Flute

 76	Bottle Blow

 77	Shakuhachi

 78	Whistle

 79	Ocarina

 80	Lead 1 (square)

 81	Lead 2 (sawtooth)

 82	Lead 3 (calliope lead)

 83	Lead 4 (chiff lead)

 84	Lead 5 (charang)

 85	Lead 6 (voice)

 86	Lead 7 (fifths)

 87	Lead 8 (bass + lead)

 88	Pad 1 (new age)

 89	Pad 2 (warm)

 90	Pad 3 (polysynth)

 91	Pad 4 (choir)

 92	Pad 5 (bowed)

 93	Pad 6 (metallic)

 94	Pad 7 (halo)

 95	Pad 8 (sweep)

 96	FX 1 (rain)

 97	FX 2 (soundtrack)

 98	FX 3 (crystal)

 99	FX 4 (atmosphere)

100	FX 5 (brightness)

101	FX 6 (goblins)

102	FX 7 (echoes)

103	FX 8 (sci-fi)

104	Sitar

105	Banjo

106	Shamisen

107	Koto

108	Kalimba

109	Bagpipe

110	Fiddle

111	Shanai

112	Tinkle Bell

113	Agogo

114	Steel Drums

115	Woodblock

116	Taiko Drum

117	Melodic Tom

118	Synth Drum

119	Reverse Cymbal

120	Guitar Fret Noise

121	Breath Noise

122	Seashore

123	Bird Tweet

124	Telephone Ring

125	Helicopter

126	Applause

127	Gunshot

128	Drums


Probability Distributions

Using the various buttons provided, you can force the notes you have selected ( values greater than 0, remember?) to conform to one of six standard probability distributions:

Cauchy

Linear

Uniform

Gaussian

Exponential

Poisson

These distributions were created and defined with the help of Dodge & Jerse's book Computer Music: Synthesis, Composition, and Performance [Schirmer Books, 1985].


Gaussian Probability Distribution

The Gaussian distribution is more familiarly known as the normal distribution, and more popularly as the bell-curve.  It is especially popular with students who benefit from teachers curving grades (unless they're mean enough to curve downwards as well)!

It has the density function:

where [image] is the mean and [image] the standard deviation of the random variables.


Linear Probability Distribution

In this program, the linear distribution is programmed to favor lower values.  It has a probability density function of:

{   2(1  x ); 0  x  1;

f(x) = 	{   0; elsewhere

In this program it was simulated by simply taking the lesser of two uniformly distributed random numbers.


Uniform Probability Distribution

This distribution yields probabilities that are equally likely of occuring, as in the probabilities of a certain number coming up while rolling a die.  The mean of a uniform probability distribution of numbers between 0 and 1 is .5.  In this program, the use of the rand() function in C returns a uniformly distributed random number.


Cauchy Probability Distribution

The Cauchy distribution results in a graph that looks similar to the Gaussian (or normal) distribution, yet values far removed from the mean are more possible.  It is defined by the function:

In this program, the parameter [image] is the value that you assigned to the lowest note (or probability), so all the values computed will conform to that value.


Exponential Probability Distribution

This distribution is given by the function

, x > 0

The value for [image] is taken from the lowest note (or probability) that you assigned.  The values of a probability closer to 0 are more common in this type of distribution.  In this program it was simulated by taking the logarithm of a uniformly distributed random number.


Poisson Probability Distribution

The Poisson distribution yields integer values and the probability of drawing an integer j is:

 where j > 0 and [image] is the mean of the distribution.


File New (CTRL + N)

File - New (CTRL + N)

This will erase all of the current track settings so that you can start over again.  If you have made changes and haven't saved, you will be asked if you wish to save or not, or if you wish to abandon clearing the track settings.


File Open (CTRL + O)

File - Open (CTRL + O)

This will open up a previously saved file of track settings (extension .CMC).  You can either select via the mouse, tab, or cursor keys or type in a name.  The extension will be added automatically, so you do not need to type it.  If you have made unsaved changes to a file before requesting a File - Open you will be asked whether you wish to save now.


File Save (CTRL + S)

File - Save (CTRL + S)

This saves current track information to a file.  This function is only enabled when a file has been Saved As (with a name) or Opened previously, i.e. the main window has the words 'Aleatoric Composer' plus the full path and file name.


File Save As (CTRL + A)

File - Save As (CTRL + A)

This saves current track information to a file which you will name.  You do not need to type in an extension, the extension .CMC will be automatically added.  This file name will become your current work file, i.e. your title window should change to reflect this file name.


File Exit (ALT + F4)

File - Exit (ALT + F4)

This leaves the program.  If you have made any unsaved changes, you will be prompted to save now, don't save, or return to the program.


Edit Random Probabilities Menu Option

Track View for Random Probability Settings (CTRL + R)

This screen lists all the tracks that you have created or loaded from a file.  On this screen you have these options:

Edit a Track

Add a Track

Delete a Track

Generate a Song

Exit (OK)

Help brings up this screen


Edit Conditional Probabilities Menu Option

Track View for Conditional Probability Settings (CTRL + P)

This screen lists all the tracks that you have created or loaded from a file.  On this screen you have these options:

Edit a Track

Add a Track

Delete a Track

Generate a Song

Exit (OK)

Help brings up this screen


Who are you?

I'm a guitarist, keyboard tinkerer, and music software-writer wanna-be.  This is the first program that I have released to the public.  The others were just for my own use and a lot wierder than this one.

I have a Bachelor's degree in Nuclear Engineering from Georgia Tech, but I got tired of the industry (and they got tired of me I guess) and quickly moved into computer programming.  I'm currently (July, 1993) finishing my Master's degree in Computer Science at Temple University.  This program is my last requirement, actually.

Soon I'll be moving to Indiana University-Bloomington to begin my PhD studies in Computer Science and Cognitive Science (Artificial Intelligence).  I hope to continue my work in computer music there, so look for future releases.  If you register, I'll keep you posted anyway.

You can send me your thoughts and comments via Internet e-mail to christen@astro.ocis.temple.edu even though I'm leaving soon.  They'll keep my account open long enough to forward my mail to Indiana.  If it bounces back try christen@cs.indiana.edu.  I think that's what my account there will be called.  Or you can just send a letter to my permanent home (parents) address given in the Register screen.

If I get enough interested users, I'd like to set up a mailing list or site where we can trade MIDI files, CMC files, or interesting track and probability settings.


Add Button (Track View Screen)

Add a Track

If you wish to add a track, click on the Add button or hit the ALT and the A key (ALT + A) at the same time.  For a blank track in which you start from  scratch, make sure there is no track selected.  If there is, you can answer No to the box which asks if you wish to copy over that track's settings.  Answer Yes if you wish to copy the settings of an old track to modify for a new track.  For sorting purposes, the new description is overwritten by the track number, but you can enter a new description.  Be sure to make the new track different from the old one, as the computer may get confused when creating the song.


Delete Button (Track View Screen)

Delete a Track

If you don't like a track, select it and hit the Delete button or hit the ALT+D key combination.  This will remove the track from the list.


Generate Button (Track View Screen)

Generating a Song

This is where the fun really starts.  After you have made one or more tracks, you can use this button (or ALT+G key combination) to create a MIDI file which should play back through your MCI MIDI Sequencer (see Questions & Answers sections if you are having trouble).  If all goes well, a window should pop-up and your tune will start playing.  However, even if you don't hear anything, you will get a chance to save this as a MIDI file for later playback through the Windows' Media Player or your favorite sequencer.  You can even print out the sheet music through a notation program if you really like it!


OK Button

This just exits the screen and goes back to the main menu if you are on the Track View screen.  For other screens, it accepts your changes and exits to the previous window.

Conversely, the CANCEL button will abandon any changes you have made and take you to the previous window.


Edit Button - Track View Screen

Edit a Track

This button will take you to the appropriate (Random or Conditional Probabilities) screen for editing track settings.

Simply double-click on the track you wish to edit, or position the cursor bar on the track and click on the Track-Edit button or hit the ALT and the E key at the same time.


Potential Questions and Troubleshooting Tips

What is Aleatoric Composition

So what do I do now?

Why is no sound coming out?

Who is this program for?

Who are you?

How do I get drums to play?


How to Register

I'm offering registration of this program for the ridiculously low rate of US $1.  If you are from afar and don't have access to a $1 bill or US funds, send me something interesting of similar value from your country.  For example, stamps, coins, or paper money from your country would be neat and easy to send.  But don't send something like pickled herring (I'm a vegetarian).

When you register you will be eligible for reduced rates on my future programs, and I will inform you of any bug fixes (horrors!) or enhancements made to this program.

My permanent mailing address is:

Carl Christensen

2000 Dekalb Street

Norristown, PA  19401   USA

There should be a form in Windows Write format (look for register.wri) to make it easier on yourself.  Just load it up in Windows Write, print it out, and mail it to me.


References

While this program relies heavily on basic probability theory, there are so many books on the subject that I am at a loss to recommend any of them.  I'll just list books on Computer Music, programming, and related topics that I found useful:

Baggi, Denis, editor, Readings in Computer Generated Music, Los Alamitos, CA: IEEE Computer Society Press, 1992

A nice volume put out by the IEEE.  Has many different projects in computer music.

Balaban, Ebcioglu, Laske, editors, Understanding Music with AI, Cambridge, MA: MIT Press, 1992

This is a more recent work that doesn't really pertain much to this project.  It offers some interesting insights into the current research with music and Artificial Intelligence.  The kind of stuff I'd like to do someday.

Cage, John and Hiller, Lejaren, HPSCHD

Although it's probably out of print, this is the seminal recording in the area of Aleatoric Composition.  John Cage worked on it with Lejaren Hiller of the University of Illinois at Urbana-Champaign in the late 1960's.  See the issue of Computer Music Journal from Winter of 1992 (Vol. 16, Number 4) for a full description and interview with Lejaren Hiller.

Christian, Kaare, Borland C++ Techniques and Utilities, Emeryville, CA: Ziff-Davis Press, 1993

A really nice book on OOP and C++.  It really took a lot of the mystery out of creating a Windows program.

Computer Music Journal, published quarterly by the MIT Press

The state-of-the-art for computer music flaunts itself here, although at $10 an issue it's hardly standard fare for a grad student!

DeFuria, S. & Scacciaferro J., The MIDI Programmers Handbook, Redwood City, CA: M & T Publishing, 1989

This book is indispensible for understanding how MIDI works, although their examples are in Pascal and they favor the Macintosh (yuck!).

Dodge, Charles & Jerse, Thomas A., Computer Music: Synthesis, Composition, and Performance, New York: Schirmer Books, 1985

This book really guided me along with my idea for this project, and provide algorithms (although in ForTran) for the various probability density functions used in this project.

Entsminger, Gary, The Tao of Objects, Redwood City, CA: M & T Books, 1992

This is a great introduction to object-oriented programming and C++.  Although I put off learning OOP and C++ for awhile, now I can't imagine doing it any other way.

Hofstadter, Douglas R., Gödel, Escher, Bach - An Eternal Golden Braid, New York: Basic Books, 1979

Hofstadter, Douglas R., Metamagical Themas, New York: Basic Books, 1985

Hofstadter, Douglas R. and Dennett, Daniel C. (composers and arrangers), The Mind's I, New York: Basic Books, 1981

A trio from the guy who inspired me to get back into graduate school and get busy in the area of AI as well as music.  His books cover a slew of topics but generally center on trying to understand how the mind works, as well as how the computer can be used in this endeavor.

Winsor, P. & DeLisa, G., Computer Music in C, Blue Ridge Summit, PA: Windcrest/McGraw-Hill, 1991

More of a standard algorithm library, but offers useful information if you're developing a music program in C.


Technical Notes

Aleatoric Composer was written in Borland C++ version 3.1 over the Summer of 1993.  It was built on a homemade PC Clone which has a Cyrix 486/40 DLX chip and an ULSI Math Coprocessor, 8 MB RAM, a Diamond SpeedStar 24X SVGA card and KFC SVGA Monitor.  The program was compiled for the 80386 instruction set with floating-point emulation for Microsoft Windows version 3.1 and higher.

The format of the binary CMC files is:

1 byte for Probability type ( Conditional = 0xFA, Random = 0xFB )

1 byte to signal the start of a Track ( 0xFC )

50 bytes for the Description ( string of char's )

1 integer (2 bytes) each for the track Start Measure, End Measure, and Tempo

1 byte each for track Patch (0-128), Volume (0-127), Channel (1-16), Time Signature Num. (1-99), Time Signature Den. (1,2,4,8,16,32), Octave ( 2 = no change )

1 byte for Track Note Identifier ( 0xFD )

1 byte each for each non-zero note probability: Note From, To, and Prob Value

1 byte for Track Rhythm Identifier ( 0xFE )

1 byte each for each non-zero rhythm probability: Rhythm From, To, and Prob Value

In the program, the track, note, and rhythm values are each stored in a Sorted Array using Borland's BIDS templates ( BI_SVectorImp ).

The Help system was created using the Microsoft Help Compiler.

Program Limits

The maximum number of tracks currently allowed is 100.

The maximum number of note probabilities per track is 400.

The maximum number of rhythm probabilities per track is 36.


Disclaimers and Legal Stuff

This program comes with no warranty and is provided as-is'.  I will not be held responsible for any alleged damage you allegedly feel this program allegedly caused.  To protect yourself, you should run a computer virus scanner over the uncompressed files just to make sure.  Before this program left my computer, it was fully scanned for viruses and none were found.

This program remains the property of Carl M. Christensen and the DLL libraries remain the property of Borland, International.  You have my permission to evaluate this program for a 30-day period, at the end of which you must register the program.  By registering the program, you are licensed to use the program for any private or commercial ventures.  The MIDI files from this program can be freely distributed and used as long as the copyright information in the MIDI file is not tampered with or removed.  If the MIDI files from this program are used in a commercial application (such as a recording, or computer game), you must send me a copy of such recording (CD, tape, disk) as well as include my name and the name of the program somewhere on the credits.  If it hits the Billboard Top 100 I expect a 1% commision as well.

The program may not be sold for profit (except by me of course).  You may freely upload it to Bulletin Board Systems (BBS's), FTP sites, and give it to your friends and relatives for free.  It can be distributed on a CD-ROM or disk of other shareware, freeware, or public-domain programs provided such CD-ROM or disk charges only a nominal fee for duplication of media.

You may NOT package this program and sell it as a commercial software product, as that is my job, and I'm poor enough as a graduate student already.


Acknowledgments

I would like to thank my advisor, Paul Wolfgang of Temple University and Boeing, for support, assistance, and the opportunity to work on this project under his supervision.

I would like to thank Professors James F. Korsh and Robert M. Aiken of Temple University.  Dr. Korsh provided encouragement in my graduate studies as well as frank advice when needed.  Dr. Aiken as teacher proved to me that the best Intelligent Tutoring Systems are most definitely human, and as Graduate Director helped provide me with a scholarship to complete this project

I would like to thank Professors Greg Shannon, Michael Gasser, and Douglas Hofstadter of Indiana University for encouraging me in my efforts to apply for their PhD program.  I would also like to thank the members of the Graduate Committee at Indiana who accepted me into their PhD program.  Especially at a time when getting into a good PhD program in Computer Science is about as likely as generating a Bach fugue with my program!

Thanks to Borland for making a full, affordable compiler and providing great class libraries.

I would like to thank the Pennsylvania Higher Education Assistance Agency and the United States Government for providing Student Loans that enable people to go to college.  I literally couldn't have done it without you, and when I finish my PhD, I look forward to our monthly communications.

Finally, I would like to thank my parents.  Were it not for them, I most definitely wouldn't be here today!