[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference napalm::commusic_v1

Title:* * Computer Music, MIDI, and Related Topics * *
Notice:Conference has been write-locked. Use new version.
Moderator:DYPSS1::SCHAFER
Created:Thu Feb 20 1986
Last Modified:Mon Aug 29 1994
Last Successful Update:Fri Jun 06 1997
Number of topics:2852
Total number of notes:33157

1097.0. "PDP 11/23 Sound Synthesis and Programs" by ANGORA::JANZEN (Tom LMO2/O23 DTN296-5421) Thu Dec 24 1987 14:13

    I couldn't find the PDP11 music note I thought there was, so here
    it is .
    I have made a PDP-11/23 (not a +) with an AAV11-C 12-bit D/A running 
    RT11 5.4B play 4-part
    wave-table synthesis music at 7.9 kHz sampling rate.  I have entered
    the first 12 bars of the Rite of Spring introduction (you can
    hear the difference between bassoon and clarinet and horn),
    the prelude from the G major cello suite of Bach, and misc. other
    stuff of mine and Jingle Bells.  If you want to visit and hear it
    at LMO2 at 111 Locke Marlboro, after 5PM, ask me know in advance.
    I have a dinky amp and a pillow speaker, but you don't have
    to be prone to hear it. 8-).
    The program is based on an example in the Eckhaus and Morris
    Minicomputer Systems, but made easier to use for different
    tunes, and multi-timbral.
    It would now be possible for me to develop scores in text form
    (actually in MACRO) elsewhere, and test the composition
    program on the 11, even though it is not high-fidelity (but
    it certainly improves when you turn off the line-time clock! 8-)
    Later I might make envelope control or at least dynamic control,
    with a number for shifting the sample to the right to make it
    quieter.
    If I cut the number of voices, the sample rate would rise, so I
    might.  
    I use macros and repeat/replace blocks to shorten the scores.
    I got the wavetables from the Pascal program I posted.  I got
    the harmonic weightings from the Seashore book on psychology
    of music.  I submitted some of this for COMMUSIC IV.
    One of the interesting things for me to look at in sound 
    synthesis, is synthesizing woodwind multiphonics by
    audio-frequency trills and tremoli between wide-ly spaced notes.
        Tom
T.RTitleUserPersonal
Name
DateLines
1097.1Are you torturing yourself for art's sake?MAY14::BAILEYSteph BaileyThu Dec 24 1987 15:2210
    How much more do you think you could get out of an 11/73 or an 11/83?
    (How many more voices, or how much great a rate).
    
    Is the AAV11-C a DMA driven converter?  (I suppose not, since you have
    no time base listed in your configuration)
    
    Sounds like fun.
    
    Steph
    
1097.2How about a VAXlab?PLDVAX::JANZENTom LMO2/O23 DTN296-5421Thu Dec 24 1987 16:0134
    >< Note 1097.1 by MAY14::BAILEY "Steph Bailey" >
>                -< Are you torturing yourself for art's sake? >-
Do you know any other way to make art? 8-)
    I probably won't make any serious music on it (I might, especially
    if a solo playing 30 notes/second can have a ca. 50kHz sampling
    rate (close guess); i'm attracted to the theoretical and am learning
    a lot tracing through the articles I've read for 15 years about
    the concrete problems of synthesis.  Every day you people post
    complaints about the way the manufacturer or your hardware
    solved these problems for economy, speed (for enough bandwidth and
    voices), and ease of use by people less bright and technical than
    you.  
>
>    How much more do you think you could get out of an 11/73 or an 11/83?
a 73 is 3X a 23+, which probably runs like a 23 (but on Q22), giving
    ca. 12 voices at 8kHz, or 4 voice at 24kHz.
    An 83 is 2X a 73, maybe including the PMI, so an 83 might do
    6*4, 24 voices with this program at 8kHz, or 6 voices @ 32kHz.
    
    >    (How many more voices, or how much great a rate).
>    
>    Is the AAV11-C a DMA driven converter?  (I suppose not, since you have
>    no time base listed in your configuration)
No it is interrupt, but I use programmed mode.  I don't have a programmable
    clock; I just shove the numbers in there as fast as the program
    can run.  That's why I would have to re-tune a different program for
    duets or solo that ran faster.    
>    Sounds like fun.
Using it to verify an automatic  
    composition program (a program that composes without
    excessive intervention) would be a publishable activity.
    >    Steph
	I might try to implement FM on it.
    Tom
1097.311-2-2-2-2-23 23 23 23 ANGORA::JANZENTom LMO2/O23 DTN296-5421Mon Dec 28 1987 11:542
    I'm going to try to do sampling on it next.
    Tom
