From: owner-sc-users-digest@lists.io.com (sc-users-digest) To: sc-users-digest@lists.io.com Subject: sc-users-digest V1 #64 Reply-To: sc-users Sender: owner-sc-users-digest@lists.io.com Errors-To: owner-sc-users-digest@lists.io.com Precedence: bulk sc-users-digest Tuesday, September 28 1999 Volume 01 : Number 064 ---------------------------------------------------------------------- Date: Sun, 26 Sep 1999 09:10:50 -0600 From: "David Cottle" <---@---.---> Subject: Re: MIDIOut Hi, >>Hmm, . . . So its not a very good option for this class? (I tried it with a >>synth and had the same problem.) I was pretty excited to use it. > > What machine and system version are you using? 2.2.1 > The smaller the buffer size and the less > CPU load you have the better chance you have. 233 G3 Powerbook. In the lab we have iMacs and a 333 (I think) G3. How can I reduce the buffer? Is that the block size in audio setup? How can I decrease the CPU load? I'm not running any UGens in this example, so the CPU load for SC should be about as low as it can be. Would virtual memory or ram doubler have an affect? How about running with fewer extensions? (I have a lot of whirly-gigs that I know slow down some other applications.) ------------------------------ Date: Sun, 26 Sep 1999 09:19:24 -0600 From: "David Cottle" <---@---.---> Subject: MIDIOut Hi, I'm sure this is completely unrelated, but I notice that the Out led on my midi interface flashes normally for each note on and off message, but those moments when it takes a breath it flutters. flash, flash, flash, flash, flash, flutter . . . , flash, flash pitch, pitch, pitch, pitch, pitch, breath . . . , pitch, pitch ------------------------------ Date: Sun, 26 Sep 1999 10:25:32 -0600 From: James McCartney <---@---.---> Subject: Re: MIDIOut At 9:10 AM -0600 9/26/99, David Cottle wrote: >Hi, >Would virtual memory or ram doubler >have an affect? Turn VM off. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Sun, 26 Sep 1999 12:26:08 -0600 From: "David Cottle" <---@---.---> Subject: Re: MIDIOut Hi, Much better. This works very well on Qtime and an interface. Thanks again. This is a great improvement on the class. ------------------------------ Date: Sun, 26 Sep 1999 13:37:43 -0600 From: James McCartney <---@---.---> Subject: Re: MIDIOut At 9:05 AM -0600 9/25/99, David Cottle wrote: >Hi, > >Try this: > >( >var pr = 25; >Pbind( > \midinote, Pfunc({30 + 40.rand}), > \dur, 0.2, > \veloc, Pwhite(80,127,inf), > \ugenFunc, { arg midinote, veloc, sustain, outersynth; > MIDIOut(0).program(1, pr); > MIDIOut(0).noteOn(1, midinote, veloc); > // schedule note off in the outer synth. > outersynth.sched(sustain, { > MIDIOut(0).noteOn(1, midinote, 0); > }); > nil // no audio output > } > ).play(channels: 1); >127.do({arg item; MIDIOut(0).noteOn(1, item, 0)}) >) > >On my machine it sounds like it has to "take a breath" every five notes. It is generally not nice to most synths to send a program change before every note. How about moving that program change out of the ugenFunc ? --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Sun, 26 Sep 1999 13:37:53 -0600 From: James McCartney <---@---.---> Subject: Re: MIDIOut At 12:26 PM -0600 9/26/99, David Cottle wrote: >Hi, > >Much better. This works very well on Qtime and an interface. > >Thanks again. This is a great improvement on the class. What? Turning the VM off? --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Sun, 26 Sep 1999 22:15:54 -0600 From: "David Cottle" <---@---.---> Subject: Re: MIDIOut Hi, >>Much better. This works very well on Qtime and an interface. >> >>Thanks again. This is a great improvement on the class. > > What? Turning the VM off? Yes, well, Ram Doubler, that is (same thing, right?) Even with durations and sustain values at 0.05 (!) it plunks out values without hesitation. I turn Ram Doubler back on and it hesitates even with 0.5 durations. Re: the program change inside Ugen, you're right, a change every time didn't work well. ------------------------------ Date: Mon, 27 Sep 1999 08:54:53 -0600 From: "David Cottle" <---@---.---> Subject: Serial Number Hi, I let my computer die on the battery last night. When I restarted the clock was wrong and SC wouldn't launch. I reset the clock but it still says my password is bad. Any ideas? ------------------------------ Date: Mon, 27 Sep 1999 12:39:58 -0400 From: Mark Ballora <---@---.---> Subject: Pan2 closure I'm working with the granulated below, and would like to have the granulated output pan back and forth. I would have thought that to do so, I'd simply put the last statement into a Pan2, as in Pan2.ar(granulated, FSinOsc.kr(0.5, 0.5)). But that gives me an error. What should constitute the Pan2's in argument? Thanks -- Mark Ballora ( var bufL, bufR, maxCycleTime, delayLineLength, pitch, granulated; maxCycleTime = 1; // buffer loop time play({ arg synth; // allocate delay lines delayLineLength = Synth.sampleRate * maxCycleTime + synth.blockSize + 2; bufL = Signal.new(delayLineLength); bufR = Signal.new(delayLineLength); pitch = MouseX.kr(0.3,2.0); // pitch control // spawn grains granulated = GrainTap.ar([bufL, bufR], 0.1, pitch, MouseY.kr(0, 1) * pitch, 0.05, 8, 0.2); DelayWr.ar([bufL, bufR], AudioIn.ar([1,2]) Subject: Re: Pan2 closure Because 'granulated' has multichannel-expanded to two channels, run it through Mix before sending it to Pan2. Pan2 wants a mono input. Colby On Mon, 27 Sep 1999, Mark Ballora wrote: > I'm working with the granulated below, and would like to have the > granulated output pan back and forth. I would have thought that to do so, > I'd simply put the last statement into a Pan2, as in Pan2.ar(granulated, > FSinOsc.kr(0.5, 0.5)). But that gives me an error. What should constitute > the Pan2's in argument? > > Thanks -- Mark Ballora > > > > ( > var bufL, bufR, maxCycleTime, delayLineLength, pitch, granulated; > > maxCycleTime = 1; // buffer loop time > > play({ arg synth; > > // allocate delay lines > delayLineLength = Synth.sampleRate * maxCycleTime + synth.blockSize > + 2; > bufL = Signal.new(delayLineLength); > bufR = Signal.new(delayLineLength); > > pitch = MouseX.kr(0.3,2.0); // pitch control > // spawn grains > > granulated = GrainTap.ar([bufL, bufR], 0.1, pitch, MouseY.kr(0, 1) > * pitch, 0.05, 8, 0.2); > > DelayWr.ar([bufL, bufR], AudioIn.ar([1,2]) > granulated // output granulated sound > }) > ) > > > ------------------------------ Date: Mon, 27 Sep 1999 13:35:03 -0400 From: Mark Ballora <---@---.---> Subject: Re: Pan2 closure >Because 'granulated' has multichannel-expanded to two channels, run it >through Mix before sending it to Pan2. Pan2 wants a mono input. > >Colby > > I knew it would be something obvious. Thanks, Colby! ------------------------------ Date: Mon, 27 Sep 1999 12:26:44 -0600 From: James McCartney <---@---.---> Subject: Re: Pan2 closure At 10:39 AM -0600 9/27/99, Mark Ballora wrote: >I'm working with the granulated below, and would like to have the >granulated output pan back and forth. I would have thought that to do so, >I'd simply put the last statement into a Pan2, as in Pan2.ar(granulated, >FSinOsc.kr(0.5, 0.5)). But that gives me an error. What should constitute >the Pan2's in argument? granulated is aready a stereo pair, so when you put a Pan2 on it you get an array of two pairs. This is not a legal output. So you have to decide what it is you are really trying to accomplish. Do you want to pan each of the channels separately and then mix them, or mix them together and then pan them, or pan them both and output 4 channels ? --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Mon, 27 Sep 1999 13:48:52 -0600 From: Jim Coker <---@---.---> Subject: RangeView There's an example file called "monitor controls" that shows how to monitor audio-rate values w/ a SliderView. I want to do the same with a RangeView, but I can't find the methods I need to set the range that RangeView (even though I looked at the class def). What are the methods? Thanks, Jim ------------------------------ Date: Mon, 27 Sep 1999 15:23:42 -0400 From: Mark Ballora <---@---.---> Subject: Re: Pan2 closure > >So you have to decide what it is you are really trying to accomplish. >Do you want to pan each of the channels separately and then mix them, >or mix them together and then pan them, or pan them both and output >4 channels ? I took the simple approach and just mixed them before panning. I seem to be foggy, however, on some aspect of Ugen arithmetic or arrays. I'm doing SC coding for a piece to be performed with solo (mono) violin and SC processing it. Various processes are in operation throughout the piece, set up like so: ( var theSound, reverb, first, second, third ...tenth, checkbox1...checkbox10; var audioslider, slider1, slider2, ... slider10; Synth.play({ theSound=AudioIn.ar([1]); first=Pause.ar( { Pan2.ar(process with theSound, FSinOsc.kr(0.5,0.5) }, checkbox1.kr); second=Pause.ar ( { Pan2.ar(another process with theSound, FSinOsc.kr(0.5,0.5) }, checkbox2.kr); ... tenth ... reverb = { monastic chant example, with summed processes as input }; theSound*audioslider.kr + first*slider1.kr + second*slider2.kr + ... + reverb }) ) It worked fine until we decided to add the Pan2s for a little activity, and found they didn't work. The solution was to define theSound as AudioIn.ar([1,2]). Forgive me if I'm being dense (it wouldn't be the first time), but why should the mono audio signal have defeated panning further down the line? It even happened when there was no audio in the pan, just straight synthesis -- I copied the pink noise example from Pan2.help to be sure I wasn't losing my mind, and even that only retained one channel. I'm missing a link somewhere ... ------------------------------ Date: Mon, 27 Sep 1999 14:31:38 -0600 From: James McCartney <---@---.---> Subject: Re: Pan2 closure At 1:23 PM -0600 9/27/99, Mark Ballora wrote: >> >>So you have to decide what it is you are really trying to accomplish. >>Do you want to pan each of the channels separately and then mix them, >>or mix them together and then pan them, or pan them both and output >>4 channels ? > >I took the simple approach and just mixed them before panning. > >I seem to be foggy, however, on some aspect of Ugen arithmetic or arrays. > theSound=AudioIn.ar([1]); When you multiply an array of 1 item with an array of 2 items it creates a result that is the minimum of the two lists' lengths, i.e. 1. If you had written : theSound=AudioIn.ar(1); Then you would have a ugen instead of an array of 1 ugen and you would have gotten the results you wanted. The result of a scalar multiplied by an array is an array of the same size. When you have questions of this nature, the best thing to do is to postln what is being generated. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Mon, 27 Sep 1999 14:46:19 -0600 From: James McCartney <---@---.---> Subject: Re: RangeView At 1:48 PM -0600 9/27/99, Jim Coker wrote: >There's an example file called "monitor controls" that >shows how to monitor audio-rate values w/ a SliderView. actually they are control rate, but 'poll' works with audio rate too. >I want to do the same with a RangeView, but I can't find >the methods I need to set the range that RangeView (even >though I looked at the class def). What are the methods? The method is 'range_' ( // using a GUI to monitor control values var w; w = GUIWindow.new("panel", Rect.newBy(219, 73, 260, 90)); RangeView.new( w, Rect.newBy(37, 33, 183, 18), "rv", 0, 1, 0, 1, 0, 'linear'); Synth.play({ arg synth; var x, y; x = MouseX.kr; y = MouseY.kr; synth.trepeat(0, 0.04, { // use a synth task to update views var lo, hi; lo = min(x.poll, y.poll); hi = max(x.poll, y.poll); w.at(0).value = lo; w.at(0).range = hi - lo; // set the range }); PinkNoise.ar(0.1); }); w.close; ) --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: < ------------------------------ Date: Mon, 27 Sep 1999 17:16:37 -0400 From: Mark Ballora <---@---.---> Subject: MIDI controller/GUI slider value display >When you multiply an array of 1 item with an array of 2 items >it creates a result that is the minimum of the two lists' lengths, i.e. 1. > >If you had written : > > theSound=AudioIn.ar(1); > >Then you would have a ugen instead of an array of 1 ugen and you would >have gotten the results you wanted. > >The result of a scalar multiplied by an array is an array of the same >size. > >When you have questions of this nature, the best thing to do >is to postln what is being generated. > mea culpa. It was a whole screenful, and I suspected the solution was on the order of simplicity you just provided. But next time, I'll send you all the gory details ... Come to think of it, had another question on a minor matter: We're using a Peavey fader box which is mapped to the GUI sliders. The slider values are displayed in a number box, with the .action function as per your examples. slider.action = { numberbox.value = slider.value }; numberbox.action = { slider.value = numberbox.value }; Question: the number boxes do not update when we move the Peavey faders, only when we move the GUI sliders. I could have the number boxes display the MIDI controller value from the fader; the Peavey faders, however, go from 0-127, and with the MIDI map faders they are automatically scaled within the GUI sliders' ranges, more on the order of 0 - 5. Naturally, I'd want to display the fader values within the range of the GUI sliders. I could scale the MIDI controller values, but since they are already scaled by the GUI slider, is there a way to display the values automatically, without adding the arithmetic cycles? Thanks again -- Mark ------------------------------ Date: Mon, 27 Sep 1999 16:26:47 -0600 From: James McCartney <---@---.---> Subject: Re: MIDI controller/GUI slider value display At 3:16 PM -0600 9/27/99, Mark Ballora wrote: >>When you have questions of this nature, the best thing to do >>is to postln what is being generated. >> > >mea culpa. It was a whole screenful, and I suspected the solution was on >the order of simplicity you just provided. But next time, I'll send you >all the gory details ... No the idea wasn't to post it and send it to me.. More along the lines of "teach a man to fish.." Asking me is giving you a fish for a day. >Question: the number boxes do not update when we move the Peavey faders, >only when we move the GUI sliders. I could have the number boxes display >the MIDI controller value from the fader; the Peavey faders, however, go >from 0-127, and with the MIDI map faders they are automatically scaled >within the GUI sliders' ranges, more on the order of 0 - 5. MIDI map the numerical to the same MIDI controller, but set the numerical's limits to 0, 127 --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Mon, 27 Sep 1999 17:32:19 -0400 (EDT) From: Matthew Rogalsky <---@---.---> Subject: wacom tablets Does SC support for Wacom tablets include pre-Intuos varieties? Should have asked this question before buying one 2nd hand (an older ADB-connected 4x5" ArtPad II, which I haven't yet received). best Matt Rogalsky ------------------------------ Date: Mon, 27 Sep 1999 17:49:21 -0400 From: Ken Mistove <---@---.---> Subject: Re: wacom tablets Matt, > Does SC support for Wacom tablets include pre-Intuos varieties? > > Should have asked this question before buying one 2nd hand (an older > ADB-connected 4x5" ArtPad II, which I haven't yet received). An ADB ArtPad II + SC is working fine for me. Side note: Months ago, Wacom released a beta driver driver (v4.4.0) for Intuos and older tablets. When the final release appeared at their site, all mention of the older tablets disappeared. I'm using the final 4.4.0 driver with no problems. The one feature I use it for is the ability to turn off the driver for applications. Your mileage may vary... Ken ------------------------------ Date: Mon, 27 Sep 1999 17:16:45 -0600 From: James McCartney <---@---.---> Subject: Re: wacom tablets At 3:32 PM -0600 9/27/99, Matthew Rogalsky wrote: >Does SC support for Wacom tablets include pre-Intuos varieties? > >Should have asked this question before buying one 2nd hand (an older >ADB-connected 4x5" ArtPad II, which I haven't yet received). Yes it should work fine. You just don't get the Intuos features like 2 devices at once. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Mon, 27 Sep 1999 20:38:32 -0400 From: Mark Ballora <---@---.---> Subject: Re: MIDI controller/GUI slider value display > >No the idea wasn't to post it and send it to me.. >More along the lines of "teach a man to fish.." >Asking me is giving you a fish for a day. > Got it. I'd much rather fish on my own anytime; unfortunately, I have this tendency to get my line snarled, which I know can be annoying... :( ------------------------------ Date: Mon, 27 Sep 1999 21:35:05 -0600 From: "David Cottle" <---@---.---> Subject: add inconcistent Hi, I'm getting unpredictable results with add. Sometimes the same code returns different results (or I'm really doing something wrong). Does this code work for you? var arr, arr2; arr = [1, 2, 3, 4]; arr2 = [1, 2, 3]; arr2.add(6); arr2.postln; arr.add(6); arr.postln; 30.do({arg item, count; arr.wrapAt(count).postln; if(count%10 == 9, {arr.add(5 + 3.rand)} ) }); arr.add(10); arr.postln; For me, it changes arr2, but arr stays the same. But the odd part is sometimes I can get it to change and sometimes not. But never inside the function. What's up? ------------------------------ Date: Mon, 27 Sep 1999 23:02:59 -0600 From: James McCartney <---@---.---> Subject: Re: add inconcistent At 9:35 PM -0600 9/27/99, David Cottle wrote: >Hi, > >I'm getting unpredictable results with add. Sometimes the same code returns >different results (or I'm really doing something wrong). It is working correctly. Read the ArrayedCollection.help under 'add'. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Mon, 27 Sep 1999 22:25:58 -0600 From: "David Cottle" <---@---.---> Subject: Re: add inconcistent > It is working correctly. > Read the ArrayedCollection.help under 'add'. Thanks. I was reading Collection.help. ------------------------------ Date: Tue, 28 Sep 1999 12:50:16 +0200 From: julian rohrhuber <---@---.---> Subject: Re: Impulse1.ar trying { Spawn.ar({ Impulse.ar(0) }, 1, 1) }.play; I get an everincreasing number of UGens. That does not happen with PSinGrain. ------------------------------ Date: Tue, 28 Sep 1999 07:27:23 -0600 From: James McCartney <---@---.---> Subject: Re: Impulse1.ar At 4:50 AM -0600 9/28/99, julian rohrhuber wrote: >trying > >{ Spawn.ar({ Impulse.ar(0) }, 1, 1) }.play; > >I get an everincreasing number of UGens. That does not happen with PSinGrain. It needs an envelope. Why are you spawning impulses ? There are many other ways to get impulses of almost any pattern desired. Impulse = periodic, Dust = aperiodic, ImpulseSequencer = triggered pattern, StepClock = timed pattern, HPZ.ar(signal > k) = make a trigger from any signal. I can't think of a reason to use Spawn for them. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Tue, 28 Sep 1999 11:26:46 -0400 From: Mark Ballora <---@---.---> Subject: reverseDo Looking at the ArrayedCollection.help, this example either causes a crash or a seemingly endless stream of results until I halt it. Has anyone else experienced this problem? ------------------------------ Date: Tue, 28 Sep 1999 09:27:54 -0600 From: "David Cottle" <---@---.---> Subject: Webern variation > THIS MESSAGE IS IN MIME FORMAT. Since your mail reader does not understand this format, some or all of this message may not be legible. - --MS_Mac_OE_3021355674_1772965_MIME_Part Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit Hi, Here is a variation on Webern's Kinderstuck. The idea was to preserve all elements except versions of the row. In the original work Webern only uses p0 of the row. In this version each time the row finishes (pitch 0) it picks a new version of the row. I would appreciate any feedback on the code or the piece. - --MS_Mac_OE_3021355674_1772965_MIME_Part Content-type: multipart/appledouble; boundary="MS_Mac_OE_1761289_3021355674_MIME_Part" - --MS_Mac_OE_1761289_3021355674_MIME_Part Content-type: application/applefile; name="Webern Piano Variation" Content-transfer-encoding: base64 AAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJAAAAPgAAACAAAAADAAAAXgAAABYAAAAC AAAAdAAADtRURVhUU0NqbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdlYmVybiBQaWFubyBW YXJpYXRpb24AAAEAAAAOjgAADY4AAABGd01EQWdiaUFOTURBdw1NREF3TWpNeU1TQXdNREF3 TUNCdUlBMHdNREF3TURBeU56QTJJREF3TURBd0lHNGdEVEF3TURBd01ESTBOVEFnTURBd01E QWcNYmlBTk1EQXdNREF3TWpVMk1pQXdNREF3TUNCdUlBMHdNREF3TURBd01ERTNJREF3TURB d0lHNGdEVEF3TURBd01ESXpNREVnDU1EQXdNREFnYmlBTk1EQXdNREF3TXpBM05TQXdNREF3 TUNCdUlBMHdNREF3TURBek1UVXhJREF3TURBd0lHNGdEWFJ5WVdscw1aWElOUER3AAANhgCt AAAAAAAMAAkAFAAAAAwAAAAAAAAAAAABAAwACQAUAAAADMAAAAAAAAAAACgADAAJABQAAAAM AAAAAAAAAAAAKQAMAAkAFAAAAAzAAAAAAAAAAACaAAwACQAUAAAADAAAAAAAAAAAAJsADAAJ ABQAAAAMwAAAAAAAAAACIwAMAAkAFAAAAAwAAAAAAAAAAAIpAAwACQAUAAAADAAAAADAAAAA AiwADAAJABQAAAAMAAAAAAAAAAACkwAMAAkAFAAAAAzAAAAAAAAAAAQUAAwACQAUAAAADAAA AAAAAAAABEoADAAJABQAAAAMwAAAAAAAAAAEywAMAAkAFAAAAAwAAAAAAAAAAATcAAwACQAU AAAADAAAAADAAAAABOYADAAJABQAAAAMAAAAAAAAAAAFBwAMAAkAFAAAAAxgAGAAYAAAAAUL AAwACQAUAAAADAAAAAAAAAAABQ0ADAAJABQAAAAMYABgAGAAAAAFEQAMAAkAFAAAAAwAAAAA AAAAAAUTAAwACQAUAAAADGAAYABgAAAABRcADAAJABQAAAAMAAAAAAAAAAAFGQAMAAkAFAAA AAxgAGAAYAAAAAUdAAwACQAUAAAADAAAAAAAAAAABR8ADAAJABQAAAAMYABgAGAAAAAFIwAM AAkAFAAAAAwAAAAAAAAAAAUlAAwACQAUAAAADGAAYABgAAAABSkADAAJABQAAAAMAAAAAAAA AAAFKwAMAAkAFAAAAAxgAGAAYAAAAAUvAAwACQAUAAAADAAAAAAAAAAABTEADAAJABQAAAAM YABgAGAAAAAFNQAMAAkAFAAAAAwAAAAAAAAAAAU3AAwACQAUAAAADGAAYABgAAAABTsADAAJ ABQAAAAMAAAAAAAAAAAFPQAMAAkAFAAAAAxgAGAAYAAAAAVBAAwACQAUAAAADAAAAAAAAAAA BUMADAAJABQAAAAMYABgAGAAAAAFRwAMAAkAFAAAAAwAAAAAAAAAAAVJAAwACQAUAAAADGAA YABgAAAABU0ADAAJABQAAAAMAAAAAAAAAAAGCgAMAAkAFAAAAAwAAAAAwAAAAAYNAAwACQAU AAAADAAAAAAAAAAABvwADAAJABQAAAAMAAAAAMAAAAAG/wAMAAkAFAAAAAwAAAAAAAAAAAcW AAwACQAUAAAADAAAAADAAAAABxkADAAJABQAAAAMAAAAAAAAAAAHKAAMAAkAFAAAAAwAAAAA wAAAAAcrAAwACQAUAAAADAAAAAAAAAAAB1AADAAJABQAAAAMAAAAAMAAAAAHVAAMAAkAFAAA AAwAAAAAAAAAAAdYAAwACQAUAAAADAAAAADAAAAAB1wADAAJABQAAAAMAAAAAAAAAAAHdwAM AAkAFAAAAAwAAAAAwAAAAAd9AAwACQAUAAAADAAAAAAAAAAAB5kADAAJABQAAAAMwAAAAAAA AAAItAAMAAkAFAAAAAwAAAAAAAAAAAi8AAwACQAUAAAADAAAAADAAAAACMAADAAJABQAAAAM AAAAAAAAAAAIxAAMAAkAFAAAAAzAAAAAAAAAAAjyAAwACQAUAAAADAAAAAAAAAAACgUADAAJ ABQAAAAMAAAAAMAAAAAKCAAMAAkAFAAAAAwAAAAAAAAAAAoVAAwACQAUAAAADMAAAAAAAAAA C2QADAAJABQAAAAMAAAAAAAAAAALbgAMAAkAFAAAAAwAAAAAwAAAAAtyAAwACQAUAAAADAAA AAAAAAAAC3oADAAJABQAAAAMwAAAAAAAAAALpgAMAAkAFAAAAAwAAAAAAAAAAAvTAAwACQAU AAAADMAAAAAAAAAAC9oADAAJABQAAAAMAAAAAAAAAAAMEAAMAAkAFAAAAAzAAAAAAAAAAAwY AAwACQAUAAAADAAAAAAAAAAADFYADAAJABQAAAAMwAAAAAAAAAAMWwAMAAkAFAAAAAwAAAAA AAAAAAyPAAwACQAUAAAADMAAAAAAAAAADJQADAAJABQAAAAMAAAAAAAAAAAMzwAMAAkAFAAA AAwAAAAAwAAAAAzSAAwACQAUAAAADAAAAAAAAAAADN8ADAAJABQAAAAMwAAAAAAAAAAQLQAM AAkAFAAAAAwAAAAAAAAAABA4AAwACQAUAAAADAAAAADAAAAAED0ADAAJABQAAAAMAAAAAAAA AAAQRQAMAAkAFAAAAAwAAAAAwAAAABBIAAwACQAUAAAADAAAAAAAAAAAEMQADAAJABQAAAAM wAAAAAAAAAAQ/AAMAAkAFAAAAAwAAAAAAAAAABE3AAwACQAUAAAADMAAAAAAAAAAETsADAAJ ABQAAAAMAAAAAAAAAAARdgAMAAkAFAAAAAzAAAAAAAAAABF6AAwACQAUAAAADAAAAAAAAAAA EbUADAAJABQAAAAMwAAAAAAAAAARuQAMAAkAFAAAAAwAAAAAAAAAABHzAAwACQAUAAAADMAA AAAAAAAAEfgADAAJABQAAAAMAAAAAAAAAAASFQAMAAkAFAAAAAxgAGAAYAAAABIcAAwACQAU AAAADAAAAAAAAAAAEh4ADAAJABQAAAAMYABgAGAAAAASKgAMAAkAFAAAAAwAAAAAAAAAABIs AAwACQAUAAAADGAAYABgAAAAEjMADAAJABQAAAAMAAAAAAAAAAASNQAMAAkAFAAAAAxgAGAA YAAAABJAAAwACQAUAAAADAAAAAAAAAAAEkIADAAJABQAAAAMYABgAGAAAAASUwAMAAkAFAAA AAwAAAAAAAAAABKuAAwACQAUAAAADGAAYABgAAAAEsEADAAJABQAAAAMAAAAAAAAAAAS1AAM AAkAFAAAAAxgAGAAYAAAABLYAAwACQAUAAAADAAAAAAAAAAAEusADAAJABQAAAAMAAAAAMAA AAAS7gAMAAkAFAAAAAwAAAAAAAAAABMQAAwACQAUAAAADGAAYABgAAAAExMADAAJABQAAAAM AAAAAAAAAAATHQAMAAkAFAAAAAxgAGAAYAAAABMfAAwACQAUAAAADAAAAAAAAAAAEysADAAJ ABQAAAAMYABgAGAAAAATLgAMAAkAFAAAAAwAAAAAAAAAABN/AAwACQAUAAAADAAAAADAAAAA E4YADAAJABQAAAAMAAAAAAAAAAATpQAMAAkAFAAAAAwAAAAAwAAAABOqAAwACQAUAAAADAAA AAAAAAAAE60ADAAJABQAAAAMAABwAAAAAAATtgAMAAkAFAAAAAwAAAAAAAAAABPCAAwACQAU AAAADAAAcAAAAAAAE8YADAAJABQAAAAMAAAAAAAAAAATyAAMAAkAFAAAAAwAAAAAwAAAABPM AAwACQAUAAAADAAAAAAAAAAAE9MADAAJABQAAAAMwAAAAAAAAAAT/wAMAAkAFAAAAAwAAAAA AAAAABQsAAwACQAUAAAADMAAAAAAAAAAFDAADAAJABQAAAAMAAAAAAAAAAAUkQAMAAkAFAAA AAzAAAAAAAAAABSVAAwACQAUAAAADAAAAAAAAAAAFNoADAAJABQAAAAMwAAAAAAAAAAU3gAM AAkAFAAAAAwAAAAAAAAAABWLAAwACQAUAAAADAAAcAAAAAAAFZEADAAJABQAAAAMAAAAAAAA AAAVkwAMAAkAFAAAAAwAAAAAwAAAABWXAAwACQAUAAAADAAAAAAAAAAAFZ8ADAAJABQAAAAM wAAAAAAAAAAVwQAMAAkAFAAAAAwAAAAAAAAAABYIAAwACQAUAAAADMAAAAAAAAAAFg0ADAAJ ABQAAAAMAAAAAAAAAAAWpAAMAAkAFAAAAAzAAAAAAAAAABapAAwACQAUAAAADAAAAAAAAAAA FzUADAAJABQAAAAMAAAAAMAAAAAXOAAMAAkAFAAAAAwAAAAAAAAAABc8AAwACQAUAAAADAAA cAAAAAAAF0QADAAJABQAAAAMAAAAAAAAAAAXRgAMAAkAFAAAAAwAAAAAwAAAABdKAAwACQAU AAAADAAAAAAAAAAAF1EADAAJABQAAAAMwAAAAAAAAAAXcwAMAAkAFAAAAAwAAAAAAAAAABeK AAwACQAUAAAADMAAAAAAAAAAF5IADAAJABQAAAAMAAAAAAAAAAAXrQAMAAkAFAAAAAzAAAAA AAAAABe1AAwACQAUAAAADAAAAAAAAAAAF9AADAAJABQAAAAMwAAAAAAAAAAX2AAMAAkAFAAA AAwAAAAAAAAAABgBAAwACQAUAAAADMAAAAAAAAAAGAkADAAJABQAAAAMAAAAAAAAAAAYJgAM AAkAFAAAAAzAAAAAAAAAABgvAAwACQAUAAAADAAAAAAAAAAAGF4ADAAJABQAAAAMwAAAAAAA AAAYZwAMAAkAFAAAAAwAAAAAAAAAABi9AAwACQAUAAAADMAAAAAAAAAAGMUADAAJABQAAAAM AAAAAAAAAAAZAgAMAAkAFAAAAAzAAAAAAAAAABkKAAwACQAUAAAADAAAAAAAAAAAGTIADAAJ ABQAAAAMAABwAAAAAAAZOwAMAAkAFAAAAAwAAAAAAAAAABl0AAwACQAUAAAADAAAAADAAAAA GXcADAAJABQAAAAMAAAAAAAAAAAZfgAMAAkAFAAAAAwAAAAAwAAAABmFAAwACQAUAAAADAAA AAAAAAAAAAAAAAEAAAAOjgAADY4AAABGB8pDSCXUAAAAHABGAAFzdHlsAAAAElNPVVAAAAAe AID//wAAAAAAAAAAAID//wAADYoAAAAA - --MS_Mac_OE_1761289_3021355674_MIME_Part Content-type: text/plain; name="Webern Piano Variation"; x-mac-creator="53436A6D"; x-mac-type="54455854" Content-disposition: attachment Content-transfer-encoding: base64 DS8vIEJhc2VkIG9uIFdlYmVybidzIEtpbmRlcnN0dWNrLCAxOTI0DQ0vL1N0aWxsIHRvIGRv OiBFeHBhbmQgYWxlYXRvcmljIGVsZW1lbnQgdG8gaW5jbHVkZSBvY3RhdmUsIGR5bmFtaWMs IGFuZCBkdXJhdGlvbi4NLy9OZXh0IHN0ZXAsIGEgbWFya292IHZlcnNpb24uDQ0vL1RoaXMg aXMgYSB2YXJpYXRpb24gb24gV2ViZXJuJ3Mgb3JpZ2luYWwgd29yay4gUGxheWJhY2sgcmVx dWlyZXMgTUlESSBzZXR1cC4gDS8vVGhlIG9jdGF2ZSwgZHluYW1pYywgZHVyYXRpb24sIGFu ZCByb3cgcG9zaXRpb24gZG8gbm90IGNoYW5nZS4gVmVyc2lvbnMgb2YgDS8vdGhlIHJvdyBk byBjaGFuZ2UuIEluIHRoZSBvcmlnaWFubCB2ZXJzaW9uIFdlYmVybiBvbmx5IHVzZXMgb25l IHZlcnNpb24gb2YgdGhlDS8vcm93OyBwLTAuIFRoZSByb3cgaXMgRWIsIEUsIEMsIEIsIEJi LCBDIywgRCwgQSwgRyMsIEcsIEYjLCBGLiBJbiB0aGlzIHZlcnNpb24NLy9lYWNoIHRpbWUg dGhlIHJvdyBoaXRzIHAtMCBhIG5ldyB2ZXJzaW9uIGFuZCB0cmFuc3Bvc2l0aW9uIGlzIGNo b3Nlbi4gDQ0NKAkJDXZhciBibGlwSW5zdCwgbWlkaUluc3QsIGVudmVsb3BlLCByZXYsIHJv dywgcENsYXNzLA1vY3RhdmUsIHBhdHQsIHRyYW5zLCBncm9vdmUsIG1vZHVsYXIsIGNvbXBs ZXRlID0gMCwgDQ0vL0NoYW5nZSB0aGVzZSB2YWx1ZXMgYmFzZWQgb24geW91ciBNSURJIHNl dHVwLiBXaGVuIFNDIGZpcnN0IGxhdW5jaGVzIGl0IGxvb2tzDS8vZm9yIE1JREkgcG9ydHMu IEVudGVyIHBvcnQgbnVtYmVyIGJhc2VkIG9uIHRoZXNlIHZhbHVlcy4gKFVzaW5nIDAgc2hv dWxkIHdvcmsNLy9pbiBtb3N0IHNpdHVhdGlvbnMuIENoYW5uZWwgaXMgdGhlIE1JREkgcGxh eWJhY2sgY2hhbm5lbCAodXN1YWxseSAxKSwgcHJvZyBpcyB0aGUNLy9pbnN0cnVtZW50IHVz ZWQuICJ0bSIgaXMgdGhlIHRlbXBvLiA4IGlzIGZhc3RlciwgNiBpcyBzbG93ZXIuIENoYW5n ZSBzZWVkIGlmIHlvdSANLy93YW50IHRvIGhlYXIgdGhlIHNhbWUgaXRlcmF0aW9uIChzYW1l IHJhbmRvbSBjaG9pY2VzKS4NDXBvcnQgPSAyLCBjaGFubmVsID0gMSwgcHJvZyA9IDAsIHRt ID0gOCwgc2VlZCA9IDA7IA0NLy9JIHVzZSBjb21wbGV0ZSB0byBoZWxwIGRldGVybWluZSB3 aGV0aGVyIG9yIG5vdCBJIGhhdmUgY29tcGxldGVkIGEgdmVyc2lvbiBvZiBhIHJvdywgYW5k DS8vY2FuIHRoZXJlZm9yZSBwaWNrIGFub3RoZXIgdmVyc2lvbi4NDWlmKHNlZWQgIT0gMCwN CXt0aGlzVGhyZWFkLnJhbmRTZWVkID0gc2VlZH0NKTsNDXBDbGFzcyA9ICNbIkMgIiwgIkMj IiwgIkQgIiwgIkViIiwgIkUgIiwgIkYgIiwgIkYjIiwgIkcgIiwgIkFiIiwgIkEgIiwgIkJi IiwgIkIgIl07DQ0vL0EgbWlkaSBpbnN0cnVtZW50IGFuZCBhIGJsaXAgaW5zdHJ1bWVudC4g SWYgeW91IGhhdmUgTUlESSB1c2UgbWlkaUluc3QuIElmDS8vbm90LCB1c2UgYmxpcC4gVG8g Y2hhbmdlIGl0LCBzY3JvbGwgZG93biB0byBcdWdlbkZ1bmMgYW5kIHJlcGxhY2UgbWlkaUlu c3QNLy93aXRoIGJsaXBJbnN0Lg0NbWlkaUluc3QgPSB7IGFyZyBtaWRpbm90ZSwgdmVsb2Ms IHN1c3RhaW4sIG91dGVyc3ludGg7IA0JCSAgTUlESU91dChwb3J0KS5ub3RlT24oY2hhbm5l bCwgbWlkaW5vdGUsIHZlbG9jKTsNCQkgIG91dGVyc3ludGguc2NoZWQoc3VzdGFpbiwgeyAg IA0JCSAgICAgICBNSURJT3V0KHBvcnQpLm5vdGVPbihjaGFubmVsLCBtaWRpbm90ZSwgMCk7 ICANCQkgIH0pOyANCQkgIG5pbCAvLyBubyBhdWRpbyBvdXRwdXQgDQkgIH07DQ1ibGlwSW5z dCA9IHsgYXJnIGZyZXEsIGFtcCwgcGFuLCBkdXI7DQl2YXIgZW52MTsNCWVudjEgPSBFbnYu cGVyYygwLjAwMS5yYW5kLCBtYXgoMC41LCBkdXIpKTsNCQ0JUGFuMi5hcihCbGlwLmFyKGZy ZXEsIDMucmFuZCArIDIsIG11bDogRW52R2VuLmtyKGVudjEpICogYW1wKSwgcGFuKTsNfTsN DS8vVGhlIHBpdGNoIHBhdHRlcm4uIFRoZXNlIGFyZSBub3QgdGhlIHBpdGNoZXMsIGJ1dCB0 aGUgcG9zaXRpb24gaW4gdGhlIHJvdw0vL3doZXJlIHRoZSBwaXRjaCBtdXN0IGNvbWUgZnJv bS4gVGhpcyByZWZlcmVuY2UgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUNLy9hcmUgZWxl bWVudHMgaW4gdGhlIHJvdyB0aGF0IGFyZSByZXBlYXRlZCwgc28gdGhpcyBwYXR0ZXJuIGFs bG93cyBtZSB0byBtYXRjaA0vL3RoZSBjaG9pY2VzIGluIHRoZSBvcmlnaW5hbCB3aXRoIGRp ZmZlcmVudCByb3dzLg0NcGF0dCA9IFBzZXEoI1sJLy8gdGVzdCAwLCAxLCAyLCAzLCA0LCA1 LCA2LCA3LCA4LCA5LCAxMCwgMTEsDQkJCTAsMSwxLDIsMywgIDQsNSwgIDYsNyw4LDksICAx MCwxMSwxMCwxMSwgIDAsDQkJCTAsMSwxLDIsMywgIDQsNSwgIDYsNywgIDgsOSwxMCwxMSwg IDAsMCwxLDEsMSwyLDMsDQkJCTQsNSw2LCAgNyw4LDksMTAsMTEsMCwgIDEsMiwzLDQsNSw2 LDcsOCw5LCAgMTAsMTEsMCwxLDAsMSwgDQkJCTAsMSwyLDIsMiwzLDQsMyw0LDMsNCwgIDUs NSw1LDYsNyw4LDksMTAsMTEsMCwgDQkJCTEsMiwzLDQsNSwxLDIsMyw0LDUsNiw2LDYsNywg IDgsOSw5LDEwLDExLDEwLDExLDEwLDExXSwgaW5mKS5hc1N0cmVhbTsNDS8vTGlrZXdpc2Ug dGhlIG9jdGF2ZSBwYXR0ZXJuIGlzIGRpc2NyaWJlZCBoZXJlIHNlcGFyYXRlbHkuIFRoaXMg aXMgZG9uZSBzbyB0aGF0DS8vSSBjYW4gbGF0ZXIgY2hhbmdlIHRoZSBvY3RhdmVzIHVzaW5n IGEgZnVuY3Rpb24uIFRoZXkgYXJlIGFsbCBzdWJ0cmFjdGVkIGZyb20gZm91cg0vL2F0IHRo ZSBlbmQgYmVjYXVzZSB0aGUgcGl0Y2hlcyBhcmUgZ2l2ZW4gaW4gNjAgdG8gNzIsIHNvIHRo YXQgb2N0YXZlIDQgc2hvdWxkIHJlYWxseQ0vL2JlIG9jdGF2ZSAwLiBUaGlzIGlzIGp1c3Qg Zm9yIG15IG93biBzYW5pdHkuIEknbSBtb3JlIHVzZWQgdG8gb2N0YXZlIDQgYmVpbmcgQzQN DW9jdGF2ZSA9IFBzZXEoI1sJDQkJCS8vIHRlc3QgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwg NCwgNCwgNCwgNCwNCQkJNCw1LDUsMywzLCAgNCw1LCAgNiwzLDQsNSwgIDMsNCwzLDQsNSwN CQkJLy9iYXI1DQkJCTUsNCw0LDUsMywgIDQsNCw1LDQsICAyLDQsMyw1LCAgNCw0LDMsMywz LDQsNCwgDQkJCS8vYmFyIDkNCQkJNCw1LDQsICAzLDQsNCw1LDQsNSwgIDQsMywzLDQsNSwz LDQsNCw2LCAgNSw0LDIsNSwyLDUsIA0JCQkvLzEzDQkJCTIsNSw0LDQsNCwzLDQsMyw0LDMs NCwgIDQsNCw0LDUsNSw0LDMsNCw1LDUsIA0JCQkvLzE1DQkJCTMsMyw0LDQsNCwzLDMsNCw0 LDQsNSw1LDUsMywgIDQsMywzLDIsNiwyLDYsMiw2DQkJCV0tNCwgaW5mKS5hc1N0cmVhbTsN DS8vVGhpcyB2ZXJzaW9uIG9mIHRoZSBLaW5kZXJzdHVjayB2YXJpYXRpb25zIGZpcnN0IGNo b29zZXMgYSByb3cuIEl0IGNob29zZXMgYSBkaWZmZXJlbnQNLy92ZXJzaW9uIG9mIHRoZSBy b3cgdXNlZCBieSBXZWJlcm4gZWFjaCB0aW1lIGl0IGhpdHMgUC0wIGluIHRoZSBwYXR0ZXJu IGFib3ZlLiBJIG1ha2UNLy9zZXQgZXF1YWwgdG8gdGhlIHZhbHVlIGluIHRoZSBwYXR0ZXJu LiBJZiBzZXQgZXF1YWxzIDcsIHRoZW4gd2UgaGF2ZSBwcm9ncmVzc2VkIGZhciBlbm91Z2gN Ly9pbiB0aGUgcm93IHRvIHNldCBjb21wbGV0ZSB0byAwLCBpbmRpY2F0aW5nIHRoYXQgd2Ug YXJlIHByZXR0eSBtdWNoIGNvbXBsZXRlIChvciB0aGF0IHRoZQ0vL25leHQgdGltZSBzZXQg ZXF1YWxzIDAgd2UgYXJlIGNvbXBsZXRlKS4gVGhlbiBpZiBzZXQgKyBjb21wbGV0ZSBpcyAw IChib3RoIGFyZSAwKSwgdGhlbiBpdA0vL21lYW5zIHdlIGFyZSBhdCB0aGUgYmVnaW5uaW5n IG9mIGEgbmV3IGl0ZXJhdGlvbiBvZiB0aGUgcm93LCBhbmQgYSBuZXcgdmVyc2lvbiBpcyBj aG9zZW4uDS8vRmlyc3QgdGhlIHZlcnNpb247IG9yaWdpbmFsLCByZXRyb2dyYWRlLCBpbnYt cmV0cm8sIG9yIGludmVyc2lvbiBhcmUgY2hvc2VuLiBOZXh0IHRoZSANLy90cmFuc3Bvc2l0 aW9uIGlzIGNob3Nlbi4gQW5kIHRoZSByb3cgaXMgcHJpbnRlZCB0byB0aGUgc2NyZWVuLiBG aW5hbGx5IGNvbXBsZXRlIGlzIHJlc2V0DS8vdG8gMSBzbyB0aGF0IGEgbmV3IHJvdyBpc24n dCBjaG9zZW4gbmV4dCB0aW1lIGEgMCBpcyBlbmNvdW50ZXJlZCwgZXhjZXB0IGFmdGVyIHdl IGhhdmUNLy9wYXNzZWQgaGFsZndheSwgd2hpY2ggaXMgNy4gDQ1tb2R1bGFyID0gUGZ1bmMo ew0JCQkJCXZhciBzZXQ7DQkJCQkJc2V0ID0gcGF0dC5uZXh0Ow0JCQkJCWlmKHNldCA9PSA3 LCB7Y29tcGxldGUgPSAwfSk7DQkJCQkJaWYoKHNldCArIGNvbXBsZXRlKSA9PSAwLA0JCQkJ CXsNCQkJCQkJcm93ID0gI1sJDQkJCQkJCQkvL3Rlc3QgWzYwLCA2MSwgNjIsIDYzLCA2NCwg NjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzFdDQkJCQkJCQlbIDYzLCA2NCwgNjAsIDcxLCA3 MCwgNjEsIDYyLCA2OSwgNjgsIDY3LCA2NiwgNjUgXSwgLy9vDQkJCQkJCQlbIDY1LCA2Niwg NjcsIDY4LCA2OSwgNjIsIDYxLCA3MCwgNzEsIDYwLCA2NCwgNjMgXSwgLy9yDQkJCQkJCQlb IDYzLCA2MiwgNjYsIDY3LCA2OCwgNjUsIDY0LCA2OSwgNjAsIDcxLCA2MCwgNjEgXSwgLy9p DQkJCQkJCQlbIDYxLCA2MCwgNzEsIDYwLCA2OSwgNjQsIDY1LCA2OCwgNjcsIDY2LCA2Miwg NjMgXQkvL2lyDQkJCQkJCV0uY2hvb3NlOw0JCQkJCQ0JCQkJCQlbIlByaW1lIiwgIlJldHJv Z3JhZGUiLCAiYmxhbmsiLCAiSW52ZXJzaW9uIiwgIlJldHJvLUludmVyc2lvbiJdLmF0KChy b3cuYXQoNSktNjEpKS5wb3N0YzsNCQkJCQl0cmFucyA9IDEyLnJhbmQ7DQkJCQkJcm93ID0g KChyb3cgKyB0cmFucyklMTIpICsgNjA7DQkJCQkJIiBUcmFuc3Bvc2l0aW9uID0gIi5wb3N0 OyB0cmFucy5wb3N0OyAiICgiLnBvc3Q7DQkJCQkJMTIuZG8oe2FyZyBpOyBwQ2xhc3MuYXQo cm93LmF0KGkpLTYwKS5wb3N0OyAiICIucG9zdDt9KTsgIiIucG9zdDsNCQkJCQkiKSIucG9z dGxuOw0JCQkJCWNvbXBsZXRlID0gMTsNCQkJCQl9KTsNCQkJCQlyb3cuYXQoc2V0KSArIChv Y3RhdmUubmV4dCAqIDEyKSB9KTsNDQ1NSURJT3V0KHBvcnQpLnByb2dyYW0oY2hhbm5lbCwg cHJvZyk7DVBiaW5kKCANXG1pZGlub3RlLCBtb2R1bGFyLCANXGR1ciwJUHNlcSgjWw0JCQkv LyB0ZXN0IDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsDQkJCTQsIDIsIDIs IDIsIDIsIA0JCQk0LCAxMCwgDQkJCTIsIDIsIDQsIDYsIC8vNA0JCQkwLCAyLCAwLCA0LCAy LCANCQkJMiwgMiwgNCwgMiwgMiwgDQkJCTYsIDIsIDIsIDIsIA0JCQkyLCAyLCA0LCA1LA0J CQkxLCAwLCA2LCAxLCAwLjYsIDAuMywgNiwgLy80DQkJCTQsIDIsIDEuNiwgDQkJCTAuMywg MiwgNCwgMiwgMiwgMiwgDQkJCTIsIDIsIDAsIDIsIDIsIDAsIDAsIDIsIDQsIC8vMg0JCQky LCA2LCAwLCAxLCAwLCAxLCANCQkJMCwgMiwgMSwgMSwgNCwgMCwgMSwgMCwgMSwgMCwgMiwN CQkJMSwgMSwgNCwgMCwgMCwgNCwgMCwgMCwgMCwgMywgDQkJCTAsIDAsIDAsIDAsIDEsIDAs IDAsIDAsIDAsIDQsIDEsIDEsIDIsIDIsDQkJCTQsIDEsIDUsIDAsIDMsIDAsIDEsIDAsIDFd L3RtKSwNIFx2ZWxvYywgUHNlcSgjWw0gCQkJLy90ZXN0IC0zLCAtMiwgLTEsIDAsIDEsIDIs IDMsIDQsDSAJCQktMSwgLTIsIC0zLCAtMSwgLTIsIC0yLCAtMiwgMCwgLTEsIC0yLCAtMSwg LTIsIC0yLCAtMiwgLTIsIC0xLA0gCQkJLy8gNQ0gCQkJMCwgMSwgLTEsIDAsIC0xLCAtMiwg LTIsIC0xLCAwLCAxLCAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMiwgLTEsIC0xLA0g CQkJLTEsIC0xLCAwLCAxLCAwLCAtMSwgLTEsLTEsLTEsICAtMSwtMSwwLDAsMSwxLDEsMSww LDAsMSwyLDIsMSwxLA0gCQkJLy8xMw0gCQkJMCwwLDEsMCwxLC0xLC0xLC0yLC0yLC0zLC0z LDIsMCwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwNIAkJCS0xLC0xLC0xLC0xLC0xLC0xLC0x LC0xLC0xLC0xLDAsMCwwLDAsLTIsLTIsLTIsLTMsLTMsLTMsLTMsLTMsLTNdKzQqMTIrMzAs IGluZiksDSBcc3VzdGFpbiwgUHNlcSgjWw0JCQkvL3Rlc3QgMiwgMiwgMiwgMiwgMiwgMiwg MiwgMiwgMiwNCQkJNCwxLDEsMSwxLCAgMSw3LA0JCQkvL2JhciAzDQkJCTIsMiwyLDMsICAx LDEsMSwxLDEsDQkJCS8vYmFyIDUNCQkJMSwxLDEsMiwyLCAgNSwyLDIsMiwNCQkJLy9iYXIg Nw0JCQkxLDEsMSw1LCAgMC41LDAuNSw1LDAuNSwwLjUsMC41LDIsDQkJCS8vYmFyIDkNCQkJ NCwyLDQsICAwLjUsMSwyLDIsMSwyLA0JCQkvL2JhciAxMQ0JCQkxLDEsMSwxLDEsMSwxLDEs NCwgIDIsMiwwLjUsMC41LDAuNSwwLjUsDQkJCS8vYmFyIDEzDQkJCTAuNSwwLjUsMC41LDAu NSwwLjUsMC41LDAuNSwwLjUsMC41LDAuNSwwLjUsIDAuNSwwLjUsMC41LDIsMiwyLDAuNSww LjUsMC41LDAuNSwNCQkJLy9iYXIxNQ0JCQkwLjUsMC41LDAuNSwwLjUsMC41LDAuNSwwLjUs MC41LDAuNSwwLjUsMC41LDAuNSwwLjUsMSwNCQkJLy9iYXIxNg0JCQkxLDAuNSwwLjUsMiwy LDAuNSwwLjUsMC41LDAuNV0vdG0pLA0gXHVnZW5GdW5jLCAgbWlkaUluc3QNICkucGxheShj aGFubmVsczogMSwgZHVyYXRpb246IDQwKTsNDTEyNy5kbyh7YXJnIGl0ZW07IE1JRElPdXQo Mikubm90ZU9uKDEsIGl0ZW0sIDApfSkNCQkNKQ0N - --MS_Mac_OE_1761289_3021355674_MIME_Part-- - --MS_Mac_OE_3021355674_1772965_MIME_Part-- ------------------------------ Date: Tue, 28 Sep 1999 10:45:44 -0600 From: James McCartney <---@---.---> Subject: Re: reverseDo At 9:26 AM -0600 9/28/99, Mark Ballora wrote: >Looking at the ArrayedCollection.help, this example either causes a crash >or a seemingly endless stream of results until I halt it. Has anyone else >experienced this problem? Wow that's a cool bug! I'll fix it... ;-) --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Tue, 28 Sep 1999 11:41:54 -0600 From: James McCartney <---@---.---> Subject: Re: Webern variation - --============_-1273581977==_============ Content-Type: text/plain; charset="us-ascii" At 9:27 AM -0600 9/28/99, David Cottle wrote: >Hi, > >Here is a variation on Webern's Kinderstuck. The idea was to preserve all >elements except versions of the row. In the original work Webern only uses >p0 of the row. In this version each time the row finishes (pitch 0) it picks >a new version of the row. You divide the durations by tm, a tempo, however \tempo is an event parameter that is more efficient to use and has other better properties, like being able to modulate it and keep everything in sync. The way you use patt and octave by calling asStream on them and using them in the Pfunc, means that you could only have one instance of modular. A second instance would begin to double use the patt and octave streams. There is a better way to write this using a Prout instead of Pfunc so that independance is preserved. The file is attached. minor note: You have an unmatched open paren in the comment which causes paren matching not to work. - --============_-1273581977==_============ Content-Type: text/plain; name="Webern_Piano_Variation_2"; charset="us-ascii" Content-Disposition: attachment; filename="Webern_Piano_Variation_2" // Based on Webern's Kinderstuck, 1924 //Still to do: Expand aleatoric element to include octave, dynamic, and duration. //Next step, a markov version. //This is a variation on Webern's original work. Playback requires MIDI setup. //The octave, dynamic, duration, and row position do not change. Versions of //the row do change. In the origianl version Webern only uses one version of the //row; p-0. The row is Eb, E, C, B, Bb, C#, D, A, G#, G, F#, F. In this version //each time the row hits p-0 a new version and transposition is chosen. ( var blipInst, midiInst, pClass, octave, patt, modular; //Change these values based on your MIDI setup. When SC first launches it looks //for MIDI ports. Enter port number based on these values. Using 0 should work //in most situations. Channel is the MIDI playback channel (usually 1), prog is the //instrument used. "tm" is the tempo. 8 is faster, 6 is slower. Change seed if you //want to hear the same iteration (same random choices). var port = 2, channel = 1, prog = 0, tm = 8, seed = 0; if(seed != 0, {thisThread.randSeed = seed} ); pClass = #["C ", "C#", "D ", "Eb", "E ", "F ", "F#", "G ", "Ab", "A ", "Bb", "B "]; //A midi instrument and a blip instrument. If you have MIDI use midiInst. If //not, use blip. To change it, scroll down to \ugenFunc and replace midiInst //with blipInst. midiInst = { arg midinote, veloc, sustain, outersynth; MIDIOut(port).noteOn(channel, midinote, veloc); outersynth.sched(sustain, { MIDIOut(port).noteOn(channel, midinote, 0); }); nil // no audio output }; blipInst = { arg freq, amp, pan, dur; var env1; env1 = Env.perc(0.001.rand, max(0.5, dur)); Pan2.ar(Blip.ar(freq, 3.rand + 2, mul: EnvGen.kr(env1) * amp), pan); }; //The pitch pattern. These are not the pitches, but the position in the row //where the pitch must come from. This reference is necessary because there //are elements in the row that are repeated, so this pattern allows me to match //the choices in the original with different rows. patt = Pseq(#[ // test 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0,1,1,2,3, 4,5, 6,7,8,9, 10,11,10,11, 0, 0,1,1,2,3, 4,5, 6,7, 8,9,10,11, 0,0,1,1,1,2,3, 4,5,6, 7,8,9,10,11,0, 1,2,3,4,5,6,7,8,9, 10,11,0,1,0,1, 0,1,2,2,2,3,4,3,4,3,4, 5,5,5,6,7,8,9,10,11,0, 1,2,3,4,5,1,2,3,4,5,6,6,6,7, 8,9,9,10,11,10,11,10,11], inf); //Likewise the octave pattern is discribed here separately. This is done so that //I can later change the octaves using a function. They are all subtracted from four //at the end because the pitches are given in 60 to 72, so that octave 4 should really //be octave 0. This is just for my own sanity. I'm more used to octave 4 being C4 octave = Pseq(#[ // test 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,5,5,3,3, 4,5, 6,3,4,5, 3,4,3,4,5, //bar5 5,4,4,5,3, 4,4,5,4, 2,4,3,5, 4,4,3,3,3,4,4, //bar 9 4,5,4, 3,4,4,5,4,5, 4,3,3,4,5,3,4,4,6, 5,4,2,5,2,5, //13 2,5,4,4,4,3,4,3,4,3,4, 4,4,4,5,5,4,3,4,5,5, //15 3,3,4,4,4,3,3,4,4,4,5,5,5,3, 4,3,3,2,6,2,6,2,6 ]-4, inf); //This version of the Kinderstuck variations first chooses a row. It chooses a different //version of the row used by Webern each time it hits P-0 in the pattern above. I make //set equal to the value in the pattern. If set equals 7, then we have progressed far enough //in the row to set complete to 0, indicating that we are pretty much complete (or that the //next time set equals 0 we are complete). Then if set + complete is 0 (both are 0), then it //means we are at the beginning of a new iteration of the row, and a new version is chosen. //First the version; original, retrograde, inv-retro, or inversion are chosen. Next the //transposition is chosen. And the row is printed to the screen. Finally complete is reset //to 1 so that a new row isn't chosen next time a 0 is encountered, except after we have //passed halfway, which is 7. modular = Prout({ var pattStream, octStream, set, row, trans, complete = 0; //I use complete to help determine whether or not I have completed a version of a row, and //can therefore pick another version. pattStream = patt.asStream; octStream = octave.asStream; loop({ set = pattStream.next; if(set == 7, {complete = 0}); if((set + complete) == 0, { row = #[ //test [60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71] [ 63, 64, 60, 71, 70, 61, 62, 69, 68, 67, 66, 65 ], //o [ 65, 66, 67, 68, 69, 62, 61, 70, 71, 60, 64, 63 ], //r [ 63, 62, 66, 67, 68, 65, 64, 69, 60, 71, 60, 61 ], //i [ 61, 60, 71, 60, 69, 64, 65, 68, 67, 66, 62, 63 ] //ir ].choose; ["Prime", "Retrograde", "blank", "Inversion", "Retro-Inversion"].at((row.at(5)-61)).post; trans = 12.rand; row = ((row + trans)%12) + 60; " Transposition = ".post; trans.post; " (".post; 12.do({arg i; pClass.at(row.at(i)-60).post; " ".post;}); "".post; ")".postln; complete = 1; }); yield( row.at(set) + (octStream.next * 12) ) }); }); MIDIOut(port).program(channel, prog); Pbind( \midinote, modular, \dur, Pseq(#[ // test 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 10, 2, 2, 4, 6, //4 0, 2, 0, 4, 2, 2, 2, 4, 2, 2, 6, 2, 2, 2, 2, 2, 4, 5, 1, 0, 6, 1, 0.6, 0.3, 6, //4 4, 2, 1.6, 0.3, 2, 4, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 2, 4, //2 2, 6, 0, 1, 0, 1, 0, 2, 1, 1, 4, 0, 1, 0, 1, 0, 2, 1, 1, 4, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 1, 1, 2, 2, 4, 1, 5, 0, 3, 0, 1, 0, 1]/tm), \veloc, Pseq(#[ //test -3, -2, -1, 0, 1, 2, 3, 4, -1, -2, -3, -1, -2, -2, -2, 0, -1, -2, -1, -2, -2, -2, -2, -1, // 5 0, 1, -1, 0, -1, -2, -2, -1, 0, 1, 0, -1, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, 0, 1, 0, -1, -1,-1,-1, -1,-1,0,0,1,1,1,1,0,0,1,2,2,1,1, //13 0,0,1,0,1,-1,-1,-2,-2,-3,-3,2,0,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,-2,-2,-2,-3,-3,-3,-3,-3,-3]+4*12+30, inf), \sustain, Pseq(#[ //test 2, 2, 2, 2, 2, 2, 2, 2, 2, 4,1,1,1,1, 1,7, //bar 3 2,2,2,3, 1,1,1,1,1, //bar 5 1,1,1,2,2, 5,2,2,2, //bar 7 1,1,1,5, 0.5,0.5,5,0.5,0.5,0.5,2, //bar 9 4,2,4, 0.5,1,2,2,1,2, //bar 11 1,1,1,1,1,1,1,1,4, 2,2,0.5,0.5,0.5,0.5, //bar 13 0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5, 0.5,0.5,0.5,2,2,2,0.5,0.5,0.5,0.5, //bar15 0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1, //bar16 1,0.5,0.5,2,2,0.5,0.5,0.5,0.5]/tm), \ugenFunc, blipInst ).play(channels: 1, duration: 40); 127.do({arg item; MIDIOut(2).noteOn(1, item, 0)}) ) - --============_-1273581977==_============ Content-Type: text/plain; charset="us-ascii" --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: - --============_-1273581977==_============-- ------------------------------ End of sc-users-digest V1 #64 *****************************