With the help of Ted Ross I wrote a music program for the IBM 701 in 1955. The plan was simple — a loop would iterate until it was time to flip one of the sense lamps on the console. This loop duration set the frequency of the note. An outer loop would repeat this for the proper note duration, and the outermost loop would step thru a table of note frequencies and durations. The result was a square wave which is actually a rather pleasing sound. This was the state of the art as we knew it for a number of years. We tried some Bach and Mozart and all agreed that the medium worked for Bach but not Mozart. Our best performance was Bach’s Partita for solo violin. Others had already done this stunt. Perhaps the music for the Jonniac preceded us. According to this Turing did music for the Ferranti Mark I in 1951.
The only special hardware required was a wire from the sense lamp in the console to the speaker. Debugging was thus interactive but available only in brief minutes when operators were setting up for new production jobs. A few debug shots per evening might be expected. The program was not more than a few cards and we opted for one note per card to represent the music. Transcription to digital form thus consisted of choosing notes from piles of cards laid out like a keyboard, and other cards which controlled durations. We debugged short portions per debug shot. When things were finally working we recorded onto 45 RPM vinyl disk.
When the 7090 arrived 6 years later it was at least 7 times faster and it occurred to me that it might be possible to perform multi-part music. I tried for three part. The plan elaborated on that of the 701; figure out which of the three notes should next transition, wait (loop) that long, flip the appropriate external bit and fall to the outer loop to time the duration of the three note chord. The time to figure out the next transition was significant and could not be ignored and indeed it might already be “past due” whereupon you would take the next step and try to catch up. All of this code was self aware of its execution time as there was no clock hardware available; instruction times were specified. The sound was horrid; muddy and worse than mere noise; scarcely a hint of pitch. I think that the problem could be described as inter modulation distortion. The ear will put up with any particular set of harmonics for a note, but the interactions between them, due, I suppose, to the late transitions, was too much. The total chord duration was right which suggested that the code was running as designed; the design was kaput.
About a year later I visited the IBM lab at Mohansic NY. As I entered there was a 704 playing four part christmas carols. The 704 was scarcely faster than the 701. The sound was rich and satisfying. I was mortified. The good news was that watching the console lights immediately revealed the trick; it was not very profound. The 36 bit accumulator was divided into three 12 bit fields, one for each of three voices, and a constant was added to the accumulator at constant rapid rate for the duration of the chord. The constant was likewise divided into three corresponding fields. An index register similarly incremented provided the fourth voice and yet another index register controlled the duration. The frequency of respective overflows was the frequency of the notes. The signals that drove the lamps that displayed the accumulator were available externally. Among those signals were those that flipped upon overflow. The resulting sound was very satisfying!
This was a contravariant-covariant transformation of the problem. In the original 701 formulation of the problem the pitch control information was duration between cycles of the note whereas in the 704 scheme the note information was frequency. That possibility had entirely escaped me.
Today, 2013 Jan 5, I visited the CHM where Peter Samson demonstrated his program that performed 4 part music on the PDP-1. The PDP-1 has a 5-μsec memory and is about twice as fast as the 704 but the 704 has more commodious registers than the PDP-1. Samson’s music program performed the same logic but on each inner cycle copied the sign of each accumulator into a console display light. Accumulators are in memory which makes the timing close. The music sounded very good! The program performed and I heard it one night as I wandered about the MIT campus. The 704 was a much earlier tube machine but I heard the 704 music after the 7090 had arrived at Livermore. I do not know which 4 part music came first.