Dance with the 21st. Century Global Revolution

GlobalCover.jpg

Whether building the labyrinth for King Minos, designing waxon wings for man's first flight or in his tutelage of Perdix, the genius of ancient Daedalus excelled. Yet with each triumph there was an accompanying disaster that even his great genius was unable to avoid. Today major leaders in our world are confronted by similar encounters. Each is completely confident in their singular world vision while ignoring consequence and spontaneously provoking a wide spectrum of emotion from exhilaration to fear. A unified vision will resonate deeply into all sectors of the world when we learn to return control of the whole to its parts. The wealthy do not sacrifice willingly, the impoverished accept all that is given and the wise do not suffer fools. It is very sad that worldwide levels of intolerance prevail. Mother, child and father would welcome peace when people embrace tolerance and reciprocity. A God of intervention could yet pluck us from insoluble labyrinths of our own design. We invent our culture simultaneously using the same materials each time, like passing along a bad twist of genetic code. The labor of calculation yields sharp logical answers, along with beauty, when purified by an intended method for affecting human sensibilities in a positive fashion. Global revolution requires unimaginable invention, solutions to unanswerable questions, a willingness to dance passionately from the cradle to the grave and a deep sense for sharing Love.

In 1991 I was fascinated by the possibility of creating a harmonic sequence that, taken as a whole, could nest itself completely into each small duration between consecutive events. I sketched a graphic of this idea that enabled me to write a computer program whose output was a string quartet and a microtonal harmonic cluster smeared through time. Then in 2003, while making a backup copy of the original, a drum patch accidentally doubled the viola part and I observed that the music never missed a beat. I realized that what had started as an harmonic algorithm had finally found contemporary bedrock. This music carries a lot of inner tension, and then too, global revolution is definitely not for the faint of heart.


© Drew Lesso Major revision of 2003.
Duration 21 minutes 37 seconds

Technical Information: Kurzweil 2500, E-Mu 4XT, DX7 II with E, Macintosh G4, Digital Performer, Macintosh SE and Microsoft Basic with MIDIBASIC by Altech Systems.

 

 

Global03REVclose.jpg
 

 

In 1991 I began this work by selecting a string length, divided it in half, in thirds and up to sixteenths. This type of harmonic division never reaches either extremity of the string and mirrors itself at one half. This division yields 80 segments with the largest segment, 1/16 of the whole, appearing at either end of the strings length. Into the leftmost 1/16 segment I introduced all 80 divisions of 16. The result looks like a bar code. I divided each successive segment by 80 divisions of 16. In the graphic below I marked all of the divisions according to their proportional harmonic data. I allow the string length to equal a total duration for the entire work. This method of assigning total duration for the work automatically gives a time for each harmonic to appear. I wrote an algorithm to accomplish this huge task of moving 80 segments transposed through 80 segments for time and tone data. The output of this program was a string quartet with a microtonal harmonic cluster drone. This is the starting point for the 2003 revision.  I wrote the revision entirely from a musical intuitive point of view which is directly opposite from the 1991 algorithmic composition.

Global03REV.jpg

Rem Projektionen 0>1 June 24, 1991

CLEAR, 200000&
midiopen 10000,2048
DIM midibyte%(8592), timestamp&(8592), veloff%(8592)

DIM n(477)
' 1-79 Harmonic Data 1/2-15/16 (79)
' 80-158 Harmonic Data 1/16-15/16 (79)
' 159-237 MIDI Harmonics (79)
' 238-317 Segment Start Times (80)
' 318-397 Segment Durations (80)
' 398-477 Segment MIDI Harmonic Generators (80)

DIM m(79,4)
' m(x,1) = timestamp&
' m(x,2) = associated harmonic
' m(x,3) = midibyte%
' m(x,4) = Proportional duration within a segment

a=0:b=0:d=0:r=0:s=0:w=0:z=0:REM counters

handler:
TEXTFONT 4
MENU 1,0,1, "File"
MENU 1,1,1, "Harmoniclunch"
MENU 1,2,1, "Play"
MENU 1,3,1, "Bubblesort"
MENU 1,4,1, "Quit"
WHILE 1
CLS :PRINT "Ready for Menu Selection"
WHILE MENU (0) <> 1: WEND
CLS
SELECT CASE MENU (1)
CASE 1:GOSUB harmoniclunch
CASE 2:GOSUB play
CASE 3: GOSUB bubblesort
CASE 4: GOSUB quit
END SELECT
MENU
WEND

