From: owner-sc-users-digest@lists.io.com (sc-users-digest) To: sc-users-digest@lists.io.com Subject: sc-users-digest V1 #25 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, January 26 1999 Volume 01 : Number 025 ---------------------------------------------------------------------- Date: Thu, 21 Jan 1999 18:43:43 +1100 From: Garth Paine <---@---.---> Subject: SC net connection Hi all, I am interested in using a net www connection to allow poeple to 'compose' in SC2. in realtime over the net. I want to find a way that will give me X,Y co-ordinates of the mouse in a brouser window. I am happy for them to come to me as anything I can input to SC - ie integer strings that get output over the serial bus, MIDI note #'s or control numbers. As I see it at the moment there are 2 ways of approaching it. 1. To have the software on te server, constantly polling the connected machine(s) and reporting the position of the mouse, 2. To creat a page that reports changes in condition when the mous pointer is moved at the client end. Is there anything that any of you know that will already do this? how could I realise the control input to SC? Thanks in advance for your thoughts. Cheers, Garth See information about my new immersive interactive sound installations http://creativeaccess.com.au/~garth/ ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. . Composer, Sound Designer .. Interactives Designer ... Interactive Installation Artist .... Exhibition Consultant .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., ------------------------------ Date: Thu, 21 Jan 1999 02:08:29 -0600 From: antiorp@tezcat.com (=cw4t7abs) Subject: Re: SC net connection >I am interested in using a net www connection to allow poeple to 'compose' >in SC2. in realtime over the net. I want to find a way that will give me >X,Y co-ordinates of the mouse in a brouser window. I am happy for them to >come to me as anything I can input to SC - ie integer strings that get >output over the serial bus, MIDI note #'s or control numbers. > >As I see it at the moment there are 2 ways of approaching it. > >1. To have the software on te server, constantly polling the connected >machine(s) and reporting the position of the mouse, >2. To creat a page that reports changes in condition when the mous pointer >is moved at the client end. > >Is there anything that any of you know that will already do this? how could >I realise the control input to SC? > >Thanks in advance for your thoughts. m9ndfukc.com w!ll prezent 1 !nztalat!on wh!ch = akompl!shez d!sz sansz sc [oopz] !n 0+7 da!z or lesz + aprez dze kont!nuum module w!ll b konnektd wh!ch = ultra m9ndfukc++ [zekret 4 dze moment] zttz ------------------------------ Date: Thu, 21 Jan 1999 02:12:56 -0600 From: antiorp@tezcat.com (=cw4t7abs) Subject: ma! add >>Is there anything that any of you know that will already do this? how could >>I realise the control input to SC? >> >>Thanks in advance for your thoughts. > > >m9ndfukc.com w!ll prezent 1 !nztalat!on wh!ch = akompl!shez d!sz sansz sc >[oopz] > >!n 0+7 da!z or lesz houevr 1 = w!ll l!kl! b abl 2 kompute zolut!on 4 abov 4rom dze m9ndfukc.com module + naturall! !n kasz abov dze aud!o data muzt b tranzfrd auss! !n dze m9ndfukc.com module !t != nesessar! ------------------------------ Date: Thu, 21 Jan 1999 03:32:53 -0500 From: "crucial" <---@---.---> Subject: Re: SC net connection >Hi all, > >I am interested in using a net www connection to allow poeple to 'compose' >in SC2. in realtime over the net. I want to find a way that will give me >X,Y co-ordinates of the mouse in a brouser window. I am happy for them to >come to me as anything I can input to SC - ie integer strings that get >output over the serial bus, MIDI note #'s or control numbers. > >As I see it at the moment there are 2 ways of approaching it. > >1. To have the software on te server, constantly polling the connected >machine(s) and reporting the position of the mouse, >2. To creat a page that reports changes in condition when the mous pointer >is moved at the client end. As mentioned a bit ago, SC will soon support Open Sound Control : http://cnmat.cnmat.berkeley.edu/OpenSoundControl/ this is a network protocol for sending all kinds of data with time specific messages just about anywhere, locally, small high speed network, internet. I assume this will also open up SC to communicate with other pieces of software on the same machine too. __________________________________________ :\\_______ http://crucial-systems.com __________________________________________ :\\_______ ------------------------------ Date: Thu, 21 Jan 1999 09:29:51 +0000 From: finer@easynet.co.uk Subject: Object writing Tutorial James . . . . or anyone else, Is there any chance of a tutorial giving a step by step guide to writing an object - nothing too complicated but one that covers all the basic points. All the best, Jem ------------------------------ Date: Thu, 21 Jan 1999 12:20:39 +0100 From: "Iannis Zannos" <---@---.---> Subject: Re: Object writing Tutorial > >Is there any chance of a tutorial giving a step by step guide to writing an >object - nothing too complicated but one that covers all the basic points. Jem, you normally don't write an object, you write a class that creates objects (although classes are also objects, most of the time you create instances from them and then work with these. The instances are objects but not classes.). > nothing too complicated but one that covers all the basic points. I am afraid this is too generic - writing classes is the art of OOP, and one just keeps getting more experienced in it - difficult to delineate what are the "basic points". Perhaps start by describing what you want your object to do. Post your description here or to me directly and I will take it on from there. One first hint: If you want to do lots of things or if what you want to do is fairly complicated, then one class probably is not enough - you need to design several classes. Try to keep classes simple. Rule of thumb is one class does a single clearly definable thing that takes a few methods. James had already pointed this out in the discussion that led to TSpawn last summer. I find myself that it is hard to keep this simple rule. E.g. I have to rewrite basic classes of GUIUtils because they have grown to be a mess - so I am splitting them up to smaller classes. OK my two euro-cents for now. Cheers, Iannis. Iannis Zannos SIM Tiergartenstr. 1, D-10785 Berlin, Germany Fax: +49 30 25481172 - ---------- >From: finer@easynet.co.uk >To: sc-users@lists.io.com >Subject: Object writing Tutorial >Date: Thu, 21 Jan 1999 10:29 AM > > > >All the best, > >Jem > > > ------------------------------ Date: Thu, 21 Jan 1999 16:05:37 +0000 From: finer@easynet.co.uk Subject: Re: Object writing Tutorial >you normally don't write an object, you write a class that >creates objects Stupid me - I meant classes when I said objects. Anyway point(s) taken - I'll try to do what I want to do and then start asking questions ! cheers, Jem ------------------------------ Date: Thu, 21 Jan 1999 17:27:42 -0500 From: "crucial" <---@---.---> Subject: Re: Object writing Tutorial >I find myself that it is hard to keep this simple rule. >E.g. I have to rewrite basic classes of GUIUtils because >they have grown to be a mess - so I am splitting >them up to smaller classes. > >OK my two euro-cents for now. Yes, I find myself wanting to combine classes into single too-complex ones because there is so much dependency in my system anyway. Why pass this information back and forth between the instances ? Breaking things down into simple components does allow them to be shared with others though, and that speeds all of us along. And on that note, thank you for UDFile ! It worked great. Unfortunately, I never got any of the GUIWindows to work, and can't figure out why. I followed the directions, altered the classes etc. exactly. Or maybe not, but I tried it several times. __________________________________________ :\\_______ http://crucial-systems.com __________________________________________ :\\_______ ------------------------------ Date: Fri, 22 Jan 1999 17:21:17 +0100 From: Staffan Liljegren <---@---.---> Subject: OO excersise ? Folks, Jem asked for an OO example earlier. I have a proposal for something we could develop together (ie Jem, me, Iannis, James or others if interested) . What do You say ? But there are a couple of issues that need resolution before we do it , see the comments below: - -Staffan // NOT running SC code , just a draft proposal for an OO project ! // An attempt to make a general SC2 framework for experimenting with a type of Physical Modeling // called Digital Waveguides (J.O Smith etal, CCRMA, Stanford) . Earlier I rewrote and wrote several PM Instruments // in SC2 and it turns out that most of current implementations of digital waveguides are a (non-linear) // Excitation into a Single Delay Loop (SDL, terminology after Matti Karjalainen, but extended to cover // any implementation of waveguide instruments, not only plucked strings) // with an output Resonance. The SDL is a delay with filtered feedback (and filtered input/output). // (I just saw that Yamaha has released Sondius XG , a SW version of VL, see // http://www.yamaha.co.uk/xg/html/midplug/m_mid9.htm. And their user interface is close to // what I initially wanted to do here, although I imagined that this SC framework would be more general // Yamaha and Stanford also set up Sondius-XG "a joint licensing program, an agreement to // push the development and use of their respective intellectual property portfolios in the computer tone // generation and sound synthesis areas". StaccatoSys and Korg has licenced this technology // Covered patents are available at www.sondius.com/patent.html. // So the issue now is: Is possible to write any code at all without violating these patents ? // (I thought that waveguides were bread and butter in Physics/Acoustics and that many of the // ideas in current PM stems from MSW (McIntyre, Schumacher, Woodhouse) which is based on an // non-linear excitation fed into a linear resonator and a feedback loop) // Staffan Liljegren, 990121, staffan@medialab.ericsson.se // Quickly scribbled: SDL { // instance variables, or state of the Single Delay Loop } } // Some predefined SDLs Bore : SDL {}; StraightBore : Bore{}; ConicalBore : {}; String : SDL {}; //...and others Excitation { var ; *new {arg type; nonlinearity = NonLinearity.new(type); //... } }; SingleReed: Excitation {}; Jet: Excitation {}; Lip: Excitation {}; Bow: Excitation {}; Pluck : Excitation {}; //....and others NonLinearity { *new {arg instrument; ^this; } } Resonance{}; PMInstrument {}; Flute : PMInstrument {}; Guitar : PMInstrument {}; Clarinet: PMInstrument {}; ------------------------------ Date: Sat, 23 Jan 1999 04:09:04 -0500 From: "crucial" <---@---.---> Subject: File operations at Interrupt .... Ooops. I guess you can't do a save during the { }.play Or did I misunderstand my error message ? The save was triggered from a button action. I was hoping to be able to save various states of my process that evolves during play. I am having success with : ( { // music stuff // all neccessary objects instantiated Memory.load(filename); //music output stuff }.play Memory.save(filename); // the class method that saves via a UDFile.save ) Thus each time it loads and then saves when it ends (providing it doesn't crash, which is more often than I would like.) __________________________________________ :\\_______ http://crucial-systems.com __________________________________________ :\\_______ ------------------------------ Date: Sat, 23 Jan 1999 11:43:36 +0100 From: Staffan Liljegren <---@---.---> Subject: OO Exercise Again I did some updates to my draft for an OO Framework proposal : The issues are: - Is it feasible to do this without requesting/licencing waveguide patents ? - Is there interest in doing this as a mailing list effort and is it possible ? - -Staffan // An attempt to make a general SC2 framework for experimenting with a type of // Physical Modeling, called Digital Waveguides (J.O Smith etal, CCRMA, Stanford) . Earlier I // rewrote and wrote several PM Instruments in SC2 and it turns out that most of current // implementations of digital waveguides are a (non-linear) Excitation into a Single Delay Loop // (SDL, terminology after Matti Karjalainen, but extended to cover any implementation of // waveguide instruments, not only plucked strings) with an output Resonance. // The SDL is a delay with filtered feedback (and filtered input/output). // (I just saw that Yamaha has released Sondius XG , a SW version of VL, see // http://www.yamaha.co.uk/xg/html/midplug/m_mid9.htm. And their user interface is // close to what I initially wanted to do here, although I imagined that this SC // framework would be more general, ie include GUIs, Voicers, lots more SC2 modulations, extension // to "MDL" (Multiple Delay Loops, my terminology for making PM instruments more sonorous, e.g // 2 SDL's for horisontal and vertical transversal vibration in a string), etc. I also // imagined that people should be able to make and save their own weird PM instruments // "a 7 meter plucked stereo flute with a trumpet bell" // Yamaha and Stanford also set up Sondius-XG "a joint licensing program, an agreement to // push the development and use of their respective intellectual property portfolios in the // computer tone generation and sound synthesis areas". Companies like StaccatoSys and Korg has // licenced this technology // Covered patents and applications are available at www.sondius.com/patent.html. // So the issue now is: Is possible to write any code at all without violating these patents ? // (I thought that waveguides were bread and butter in Physics/Acoustics and that many of the // ideas in current PM stems from MSW (McIntyre, Schumacher, Woodhouse) which is based on an // non-linear excitation fed into a linear resonator and a feedback loop) // Staffan Liljegren, 990122, staffan@medialab.ericsson.se // Quickly scribbled: SDL { // instance variables, or state of the Single Delay Loop } } // Some predefined SDLs Bore : SDL {}; StraightBore : Bore{}; ConicalBore : {}; String : SDL {}; //...and others MDL : SDL {}; Excitation { var ; *new {arg type; nonlinearity = NonLinearity.new(type); //... } }; SingleReed: Excitation {}; Jet: Excitation {}; Lip: Excitation {}; Bow: Excitation {}; Pluck : Excitation {}; //....and others NonLinearity { *new {arg instrument; ^this; } } Resonance{}; PMInstrument {}; Flute : PMInstrument {}; Guitar : PMInstrument {}; Clarinet: PMInstrument {}; //....and others ------------------------------ Date: Sat, 23 Jan 1999 11:18:20 +0000 From: finer@easynet.co.uk Subject: files, OO project Re files - I've been trying to do something . . . and I can't get it to work. Crucials post gave me hope that it is probably quite straight forward . . . when you know how ! I want to read all GUI settings into a list - I can do this much - infact the lists are added to a list containing all the existing settings/presets, ie [[setting 1],[setting 2] . . . [setting n]]. What I can't get to work is to store this as a file on the hard disk . . . and then call it up another day. Any chance of a nudge in the right direction please ! Re. the 'OO' project - thanks for the offer - I'm not sure I can take this on at the moment but I'd be interested to see how it works out. Thanks, Jem Jem Finer finer@easynet.co.uk Longplayer : http://easyweb.easynet.co.uk/artangel/finer.html Autodestruct/Marseille en Juin : http://www.chez.com/immedias ------------------------------ Date: Sat, 23 Jan 1999 09:25:15 -0600 From: James McCartney <---@---.---> Subject: Re: File operations at Interrupt .... At 3:09 AM -0600 1/23/99, crucial wrote: >Ooops. I guess you can't do a save during the > >{ > >}.play Nope. If you want to save stuff you can store it in an array or something and save it once play is complete. That looks like what you are doing below. In the future I may provide access to asychronous file commands that can be called from interrupt. However since these commands are asychronous, they return before they complete which may be confusing to folks who've not dealt with that before. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Sat, 23 Jan 1999 09:36:51 -0600 From: James McCartney <---@---.---> Subject: Re: OO Exercise Again At 4:43 AM -0600 1/23/99, Staffan Liljegren wrote: >I did some updates to my draft for an OO Framework proposal : >The issues are: > - Is it feasible to do this without requesting/licencing waveguide patents ? > > - Is there interest in doing this as a mailing list effort and is it >possible ? (disclaimer: I am not a lawyer so I have no idea what I'm talking about below) One problem with implementing physical modeling stuff in SC is that some things require single sample feedback loops which are better implemented as unit generators in SC. However due to the patents I don't think I can implement such things as a bidirectional waveguide as a unit generator. I think however that something as generic as a delay line with a filter in the loop should be OK since that is used already in many reverbs. Karplus-Strong plucked string algorithm is also patented by Stanford. This patent has not been defended since there are quite a few products implementing this algorithm. It is unclear to me where a filter in a delay line loop turns into Karplus-Strong. I'm assuming the patent can only cover the specific filter and technique of prefilling with noise described in the paper. Filters in feedback loops already existed in reverbs at the time. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Sat, 23 Jan 1999 09:43:33 -0600 From: James McCartney <---@---.---> Subject: Re: OO Exercise Again and again >At 4:43 AM -0600 1/23/99, Staffan Liljegren wrote: >>I did some updates to my draft for an OO Framework proposal : >>The issues are: >> - Is it feasible to do this without requesting/licencing waveguide patents ? >> >> - Is there interest in doing this as a mailing list effort and is it >>possible ? (disclaimer: I am not a lawyer so I have no idea what I'm talking about below) If users created a class library that implemented some physical modeling stuff for their own use, I don't *think* there would be a patent problem. However I could not distribute that library with the product or have it at my own web site. --- james mccartney james@audiosynth.com http://www.audiosynth.com If you have a PowerMac check out SuperCollider2, a real time synth program: ------------------------------ Date: Sat, 23 Jan 1999 17:12:03 +0100 From: Staffan Liljegren <---@---.---> Subject: Re: OO Exercise Again That's why I proposed the SDL , as opposed to a full-fledged bidirectional waveguide framework, because it's simple, implementable in SC2. Btw Karjalainen etal wrote that a SDL turns into K-S when the delay line is initially filled with the excitation (ie white noise, which Karplus and Strong used). So perhaps one can walk a fine line here between K-S and waveguide patents.... - -Staffan ps where do You need the 1 sample delays in PhM ? Isn't it feasible to use LPZ1 in these cases ? James McCartney wrote: > At 4:43 AM -0600 1/23/99, Staffan Liljegren wrote: > >I did some updates to my draft for an OO Framework proposal : > >The issues are: > > - Is it feasible to do this without requesting/licencing waveguide patents ? > > > > - Is there interest in doing this as a mailing list effort and is it > >possible ? > > (disclaimer: I am not a lawyer so I have no idea what I'm talking about below) > > One problem with implementing physical modeling stuff in SC is that > some things require single sample feedback loops which are better > implemented as unit generators in SC. However due to the patents I > don't think I can implement such things as a bidirectional waveguide as > a unit generator. > > I think however that something as generic as a delay line with a filter > in the loop should be OK since that is used already in many reverbs. > > Karplus-Strong plucked string algorithm is also patented by Stanford. > This patent has not been defended since there are quite a few products > implementing this algorithm. It is unclear to me where a filter in a delay > line loop turns into Karplus-Strong. I'm assuming the patent can only > cover the specific filter and technique of prefilling with noise described > in the paper. Filters in feedback loops already existed in reverbs at the > time. > > --- james mccartney james@audiosynth.com http://www.audiosynth.com > If you have a PowerMac check out SuperCollider2, a real time synth program: > ------------------------------ Date: Sat, 23 Jan 1999 17:16:46 +0100 From: Staffan Liljegren <---@---.---> Subject: Re: OO Exercise Again and again OK I'll probably do some of this anyway and focus on the SDL and perhaps hovering into MDL land (like Your enhanced "Griot" and Piano) btw I cannot get the enhanced Griot to work properly, it just squeaks and then stops (running on my G3/333- PowerTech enhanced CPU) - -Staffan James McCartney wrote: > >At 4:43 AM -0600 1/23/99, Staffan Liljegren wrote: > >>I did some updates to my draft for an OO Framework proposal : > >>The issues are: > >> - Is it feasible to do this without requesting/licencing waveguide patents ? > >> > >> - Is there interest in doing this as a mailing list effort and is it > >>possible ? > > (disclaimer: I am not a lawyer so I have no idea what I'm talking about below) > > If users created a class library that implemented some physical modeling > stuff for their own use, I don't *think* there would be a patent problem. > > However I could not distribute that library with the product or have > it at my own web site. > > --- james mccartney james@audiosynth.com http://www.audiosynth.com > If you have a PowerMac check out SuperCollider2, a real time synth program: > ------------------------------ Date: Sat, 23 Jan 1999 12:16:08 -0500 (EST) From: Dan Trueman <---@---.---> Subject: Re: OO Exercise Again I'm pretty sure the answer to both of your questions is yes. I'm definitely interested, though not immediately, and as long as you aren't selling them, I *think* you are OK with patents. The source code for many of the patented instruments is already freely distributed by Perry Cook in his Synthesis ToolKit (www.cs.princeton.edu/~prc follow links to STK). I have already ported many of them to the MAX/MSP environment, but am seriously considering moving over to Supercollider. I'll ask Perry about the patent situation. One of my biggest reservations about moving to Supercollider is exactly this 1 sample feedback delay line issue. The flute model (or the electric guitar model, which is almost identical), for example, requires one, with lots of stuff in between, so (if I understand LPZ1 correctly) LPZ1 won't do it. Now, if it were possible to get in and write our own unit generators... I thought I heard somewhere that this might be possible in the future (James?) Cheers, dan On Sat, 23 Jan 1999, Staffan Liljegren wrote: > That's why I proposed the SDL , as opposed to a full-fledged bidirectional > waveguide framework, because it's simple, implementable in SC2. Btw Karjalainen > etal wrote that a SDL turns into K-S when the delay line is initially filled with > the > excitation (ie white noise, which Karplus and Strong used). So perhaps one can walk > a fine line here between K-S and waveguide patents.... > > > -Staffan > > ps where do You need the 1 sample delays in PhM ? Isn't it feasible to use > LPZ1 in these cases ? > > James McCartney wrote: > > > At 4:43 AM -0600 1/23/99, Staffan Liljegren wrote: > > >I did some updates to my draft for an OO Framework proposal : > > >The issues are: > > > - Is it feasible to do this without requesting/licencing waveguide patents ? > > > > > > - Is there interest in doing this as a mailing list effort and is it > > >possible ? > > > > (disclaimer: I am not a lawyer so I have no idea what I'm talking about below) > > > > One problem with implementing physical modeling stuff in SC is that > > some things require single sample feedback loops which are better > > implemented as unit generators in SC. However due to the patents I > > don't think I can implement such things as a bidirectional waveguide as > > a unit generator. > > > > I think however that something as generic as a delay line with a filter > > in the loop should be OK since that is used already in many reverbs. > > > > Karplus-Strong plucked string algorithm is also patented by Stanford. > > This patent has not been defended since there are quite a few products > > implementing this algorithm. It is unclear to me where a filter in a delay > > line loop turns into Karplus-Strong. I'm assuming the patent can only > > cover the specific filter and technique of prefilling with noise described > > in the paper. Filters in feedback loops already existed in reverbs at the > > time. > > > > --- james mccartney james@audiosynth.com http://www.audiosynth.com > > If you have a PowerMac check out SuperCollider2, a real time synth program: > > > ------------------------------ Date: Sat, 23 Jan 1999 16:29:58 -0500 From: "crucial" <---@---.---> Subject: Re: files, OO project > >[[setting 1],[setting 2] . . . [setting n]]. > >What I can't get to work is to store this as a file on the hard disk . . . >and then call it up another day. > >Any chance of a nudge in the right direction please ! > Use Iannis' UDFiles class for simple saving of your array. ({ // music stuff, load your array as you have done //array=UDFile1.load; Music.ar(this, that, otherThing) }.play UDFile1.save(yourArray); ) Thus when you [command .] end the piece or the piece ends of its own accord, you will be prompted with the file dialog, and the array will be saved. Then uncomment the array=UDFile1.load; it will be loaded (again with a file dialog) into the array. So strangely enough you can't Save during play, but you can load. (?!) Or put your pathname into the args. btw. if you try a variable to hold the pathname, note that the variable namespace is different outside of the play/interrupt scope than outside of it. >Thanks, > >Jem __________________________________________ :\\_______ http://crucial-systems.com __________________________________________ :\\_______ ------------------------------ Date: Sun, 24 Jan 1999 00:15:59 +0100 From: Staffan Liljegren <---@---.---> Subject: Re: OO Exercise Again Dan, Great if You ask Perry and even better if we can get something like this going as a project for our own use. Btw I did an Sc2 impl of a flute model (simple one based on a CLM implementation from CCRMA) and there is no 1 sample delay in that one. What am I missing out on ? (I can send You the code if You're interested) /Staffan Dan Trueman wrote: > I'm pretty sure the answer to both of your questions is yes. I'm > definitely interested, though not immediately, and as long as you > aren't selling them, I *think* you are OK with patents. The source > code for many of the patented instruments is already freely > distributed by Perry Cook in his Synthesis ToolKit > (www.cs.princeton.edu/~prc follow links to STK). I have already > ported many of them to the MAX/MSP environment, but am seriously > considering moving over to Supercollider. I'll ask Perry about the > patent situation. > > One of my biggest reservations about moving to Supercollider is exactly > this 1 sample feedback delay > line issue. The flute model (or the electric guitar model, which is > almost identical), for example, requires one, with lots of stuff > in between, so (if I understand LPZ1 correctly) LPZ1 won't do it. Now, > if it were possible to get in and write our own unit generators... I > thought I heard somewhere that this might be possible in the > future (James?) > > Cheers, > dan > > On Sat, 23 Jan 1999, Staffan Liljegren wrote: > > > That's why I proposed the SDL , as opposed to a full-fledged bidirectional > > waveguide framework, because it's simple, implementable in SC2. Btw Karjalainen > > etal wrote that a SDL turns into K-S when the delay line is initially filled with > > the > > excitation (ie white noise, which Karplus and Strong used). So perhaps one can walk > > a fine line here between K-S and waveguide patents.... > > > > > > -Staffan > > > > ps where do You need the 1 sample delays in PhM ? Isn't it feasible to use > > LPZ1 in these cases ? > > > > James McCartney wrote: > > > > > At 4:43 AM -0600 1/23/99, Staffan Liljegren wrote: > > > >I did some updates to my draft for an OO Framework proposal : > > > >The issues are: > > > > - Is it feasible to do this without requesting/licencing waveguide patents ? > > > > > > > > - Is there interest in doing this as a mailing list effort and is it > > > >possible ? > > > > > > (disclaimer: I am not a lawyer so I have no idea what I'm talking about below) > > > > > > One problem with implementing physical modeling stuff in SC is that > > > some things require single sample feedback loops which are better > > > implemented as unit generators in SC. However due to the patents I > > > don't think I can implement such things as a bidirectional waveguide as > > > a unit generator. > > > > > > I think however that something as generic as a delay line with a filter > > > in the loop should be OK since that is used already in many reverbs. > > > > > > Karplus-Strong plucked string algorithm is also patented by Stanford. > > > This patent has not been defended since there are quite a few products > > > implementing this algorithm. It is unclear to me where a filter in a delay > > > line loop turns into Karplus-Strong. I'm assuming the patent can only > > > cover the specific filter and technique of prefilling with noise described > > > in the paper. Filters in feedback loops already existed in reverbs at the > > > time. > > > > > > --- james mccartney james@audiosynth.com http://www.audiosynth.com > > > If you have a PowerMac check out SuperCollider2, a real time synth program: > > > > > ------------------------------ Date: Sun, 24 Jan 1999 23:32:42 -0600 From: antiorp@tezcat.com (=cw4t7abs) Subject: nebula_m81 http://m9ndfukc.com/nebula_m81 - - what is it +? - - dze future s!ll! - - - - !nztrukt!onz +? [url.ava!lbl 4 few hourz] - - presz return + sh!ft kurzor reku!rd - netzkape 4.xx [4.5 doeznt zupport snd hensz ... s!lensz] - - - - - - 8.4 m!ll!on channelz !n dze rad!o zpektrum @ 1 pres!sz freq ov 1420.405741758 megahertz 1.420 b!ll!on wavez enter!ng = enter!ng ur d+tektor ever! 2nd konklud m9ndfukc.macht.fre! - - nebula_m81 . m9ndfukc.os \\ kont!nuum eng!n - || ||9|| [p-un_kT-pr_o-T–k_oL] Ø f Ø Ø Ø 3 || herausgegeben vøm !nternat!onalen !nst!tut f:ur ordnung |+| d!sz!pl!n 194.19.130.194/=cw4t7abs/0f0003/ztpd hTTp://m9ndfukc.com :: hTTp://m9ndfukc.org ------------------------------ Date: Tue, 26 Jan 1999 10:11:32 +0100 From: "Iannis Zannos" <---@---.---> Subject: Re: Object writing Tutorial >Anyway point(s) taken - I'll try to do what I want to do and then start >asking questions ! You can also try to ask the questions first in the sense of defining the problems you want to solve. If you can post a clear description of some task here it might be interesting to discuss on it and thus get an approach at the "tutorial". Iannis Zannos SIM Tiergartenstr. 1, D-10785 Berlin, Germany Fax: +49 30 25481172 - ---------- >From: finer@easynet.co.uk >To: sc-users@lists.io.com >Subject: Re: Object writing Tutorial >Date: Thu, 21 Jan 1999 5:05 PM > >>you normally don't write an object, you write a class that >>creates objects > >Stupid me - I meant classes when I said objects. > >Anyway point(s) taken - I'll try to do what I want to do and then start >asking questions ! > >cheers, > >Jem > > > > ------------------------------ Date: Tue, 26 Jan 1999 09:41:40 +0100 From: "Iannis Zannos" <---@---.---> Subject: Re: Object writing Tutorial >Unfortunately, I never got any of the GUIWindows to work, and >can't figure out why. I cannot tell like this either - as far as I know several people are working with them. I have posted an improved version to James and others and I hope it will be uploaded when the new version of SC comes out. In the meanwhile more cleaning up and redesigning work is being done.... Iannis Zannos SIM Tiergartenstr. 1, D-10785 Berlin, Germany Fax: +49 30 25481172 - ---------- >From: "crucial" <---@---.---> >To: scusers >Subject: Re: Object writing Tutorial >Date: Thu, 21 Jan 1999 11:27 PM > >>I find myself that it is hard to keep this simple rule. >>E.g. I have to rewrite basic classes of GUIUtils because >>they have grown to be a mess - so I am splitting >>them up to smaller classes. >> >>OK my two euro-cents for now. > >Yes, I find myself wanting to combine classes into single >too-complex ones because there is so much dependency in >my system anyway. Why pass this information back and forth >between the instances ? > > >Breaking things down into simple components does allow them >to be shared with others though, and that speeds all of us along. > >And on that note, thank you for UDFile ! It worked great. > >Unfortunately, I never got any of the GUIWindows to work, and >can't figure out why. > >I followed the directions, altered the classes etc. exactly. >Or maybe not, but I tried it several times. > > >__________________________________________ :\\_______ > http://crucial-systems.com > >__________________________________________ :\\_______ > ------------------------------ Date: Tue, 26 Jan 1999 09:34:17 +0100 From: "Iannis Zannos" <---@---.---> Subject: Re: Object writing Tutorial >Yes, I find myself wanting to combine classes into single >too-complex ones because there is so much dependency in are you using the dependency mechanism built into SC? (in the Object class, used mainly by Views). I have not tried it out yet as it is not easily visible from the code how it works (resides mainly in primitives). >my system anyway. Why pass this information back and forth >between the instances ? Its one of those basic design questions one considers case by case I guess. >Breaking things down into simple components does allow them >to be shared with others though, and that speeds all of us along. It is not just the issue of sharing with others, I find it is primarily the question of being able to continue working on your code - debug, alter, add new stuff... I need to keep things neat otherwise looking at my own code becomes a nightmare. Iannis Zannos SIM Tiergartenstr. 1, D-10785 Berlin, Germany Fax: +49 30 25481172 - ---------- >From: "crucial" <---@---.---> >To: scusers >Subject: Re: Object writing Tutorial >Date: Thu, 21 Jan 1999 11:27 PM > >>I find myself that it is hard to keep this simple rule. >>E.g. I have to rewrite basic classes of GUIUtils because >>they have grown to be a mess - so I am splitting >>them up to smaller classes. >> >>OK my two euro-cents for now. > >Yes, I find myself wanting to combine classes into single >too-complex ones because there is so much dependency in >my system anyway. Why pass this information back and forth >between the instances ? > > >Breaking things down into simple components does allow them >to be shared with others though, and that speeds all of us along. > >And on that note, thank you for UDFile ! It worked great. > >Unfortunately, I never got any of the GUIWindows to work, and >can't figure out why. > >I followed the directions, altered the classes etc. exactly. >Or maybe not, but I tried it several times. > > >__________________________________________ :\\_______ > http://crucial-systems.com > >__________________________________________ :\\_______ > ------------------------------ Date: Tue, 26 Jan 1999 09:21:49 +0100 From: "Iannis Zannos" <---@---.---> Subject: UDFile again. (Re: File operations at Interrupt ....) Here is the code for UDFile again, slightly modified because of the asynchronous return mode of GetFileDialog. /* UDFile (User Data File) What it does UDFile is a subclass of File that lets you read and write (multiple, nested) arrays containing elements of different data types. For writing it converts each line of data into a compile string, which can be compiled upon reading to reload the saved data in the system. There are limitations and workarounds, explained below. A header mechanism is foreseen to enable the saving and loading of multiple data chunks, like an orchestra and a score array, in the same file. This can be ignored when one is writing or reading only a single data chunk. */ UDFile : File { var <>data, <>headers, path; // 1. LOADING *load { arg path, headers, verbose = true; var file; /* Not supported any more because GetFileDialog returns asynchronously // Get the file path from the calling function, then pass it to UDFile.load. if ( path.isNil, { path = GetFileDialog.new.path; }); // If path is nil, then get path from user */ if ( path.isNil, { ^GetStringDialog.new("oops... empty path", "Get the file path from the calling function, then pass it to UDFile.load"; ) }); file = this.new(path, "r"); if ( file.isNil, // Exit if bad path or user has canceled. { ^GetStringDialog.new("oops...","Cannot open file " ++ path.asCompileString ++ ". Try again with another path ...") } ); ^file.load(headers, path, verbose); // Read and return data } load { arg inheaders, inpath, verbose = true; path = inpath; size = this.length; data = List.new; if ( inheaders.isKindOf(String), { inheaders = [inheaders] }); inheaders = inheaders ? []; headers = inheaders; if ( headers.size < 1, { if ( verbose, { 'Reading file as single chunk of data'.postln; }); data = this.readall(verbose) }, { data = this.readchunks(headers, verbose) }); this.close; if ( verbose, { ("Finished loading file: " ++ path.asCompileString).postln; }); ^data; } readall { var line, chunk; if ( this.pos >= size, { ^nil }); // Return nil if already at end of file; chunk = List.new(32); while ( { this.pos < size }, { line = this.getLine; chunk.add(thisProcess.interpreter.compile(line).value); }); ^chunk; } readchunks { arg headers, verbose = true; var numchunks; if ( verbose, { ("Looking for first header:" ++ headers.first.asCompileString).postln; }); this.skiplinesto(headers.first.asString); numchunks = headers.size - 1; data = headers.collect({ arg h, i; ("Reading data: " ++ h.asCompileString).postln; if ( i < numchunks, { [h, this.readuptonextheader((headers@(i + 1)).asString, verbose)] }, { [h, this.readall] }); }); ^data; } skiplinesto { arg astring; var line; astring = astring.copy.prCat(10.asAscii.asString.copyRange(1, 1)); if ( this.pos >= size, { ^false }); // Return false if already at end of file; while ( { (this.pos < size) }, { line = this.getLine; // ['comparing', line, 'with', astring, 'makes', this.equalstring(line, astring)].postln; if ( this.equalstring(line, astring), { ^true } // return that next header has been reached. ); }); ^false; // return that next header has NOT been reached. } readuptonextheader { arg header; var line, chunk; chunk = List.new(32); if ( this.pos >= size, { ^nil }); // return nil if already at end of file; // append line-feed char to header header = header.copy.prCat(10.asAscii.asString.copyRange(1, 1)); while ( { (this.pos < size) }, { line = this.getLine; // ['comparing', line, 'with', header, 'makes', this.equalstring(line, header)].postln; if ( this.equalstring(line, header), { ^chunk }); chunk.add(thisProcess.interpreter.compile(line).value); }); ^chunk; } equalstring { arg string1, string2; if ( string1.size == string2.size, { ^string1.every({arg char, i; char.ascii == (string2@i).ascii }) }, { ^false }) } notequalstring { arg string1, string2; if ( string1.size == string2.size, { ^string1.every({arg char, i; char.ascii == (string2@i).ascii }).not }, { ^true }) } // 2. SAVING *save {arg data, inpath, verbose = true; this.save_(data, inpath, verbose, multichunk: true); } *save1 {arg data, inpath, verbose = true; this.save_(data, inpath, verbose, multichunk: false); } *save_ { arg data, inpath, verbose = true, multichunk; if ( inpath.isNil, { PutFileDialog.new( "Save data to which file?", "score.os", { arg ok, p; if (ok, { this.new(p, "w").save_(data, p, verbose, multichunk); })}) }, { this.new(inpath, "w").save_(data, inpath, verbose, multichunk); } ); } save_ { arg data, inpath, verbose = true, multichunk = true; if ( multichunk, { this.save(data, inpath, verbose) }, { this.save1(data, inpath, verbose) }); } save { arg indata, ininpath, verbose = true; if ( verbose, { indata.do({ arg d; ("Writing: " ++ (d@0).asCompileString).postln; this.writechunk(d@1, d@0) }); ("Saved data to file: "++ ininpath.asCompileString).postln; }, { indata.do({ arg d; d.writechunk(d@1, d@0) }); }); this.close; } save1 { arg indata, ininpath, verbose = true; if ( verbose, { ("Writing " ++ indata.size.asString ++ " lines of data").postln; this.writechunk(indata); ("Saved data to file: "++ ininpath.asCompileString).postln }, {this.writechunk(indata) }); this.close; } writechunk { arg chunk, header; var newline; newline = 10.asAscii; if ( header.notNil, { this.write(header.asString); this.putChar(10.asAscii); }); chunk.do({ arg d; this.write(d.asCompileString); this.putChar(newline); }) } // ======================================================== // Utils for customizing UDFile to provide extra information. // e.g. info at the beginning of the saved file. writelines { arg chunk, file; var newline; newline = 10.asAscii; chunk.do( { arg d; this.write(d); this.putChar(newline) }); } writeline { arg item, file; this.write(item); this.putChar(10.asAscii); } } /* Removed: // Getting path file from user will not work if from within another function // in this version. The save has to be performed from within the GetStringDialog action. *save_ { arg data, path, verbose = true, multichunk; var file; if ( path.isNil, { path = PutFileDialog.new("Save data to which file?", "score.os").path }); // path.postln; file = this.new(path, "w"); if ( file.isNil, { ^GetStringDialog.new( "SORRY!","Cannot open file " ++ path.asCompileString ++ ". It may already be open due to previous write fail. " ++ "If so, quit SC to close this file") }); if ( multichunk, { file.save(data, path, verbose) }, { file.save1(data, path, verbose) }); } */ Iannis Zannos SIM Tiergartenstr. 1, D-10785 Berlin, Germany Fax: +49 30 25481172 - ---------- >From: "crucial" <---@---.---> >To: scusers >Subject: File operations at Interrupt .... >Date: Sat, 23 Jan 1999 10:09 AM > >Ooops. I guess you can't do a save during the > >{ > >}.play > > > >Or did I misunderstand my error message ? >The save was triggered from a button action. > > > >I was hoping to be able to save various states of my process that >evolves during play. > > > >I am having success with : > > > >( >{ > > // music stuff > // all neccessary objects instantiated > >Memory.load(filename); > > //music output stuff >}.play >Memory.save(filename); // the class method that saves via a UDFile.save > >) > >Thus each time it loads and then saves when it ends (providing it doesn't >crash, which is more often than I would like.) > >__________________________________________ :\\_______ > http://crucial-systems.com > >__________________________________________ :\\_______ > ------------------------------ End of sc-users-digest V1 #25 *****************************