1097.4interestin.JON::ROSSwe is wockin'....Mon Dec 28 1987 12:5612
    
    but but....
    
    what low pass filter do you have on the output(s)
    of the DAC?
    
    thats 3Khz bandwith or so? whats a car radio?
    (Im not complaining)
    
    ron
    
    
1097.5PLDVAX::JANZENTom LMO2/O23 DTN296-5421Mon Dec 28 1987 14:2117
    >< Note 1097.4 by JON::ROSS "we is wockin'...." >
>                                -< interestin. >-
>    what low pass filter do you have on the output(s)
>    of the DAC?
    Don't need one.  The cassette recorder incidentally filters out
    the high frequency transition noise, and the EQ at home cleans it
    up some more.  I will need a strategy for sampling.  Probably 
    pre-filter at home.  Noise on the line could alias, tho.
    	Sampling will be at about 80kHz maybe
>    thats 3Khz bandwith or so? whats a car radio?
Closer to 4kHz
A duet program should be closer to 7Khz
A solo program maybe 15 kHz BW.
An AM radio is roughtly 5kHz
            >    ron
Tom (ex-FCC 3rd class/element 9 (the elements are all different now)
     commerical DJ but forgetting all of it)
1097.6dynamics work now, sort ofMORRIS::JANZENTom LMO2/O23 296-5421Wed Mar 02 1988 18:256
    I made dynamics work with an ASH instruction.  i lost 1/6 of the
    bandwidth, and the pitch changes as the numbers of shifts changes.
    I could do a complementary number of shifts to balance the time.
    The ASH is on samples individually before adding, so different voices
    in a quartet could have different loudnesses.
    TOm
1097.7just intonation for computer musicPLDVAX::JANZENTom LMO2/O23 296-5421Mon Mar 07 1988 12:3532
1 ! here is a program that prints out frequencies for a just intonation
    scale of 21 notes.  For the computer (cf. base note), the frequency
    of middle c (261.625) was replaced by the skip increment for middle
    c, 2071.
    190 FOR n = -3 TO 3 STEP 1
200 c=1*(2**n)*261.625
210 csharp=c*5/3*5/4*1/2
220 dflat=c*4/3*4/5
230 d=c*9/8
240 dsharp=c*15/8*5/4*1/2
250 eflat=c*4/5*3/2
260 e=c*5/4
270 esharp=c*5/3*5/4*1/2*5/4
280 fflat=c*2*4/5*4/5
290 f=c*4/3
300 fsharp=c*5/4*9/8
310 gflat=c*4/5*3/2*3/2*4/5
320 g=c*3/2
330 gsharp=c*5/4*5/4
340 aflat=c*2*4/5
350 a=c*5/3
360 asharp=c*3/2*15/8*5/4*1/2
370 bflat=c*3/2*3/2*4/5
380 b=c*15/8
390 bsharp=c*5/4*5/4*5/4
400 cflat=c*4/5*4/5*3/2*2
410 print "c,csharp,dflat,d,dsharp,eflat,e,esharp,fflat,f,fsharp,gflat,g,gsharp,";
420 print  "aflat,a,asharp,bflat,b,bsharp,cflat"
430 print c;csharp;dflat;d;dsharp;eflat;e;esharp;fflat;f;fsharp;gflat;g;gsharp;
440 print aflat;a;asharp;bflat;b;bsharp;cflat
450 NEXT n
500 end
1097.8floating point is the keyANGORA::JANZENTom LMO2/O23 296-5421Mon Mar 14 1988 18:598
    Well, I learned how to use the floating instruction set well enough
    to write a reciprocal function for FORTRAN, so i can use this knowledge
    to make dynamics/envelopes, but probalby on a mono synth program.
    A mono program would have sufficient bandwidth to reveal the finesse
    I was adding in features, e.g. portamento, envelopes, evolving
    formant, reverb, FM synthesis, whatever I have time for in the next
    2 years.
    Tom
1097.9slow arithmetic impossible in 4 voicesPLDVAX::JANZENTom LMO2/O23 296-5421Thu Mar 17 1988 15:1013
    Well,
    arithmetic shifts could change dynamics, but only by 6dB steps
    and with wandering pitch (as the number of shifts changed).
    the extended instruction set MUL integer MUL could change
    dynamics on 256 increments (in my implementation), but
    HALVED the throughput.  The rite of spring sounded like
    the Dirge of Winter.
    The FP11 floating point option also could change dynamics
    finely, and ALSO halved the bandwidth.
    Therefore, I will develop a solo program to get bandwidth
    back by not servicing 3 other voices, and implement floating
    point dynamics and envelopes on that.
    Tom