quit:

libterm
END


harmoniclunch:

REM load n(477)
FOR x = 1 TO 477
READ n(x)
NEXT x


REM Harmonic Data 1/2-15/16 (1-79)

DATA .5, .33, .66, .25, .75, .2, .4, .6, .8, .166, .833, .142, .285, .428, .571, .714
DATA .857, .125, .375, .625, .875, .111, .222, .444, .555, .777, .888, .1, .3, .7
DATA .9, .09, .181, .272, .363, .454, .545, .636, .727, .818, .909, .083, .416
DATA .583, .916, .076, .153, .23, .307, .384, .461, .538, .615, .692, .769, .846
DATA .923, .071, .214, .357, .642, .785, .928, .066, .133, .266, .466, .533
DATA .733, .866, .933, .062, .187, .312, .437, .562, .687, .812, .937

REM Harmonic Data 1/16-15/16 (80-158)

DATA .062, .066, .071, .076, .083, .09, .1, .111, .125, .133, .142, .153, .166
DATA .181, .187, .2, .214, .222, .23, .25, .266, .272, .285, .3, .307, .312, .333
DATA .357, .363, .375, .384, .4, .416, .428, .437, .444, .454, .461, .466, .5
DATA .533, .538, .545, .555, .562, .571, .583, .6, .615, .625, .636, .642, .666
DATA .687, .692, .7, .714, .727, .733, .75, .769, .777, .785, .8, .812, .818, .833
DATA .846, .857, .866, .875, .888, .9, .909, .916, .923, .928, .933, .937

REM MIDI Harmonics (159-237) Harmonic Order 1/2-15/16

DATA 12, 19, 7, 24, 5, 28, 16, 9, 4, 31, 3, 34, 22, 15, 10, 6, 3, 36, 17, 8, 2
DATA 38, 26, 14, 10, 4, 2, 40, 21, 6, 2, 42, 30, 23, 18, 14, 11, 8, 6, 4, 2, 43
DATA 15, 9, 1, 45, 33, 26, 21, 17, 14, 11, 9, 7, 5, 3, 2, 46, 27, 18, 8, 4, 1
DATA 47, 35, 23, 16, 13, 5, 2, 1, 48, 29, 20, 14, 10, 6, 3, 1

REM Segment Start Times (238-317)

DATA 0, 84.5, 90.1, 96.5, 104, 112.6, 122.9, 135.2, 150.2, 169, 180.2
DATA 193.1, 208, 225.3, 245.8, 253.5, 270.4, 289.7, 300.4, 312, 338, 360.5
DATA 368.7, 386.2, 405.6, 416, 422.5, 450.7, 482.8, 491.6, 507, 520, 540.8
DATA 563.3, 579.4, 591.5, 600.8, 614.5, 624, 630.9, 676, 721, 728, 737.4
DATA 751.1, 760.5, 772.5, 788.6, 811.2, 832, 845, 860.3, 869.1, 901.3, 929.5
DATA 936, 946.4, 965.7, 983.2, 991.4, 1014, 1040, 1051.5, 1062.2, 1081.6
DATA 1098.5, 1106.1, 1126.6, 1144, 1158.8, 1171.7, 1183, 1201.7, 1216.8
DATA 1229, 1239.3, 1248, 1255.4, 1261.8, 1267.5

REM Segment Durations (318-397)

DATA 84.5, 5.6, 6.4, 7.5, 8.6, 10.3, 12.3, 15, 18.8, 11.2, 12.9, 14.9, 17.3, 20.5
DATA 7.7, 16.9, 19.3, 10.7, 11.6, 26, 22.5, 8.2, 17.5, 19.4, 10.4, 6.5, 28.2
DATA 32.1, 8.8, 15.4, 13, 20.8, 22.5, 16.1, 12.1, 9.3, 13.7, 9.5, 6.9, 45.1, 45
DATA 7, 9.4, 13.7, 9.4, 12, 16.1, 22.6, 20.8, 13, 15.3, 8.8, 32.2, 28.2, 6.5, 10.4
DATA 19.3, 17.5, 8.2, 22.6, 26, 11.5, 10.7, 19.4, 16.9, 7.6, 20.5, 17.4, 14.8
DATA 12.9, 11.3, 18.7, 15.1, 12.2, 10.3, 8.7, 7.4, 6.4, 5.7, 84.5

