From: owner-sc-users-digest@lists.io.com (sc-users-digest) To: sc-users-digest@lists.io.com Subject: sc-users-digest V1 #42 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 Wednesday, May 26 1999 Volume 01 : Number 042 ---------------------------------------------------------------------- Date: Mon, 17 May 1999 12:01:13 -0500 From: "Valentine, Bob" <---@---.---> Subject: [none] 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. - ------_=_NextPart_000_01BEA086.DFB27E12 Content-Type: text/plain unsubscribe sc-users - ------_=_NextPart_000_01BEA086.DFB27E12 Content-Type: application/ms-tnef Content-Transfer-Encoding: base64 eJ8+IhARAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEIgAcAGAAAAElQTS5NaWNy b3NvZnQgTWFpbC5Ob3RlADEIAQWAAwAOAAAAzwcFABEADAABAA0AAQAHAQEggAMADgAAAM8HBQAR AAwAAQAPAAEACQEBCYABACEAAABGOUI0MEY2MTc2MENEMzExODIzQTAwQTBDOUEyNDIyQgADBwEE gAEAAQAAAAAAAAENgAQAAgAAAAIAAgABA5AGADgFAAAtAAAAAwAFgAggBgAAAAAAwAAAAAAAAEYA AAAAUoUAAPMVAAAeACWACCAGAAAAAADAAAAAAAAARgAAAABUhQAAAQAAAAUAAAA4LjA0AAAAAAMA JoAIIAYAAAAAAMAAAAAAAABGAAAAAAGFAAAAAAAACwAAgAggBgAAAAAAwAAAAAAAAEYAAAAAA4UA AAAAAAALAC+ACCAGAAAAAADAAAAAAAAARgAAAAAOhQAAAAAAAAMAAoAIIAYAAAAAAMAAAAAAAABG AAAAABCFAAAAAAAAAwAwgAggBgAAAAAAwAAAAAAAAEYAAAAAEYUAAAAAAAADADKACCAGAAAAAADA AAAAAAAARgAAAAAYhQAAAAAAAB4AQYAIIAYAAAAAAMAAAAAAAABGAAAAADaFAAABAAAAAQAAAAAA AAAeAEKACCAGAAAAAADAAAAAAAAARgAAAAA3hQAAAQAAAAEAAAAAAAAAHgBDgAggBgAAAAAAwAAA AAAAAEYAAAAAOIUAAAEAAAABAAAAAAAAAAIBCRABAAAAcAAAAGwAAACKAAAATFpGdQP85cMDAAoA cmNwZzEyNRYyAPgLYG4OEDAzM50B9yACpAPjAgBjaArAYHNldDAgBxMCgH0ZCoF1YwBQCwN1bG4l AiBlC6YgdQCAdWKRBPJiZSAE8C11ETAvESAKogqAEfEAFZADACYAAAAAAAMANgAAAAAACwACAAEA AAACAXEAAQAAABYAAAABvqCHEw7IxVYnDEwR06m3gFud9xVSAABAADkA8BmZ3oagvgEDAPE/CQQA AB4AMUABAAAACQAAAFZBTEVOVElOAAAAAAMAGkAAAAAAHgAwQAEAAAAJAAAAVkFMRU5USU4AAAAA AwAZQAAAAAADAP0/5AQAAB4AcAABAAAAAQAAAAAAAAADAIAQ/////wIBRwABAAAANwAAAGM9VVM7 YT0gO3A9Q29sbGVnZSBvZiBEdVBhZztsPU1TRTEtOTkwNTE3MTcwMTEzWi0zMzY0NgAAAgH5PwEA AABVAAAAAAAAANynQMjAQhAatLkIACsv4YIBAAAAAAAAAC9PPUNPTExFR0UgT0YgRFVQQUdFL09V PURVUEFHRS9DTj1SRUNJUElFTlRTL0NOPVZBTEVOVElOAAAAAB4A+D8BAAAADwAAAFZhbGVudGlu ZSwgQm9iAAAeADhAAQAAAAkAAABWQUxFTlRJTgAAAAACAfs/AQAAAFUAAAAAAAAA3KdAyMBCEBq0 uQgAKy/hggEAAAAAAAAAL089Q09MTEVHRSBPRiBEVVBBR0UvT1U9RFVQQUdFL0NOPVJFQ0lQSUVO VFMvQ049VkFMRU5USU4AAAAAHgD6PwEAAAAPAAAAVmFsZW50aW5lLCBCb2IAAB4AOUABAAAACQAA AFZBTEVOVElOAAAAAEAABzCWKJnehqC+AUAACDASfrLfhqC+AR4APQABAAAAAQAAAAAAAAAeAB0O AQAAAAEAAAAAAAAAHgA1EAEAAAA2AAAAPEY5N0NDRjBFMzBCOEQxMTE4MUMzMDBBMEM5QTI0MjJC RTI2RDZBQG1zZTEuY29kLmVkdT4AAAALACkAAAAAAAsAIwAAAAAAAwAGEIA8PxIDAAcQEwAAAAMA EBAAAAAAAwAREAAAAAAeAAgQAQAAABQAAABVTlNVQlNDUklCRVNDLVVTRVJTAAIBfwABAAAANgAA ADxGOTdDQ0YwRTMwQjhEMTExODFDMzAwQTBDOUEyNDIyQkUyNkQ2QUBtc2UxLmNvZC5lZHU+AAAA Yt0= - ------_=_NextPart_000_01BEA086.DFB27E12-- ------------------------------ Date: Mon, 17 May 1999 15:56:37 -0400 From: Landon Rose <---@---.---> Subject: Osc benchmark and Virtual Memory James- On my PB2400c/180 with OS8.1 using the patch in the examples folder gave these results: VM off : Osc ... n = 100 VM on : Osc....n = 100 VM on : Klang ....n = 700 VM off : Klang ...n = 650 (I checked this twice!) This is with cpu percentage running around 90 percent I assume there are other more critical reasons to run with VM turned off? Thanks Landon ------------------------------ Date: Mon, 17 May 1999 13:27:19 -0700 (PDT) From: Richard Karpen <---@---.---> Subject: Re: Osc benchmark and Virtual Memory I am getting around 10% more processor power on a 400Mhz G3 with VM on. Richard Karpen On Mon, 17 May 1999, Landon Rose wrote: > James- > On my PB2400c/180 with OS8.1 using the patch > in the examples folder gave these results: > VM off : Osc ... n = 100 > VM on : Osc....n = 100 > VM on : Klang ....n = 700 > VM off : Klang ...n = 650 (I checked this twice!) > This is with cpu percentage running around 90 percent > > I assume there are other more critical reasons to run with VM turned off? > > Thanks > Landon > > > ------------------------------ Date: Tue, 18 May 1999 09:59:44 +0200 From: "Martin Stepanek" <---@---.---> Subject: Re: random loops thanx alot for your response. I learned much from it. martin - ---------- >Von: Martin Robinson >An: sc-users@lists.io.com >Betreff: Re: random loops >Datum: Mon, 17. Mai 1999 15:27 Uhr > >MouseX.kr and MouseY.kr output floats so you won't be dividing the signal's >size by a whole number of beats (which is what you want to do what you're >saying). You need to round the values you're getting from these UGens to >integers. > >( >var filename, file, signal; >filename = ":Sounds:conga&ride loop"; // the file's path name >file = SoundFile.new; // create a SoundFile object >if (file.read(filename), { // read the entire file > signal = file.data.at(0); // get Signal buffer > Synth.play({ > x=MouseX.kr(1,4, 'linear'); > y=MouseY.kr(1,4, 'linear'); > PlayBuf.ar( > signal, // sample buffer > file.sampleRate, // sample rate > 1, // playback rate > 0, // starting offset sample > signal.size/(x.round(1)), // loop start sample > signal.size/(y.round(1)) // loop end sample > ) > }); >},{ (filename ++ " not found.\n").post }); >) > >However, this gives you no sound in the areas of the screen in a diagonal >from top left to bottom right: > >X - - - >- X - - >- - X - >- - - X > >since loop start and end are the same. > >One way round this is to make the y-axis an offset from the point given by >the x-axis and throw away any excess (i.e. anything larger than the signal >size): > >( >var filename, file, signal; >filename = ":Sounds:conga&ride loop"; // the file's path name >file = SoundFile.new; // create a SoundFile object >if (file.read(filename), { // read the entire file > signal = file.data.at(0); // get Signal buffer > Synth.play({ > var sigEnd, divFour; > > // The variable divFour will divide a number by four when > // multiplied by it (more efficient than a divide??) > divFour = 4.reciprocal; > > // the last sample in a signal is one less > // than the size of the signal > > sigEnd = signal.size-1; > x=MouseX.kr(1,4, 'linear'); > y=MouseY.kr(1,4, 'linear'); > PlayBuf.ar( > signal, // sample buffer > file.sampleRate, // sample rate > 1, // playback rate > 0, // starting offset sample > sigEnd*divFour*(x.round(1)), // loop start sample > min((x.round(1)+y.round(1))*sigEnd*divFour, sigEnd) // loop end sample > ) > }); >},{ (filename ++ " not found.\n").post }); >) > > > >>>>>>>Martin Robinson :: (Ex)tractor :: && ________ >>>><<<_sonicArts.at(middlesexUniversity.london.uk); ______ ><><><>__this.liveElectronics.interFaces.diffusion ____ > > || > > > > >> ( >> var filename, file, signal; >> filename = ":Sounds:conga&ride loop"; // the file's path name >> file = SoundFile.new; // create a SoundFile object >> if (file.read(filename), { // read the entire file >> signal = file.data.at(0); // get Signal buffer >> Synth.play({ >> x=MouseX.kr(1,4, 'exponential'); >> y=MouseY.kr(1,4, 'exponential'); >> PlayBuf.ar( >> signal, // sample buffer >> file.sampleRate, // sample rate >> 1, // playback rate >> 0, // starting offset sample >> signal.size/x, // loop start sample >> signal.size/y // loop end sample >> ) >> }); >> },{ (filename ++ " not found.\n").post }); >> ) > ------------------------------ Date: Tue, 18 May 1999 10:12:14 +0100 From: Martin Robinson <---@---.---> Subject: Re: Osc benchmark and Virtual Memory I get: VM off : Osc ... n = 360 VM on : Osc....n = 370 VM on : Klang ....n = 1900 VM off : Klang ...n = 2000 This is with cpu percentage running around 90 percent >>>>>>Martin Robinson :: (Ex)tractor :: && ________ >>><<<_sonicArts.at(middlesexUniversity.london.uk); ______ <><><>__this.liveElectronics.interFaces.diffusion ____ || ------------------------------ Date: Wed, 19 May 1999 15:44:53 +0200 From: "Iannis Zannos" <---@---.---> Subject: Advanced stuff (incremental compilation) Hello James, Prompted by problems encountered with modified versions of classes in custom software (re: GUIUtils etc.) but also by watching how improving Squeak is done by the Squeak email group, I want to ask: Is there a chance of making methods over-writable by file-in perhaps also by evaluation of code from the interactive text interpreter of SC? Meaning doing something like this: ( ! Synth : play { .... some new user defined code comes here } ! ) The code enclosed in ! ... ! would then be compiled and the resulting byte-code would take the place of the old definition of the method play in Synth. If the SC compiler is capable of this, then people can modularly include their own partial modifications of classes instead of having to overwrite the whole class definition with their modified class definition file. This obviously reduces the code management work load involved in maintaining extensions to the system over subsequent new versions of SC. Iannis Zannos SIM Tiergartenstr. 1, D-10785 Berlin, Germany Fax: +49 30 25481172 ------------------------------ Date: Wed, 19 May 1999 09:46:30 -0600 From: James McCartney <---@---.---> Subject: Re: Advanced stuff (incremental compilation) At 7:44 AM -0600 5/19/99, Iannis Zannos wrote: >Hello James, > >Prompted by problems encountered with modified versions >of classes in custom software (re: GUIUtils etc.) >but also by watching how improving Squeak is >done by the Squeak email group, I want to ask: > >Is there a chance of making methods over-writable by >file-in perhaps also by evaluation of code from >the interactive text interpreter of SC? >Meaning doing something like this: > >( >! Synth : >play { > .... some new user defined code comes here >} >! >) Yes I agree that this would be a very good thing to have. I was thinking of this syntax: + Synth { play { ... } } This would have to be in files in your library folder, though, not interpreted. Incremental compilation is a separate issue. Even though you could add methods incrementally, the compiler has to build the entire method table at once. So that would have to be redone nonincrementally with each incremental compile. It only takes a fraction of a second on a G3 though. But it adds more compexity to the compiler that the first scheme. This stuff is a little bit of work in the compiler so that gives it a place in the priority list. Other things will come first. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Wed, 19 May 1999 11:49:46 -0400 (EDT) From: "Ronald J. Kuivila" <---@---.---> Subject: blockSize Hi James, Why is there a limit of 128 on blockSize? RJK ------------------------------ Date: Wed, 19 May 1999 12:19:46 -0600 From: James McCartney <---@---.---> Subject: Re: blockSize At 9:49 AM -0600 5/19/99, Ronald J. Kuivila wrote: >Hi James, > > Why is there a limit of 128 on blockSize? > >RJK To limit latency. The input pipe has to be as long as the hardware buffer size plus maximum block size you will use, due to skewing of buffer alignments caused by sample accurate scheduling. The larger you use the more latency. To limit the range of sizes needed to be managed by the real time allocator of ugen output buffers. If a wide range of sizes is allowed the ugen buffer space will become fragmented. This area is allocated by a very fast allocator that does not deal with fragmentation. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Wed, 19 May 1999 14:58:34 -0600 From: "David Cottle" <---@---.---> Subject: Lang/Post here Hi, Does "Post here always" mean post information from any window to the window that is active the moment you choose "Post here" or does it mean always post to the window where the code was executed? How do you post to a window other than the one where the code is executed? - -- ><><><><><><><><><><><> David Cottle composition, notation, contra lime@uiuc.edu ------------------------------ Date: Wed, 19 May 1999 20:07:30 -0400 From: "crucial" <---@---.---> Subject: Re: Advanced stuff (incremental compilation) >Yes I agree that this would be a very good thing to have. >I was thinking of this syntax: > >+ Synth { > play { > ... > } >} > >This would have to be in files in your library folder, >though, not interpreted. > > > > --- james mccartney Yes ! I have several classes such as SynthR that inherit from their super and then add methods. This keeps it out of the way of updates, and keeps everything clear, but its not ideal at all. btw. here is something I had been trying to do for a while : record separate mono channels to disc, but still listen to them mixed to a stereo set (for us out deprived folkx). Add this to Synth or do the inheritance thing. *recordMonoFilesMixed { arg ugenGraphFunc, duration, pathName, headerFormat = 'AIFF', sampleFormat = '16 big endian signed'; var files, z, newsynth; var channels; pathName = ":SoundFiles:" ++ pathName; files = List.new; channels = []; newsynth = this.new({ arg synth; var ugenGraph; ugenGraph = ugenGraphFunc.value(synth).asArray; ugenGraph.do({ arg channel, i; var file; file = SoundFile.new; file.headerFormat = headerFormat; file.sampleFormat = sampleFormat; file.numChannels = 1; if (file.writeHeader(pathName ++ "." ++ (i+1).asString), { file.prepareRecord; files.add(file); channels=channels.add(channel); channels.postln; DiskOut.ar(file, 32768, [channel]) }); channel }); Mix.ar(channels) }); __________________________________________ :\\_______ http://crucial-systems.com __________________________________________ :\\_______ ------------------------------ Date: Wed, 19 May 1999 20:40:59 -0600 From: James McCartney <---@---.---> Subject: Re: Lang/Post here At 2:58 PM -0600 5/19/99, David Cottle wrote: >Hi, > >Does "Post here always" mean post information from any window to the window >that is active the moment you choose "Post here" or does it mean always post >to the window where the code was executed? How do you post to a window >other than the one where the code is executed? Yeah I broke that piece. I've fixed it now. The way it is supposed to work is that posting always goes to the window active when you choose the menu command until you turn it off again. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Wed, 19 May 1999 20:53:10 -0600 From: "David Cottle" <---@---.---> Subject: Re: Lang/Post here hi, > Yeah I broke that piece. I've fixed it now. Let me know when the fixed version is available. ------------------------------ Date: Wed, 19 May 1999 22:05:00 -0600 From: "David Cottle" <---@---.---> Subject: postln Hi, Is there a way to format a posted line? I'm trying to get to know the language a little better and wrote a 12 tone matrix generator and would like each value to take up the same amount of space (just being tidy). Also, maybe you could look at the code and tell me if there would have been an easier way to do it: ( a = [00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11].scramble; "".postln; a.do( { arg item, i; b = 12 - item; a.do( { arg item, i; " ".post; (item+b%12).post; } ); "".postln; } ); ) (must use fixed width font to see this) output is: 0 4 7 10 1 2 5 6 9 3 11 8 8 0 3 6 9 10 1 2 5 11 7 4 5 9 0 3 6 7 10 11 2 8 4 1 2 6 9 0 3 4 7 8 11 5 1 10 11 3 6 9 0 1 4 5 8 2 10 7 10 2 5 8 11 0 3 4 7 1 9 6 7 11 2 5 8 9 0 1 4 10 6 3 6 10 1 4 7 8 11 0 3 9 5 2 3 7 10 1 4 5 8 9 0 6 2 11 9 1 4 7 10 11 2 3 6 0 8 5 1 5 8 11 2 3 6 7 10 4 0 9 4 8 11 2 5 6 9 10 1 7 3 0 I would like it to be: 0 4 7 10 1 2 5 6 9 3 11 8 8 0 3 6 9 10 1 2 5 11 7 4 5 9 0 3 6 7 10 11 2 8 4 1 etc. - -- ><><><><><><><><><><><> David Cottle composition, notation, contra lime@uiuc.edu ------------------------------ Date: Thu, 20 May 1999 00:03:24 -0700 (PDT) From: Garrett James <---@---.---> Subject: sc-users archives Is there a way to retrieve all SC 2.x.x related mail to make a locally searchable archive? Im looking at the ftp://www.audiosynth.com/pub/archive/ site and this stuff looks pretty old except for one archive covering Novermber 17-23 1998. If someone could sort me out and tell me a way I could download a big mess of archives to grep, etc. i would be thankful. thanks - -garrett _____________________________________________________________ Do You Yahoo!? Free instant messaging and more at http://messenger.yahoo.com ------------------------------ Date: Thu, 20 May 1999 08:19:40 -0600 From: James McCartney <---@---.---> Subject: Re: sc-users archives At 1:03 AM -0600 5/20/99, Garrett James wrote: >If someone could sort me out and tell me a way I could >download a big mess of archives to grep, etc. i would >be thankful. The sc-users archive is at: ftp://ftp.io.com/pub/mailing-lists/sc-users-digest The archive covers from 6/98 to present. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Thu, 20 May 1999 08:52:17 -0600 From: James McCartney <---@---.---> Subject: Re: postln At 10:05 PM -0600 5/19/99, David Cottle wrote: >Hi, > >Is there a way to format a posted line? I'm trying to get to know the >language a little better and wrote a 12 tone matrix generator and would like >each value to take up the same amount of space (just being tidy). Also, >maybe you could look at the code and tell me if there would have been an >easier way to do it: There is no direct way to format output. ( var a, b, c, d, digits1, digits2; digits1 = [" ","1","2","3","4","5","6","7","8","9"]; digits2 = ["0","1","2","3","4","5","6","7","8","9"]; a = Array.series(12, 0, 1).scramble; "".postln; a.do({ arg item1; b = 12 - item1; a.do({ arg item2; c = (item2 + b) % 12; " ".post; d = c div: 10; digits1.at(d).post; d = c % 10; digits2.at(d).post; }); "".postln; }); ) 0 8 1 6 9 5 11 10 3 2 4 7 4 0 5 10 1 9 3 2 7 6 8 11 11 7 0 5 8 4 10 9 2 1 3 6 6 2 7 0 3 11 5 4 9 8 10 1 3 11 4 9 0 8 2 1 6 5 7 10 7 3 8 1 4 0 6 5 10 9 11 2 1 9 2 7 10 6 0 11 4 3 5 8 2 10 3 8 11 7 1 0 5 4 6 9 9 5 10 3 6 2 8 7 0 11 1 4 10 6 11 4 7 3 9 8 1 0 2 5 8 4 9 2 5 1 7 6 11 10 0 3 5 1 6 11 2 10 4 3 8 7 9 0 --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: < ------------------------------ Date: Thu, 20 May 1999 12:26:15 -0600 From: James McCartney <---@---.---> Subject: SuperCollider night school at CNMAT http://cnmat.CNMAT.Berkeley.EDU/~matt/scns/supercollider-night-school.html SuperCollider Night School at CNMAT Dates: Monday, July 19, to Friday, July 23, 1999 Time: 7:30 to 11:00 pm Location: CNMAT Price: $250 Instructors: James McCartney, Alberto de Campo, Curtis Roads, Matthew Wright SuperCollider 2 is a sophisticated software environment for real-time audio synthesis on the PowerPC platform. It includes a rapid-turnaround, fully object-oriented programming environment, a comprehensive, user-extensible library of objects for DSP (oscillators, filters, delays etc), user interaction (MIDI, OpenSound Control, GUIs and other input devices), and compositional processes, and a very efficient run-time system for creating complex interactive synthesis programs in one object-oriented language. With its power, flexibility and efficiency, SuperCollider is well suited as a tool for both interactive and studio-based electronic music composition and research. For more information on SuperCollider 2 and how to obtain it, visit www.audiosynth.com. This intensive week of evening classes features instruction in SuperCollider programming by its developer James McCartney and a cast of highly experienced SuperCollider programmers. The course will cover basic language and environment handling, and proceed from standard synthesis and processing methods to advanced synthesis, composition, and interaction possibilities provided by SuperCollider 2. A variety of materials will be provided to course participants including a SuperCollider manual and tutorial and machine readable copies of all the programming examples provided in the course. For reservations contact: Richard Andrews, Administrator CNMAT, 1750 Arch Street, Berkeley, CA 94709 Email: richard@cnmat.berkeley.edu Telephone: (510) 643-9990 extension 300 For information about lodging see the UC Berkeley summer housing website or call (510) 642-5925. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Fri, 21 May 1999 23:33:56 +0200 From: "Iannis Zannos" <---@---.---> Subject: Korg problems with "Blue and White" (Yosemite) Mac G3 Friends there (not here) report that there is absolutely no way to get the Korg1212 card to work with a G3 Mac of the latest series (Yosemite board, new Blue and White look, those which come with 350 and 400 MHz processors). All PCI slots have been tried out - the computer wont even work properly with the card plugged in. Therefore, better these news or beware! Are the days of the beloved Korg 1212 counted? I dare not ask whether the driver for MOTU is coming soon. We have been warned. Iannis Zannos SIM Tiergartenstr. 1, D-10785 Berlin, Germany Fax: +49 30 25481172 ------------------------------ Date: Sat, 22 May 1999 07:36:37 +0200 From: "Iannis Zannos" <---@---.---> Subject: 2 Questions on Audio-Buffers. 1. Is there a limit to the number of Audio-Signal-Buffers that can be held in SC RAM (besides free memory itself) 2. What is the memory overhead for each new Audio-Signal-Buffer loaded in SC memory. Iannis Zannos SIM Tiergartenstr. 1, D-10785 Berlin, Germany Fax: +49 30 25481172 ------------------------------ Date: Sat, 22 May 1999 01:13:56 -0600 From: James McCartney <---@---.---> Subject: Re: 2 Questions on Audio-Buffers. At 11:36 PM -0600 5/21/99, Iannis Zannos wrote: >1. Is there a limit to the number of Audio-Signal-Buffers > that can be held in SC RAM (besides free memory itself) >2. What is the memory overhead for each new > Audio-Signal-Buffer loaded in SC memory. There is no limit other than RAM. Signals are 4 byte floats per sample but they are allocated in power of two sizes because of the GC algorithm. This is something I hope to work on in the future, but for now that is the way it is. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Sat, 22 May 1999 01:14:55 -0600 From: James McCartney <---@---.---> Subject: Re: Korg problems with "Blue and White" (Yosemite) Mac G3 Apropos Iannis's Post: I have some contacts at Korg who tell me the problem is being worked on. I am in the same fix -- Yosemite, Board, etc. Tom Wells >Friends there (not here) report that there is >absolutely no way to get the Korg1212 card to work >with a G3 Mac of the latest series (Yosemite board, >new Blue and White look, those which come with >350 and 400 MHz processors). All PCI slots have >been tried out - the computer wont even work >properly with the card plugged in. > >Therefore, better these news or beware! > >Are the days of the beloved Korg 1212 counted? > >I dare not ask whether the driver for MOTU >is coming soon. > >We have been warned. > > >Iannis Zannos >SIM >Tiergartenstr. 1, >D-10785 Berlin, Germany >Fax: +49 30 25481172 Thomas Wells Professor of Music Director, Sound Synthesis Studios The Ohio State University School of Music ------------------------------ Date: Sun, 23 May 1999 21:55:40 -0500 From: rkuivila@mail.wesleyan.edu Subject: valueArray in method calls Hi James, I was hoping to add a simple version of MIDI key-gated ExternalControlSources by adding the following method to ExternalControlSource: *keyed { arg key ...params; Latch.kr(this.kr.valueArray(params),1-MIDINoteGate.kr(key)); } This does not work. What am I doing wrong? In fact, I cannot even get the following to work: { FSinOsc.ar(MouseX.kr.valueArray([100,1000]),0.4) }.play; So, I am guessing there is some kind of problem with using the valueArray message with methods.... RJK ------------------------------ Date: Mon, 24 May 1999 11:08:18 -0600 From: James McCartney <---@---.---> Subject: Re: valueArray in method calls At 8:55 PM -0600 5/23/99, rkuivila@mail.wesleyan.edu wrote: >Hi James, > >I was hoping to add a simple version of MIDI key-gated >ExternalControlSources by adding the following method to >ExternalControlSource: > > *keyed { arg key ...params; > Latch.kr(this.kr.valueArray(params),1-MIDINoteGate.kr(key)); > } > >This does not work. > >What am I doing wrong? > >In fact, I cannot even get the following to work: > >{ FSinOsc.ar(MouseX.kr.valueArray([100,1000]),0.4) }.play; > >So, I am guessing there is some kind of problem with using the valueArray >message >with methods.... this.kr returns an instance of Plug. valueArray is meant for Functions (other objects (incl Plug) just return themselves and ignore the arguments). You want to use performList. This sends a message selector to an object and performs that message with the given arguments. { FSinOsc.ar(MouseX.performList('kr', [100,1000]),0.4) }.play; Also you left out the ^ return operator. *keyed { arg key ...params; ^Latch.kr(this.performList(\kr, params),1-MIDINoteGate.kr(key)); } I'm not sure why you have the 1- there. That is going to sample and hold the ExternalControlSource's value on key ups, not key downs. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Mon, 24 May 1999 15:01:37 -0400 (EDT) From: "Ronald J. Kuivila" <---@---.---> Subject: Re: valueArray in method calls > > this.kr returns an instance of Plug. > valueArray is meant for Functions (other objects (incl Plug) just > return themselves and ignore the arguments). > > You want to use performList. This sends a message selector to > an object and performs that message with the given arguments. > > { FSinOsc.ar(MouseX.performList('kr', [100,1000]),0.4) }.play; > Sehr danke Herr UberCollider... RJK ------------------------------ Date: Tue, 25 May 1999 12:16:31 -0400 (EDT) From: rkuivila@mail.wesleyan.edu Subject: MIDINoteGate: keys go down, they never come up! Hi James, While Voicer works with my keyboard, MIDINoteGate does not. Once I play a key, the value of the corresponding MIDINoteGate atays permanently at 1. Also, could you add a some sort of a *peek message to each of the MIDI based ExternalControlSource's? Then MIDIController.peek(chan, cc#) would return the current value of controller cc#, etc. RJK ------------------------------ Date: Tue, 25 May 1999 13:28:34 -0600 From: James McCartney <---@---.---> Subject: Re: MIDINoteGate: keys go down, they never come up! At 10:16 AM -0600 5/25/99, rkuivila@mail.wesleyan.edu wrote: >Hi James, > > While Voicer works with my keyboard, MIDINoteGate does not. Once I >play a key, the value of the corresponding MIDINoteGate atays permanently >at 1. I'll have a look. > > Also, could you add a some sort of a *peek message to each of the MIDI >based ExternalControlSource's? Then MIDIController.peek(chan, cc#) would >return >the current value of controller cc#, etc. there already is one: 'value' --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Tue, 25 May 1999 15:35:08 -0400 (EDT) From: rkuivila@mail.wesleyan.edu Subject: Re: MIDINoteGate: keys go down, they never come up! >> Also, could you add a some sort of a *peek message to each of the MIDI >>based ExternalControlSource's? Then MIDIController.peek(chan, cc#) would >>return >>the current value of controller cc#, etc. > >there already is one: 'value' Not what I was suggesting - that involves creating an instance of MIDIController for each controller you want to read. *peek would be a class message that returns the current value w/o needing a separate instance. That way you can iterate over cc#'s rather than over a list of MIDIController objects. RJK ------------------------------ Date: Tue, 25 May 1999 16:03:03 -0600 From: James McCartney <---@---.---> Subject: Re: MIDINoteGate: keys go down, they never come up! At 1:35 PM -0600 5/25/99, rkuivila@mail.wesleyan.edu wrote: >>> Also, could you add a some sort of a *peek message to each of the MIDI >>>based ExternalControlSource's? Then MIDIController.peek(chan, cc#) would >>>return >>>the current value of controller cc#, etc. >> >>there already is one: 'value' > >Not what I was suggesting - that involves creating an instance of >MIDIController for each controller you want to read. *peek would be a >class message that returns the current value w/o needing a separate >instance. That way you can iterate >over cc#'s rather than over a list of MIDIController objects. Just create the instances while you iterate. Remember that calling a function with a closure involves creating an object too.. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Tue, 25 May 1999 16:10:18 -0600 From: James McCartney <---@---.---> Subject: Re: MIDINoteGate: keys go down, they never come up! Actually you don't even need to create a new instance of the object for each controller because the instance variables are settable. Just change the instance variables each iteration. I am not going to provide a class method for this. It isn't necessary. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Tue, 25 May 1999 16:03:03 -0600 From: James McCartney <---@---.---> Subject: Re: MIDINoteGate: keys go down, they never come up! At 1:35 PM -0600 5/25/99, rkuivila@mail.wesleyan.edu wrote: >>> Also, could you add a some sort of a *peek message to each of the MIDI >>>based ExternalControlSource's? Then MIDIController.peek(chan, cc#) would >>>return >>>the current value of controller cc#, etc. >> >>there already is one: 'value' > >Not what I was suggesting - that involves creating an instance of >MIDIController for each controller you want to read. *peek would be a >class message that returns the current value w/o needing a separate >instance. That way you can iterate >over cc#'s rather than over a list of MIDIController objects. Just create the instances while you iterate. Remember that calling a function with a closure involves creating an object too.. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Tue, 25 May 1999 17:51:24 -0400 (EDT) From: "Ronald J. Kuivila" <---@---.---> Subject: Re: MIDINoteGate: keys go down, they never come up! > > Actually you don't even need to create a new instance of the > object for each controller because the instance variables are > settable. Just change the instance variables each iteration. > I am not going to provide a class method for this. It isn't necessary. OK. rjk ------------------------------ Date: Wed, 26 May 1999 05:41:38 +0200 From: "Iannis Zannos" <---@---.---> Subject: Multichannel access again: in Voicer James, Apparently the array example you gave me some days ago will not be the solution when working with voicer. I would like to make each sample triggered by voicer come out from a different audio channel. I tried the following two ways but both of them will not work. At the moment I am stuck with PanAz, which must be either wrapped around the Voicer, or created each time within the sample playing process, which means having as many PanAz processes as there are simultaneous voices at any moment. Any ideas? Hope my question is clear... Thanks - ---- startSensorProcess7 { // Probably the Plug.ar processes are not killed/collected.. BAD VERSION this.getSamples; SoundManager.startSoundSafely({ var out; out = Voicer.ar({ arg voicer, eventCount, synth, deltaTime, channel, note, velocity; var z, out8; events.addEvent(topsynth.time); [channel, note, events.size, topsynth.time].postln; // for debugging, temporary... // synth.channelOffset(eventCount % 8); // samples.wrapAt(events.size).voicerProcess; // Pan2.ar(samples.wrapAt(events.size).voicerProcess, SinOsc.kr(2)); z = Plug.ar(0); // generate silence out8 = [z, z, z, z, z, z, z, z]; out8.wrapPut(eventCount, samples.wrapAt(events.size).voicerProcess); out8; }, 8, midiChannel, // Listen to designated MIDI Channel maxVoices // Limit number of concurrent processses ); listener = out.source; out; }) } startSensorProcess6 { // retried Multichanneling this initial way. - does not work. this.getSamples; SoundManager.startSoundSafely({ var out; out = Voicer.ar({ arg voicer, eventCount, synth, deltaTime, channel, note, velocity; events.addEvent(topsynth.time); [channel, note, events.size, topsynth.time].postln; // for debugging, temporary... // FSinOsc.ar((50 + (channel * 4)).midicps, Line.kr(0.3, 0, 0.2)); // for debugging, temporary... // events.trigger synth.channelOffset(eventCount % 8); samples.wrapAt(events.size).voicerProcess; }, 8, midiChannel, // Listen to designated MIDI Channel maxVoices // Limit number of concurrent processses ); listener = out.source; out; }) } - ---- Iannis Zannos SIM Tiergartenstr. 1, D-10785 Berlin, Germany Fax: +49 30 25481172 ------------------------------ Date: Tue, 25 May 1999 23:47:38 -0600 From: James McCartney <---@---.---> Subject: Re: Multichannel access again: in Voicer At 9:41 PM -0600 5/25/99, Iannis Zannos wrote: >James, > >Apparently the array example you gave me >some days ago will not be the solution when >working with voicer. > >I would like to make each sample triggered >by voicer come out from a different audio >channel. I tried the following two ways >but both of them will not work. At the >moment I am stuck with PanAz, which must >be either wrapped around the Voicer, or >created each time within the sample playing >process, which means having as many PanAz >processes as there are simultaneous voices >at any moment. Any ideas? Hope my question is clear... >Thanks I don't know how to run your examples. This is not correct: synth.channelOffset(eventCount % 8); You are retrieving the value of channelOffset, not setting it. The argument is ignored. It should be: synth.channelOffset_(eventCount % 8); or: synth.channelOffset = eventCount % 8; This works for me: ( e = Env.new([0, 0.1, 0.1, 0], [0.2, 0.1, 0.2], 'linear', 2); Synth.scope({ arg synth; var out, vc; out = Voicer.ar({ arg voicer, i, synth, deltaT, chan, note, velocity; synth.channelOffset = i % 8; SinOsc.ar((note + 24).midicps, 0, EnvGen.kr(e)); }, 8, // 8 audio output channels 1, // listen to MIDI channel 1 8 // max voices is 8 ); vc = out.source; synth.repeat(0, 0.2, { var note; note = 48 + 24.rand; vc.noteOn(1, note, 64); // sched the note off for this note synth.sched(0.5, { vc.noteOn(1, note, 0); }); }); out }, 0.3) ) In the multi channel case: You need to multiply all channels by the envelope in order to get the voice to end. ( e = Env.new([0, 0.1, 0.1, 0], [0.2, 0.1, 0.2], 'linear', 2); Synth.scope({ arg synth; var out, vc; out = Voicer.ar({ arg voicer, i, synth, deltaT, chan, note, velocity; var z, out8, s; s = SinOsc.ar((note + 24).midicps, 0, EnvGen.kr(e)); z = s * 0.0; // generate silence (with end) out8 = [z, z, z, z, z, z, z, z]; out8.wrapPut(i, s); out8; }, 8, // 8 audio output channels 1, // listen to MIDI channel 1 8 // max voices is 8 ); vc = out.source; synth.repeat(0, 0.2, { var note; note = 48 + 24.rand; vc.noteOn(1, note, 64); // sched the note off for this note synth.sched(0.5, { vc.noteOn(1, note, 0); }); }); out }, 0.3) ) --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: < ------------------------------ Date: Wed, 26 May 1999 08:41:35 +0200 From: "Iannis Zannos" <---@---.---> Subject: Re: Multichannel access again: in Voicer >This is not correct: > synth.channelOffset(eventCount % 8); > >You are retrieving the value of channelOffset, not setting it. >The argument is ignored. >It should be: > > synth.channelOffset_(eventCount % 8); Blush blush. This is what happens when programming overnight under stress. Oh my! Thanks I believe that was the problem. I have done this blunder before, apparently I still haven't learned for it. But this time. Iannis Zannos SIM Tiergartenstr. 1, D-10785 Berlin, Germany Fax: +49 30 25481172 - ---------- >From: James McCartney <---@---.---> >To: sc-users@lists.io.com >Subject: Re: Multichannel access again: in Voicer >Date: Wed, 26 May 1999 7:47 AM > >At 9:41 PM -0600 5/25/99, Iannis Zannos wrote: >>James, >> >>Apparently the array example you gave me >>some days ago will not be the solution when >>working with voicer. >> >>I would like to make each sample triggered >>by voicer come out from a different audio >>channel. I tried the following two ways >>but both of them will not work. At the >>moment I am stuck with PanAz, which must >>be either wrapped around the Voicer, or >>created each time within the sample playing >>process, which means having as many PanAz >>processes as there are simultaneous voices >>at any moment. Any ideas? Hope my question is clear... >>Thanks > >I don't know how to run your examples. > >This is not correct: > synth.channelOffset(eventCount % 8); > >You are retrieving the value of channelOffset, not setting it. >The argument is ignored. >It should be: > > synth.channelOffset_(eventCount % 8); >or: > synth.channelOffset = eventCount % 8; > >This works for me: > >( >e = Env.new([0, 0.1, 0.1, 0], [0.2, 0.1, 0.2], 'linear', 2); >Synth.scope({ arg synth; > var out, vc; > out = Voicer.ar({ arg voicer, i, synth, deltaT, chan, note, velocity; > synth.channelOffset = i % 8; > SinOsc.ar((note + 24).midicps, 0, EnvGen.kr(e)); > }, > 8, // 8 audio output channels > 1, // listen to MIDI channel 1 > 8 // max voices is 8 > ); > > vc = out.source; > > synth.repeat(0, 0.2, { > var note; > note = 48 + 24.rand; > vc.noteOn(1, note, 64); > // sched the note off for this note > synth.sched(0.5, { vc.noteOn(1, note, 0); }); > }); > > out >}, 0.3) >) > >In the multi channel case: >You need to multiply all channels by the envelope >in order to get the voice to end. > >( >e = Env.new([0, 0.1, 0.1, 0], [0.2, 0.1, 0.2], 'linear', 2); >Synth.scope({ arg synth; > var out, vc; > out = Voicer.ar({ arg voicer, i, synth, deltaT, chan, note, velocity; > var z, out8, s; > s = SinOsc.ar((note + 24).midicps, 0, EnvGen.kr(e)); > z = s * 0.0; // generate silence (with end) > out8 = [z, z, z, z, z, z, z, z]; > out8.wrapPut(i, s); > out8; > }, > 8, // 8 audio output channels > 1, // listen to MIDI channel 1 > 8 // max voices is 8 > ); > > vc = out.source; > > synth.repeat(0, 0.2, { > var note; > note = 48 + 24.rand; > vc.noteOn(1, note, 64); > // sched the note off for this note > synth.sched(0.5, { vc.noteOn(1, note, 0); }); > }); > > out >}, 0.3) >) > > --- james mccartney james@audiosynth.com http://www.audiosynth.com >If you have a PowerMac check out SuperCollider2, a real time synth program: > > > > > ------------------------------ End of sc-users-digest V1 #42 *****************************