1097.10Trade memory for speed.CTHULU::YERAZUNISHiding from the Turing PoliceThu Mar 17 1988 20:3914
    How about using a lookup table instead of a shift or multiply
    instruction? 
    
    Just build a .BYTE table with 256 entries, and have one such table for
    each dynamics level you wish to be able to portray IN THE CURRENT
    PIECE.  All the expensive computations are done at compile time,
    not at run time- runtime's just an indexed indirection operation-
    and takes constant time on an 11 (since you can't page fault an
    PDP-11  :-) )
    
    It'll hog memory, but if you've got memory to spare...
    	
    	-Bill 
            
1097.11continuous dynamics => envelope controlTIGER::JANZENTom LMO2/O23 296-5421Fri Mar 18 1988 11:428
    Originally, I had four waves, so there would have been 4 waves *
    #dynamci levels.  Not undoable, but, the reason it's no good is:
    I am only trying to do dynamcis in order to do envelopes, and envelopes
    need continuous range of levels, not steps as you propose.  So I
    retreated to a solo program with floating point and will report
    on it when I have a chance to run it.
    Thanks
    Tom
1097.12just isn't working now, eitherTIGER::JANZENTom LMO2/O23 296-5421Fri Mar 18 1988 16:263
    I give up on dynamics.  It's just too slow.  I'll try make the
    just intonation work.  
    Tom
1097.13just intonation on pdp11 worksPLDVAX::JANZENTom LMO2/O23 296-5421Sun Mar 20 1988 18:3212
    Just intonation works, but only over about 4 octaves, because the
    current program allows only a byte pointer; there are 21
    pitches/octave; the byte pointer is into pitch increments that are
    words, leaving 128 note positions.  
    As it is, I had to eliminate the sign-extension in MOVB src,R
    to get it to work.
    I don't consider it worth while changing the whole program to 
    accomate more for just experiments.
    Just intonation really is frigid sounding, isn't it?
    Equal temperament has a built-in flange.
    
    Tom
