From: owner-sc-users-digest@lists.io.com (sc-users-digest) To: sc-users-digest@lists.io.com Subject: sc-users-digest V1 #319 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 Monday, July 9 2001 Volume 01 : Number 319 ---------------------------------------------------------------------- Date: Sun, 08 Jul 2001 22:47:54 -0700 From: ben <---@---.---> Subject: Re: yes? yes. not much pacman when i was a kid though - it must have been zork 1? or maybe hunt the wumpus. anyone else remember that classic? kept me entertained for hours when i used to visit my dad at work (rca) hehe - -- ben milstein mintyfresh www.soundmangle.com - www.elmconceptions.com > From: christian adam hresko <---@---.---> > Organization: simpling > Reply-To: sc-users@lists.io.com > Date: Fri, 06 Jul 2001 18:31:42 -0400 > To: supercollider > Subject: yes? > > "Computer games don't affect kids. I mean if Pac-Man affected us as > kids, we'd all be running around in darkened rooms, munching magic pills > and listening to repetitive electronic music." > > Kristian Wilson, Nintendo, Inc, 1989 > > > > > > > ------------------------------ Date: Sun, 08 Jul 2001 22:49:21 -0700 From: ben <---@---.---> Subject: Re: soundfile as wavetable cheers nic can i take credit anyway? hehehe thanks for the code...... (and the beer ;) - -- ben milstein mintyfresh www.soundmangle.com - www.elmconceptions.com > From: nicolocollinsi <---@---.---> > Reply-To: sc-users@lists.io.com > Date: Sun, 08 Jul 2001 21:36:07 -0700 > To: sc-users@lists.io.com > Subject: Re: soundfile as wavetable > > > > nicolocollinsi wrote: > >> I like ben's solution > > Quick apology- that should be Alberto de Campo! > > Cheers > > > ------------------------------ Date: Sun, 08 Jul 2001 22:49:47 -0700 From: nicolocollinsi <---@---.---> Subject: breakbeat cutting This is a multi-part message in MIME format. - --------------19AB9F559ADC1631E0F086D0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi everyone, As promised to various people, I'm releasing some code I've developed for automatic cutting of breakbeats (or any sample) in the style of jungle/drum and bass. This was presented two weeks ago in a paper at deMontford's Music Without Walls conference, and demoed at hy/brids this weekend. I'll also be showing live patches that utilise it at the London SuperCollider event at Public Life next weekend. A ZIP file with the data should be available from my academic web site at www.axp.mdx.ac.uk/~nicholas15 from later this week. The distribution is of two classes and two help files. The SoundFiles class is just for convenience for storing all those awkward sound file parameters, and working out playback rates for running all samples at a common tempo. I know that various people have their own versions of this sort of class available, sorry about the duplication. And apologies if BreakBeat3 and SoundFiles seem clunky names for classes, or if there are lots of commented out postlns hiding in the code from debugging... Please rewrite any of the code, invent your own variations. I'd appreciate any feedback people want to give, if they've written similar algorithms themselves, if they have an interesting academic reference for algorithmic composition of dance music, or if they just have fun with this! Cheers Nick Collins - --------------19AB9F559ADC1631E0F086D0 Content-Type: text/plain; charset=us-ascii; x-mac-type="54455854"; x-mac-creator="53436A6D"; name="BreakBeat3.help" Content-Transfer-Encoding: 7bit Content-Description: Unknown Document Content-Disposition: inline; filename="BreakBeat3.help" BreakBeat3 Breakbeat3.ar(soundfiles, index, subdiv, maxphrase, repeatchance, stutterspeed, stutterchance, pan, restchance, ampfunc) BreakBeat3 automatically generates cutups of a source sound file in the style of drum and bass/jungle breakbeat manipulations. It uses the SoundFiles class. The prototypical cut sequence favoured over one bar with eighth note subdivisions would be 3+ 3R + 2 where we take a 3 unit block from the source's start, repeat it, then 2 units from the 7th and 8th eighth notes of the source. We talk of rendering phrases (a sequence of cuts before reaching a new phrase at the beginning of a bar) and units (as subdivision th notes). There are a lot of parameters, though defaults exist for all but the first. Many more variations of the algorithm and parameters are possible, so simply hack the source code to create your own versions. A BreakBeat3 object will automatically check using thisSynth for the tempo at which to run. soundfiles - a SoundFiles object. You will have specified how many beats there are to the source when you set up that object index - index into the SoundFiles object subdiv - subdivisions unit, for a 4/4 bar or the length of the source if less. maxphrase- the output cuts are generated in phrases, Each phrase is from 1 to maxphrase bars. repeatchance - the tail of a phrase has this chance of becoming a single repeating one unit cell stutter (0.0 to 1.0) stutterspeed - the stutter can be an integer multiple of the subdivision speed. For instance, if subdiv is 8 (quavers) and stutterspeed is 2, then the stutter is in semiquavers (subdiv 16). stutterchance - the stutter can either be in subdiv units or in subdiv*stutterspeed units. The stutterchance from 0.0 to 1.0 and is the chance of the latter. pan - pan position for the current cut (-1.0 to 1.0) restchance - chance (0.0 to 1.0) of leaving a gap rather than rendering the next cut ampfunc - variable amplitude for each cut, usually 0.0 to 1.0 all parameters after subdiv respond to the value message, so you can pass Refs or functions. (even though subdiv cannot be changed as we go in this version- it could easily be changed with every new phrase by hacking the code. Call the input parameter next subdiv and each phrase allow subdiv= nextsubdiv.value. You must also update the unitspersound type parameters that depend on subdiv inside the main loop, not once at the start) Examples- please use a breakbeat source to hear the real use of the algorithm... ( //default eighth note cutups { var sf; sf= SoundFiles.new.init([":Sounds:floating_1"],[2]); thisSynth.tempo_(2.4); //144 bpm sf.workOutTempi(thisSynth.tempo); BreakBeat3.ar(sf) }.play; ) ( //showing use of all parameters { var sf; sf= SoundFiles.new.init([":Sounds:floating_1"],[2]); thisSynth.tempo_(2.4); //144 bpm sf.workOutTempi(thisSynth.tempo); BreakBeat3.ar(sf,0, 7, //7th note cutups (over 2 beat source) 3, //phrases up to 3 times source beats= 6 beats 0.5, //relatively frequent stutters 2, //stutterspeed works out as 7*2= 14th notes 1.0, //always stutter at this 14th note rate {if(0.5.coin,{-1.0},{1.0})}, //panning function to send any cut either extreme left or right 0.1, //1 in 10 cuts is a rest {0.5+ (0.5.rand)} //ampfunc ) }.play; ) //////////// For additional data on the algorithm see Nick Collins, "Algorithmic Composition Methods for BreakBeat Science", Proceedings of Music Without Walls, ISBN 1857213319 reproduced at http://www.axp.mdx.ac.uk/~nicholas15/ //////////// - --------------19AB9F559ADC1631E0F086D0 Content-Type: text/plain; charset=us-ascii; x-mac-type="54455854"; x-mac-creator="53436A6D"; name="BreakBeat3.sc" Content-Transfer-Encoding: 7bit Content-Description: Unknown Document Content-Disposition: inline; filename="BreakBeat3.sc" //BreakBeat3 class by N.M.Collins June 2001 //for use with SoundFiles class //allows repeaters of twice subdiv speed //maxphrase,repeatchance,stutterspeed,stutterchance, pan, restchance,ampfunc all respond to value so can be functions //only subdiv and index can't be changed on the run //corrected to allow any sample length, divided by subdiv //bars aren't always assumed to have four beats BreakBeat3 { *ar{ arg sf,index=0,subdiv=8,maxphrase=3,repeatchance=0.2,stutterspeed=2,stutterchance=1.0,pan=0.0,restchance=0.0,ampfunc=1.0; var output, tspawn; var playbackspeed; var secperbeat, secperbar, secperunit; var soundlengthsecs, soundlengthbeats,soundlengthunits,soundlengthbars,soundlengthsamples; var samplesperbeat,samplesperbar,samplesperunit; //variables persisting between calls to sched var basebar, basebeat, numbarsnow, unitblock,unitsdone,totalunits,repeats,repeatsdone, blockstartsamp, blockdursec; basebar=0;basebeat=0; unitsdone=0;totalunits=0;unitblock=0; repeats=0;repeatsdone=0; numbarsnow=0; blockstartsamp=0;blockdursec=1.0; playbackspeed=sf.playbackspeed.at(index); //now lock into the chosen tempo //bpm= thisSynth.tempo*60; secperbeat= sf.secperbeat.at(index); secperbar= 4*secperbeat; secperunit= secperbar/subdiv; //sound length in beats soundlengthsecs= sf.length.at(index); //Signal //got sound length in seconds- now in beats soundlengthbeats= soundlengthsecs/secperbeat; //for calculating loopstart, loopend soundlengthbars= (soundlengthbeats/ 4.0).asInteger; if(soundlengthbars<1, {soundlengthbars=1}); //can be less than four beats in a bar //if(soundlengthbars<1,{"sound too short".postln;thisSynth.quit;}); samplesperbeat= (sf.sound.at(index).sampleRate*secperbeat).asInteger; //unneeded now //samplesperbar= samplesperbeat*4; //samplesperbar= (sound.sampleRate*(secperbar)).asInteger; soundlengthbeats=soundlengthbeats.asInteger; soundlengthsamples= soundlengthbeats*samplesperbeat; //samplesperbar*soundlengthbars; soundlengthunits= subdiv*soundlengthbars; //if(soundlengthunits==0, {soundlengthunits=subdiv;}); //soundlengthbeats= soundlengthbars*4; output = TSpawn.ar( { arg argTSpawn, i, synth, pan, dur, offset,amp; //dur already in seconds, offset in samples var e; var x,l; l= (dur/playbackspeed); x= (l*0.1).min(0.01); //sample is played looped //e = Env.new([0,1,1,0],[0.01, hold, 0.01], 'linear', nil); e= Env.linen(x, l - (2*x), x, 1.0, \welch); Pan2.ar( EnvGen.ar(e,PlayBuf.ar(sf.signal.at(index), sf.sound.at(index).sampleRate, playbackspeed, offset, 0, soundlengthsamples)), pan,amp ) } , 2, nil, 0); // 'output' is an Array of OutputProxys. // In order to access the TSpawn, the 'source' method is applied to 'output'. tspawn = output.source; //rhythmically schedule Synth in Beats thisSynth.sched(0, { arg sameSynth, now, task; var panpos,amplitude; var duration; var unitsleft, unitproj; var oddmax; var soundposbeats; unitsleft=0; panpos= pan.value; //2.0.rand - 1.0; if(unitsdone>=totalunits, //calculate new targets { //"CalculateNewPhrase".postln; basebar= basebar+ numbarsnow; basebeat= now; //new numbarsnow numbarsnow= maxphrase.value;//maxphrase.rand+1; //"numbarsnow".postln;numbarsnow.postln; totalunits= numbarsnow*subdiv; unitsdone= 0; repeats=0; repeatsdone=0; //force trigger of new cut, just in case params not right } ); //now continue to work through rhythms unitsleft= totalunits- unitsdone; /*"Repeatsandcutsdata".postln; repeatsdone.postln; repeats.postln; totalunits.postln; unitsdone.postln; */ if (repeatsdone>= repeats, //new cut to calculate- CAUTION- this algorithm is different to the original C generate and test! { //"CalculateNewCut".postln; repeatsdone=0; //chance of stutter if( (repeatchance.value.coin) && (unitsleft unitsleft }, {unitblock=unitblock-2;}); if(unitblock<=0, {"this should never happen".postln}); repeats= 2.rand+1; //should be 1 or 2- ALLOW A VARIABLE HERE!!!!!!!!!! unitproj= (repeats*unitblock)+ unitsdone; if(unitproj>totalunits, { //can't fit repeats in, repeats=1; unitblock= unitsleft; //"got here".postln; } ); } ); //work out blocks sample params //where are we up to in the sample? soundposbeats= now % soundlengthbeats; blockstartsamp=(soundposbeats* samplesperbeat) % soundlengthsamples; blockdursec= unitblock*secperunit; /*"Sampdata".postln; blockstartsamp.postln; blockdursec.postln; */ } ); //unitblock.postln; //if(repeatsdone>0, {"r".postln;}); //now know what to write //calculate sample position amplitude= ampfunc.value; if(restchance.value.coin,{amplitude=0.0}); tspawn.trigger(panpos, blockdursec,blockstartsamp,amplitude); //start unitsdone= unitsdone+ unitblock; repeatsdone= repeatsdone+1; //next timepos for call is? //timepos= basebeat+ 4.0*(unitsdone/subdiv.asFloat); //duration in beats of a unitblock duration= (unitblock/subdiv)*4.0; //"Duration".postln;duration.postln; thisSynth.sched(duration, task); }); // schedule ^output } } - --------------19AB9F559ADC1631E0F086D0 Content-Type: text/plain; charset=us-ascii; x-mac-type="54455854"; x-mac-creator="53436A6D"; name="SoundFiles.help" Content-Transfer-Encoding: 7bit Content-Description: Unknown Document Content-Disposition: inline; filename="SoundFiles.help" SoundFiles Superclass: Object A convenience class for dealing with opening multiple (mono) sound files, and running them at a synchronised playback speed. A SoundFiles object will contain all usually necessary parameters for such manipulations. If the sound files are stereo, only the left channel will be taken. The further assumption is that there are a fixed number of beats to a sample. Class Methods *new (inherited from Object) Instance Methods init(filenames, beatspersound) filenames - an Array of filename strings. beatspersound- a matching Array of Integers. Beats per sound is enough information to work out the original tempi of the soundfiles. workOutTempi(bps) bps - a desired beatspersecond. The required playbackspeed for all sound files is calculated. workOutTempiBPM(bpm) bpm - a desired beatsperminute. The required playbackspeed for all sound files is calculated. averageBPS Return the average BPS of all sound files. setAverageBPS ( var sf; sf= SoundFiles.new.init([":Sounds:floating_1"],[2]); //source sound file taken as 2 beats long (60.0/sf.secperbeat.at(0)).postln; //print original bpm assuming 2 beats per sound { thisSynth.tempo_(3); //180 bpm sf.workOutTempi(thisSynth.tempo); PlayBuf.ar(sf.signal.at(0),sf.sound.at(0).sampleRate,sf.playbackspeed.at(0),0,0,sf.signal.at(0).size-2); }.play ) - --------------19AB9F559ADC1631E0F086D0 Content-Type: text/plain; charset=us-ascii; x-mac-type="54455854"; x-mac-creator="53436A6D"; name="SoundFiles.sc" Content-Transfer-Encoding: 7bit Content-Description: Unknown Document Content-Disposition: inline; filename="SoundFiles.sc" //convenience class for soundfiles data, and calculating playbackspeeds for a common tempo //by N.M.Collins, May 2001 SoundFiles { var Subject: London SC Day Just a quick reminder that the London Supercollider day is this Saturday Time : 2pm - late Saturday 14th July Place : Public Life http://www.publiclife.org Commercial Rd Shoreditch London StreetMap: http://www.streetmap.co.uk/streetmap.dll?G2M?X=533750&Y=181750&A=Y&Z=1 nearest tube : Liverpool St or Whitechapel nb. public life is by the entrance to Hawksmoors Spitalfields Church, right by the market. Can I ask that speakers try to get there at least half an hour early to set up, etc. Note that the venue will be open until late - see their site for details - so it will be easy enough to hang around after the event to chat, etc. there may even be the possibility of playing after the main events have finished. If in doubt, bring your mac..... Free Admission Agenda John Eacott : "Movement - Fluid, Beat-based Music" Nick Collins : "Algorithmic Composition Methods for Breakbeat Science" Jem Finer : "One Finger Music and the Terror of Infinity" Ben Milstein : "Why generative dance music?" Matt Rogalsky : "On Radio Silence..." Bourbonese Qualk : "On Certainty" Please pass this on to others and encourage them to turn up on the day. - -- { andy wilson << managing director << LShift << www.lshift.net } { www.andyw.com && www.faust-pages.com && www.directorxml.com } ------------------------------ Date: Mon, 09 Jul 2001 14:51:34 +0000 From: Jem Finer <---@---.---> Subject: mysteries of the MOTU 828 driver > 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_3077535094_1278314_MIME_Part Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit Has anyone tried the MOTU 828 interface ? Works great "as is" - 8 channel examples appear on the 8 analogue outs no problem . . . but . . . a) sending outputs on ADAT optical to a digital mixer nothing appears to happen. I discovered via trying it out with Logic Audio that the ASIO driver sends digital out on channels 9 - 16. (optical input is also ch 9 - 16) So I wrote this in Main : hardwareSetup { super.hardwareSetup; false.trace; if (Synth.hardwareName == 'MOTU 828', { Synth.setOutputRouting([9,10,11,12,13,14,15,16]); Synth.setInputRouting([ 9,10,11,12,13,14,15,16]); },{ Synth.normalRouting; }); BUT what happens is that channel 1 out of SC seems to end up on all 8 optical channels. Even running a mono patch still outputs on all 8 optical channels. Am I writing the routing code wrong ? b) going back to analogue all is fine . . . but what if I want to output a stereo patch on, for example, channels 3 & 4. I thought I could write : Synth.setOutputRouting([3,4]); or thisSynth.setOutputRouting([3,4]); - maybe not because setOutputRouting is a class method ? So how would I send output to a specific group of channels ? For example if I wanted to be able to switch between 3 & 4 for monitoring and 1 & 2 for output ? cheers, Jem - --MS_Mac_OE_3077535094_1278314_MIME_Part Content-type: text/html; charset="US-ASCII" Content-transfer-encoding: quoted-printable mysteries of the MOTU 828 driver Has anyone tried the MOTU 828 interface ?