REM Segment MIDI Harmonic Generators (398-477) Input from score

DATA 79, 33, 42, 37, 40, 34, 37, 40, 33, 36, 41, 34, 42, 50, 33, 45, 46, 47
DATA 48, 36, 43, 66, 52, 54, 59, 33, 39, 38, 65, 61, 55, 45, 35, 62, 53, 67
DATA 57, 49, 64, 32, 31, 20, 21, 21, 29, 22, 29, 20, 23, 22, 21, 25, 27, 26
DATA 20, 24, 21, 25, 27, 21, 24, 26, 21, 20, 28, 29, 23, 22, 28, 22, 21, 27
DATA 23, 25, 30, 28, 30, 23, 30, 25


crunch: 'load m(79,4)

LET b = 0 ' zero counters
LET z = 0
LET w = 0
LET s = s +1
LET a = 317 + s 'duration segment flag
IF a > 397 THEN LPRINT "fine":STOP:RETURN
FOR x = 1 TO 79 'harmonic order 1/2-15/16
LET d = n(a)*n(x) 'proportional duration
IF d>n(a)- 1 THEN GOTO sort 'checks for end duration
LET m(x,1) = (n(s+237)+d)*1000 'timestamp&
LET m(x,2) = n(x) 'associated harmonic
LET m(x,3) = n(s+397)+n(x+158) 'generator + midi harmonic
LET m(x,4) = d 'proportional duration
NEXT x

sort:
LET z = z+1 'harmonic order 1/16-15/16
LET w = 79 + z 'harmonic order 1/2-15/16
FOR y = 1 TO 79
IF w > 158 THEN GOTO precrunch
IF n(w) = m(y,2) THEN b=y:GOTO presave
NEXT y

presave:

IF m(b,3)=0 OR m(b,1)=0 GOTO sort
LET r = r+1 '1 to 8592
LET midibyte%(r) = m(b,3)
LET timestamp&(r) = m(b,1)
LET veloff%(r) = 67
LET r = r+1
LET midibyte%(r) = m(b,3)
LET timestamp&(r) = m(b,4)*m(b,2)*1000+timestamp&(r-1)
LET veloff%(r) = 0
IF r>3 THEN GOSUB renew
GOTO sort

precrunch:

FOR x = 1 TO 79 'reset array
LET m(x,1) = 0
LET m(x,2) = 0
LET m(x,3) = 0
LET m(x,4) = 0
NEXT x
GOTO crunch


bubblesort:

10 FOR x = 1 TO 8592-1
20 f = 0
30 FOR j = 1 TO 8592-x
40 IF timestamp&(j+1) >= timestamp&(j) THEN GOTO 90
50 SWAP timestamp&(j+1), timestamp&(j)
60 SWAP midibyte%(j+1), midibyte%(j)
70 SWAP veloff%(j+1), veloff%(j)
80 f = 1
90 NEXT j
100 IF f = 0 THEN GOTO 120
105 LPRINT x;
110 NEXT x
120 LPRINT "Sorted MIDIharmonics"
LPRINT "all's fine try to save and play"
STOP
RETURN

play:

midiport 1: midiport 3
b% = 144
upperlimit% = 8592: trackindex% = 1
ticklength% = 782
midi 0: miditime 0: miditime ticklength%: settime 0: count% = 0

WHILE trackindex% < upperlimit%
outcount count%
WHILE count% > 0: outcount count%: WEND
midiout b%,timestamp&(trackindex%)
midiout midibyte% (trackindex%),timestamp&(trackindex%)
midiout veloff%(trackindex%),timestamp&(trackindex%)
trackindex% = trackindex% + 1
WEND
RETURN


renew:

IF timestamp&(r-1)=timestamp&(r-3) THEN LET r=r-2
RETURN

GlobalEighty.jpg

GlobalOrigin.jpg

Origin 1991