1097.14It makes organs sound nice.BOLT::BAILEYSteph (stef') BaileySun Mar 20 1988 19:199
    Re: Just intonation.
    
    I think it sounds great.  It certainly depends upon the harmonic
    content of your sound, though.
    
    If you want it to sound like crap, all you have to do is change keys,
    like the baroque composers did.
    
    Steph
1097.15MORRIS::JANZENTom LMO2/O23 296-5421Mon Mar 21 1988 12:2417
    >< Note 1097.14 by BOLT::BAILEY "Steph (stef') Bailey" >
>                        -< It makes organs sound nice. >-
>
>    Re: Just intonation.
>    
>    I think it sounds great.  It certainly depends upon the harmonic
>    content of your sound, though.
>    
>    If you want it to sound like crap, all you have to do is change keys,
>    like the baroque composers did.
>    
>    Steph
I wouldn't expect it to sound awful, because in my scale any key with
    only single accidentals (no double flats, double sharps,)
    will sound the same as another.  That's why I have 21 notes/8va.
    C,C#,Db,D,D#,Eb,E,E#,Fb,F,F#,Gb,G,G#,Ab,A,A#,Bb,B,B#,Cb
    Tom
1097.16quarter tonesANGORA::JANZENTom LMO2/O23 296-5421Mon Mar 21 1988 16:463
    I wrote a quarter-tone scale.  I expect it to work but have to write
    some music for it.
    Tom
1097.17Noise maker with simple filterANGORA::JANZENTom LMO2/O23 296-5421Tue Apr 12 1988 16:4754
1 ! NOISE.BAS BY THOMAS E. JANZEN 4-12-88; GENS RANDOM NUMBERS TO MAKE A
2 ! NOISE WAVE, THENS FILTER IT WITH "BRACKET" AND CREATES FILTER.MAC WAVE FILE
3 ! AND FILTER.GRL DECGRAPH LOAD FILE.
4 !$ASS/USER_MODE SYS$COMMAND SYS$INPUT
5 !$GRAPH/NOINT/LOAD/MONO/SIX=NOISE NOISE ANT::STD:[JANZEN]WAVE
10 open 'NOISE.MAC' FOR OUTPUT AS FILE #1%,&
	ORGANIZATION SEQUENTIAL,ALLOW WRITE,ACCESS WRITE
20 open 'NOISE.GRL' FOR OUTPUT AS FILE #2%,&
	ORGANIZATION SEQUENTIAL,ALLOW WRITE,ACCESS WRITE
30 restore #1
40 restore #2
100 RANDOMIZE
110 declare integer wave(256),smoothed(256)
115 PRINT "BRACKET: ";
120 INPUT BRACKET
130 for line%=1 to 256
240 ball% = fix(rnd*256)-128
250 wave(line%)=ball%
400 next line%
500 ! smoothing
510 for element=1 to 256
515 smoothed(element)=0
517 ACCUM=0
520 for index=-bracket to bracket
522 POSITION=element+index
523 if (POSITION < 1) then POSITION=256-POSITION
525 if (POSITION > 256) then POSITION=POSITION-256
530 ACCUM=WAVE(POSITION)+ACCUM
600 next index
610 ACCUM=ACCUM/(2*BRACKET+1)
620 SMOOTHED(ELEMENT)=ACCUM
700 next element ! what if pointer is negative?
900 for ROW=1 to 32
910 print #1, "	.WORD	";
920 for column=1 to 8
930 print #1 using "######",smoothed((row-1)*8+column);
940 print #1, ",";
950 next column
960 print #1
970 next row
1000 PRINT #2,  "!--------------------------------------"
1010 PRINT #2,  "!  DECgraph Load File Format 1"
1020 PRINT #2,  "TITLE FILTERED NOISE"
1030 PRINT #2,  "SUBTITLE BRACKET=";BRACKET
1040 PRINT #2,  "Y_UNITS ONES"
1050 PRINT #2,  "X_UNITS ONES"
1060 PRINT #2,  "X_DATA_TYPE NUMERIC"
1070 PRINT #2,  "HORIZONTAL_LABEL Sample Point Number"
1080 PRINT #2,  "VERTICAL_LABEL Amplitude"
1900 for ROW=1 to 256
1930 PRINT #2,  "	",ROW,smoothed(row)
1970 next row
2130 close #1%
2135 close #2%
1097.18synth.macANGORA::JANZENTom LMO2/O23 296-5421Tue May 10 1988 17:0197
	.TITLE SYNTH	
	;PROGRAM BY IAN MACRAE, DAVE WEILER AND BOB MORRIS
	;MODIFIED 11-30-87 TOM JANZEN NO CLOCK 11/12 W/ AAV11-C
	;MODIFIED TO BE POLY-PHONIX (DIFFERENT WAVFORMS) T JANZEN
	.PSECT	SYNTH
	.MCALL	.EXIT
	.SBTTL	/DEFINTIONS/
DAC=170444			;D/A CONVERTER
RPT=400+100			;--- REPEAT, OVERFLOW
NVOX=4				;# VOICES IN SONG TABLE
;DATA AREA
DURATN:	1			;TIME LEFT TO PLAY THIS NOTE
NOTE:	NOTES			;ADDRESS OF NEXT NOTE TO BE PLAYED
VINC:	.BLKW	NVOX		;NOTE INCREMENT  (UPDATED EACH NOTE)
WAVPTR:	.BLKW	NVOX		;WAVETABLE INDEX (UPDATED EACH SAMPLE)
;
	.SBTTL	/INCLUDE WAVA, WAVB, WAVC, WAVD/
	;THE SCORE IS OF THE FORM:
	;.BYTE	DURATION,PITCH_ADDRESS_A, 
	; PITCH_ADDRESS_B, PITCH_ADDRESS_C, PITCH_ADDRESS_D
	; WHERE PITCH_ADDRESS POINTS TO EVEN BYTE OFFSETS IN  SCALE
	; PUT A ZERO BYTE AFTER LAST NOTE TO END THE SCORE.

	; THE FOUR WAVES ARE IN THE SAME FORMAT: 256 BYTES, 2'S COMPLEMENT
	; AROUND 0 DESCRIBING THE WAVE SHAPE.
WAVEA:	.INCLUDE	/WAVA/
WAVEB:	.INCLUDE	/WAVB/
WAVEC:	.INCLUDE	/WAVC/
WAVED:	.INCLUDE	/WAVD/
	; THE SCALE STARTS WITH A 0 WORD FOR A REST, AND THEN HAS 
	; WORDS THAT DETERMINE PITCH.  THESE WORDS ARE THE INCREMENT
	; ADDED TO THE WAVE POINTER, MOD-256, TO GET DIFFERENT PITCHES
	; BY SKIPPING DIFFERENT NUMBERS OF SAMPLES IN THE WAVE TABLES
	.RADIX	8
	.SBTTL	/PROGRAM BODY/
SYNTH::				;WAIT114 USEC CALL ENTRY
				;THE 11/23 IS SO SLOW, IT PLAYS
				;5/6 THE SAMPLING RATE REQUIRED
				;WITH NO DELAY AT ALL
				;SO THE DELAY IN HERE WAS DELETED
	CALL	ENTRY
	BR	SYNTH

ENTRY:	DEC	DURATN		;TIME FOR NEW NOTE?
	BNE	SAMPLE		;NO. SAME NOTE
	MOV 	NOTE,R0		;NEXT NOTE
	TSTB	(R0)		;END?
	BNE	1$

	BR	CUT

1$:	MOVB	(R0)+,DURATN+1	;SET DURATION (HIGH BYTE, LOW-0)
				;I.E., DURATION*256=#CLOCKS DURATION
	MOV	#VINC,R2	;SET INCREMENTS FOR NEW NOTE
	.REPT	NVOX		;4 VOICES, SO NVOX=4
	MOVB	(R0)+,R1	;PULL NOTE FROM TABLE
;	BIC	#^B1111111100000000,R1	;ELIMINATE SIGN EXTEND OF MOVB,RN
;I REMOVED THE PREVIOUS LINE BECAUSE IT WAS SO SLOW IT WAS MAKING CLICKS
;BETWEEN NOTES RETURN; THIS PROGRAM IS LIMITED TO SCALES OF 64 NOTES.
;	CLR	<WAVPTR-VINC>(2)	;CLEAR ENTRY IN WAVETABLE POINTER TABLE
;I DECIDED I COULD ELIMINATE THE CLICK AT NOTE START 
;BY NOT CLEARING THE WAVE POINTER FROM THE PREVIOUS NOTE - T. JANZEN
	MOV	INCR(R1),(R2)+	;SET INCREMENT TO BE USED IN UPDATING
	.ENDR			;WAVETABLE POINTER TABLE
	MOV	R0,NOTE		;SAVE FOR LATER USE
				;SYNTHESIZE NEXT OUTPUT SAMPLE
SAMPLE:	CLR	R1		;CLEAR ACCUMULATOR
	MOV	#WAVPTR,R2	;POINTER TO BLOCK OF 4 WAVETABLE POINTERS
				;A "MOVB SRC.Rn" SIGN EXTENDS INTO 
				;THE UPPER BYTE, AND THERE IS NO "ADDB".
				;THEREFORE, MUST USE TECHNIQUES AS SHOWN BELOW
	MOV	#VINC,R5
	.IRPC	WW,<ABCD>	;FOR i = 1,2,3,4
	MOV	#WAVE'WW,R3	;START OF WAVE TABLE
	ADD	(R5)+,(R2)+	;UPDATE i'th PTR IS BYTE OFFSET
	MOVB	-1(R2),.+8.	;HIGH BYTE OF i'th PTR IS BYTE OFFSET
				;	OF DESIRED SAMPLE IN WAVE TABLE
				;THIS IS SELF-MODIFYING CODE.  THE X OFFSET
				;AFTER THE NEXT MOVB IS MODIFIED BY THE
				;PREVIOUS MOVB.
	MOVB	0(R3),R4	;SRC = #WAVE + BYTE OFFSET OF DESIRED SAMPLE
	ADD	R4,R1		;ACCUMULATE i'th SAMPLE
	.ENDM
	;USE MAXIMUM 12-BIT SIGNAL-TO-NOISE RATIO OF CONVERTOR TO
	;SUPPRESS MISC. NOISE - T. JANZEN
	;ALSO HAD TO FIX BINARY CODE FOR AAV-11C CONVERTOR
	ASL	R1
	ASL	R1
	NEG	R1		;PREPARE TO SUBTRACT SAMPLE FROM 2048(10)
	ADD	#^O4000,R1	;TO CENTER AROUND ZERO OFFSET
	MOV R1,@#DAC		;OUTPUT i'TH SAMPLE TO D/A CONVERTER
	RETURN

CUT:	MOV #0,@#DAC		;OUTPUT i'TH SAMPLE TO D/A CONVERTER
	.EXIT			;RETURN TO MONITOR

	.END	SYNTH
1097.19sacre.macANGORA::JANZENTom LMO2/O23 296-5421Tue May 10 1988 17:03159
;Stravinsky Rite of Spring Introduction
;WAVA = BASSON
;WAVB = CLARNT
;WAVC =CLARNT
;WAVD =HORNP
	.RADIX	10
	QUARTR=:60		;QUARTER NOTE
	HALF=:QUARTR*2
	TRIPLT=QUARTR/3	;EIGHTH TRIPLET
	SXTNTH=:QUARTR/4	;SIXTEENTH NOTE
	QUINT6=:QUARTR/5	;QUINTUPLET SIXTEENTHS
	SEXTUP=:QUARTR/6	;SEXTUPLET SIXTEENTHS
	EIGHTH=:QUARTR/2	;EIGHTH NOTES
	NONET=:QUARTR/9		;NONETUPLETS SIXTEENTHS
	GRACE=:2		;GRACE NOTE
	DODE=:QUARTR/12		;GROUP OF TWELVE THIRTYSECONDS
	REST=:0
	.MACRO	SOLO,	RHYTHM,PITCH
	.BYTE	RHYTHM,PITCH,0,0,0
	.ENDM
	.MACRO	DUET,	RHYTHM,BASSON,HORN
	.BYTE	RHYTHM,BASSON,0,0,HORN
	.ENDM
	.MACRO	TRIO,	RHYTHM,BASSON,CLAR1,CLAR2
	.BYTE	RHYTHM,BASSON,CLAR1,CLAR2,0
	.ENDM
	.MACRO	QUARTT,	RHYTHM,BASSON,CLAR1,CLAR2,HORN
	.BYTE	RHYTHM,HORN,CLAR1,CLAR2,BASSON
	.ENDM
NOTES::
	;M1
	SOLO	QUARTR*2,CN5
	SOLO	GRACE,BN4
	SOLO	GRACE,CN5
	SOLO	SXTNTH,BN4
	SOLO	SXTNTH,GN4
	SOLO	SXTNTH,EN4
	SOLO	SXTNTH,BN4
	SOLO	QUARTR,AN4
	SOLO	EIGHTH,REST
	SOLO	TRIPLT,CN5
	SOLO	GRACE,BN4
	SOLO	GRACE,CN5
	SOLO	TRIPLT,BN4
	SOLO	TRIPLT,GN4
	SOLO	TRIPLT,EN4
	SOLO	TRIPLT,BN4
	;M2
	DUET	SXTNTH,AN4,C$4
	DUET	SXTNTH,REST,C$4
	DUET	EIGHTH,CN5,C$4
	DUET	GRACE,BN4,C$4
	DUET	GRACE,CN5,C$4
	DUET	TRIPLT,BN4,C$4
	DUET	SEXTUP,BN4,DN4
	DUET	EIGHTH,AN4,DN4
	DUET	EIGHTH,DN5,DN4
	DUET	GRACE,GN4,DN4
	DUET	EIGHTH,AN4,DN4
	;M3
	DUET	QUINT6,CN5,DN4
	DUET	GRACE,BN4,DN4
	DUET	GRACE,CN5,DN4
	DUET	QUINT6,BN4,DN4
	DUET	QUINT6,GN4,DN4
	DUET	QUINT6,EN4,DN4
	DORET	QRINT6,BN4,DN4
	DUET	<<QUARTR*5>/2>,AN4,C$4
	SOLO	EIGHTH,CN5
	;REHEARSAL 1
	;M4
	TRIO	QUARTR,CN5,Db4,Ab3
	TRIO	TRIPLT,CN5,Db4,Ab3
	TRIO	GRACE,BN4,Db4,Ab3
	TRIO	GRACE,CN5,Db4,Ab3
	TRIO	NONET,BN4,Db4,Ab3
	TRIO	NONET,GN4,CN4,GN3
	TRIO	NONET,GN4,CN4,GN3
	TRIO	GRACE,CN5,CN4,GN3
	TRIO	TRIPLT,Bb4,CN4,GN3
	;M5
	TRIO	TRIPLT,AN4,CN4,GN3
	TRIO	GRACE,CN5,CN4,GN3
	TRIO	TRIPLT,Bb4,Cb4,Gb3
	TRIO	TRIPLT,AN4,Cb4,Gb3
	TRIO	EIGHTH,Gb4,Bb3,FN3
	QUARTT	SXTNTH,Gb4,Bb3,FN3,CN5
	TRIO	SXTNTH,Gb4,Bb3,FN3
	TRIO	TRIPLT,Gb4,Bb3,FN3
	TRIO	TRIPLT,Gb4,AN3,EN3
	TRIO	TRIPLT,Gb4,Ab3,Eb3
	;m6
	TRIO	TRIPLT,F$4,GN3,DN3
	TRIO	TRIPLT,D$4,F$3,C$3
	TRIO	GRACE, F$4,F$3,C$3
	TRIO	TRIPLT,EN4,FN3,CN3
	TRIO	TRIPLT,C$4,EN3,BN2
	TRIO	GRACE, EN3,EN3,BN2
	TRIO	TRIPLT,DN4,Eb3,Bb2
	TRIO	TRIPLT,BN3,DN3,AN2
	TRIO	QUARTR,BN3,C$3,G$2
	TRIO	EIGHTH,0,C$3,G$2
	TRIO	EIGHTH,CN5,C$3,G$2
	;M7
	TRIO	QUARTR,CN5,C$3,G$2
	TRIO	GRACE,BN4,C$3,G$2
	TRIO	GRACE,CN5,C$3,G$2
	TRIO	SXTNTH,BN4,C$3,G$2
	TRIO	SXTNTH,GN4,C$3,G$2
	TRIO	SXTNTH,EN4,C$3,G$2
	TRIO	SXTNTH,BN4,C$3,G$2
	;M8
	TRIO	EIGHTH,AN4,C$3,G$2
	TRIO	EIGHTH,CN5,C$3,G$2
	TRIO	GRACE,BN4,C$3,G$2
	TRIO	GRACE,CN5,C$3,G$2
	TRIO	TRIPLT,BN4,C$3,G$2
	TRIO	SEXTUP,BN4,DN3,AN2
	TRIO	SEXTUP,AN4,DN3,AN2
	TRIO	TRIPLT,AN4,D$3,A$2
	TRIO	EIGHTH,DN5,D$3,A$2
	TRIO	GRACE,GN4,D$3,A$2
	TRIO	EIGHTH,AN4,DN3,AN2
	;M9
	TRIO	QUINT6,CN5,C$3,G$2
	TRIO	GRACE,BN4,C$3,G$2
	TRIO	GRACE,CN5,C$3,G$2
	TRIO	QUINT6,BN4,C$3,G$2
	TRIO	QUINT6,GN4,C$3,G$2
	TRIO	QUINT6,EN4,C$3,G$2
	TRIO	QUINT6,BN4,C$3,G$2
	TRIO	HALF,AN4,C$3,G$2
	;REHEARSAL 2 
	;M10
	QUARTT	EIGHTH,AN4,C$3,G$2,C$4
	QUARTT	EIGHTH,AN4,C$3,G$2,F$4
	QUARTT	GRACE,AN4,C$3,G$2,C$4
	QUARTT	GRACE,AN4,C$3,G$2,F$4
	QUARTT	TRIPLT,AN4,C$3,G$2,D$4
	QUARTT	TRIPLT,AN4,C$3,G$2,C$4
	QUARTT	TRIPLT,AN4,C$3,G$2,F$4
	;M11
	QUARTT	GRACE,AN4,C$3,G$2,C$4
	QUARTT	GRACE,AN4,C$3,G$2,F$4
	QUARTT	TRIPLT,AN4,C$3,G$2,D$4
	QUARTT	TRIPLT,AN4,C$3,G$2,C$4
	QUARTT	SEXTUP,AN4,C$3,G$2,F$4
	QUARTT	SEXTUP,AN4,C$3,G$2,0
	QUARTT 	TRIPLT,AN4,C$3,G$2,0
	QUARTT	SEXTUP,AN4,C$3,G$2,G$4
	QUARTT	SEXTUP,AN4,C$3,G$2,D$4
	QUARTT	SEXTUP,AN4,C$3,G$2,F$4
	QUARTT	SEXTUP,AN4,C$3,G$2,C$4
	;M12
	QUARTT	HALF*2,AN4,C$3,G$2,D$4
	.BYTE	0		;MARKS END OF SONG
	.EVEN
	.RADIX	8
	.END
1097.20oboe.macANGORA::JANZENTom LMO2/O23 296-5421Tue May 10 1988 17:0435
        .RADIX  10      ;OBOE

        .BYTE       0,   11,   21,   31,   42,   51,   61,   70
        .BYTE      78,   86,   94,  100,  106,  111,  116,  119
        .BYTE     122,  124,  126,  126,  126,  125,  123,  120
        .BYTE     117,  113,  109,  104,   98,   93,   86,   80
        .BYTE      73,   67,   60,   53,   46,   39,   33,   26
        .BYTE      20,   15,    9,    4,   -1,   -5,   -8,  -12
        .BYTE     -14,  -17,  -18,  -19,  -20,  -20,  -20,  -19
        .BYTE     -18,  -17,  -15,  -13,  -10,   -8,   -5,   -2
        .BYTE       1,    5,    8,   11,   14,   18,   21,   24
        .BYTE      26,   29,   31,   33,   35,   37,   38,   39
        .BYTE      40,   40,   41,   41,   40,   40,   39,   38
        .BYTE      37,   35,   33,   32,   30,   28,   26,   23
        .BYTE      21,   19,   17,   14,   12,   10,    8,    6
        .BYTE       4,    2,    1,   -1,   -2,   -3,   -4,   -5
        .BYTE      -6,   -7,   -7,   -7,   -7,   -7,   -7,   -7
        .BYTE      -6,   -6,   -5,   -4,   -4,   -3,   -2,   -1
        .BYTE       0,    1,    2,    3,    4,    4,    5,    6
        .BYTE       6,    7,    7,    7,    7,    7,    7,    7
        .BYTE       6,    5,    4,    3,    2,    1,   -1,   -2
        .BYTE      -4,   -6,   -8,  -10,  -12,  -14,  -17,  -19
        .BYTE     -21,  -23,  -26,  -28,  -30,  -32,  -33,  -35
        .BYTE     -37,  -38,  -39,  -40,  -40,  -41,  -41,  -40
        .BYTE     -40,  -39,  -38,  -37,  -35,  -33,  -31,  -29
        .BYTE     -26,  -24,  -21,  -18,  -14,  -11,   -8,   -5
        .BYTE      -1,    2,    5,    8,   10,   13,   15,   17
        .BYTE      18,   19,   20,   20,   20,   19,   18,   17
        .BYTE      14,   12,    8,    5,    1,   -4,   -9,  -15
        .BYTE     -20,  -26,  -33,  -39,  -46,  -53,  -60,  -67
        .BYTE     -73,  -80,  -86,  -93,  -98, -104, -109, -113
        .BYTE    -117, -120, -123, -125, -126, -126, -126, -124
        .BYTE    -122, -119, -116, -111, -106, -100,  -94,  -86
        .BYTE     -78,  -70,  -61,  -51,  -42,  -31,  -21,  -11
        .RADIX  8
1097.21scale.macANGORA::JANZENTom LMO2/O23 296-5421Tue May 10 1988 17:0455
INCR::
	.RADIX	10
	;NOTE INCREMENT TABLE. FOR SIX OCTAVES
	;	DURATIONS ARE FOR 8.772 KHZ SAMPLE RATE (114. USEC)
	; (C1-B1) 
	;   
	; (C2-B2) 65.405 69.295 73.415 77.783 82.408
	;   87.308 92.498 97.998 103.83 110.00 116.54 123.47
	; (C3-B3) 130.81 138.59 146.83 155.57 164.82
	;   174.62 185.00 196.00 207.65 220.00 233.08 246.94
	; (C4-B4) 261.62 277.18 293.66 311.13 329.63
	;   349.234 369.994 391.995 415.308 440.006 466.162 493.882
	; (C5-B5) 523.243 554,364 587.324 622.267 659.266
	;   698.467 739.989 783.981 830.607 880.001 932.323 987.763
	; (C6-B6) 1046.56 1108.78 1174.68
	.WORD	0						;NOTE 0=SILENCE
;245 DELETED TO RAISE A HALF STEP , 259, 275, 291, 
;       	  C   C#    D   D#    E    F   F#    G   G#    A   A#    B
;	.WORD	 259, 275, 291, 308, 326, 346, 366, 388, 411, 436, 461, 489
	.WORD	 518, 549, 581, 616, 652, 691, 732, 776, 822, 871, 922, 977
	.WORD	1035,1097,1162,1231,1305,1382,1464,1551,1644,1741,1845,1955
	.WORD	2071,2194,2325,2463,2609,2764,2929,3103,3287,3483,3690,3909
	.WORD	4142,4388,4649,4926,5218,5529,5858,6206,6575,6966,7380,7819
	.WORD	8284,8776,8776,9298,9852,10436,11058,11716,12412,13150,13932
	.WORD	14760,15638
;	.WORD	16568,17552,18596
	.MACRO	NOTNAM,OCTAVE
	Cb'OCTAVE== 0+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY 
	CN'OCTAVE== 2+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY 
	C$'OCTAVE== 4+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	Db'OCTAVE== 4+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	DN'OCTAVE== 6+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	D$'OCTAVE== 8+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	Eb'OCTAVE== 8+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	EN'OCTAVE==10+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	FN'OCTAVE==12+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	F$'OCTAVE==14+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	Gb'OCTAVE==14+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	GN'OCTAVE==16+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	G$'OCTAVE==18+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	Ab'OCTAVE==18+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	AN'OCTAVE==20+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	A$'OCTAVE==22+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	Bb'OCTAVE==22+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	BN'OCTAVE==24+<24*<OCTAVE-2>>;POINTER TO SCALE INCREMENT ARRAY
	.ENDM	NOTNAM
;	NOTNAM	<1> ; ONLY GO AS LOW AS A CELLO (CN2)
	NOTNAM	<2>
	NOTNAM	<3>
	NOTNAM	<4>
	NOTNAM	<5>
	NOTNAM	<6>
	CN7==2+<24*5> ; TOP NOTE
	.RADIX	8
	.END
1097.22I know you're gonna dig thisMINDER::KENTBut there's no hole in the middleWed May 11 1988 08:517
    
    
    re -1,2,3 etc
    
    But can you dance to it ?
    
    					Paul