Works great "as is" - 8 channel examples appear on the 8 analogue= outs no problem . . . but . . .

a) sending outputs on ADAT optical to a digital mixer nothing appears to ha= ppen. I discovered via trying it out with Logic Audio that the ASIO driver s= ends digital out on channels 9 - 16. (optical input is also ch 9 - 16)

So I wrote this in Main :


hardwareSetup {
      super.har= dwareSetup;
      false.tra= ce;
     
      if (Synth= .hardwareName =3D=3D 'MOTU 828', {
          Synth.setOutputRouting([9,10,11,12,13,14,15,16]);
          Synth.setInputRouting([ 9,10,11,12,13,14,15,16]);
      },{
          Synth.normalRouting;
      });


BUT what happens is that channel 1 out of SC seems to end up on all 8 optic= al channels. Even running a mono patch still outputs on all 8 optical channe= ls.



Am I writing the routing code wrong ?



b) going back to analogue all is fine . . . but what if I want to output a = stereo patch on, for example, channels 3 & 4.

I thought I could write :

Synth.setOutputRouting([3,4]);

or

thisSynth.setOutputRouting([3,4]); - maybe not= because setOutputRouting is a class method ?


So how would I send output to a specific group of channels ? For example if= I wanted to be able to switch between 3 & 4 for monitoring and 1 & = 2 for output ?



cheers,


Jem

- --MS_Mac_OE_3077535094_1278314_MIME_Part-- ------------------------------ Date: Mon, 09 Jul 2001 17:44:11 +0200 From: Scott Wilson <---@---.---> Subject: .sched? > 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_3077545451_1494633_MIME_Part Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit Below is one event which is part of a Routine which functions as an event list. Since the rate of this event is being controlled in realtime via SetTempo, I need to schedule something in beats. However, mysynth.sched happens immediately, even with the tempo stuff commented out as below. tsched does not. This is only a problem if this is not the first event, if it is, it works fine. tspawn.triggerSynth(Synth.new({ arg mysynth; message.value("J triggered"); //mysynth.newTempoBase(1); //SetTempo.kr(mysynth, level + 0.05); mysynth.sched(21, { score.next }); orc.at(\freeInReswithInT).value(frames: \okaysecond, freqScal: 2, frameTime: 0.1, myLevel: Slope.kr(level, 0.01) * 0.2, env: 1) * EnvGen.kr(Env.asr(0, 1, 1, 1, - 4)) })).yield; What am I missing? Thanks, S. - --MS_Mac_OE_3077545451_1494633_MIME_Part Content-type: text/html; charset="US-ASCII" Content-transfer-encoding: quoted-printable .sched? Below is one event which is part of a Routine which functions as an eve= nt list. Since the rate of this event is being controlled in realtime via Se= tTempo, I need to schedule something in beats. However, mysynth.sched happen= s immediately, even with the tempo stuff commented out as below. tsched does= not. This is only a problem if this is not the first event, if it is, it wo= rks fine.

tspawn.triggerSynth(Synth.new({ arg mysynth;
           message.= value("J triggered");
           //mysynt= h.newTempoBase(1);
           //SetTempo.kr(mysynth, level + 0.05);
           mysynth.= sched(21, { score.next });
           orc.at(<= FONT COLOR=3D"#007000">\freeInReswithInT).value(frames: \okaysecond, freqScal: 2, frameTime: 0.1,    &n= bsp;      
            &n= bsp;  myLevel: Slope.kr(level, 0.01) = * 0.2, env: 1)
           * EnvGen.kr(Env.asr(0, 1, = 1, 1, - 4))
       })).yield;

What am I missing?

Thanks,

S.
- --MS_Mac_OE_3077545451_1494633_MIME_Part-- ------------------------------ Date: Mon, 09 Jul 2001 10:57:17 -0500 From: James McCartney <---@---.---> Subject: Re: .sched? > on 7/9/01 10:44 AM, Scott Wilson at sdwilson@mail.wesleyan.edu wrote: > > Below is one event which is part of a Routine which functions as an event > list. Since the rate of this event is being controlled in realtime via > SetTempo, I need to schedule something in beats. However, mysynth.sched > happens immediately, even with the tempo stuff commented out as below. tsched > does not. This is only a problem if this is not the first event, if it is, it > works fine. > > tspawn.triggerSynth(Synth.new({ arg mysynth; > message.value("J triggered"); > //mysynth.newTempoBase(1); > //SetTempo.kr(mysynth, level + 0.05); > mysynth.sched(21, { score.next }); > orc.at(\freeInReswithInT).value(frames: \okaysecond, freqScal: 2, frameTime: > 0.1, > myLevel: Slope.kr(level, 0.01) * 0.2, env: 1) > * EnvGen.kr(Env.asr(0, 1, 1, 1, - 4)) > })).yield; > > What am I missing? > > Thanks, > > S. If I am reading this correctly, you should not be using mysynth as the scheduler since that is only in existence for one event. You need to use an enclosing synth. outersynth.sched(...) If you are using a Routine then you could also use .wait to schedule things. - --- james mccartney james@audiosynth.com SuperCollider - a real time synthesis programming language for the PowerMac. ------------------------------ Date: Mon, 09 Jul 2001 18:12:06 +0200 From: Scott Wilson <---@---.---> Subject: Re: .sched? on 7/9/01 5:57 PM, James McCartney at asynth@io.com wrote: >> on 7/9/01 10:44 AM, Scott Wilson at sdwilson@mail.wesleyan.edu wrote: >> >> Below is one event which is part of a Routine which functions as an event >> list. Since the rate of this event is being controlled in realtime via >> SetTempo, I need to schedule something in beats. However, mysynth.sched >> happens immediately, even with the tempo stuff commented out as below. tsched >> does not. This is only a problem if this is not the first event, if it is, it >> works fine. >> >> tspawn.triggerSynth(Synth.new({ arg mysynth; >> message.value("J triggered"); >> //mysynth.newTempoBase(1); >> //SetTempo.kr(mysynth, level + 0.05); >> mysynth.sched(21, { score.next }); >> orc.at(\freeInReswithInT).value(frames: \okaysecond, freqScal: 2, frameTime: >> 0.1, >> myLevel: Slope.kr(level, 0.01) * 0.2, env: 1) >> * EnvGen.kr(Env.asr(0, 1, 1, 1, - 4)) >> })).yield; >> >> What am I missing? >> >> Thanks, >> >> S. > > If I am reading this correctly, you should not be using mysynth as the > scheduler since that is only in existence for one event. You need to use an > enclosing synth. outersynth.sched(...) > > If you are using a Routine then you could also use .wait to schedule things. > > > > --- james mccartney james@audiosynth.com > SuperCollider - a real time synthesis programming language for the PowerMac. > > > > So are you saying I need to wrap this in another Spawn? I need the tempo of this event to be independent of other events being spawned in the outermost synth. S. ------------------------------ Date: Mon, 09 Jul 2001 12:16:18 -0500 From: James McCartney <---@---.---> Subject: Re: .sched? on 7/9/01 11:12 AM, Scott Wilson at sdwilson@mail.wesleyan.edu wrote: > So are you saying I need to wrap this in another Spawn? I need the tempo of > this event to be independent of other events being spawned in the outermost > synth. > > S. Your TSpawn is operating in some enclosing synth. Use that synth to be the scheduler. I don't understand about tempo independant per event. You mean you are trying to have several independant tempo streams? In that case you would have to spawn a synth for each stream. and use that as the scheduler. - --- james mccartney james@audiosynth.com SuperCollider - a real time synthesis programming language for the PowerMac. ------------------------------ Date: Mon, 09 Jul 2001 19:33:13 +0200 From: Scott Wilson <---@---.---> Subject: Re: .sched? on 7/9/01 7:16 PM, James McCartney at asynth@io.com wrote: > on 7/9/01 11:12 AM, Scott Wilson at sdwilson@mail.wesleyan.edu wrote: > >> So are you saying I need to wrap this in another Spawn? I need the tempo of >> this event to be independent of other events being spawned in the outermost >> synth. >> >> S. > > Your TSpawn is operating in some enclosing synth. Use that synth to be the > scheduler. > > I don't understand about tempo independant per event. > You mean you are trying to have several independant tempo streams? > In that case you would have to spawn a synth for each stream. and use that > as the scheduler. > > --- james mccartney james@audiosynth.com > SuperCollider - a real time synthesis programming language for the PowerMac. > I want this event (by which I mean the ugen graph function that is spawned in this particular case) to have a separate tempo control to other things that are being spawned. i.e. to be able to vary the tempo of this event and have something scheduled 21 beats after it is spawned, without regard to other events, which are not effected by the SetTempo. So I need to schedule in a different tempobase from the main one yes? But when I spawn the event the scheduled function seems to be evaluated immediately. So do I need to wrap something in another synth? If so at what level? The TSpawn is in the top level Synth. S. S. ------------------------------ Date: Mon, 09 Jul 2001 12:53:06 -0500 From: James McCartney <---@---.---> Subject: Re: .sched? on 7/9/01 12:33 PM, Scott Wilson at sdwilson@mail.wesleyan.edu wrote: > I want this event (by which I mean the ugen graph function that is spawned > in this particular case) to have a separate tempo control to other things > that are being spawned. i.e. to be able to vary the tempo of this event and > have something scheduled 21 beats after it is spawned, without regard to > other events, which are not effected by the SetTempo. So I need to schedule > in a different tempobase from the main one yes? But when I spawn the event > the scheduled function seems to be evaluated immediately. > > So do I need to wrap something in another synth? If so at what level? The > TSpawn is in the top level Synth. > > S. > S. > A synth's scheduling queue only lasts as long as the synth does, so if you want to schedule something at a certain time you must do it in a synth that exists at that time. So to schedule a next event after some event then you need to have a synth that encloses them. If you need separate tempo streams then you will need a synth per stream. Is the TSpawn supposed to be triggering an entire series of events with an independant tempo stream? If so then you do need one more level of spawning. tspawn.triggerSynth(Synth.new({ arg schedsynth; ... schedsynth.newTempoBase(1); SetTempo.kr(schedsynth, level + 0.05) Spawn({ arg spawn, i, synth; spawn.nextTime = ..get from score.. ..create the event from score.. }); }); - --- james mccartney james@audiosynth.com SuperCollider - a real time synthesis programming language for the PowerMac. ------------------------------ Date: Mon, 9 Jul 2001 13:56:12 -0400 From: Phil C <---@---.---> Subject: test... ignore Third time trying to get on the list, making sure i am actually on this time... ------------------------------ Date: Mon, 09 Jul 2001 14:33:53 -0400 From: christian adam hresko <---@---.---> Subject: .sr what in the hell is spectral rate? this is in the docs, but i can't seem to find a definition for it. cheers, christian ------------------------------ Date: Mon, 9 Jul 2001 23:12:03 +0200 From: Arie van Schutterhoef <---@---.---> Subject: Re: .sr >what in the hell is spectral rate? - -Is the rate at which the spectral buffer gets updated... Found in the Unit Generators Help File: "A2S audio rate to spectral rate converter A2S.ar(fftsize, fftoffset, real, imag) This takes an audio rate signal and streams it in to spectral rate. Spectral rate calculations take place each time the spectral buffer gets filled. fftsize - the size of the spectrum buffer. Must be a power of two. fftoffset - delay offset useful for overlapping multiple spectra. real - spectral rate real input. imag - spectral rate imaginary input." AvS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .................................................................. ^ Arie van Schutterhoef | arsche@xs4all.nl ^_北北北北北北北北北北北盻_""""""""""""""""""""""""""""""""" | ` |Schreck Ensemble http://www.xs4all.nl/~schreck/ | ` |# -laboratory for live electro-acoustic music- # | ` |Tel: 00-31-71-5612287 Fax: 00-31-70-3859268 | *========================================================++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .................................................................. ------------------------------ Date: Mon, 09 Jul 2001 17:27:29 -0400 From: christian adam hresko <---@---.---> Subject: Re: .sr Arie van Schutterhoef wrote: > >what in the hell is spectral rate? > -Is the rate at which the spectral buffer gets updated... > > Found in the Unit Generators Help File: > > "A2S audio rate to spectral rate converter > A2S.ar(fftsize, fftoffset, real, imag) > This takes an audio rate signal and streams it in to spectral rate. > Spectral rate calculations take place each time the spectral buffer gets > filled. > fftsize - the size of the spectrum buffer. Must be a power of two. > fftoffset - delay offset useful for overlapping multiple spectra. > real - spectral rate real input. > imag - spectral rate imaginary input." > > AvS > and the spectral buffer is??? i got this much out of the help file as well. i just want to know what a spectral buffer is, and how it differs from the audio buffer. or are these the same? and if not, why are there two buffers? what would you use this for? is this some sort of frequency domain buffer as opposed to a time domain buffer? (i know this may or may not make any sense... i'm just throwing out ideas) i'm guessing from the 'imag' argument, that we're dealing with those nice little X and O poles...? thanks for your help. cheers, christian ------------------------------ Date: Mon, 9 Jul 2001 23:52:18 +0200 From: Arie van Schutterhoef <---@---.---> Subject: Re: .sr >and the spectral buffer is??? - -the place where the spectral processing is done the longer the buffer the more processing is done. spectral rate is how many times this is done >i just want to know what a spectral buffer is, and how it differs from the >audio buffer. or are these the same? and if not, why are there two >buffers? >what would you use this for? - -spectral buffers come in place when fft's (fft --->ifft) are used... audio buffers are used for all in/output... >is this some sort of frequency domain buffer as opposed to a time domain >buffer? (i know this may or may not make any sense... i'm just throwing >out ideas) - -time and frequency are intrinsically linked to eachother... AvS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .................................................................. ^ Arie van Schutterhoef | arsche@xs4all.nl ^_北北北北北北北北北北北盻_""""""""""""""""""""""""""""""""" | ` |Schreck Ensemble http://www.xs4all.nl/~schreck/ | ` |# -laboratory for live electro-acoustic music- # | ` |Tel: 00-31-71-5612287 Fax: 00-31-70-3859268 | *========================================================++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .................................................................. ------------------------------ Date: Tue, 10 Jul 2001 00:09:32 +0200 From: Arie van Schutterhoef <---@---.---> Subject: Re: .sr >> fftsize - the size of the spectrum buffer. Must be a power of two. >> fftoffset - delay offset useful for overlapping multiple spectra. >> real - spectral rate real input. >> imag - spectral rate imaginary input." Some illuminating information on spectral analysis can be found at: http://www.dspguide.com/specanal.htm AvS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .................................................................. ^ Arie van Schutterhoef | arsche@xs4all.nl ^_北北北北北北北北北北北盻_""""""""""""""""""""""""""""""""" | ` |Schreck Ensemble http://www.xs4all.nl/~schreck/ | ` |# -laboratory for live electro-acoustic music- # | ` |Tel: 00-31-71-5612287 Fax: 00-31-70-3859268 | *========================================================++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .................................................................. ------------------------------ Date: Mon, 09 Jul 2001 17:17:50 -0500 From: James McCartney <---@---.---> Subject: Re: .sr > > and the spectral buffer is??? the buffer for the FFT. fftsize = number of frequency bins. The FFT buffer is usually larger than the audio buffer, hence a separate calculation rate. - --- james mccartney james@audiosynth.com SuperCollider - a real time synthesis programming language for the PowerMac. ------------------------------ End of sc-users-digest V1 #319 ******************************