[Csnd] Partikkel questions
Date | 2009-02-27 13:39 |
From | UnUnUnium |
Subject | [Csnd] Partikkel questions |
Hello, I am learning Csound, and decided to jump into the deep end and go with Partikkel - my implementation is Max/MSP based, so I have been looking through the help patch, and have actually made some decent progress. I have a few questions about the way Partikkel functions. Firstly, is there any way to set each of the four "kwaveforms" to come out of a separate output? I know there is a way to do this on a "per grain" basis, but I would like to do it so that each of four waveforms are statically assigned to separate output. Is this possible? Secondly, I am slightly confused about how Partikkel knows how to scale the phasor automatically, so that 0. is the beginning, and 1. is the end - I am assuming it uses the table length of the kwaveform source source table to do this. Is that correct? If this is the case, is there any way to set this arbitrarily? The reason I ask is because I would like to be able to change the record length of an incoming sample, and have it scale accordingly. The reason I ask is becasue my plan is to record live into a Csound buffer, and set an arbitrary record length (smaller than the buffer), and have Partikkel scale playback length accordingly. Is this a reasonable approach or am I missing something? All the best, Jeremy -- View this message in context: http://www.nabble.com/Partikkel-questions-tp22246051p22246051.html Sent from the Csound - General mailing list archive at Nabble.com. |
Date | 2009-03-01 22:51 |
From | Oeyvind Brandtsegg |
Subject | [Csnd] Re: Partikkel questions |
Hello Jeremy, 1: To enable a several granular streams, using separate source waveforms and synchronized operation in all other respects, I would use separate instances of partikkel synchronized with partikkelsync. This would not make use of partikkel's multiple source waveforms, nor the output routing capabilities, but actually what you describe is several separate granular generators so it makes sense to use several instances. 2: Yes, as you assume, the phasor range is scaled to the table length of the source waveform. This might be different (length) for the different source waveforms by the way. I routinely use a very long table for live sampling, and assign "segments" from this table as source waveforms. This is done by manipulating the phasor range and offset. pseudo code excerpt (beware, rewritten for this email, not tested in this version): ksourcelen = (audio table length) kstart = (start index of the selected region of the audio table) kend (end index of the selected region of the audio table) klength = (kend-kstart)/ksourcelen kphase = (the moving phase value, range 0 to 1) ksamplepos = (kphase*klength)+(kstart/ksourcelen) ... and ksamplepos is the value you would send to partikkel asamplepos parameter (of course, may be a-rate even if this example only uses k-rate) best Oeyvind 2009/2/27 UnUnUnium |
Date | 2009-03-03 10:19 |
From | UnUnUnium |
Subject | [Csnd] Re: Partikkel questions |
Hello Oeyvind, Thank you very much for this! That formula makes perfect sense - basically, we get a ratio of the desired length of the "segment" to entire length of the Table, to scale the phasor to the shorter length, then add the offset to target the exact section of the buffer. In preliminary testing, this seems to work perfectly, though I am only using one segment for now. I am still having trouble understanding how to scale the transposition factor to play back the segment at its original pitch. Also, what is the format for the "key" number to the four waves? Is it in hz? I understand the use of several instances to get discrete outputs from Partikkel instances -I may just stick with one though, and try to use the channel masks to pan per grain. Do understand correctly that the table containing Channel masks is "per grain", and each time a grain is scheduled, it advances the index into that table? All the best and thanks again, Jeremy Oeyvind Brandtsegg-2 wrote: > > Hello Jeremy, > > 1: > To enable a several granular streams, using separate source waveforms > and synchronized operation in all other respects, I would use separate > instances of partikkel synchronized with partikkelsync. This would not > make use of partikkel's multiple source waveforms, nor the output > routing capabilities, but actually what you describe is several > separate granular generators so it makes sense to use several > instances. > 2: > Yes, as you assume, the phasor range is scaled to the table length of > the source waveform. This might be different (length) for the > different source waveforms by the way. I routinely use a very long > table for live sampling, and assign "segments" from this table as > source waveforms. This is done by manipulating the phasor range and > offset. > pseudo code excerpt (beware, rewritten for this email, not tested in > this version): > ksourcelen = (audio table length) > kstart = (start index of the selected region of the audio table) > kend (end index of the selected region of the audio table) > klength = (kend-kstart)/ksourcelen > kphase = (the moving phase value, range 0 to 1) > ksamplepos = (kphase*klength)+(kstart/ksourcelen) > ... and ksamplepos is the value you would send to partikkel asamplepos > parameter (of course, may be a-rate even if this example only uses > k-rate) > > best > Oeyvind > > > > 2009/2/27 UnUnUnium |
Date | 2009-03-04 10:48 |
From | Oeyvind Brandtsegg |
Subject | [Csnd] Re: Re: Partikkel questions |
Hello > > I am still having trouble understanding how to scale the transposition > factor to play back the segment at its original pitch. Also, what is the > format for the "key" number to the four waves? Is it in hz? > There is not set format, as very different ranges for the values might be used in different contexts (e.g. playing back sampled audio or single-cycle waveforms). The kwavekey parameter for each wave is generally thought to be used if you want to transpose each wave differently, and the kwavfreq parameter transposes all 4. I've used sr/tablelength as kwavekay, and then kwavfreq = 1 for original playback speed. > I understand the use of several instances to get discrete outputs from > Partikkel instances -I may just stick with one though, and try to use the > channel masks to pan per grain. > > Do understand correctly that the table containing Channel masks is "per > grain", and each time a grain is scheduled, it advances the index into that > table? > Yes, this is correct. So if you do not want to use per grain control, set the loop start and end points (index 0 and 1 in the table) to zero and just modify the first data value (index 2 in the table) best Oeyvind |
Date | 2009-03-05 12:02 |
From | UnUnUnium |
Subject | [Csnd] Re: Re: Partikkel questions |
Thanks again Oeyvind, Just to follow up, I figured out how to get the transposition right for my purposes: I multiplied the (segment length in samples by the total table length in samples), then multiplied that number by (1 divided by the segment length in seconds). This allows me to play back the sample at it's original pitch, and apply another transposition factor to pitch up or down. All the best, Jeremy Oeyvind Brandtsegg-2 wrote: > > Hello > >> >> I am still having trouble understanding how to scale the transposition >> factor to play back the segment at its original pitch. Also, what is the >> format for the "key" number to the four waves? Is it in hz? >> > > There is not set format, as very different ranges for the values might > be used in different contexts (e.g. playing back sampled audio or > single-cycle waveforms). > The kwavekey parameter for each wave is generally thought to be used > if you want to transpose each wave differently, and the kwavfreq > parameter transposes all 4. I've used sr/tablelength as kwavekay, and > then kwavfreq = 1 for original playback speed. > >> I understand the use of several instances to get discrete outputs from >> Partikkel instances -I may just stick with one though, and try to use the >> channel masks to pan per grain. >> >> Do understand correctly that the table containing Channel masks is "per >> grain", and each time a grain is scheduled, it advances the index into >> that >> table? >> > > Yes, this is correct. So if you do not want to use per grain control, > set the loop start and end points (index 0 and 1 in the table) to zero > and just modify the first data value (index 2 in the table) > > > best > Oeyvind > > > Send bugs reports to this list. > To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe > csound" > > -- View this message in context: http://www.nabble.com/Partikkel-questions-tp22246051p22350172.html Sent from the Csound - General mailing list archive at Nabble.com. |
Date | 2009-03-05 12:39 |
From | Oeyvind Brandtsegg |
Subject | [Csnd] Re: Re: Re: Partikkel questions |
Good to hear you got it working. It seems your algorithm for original transposition is equivalent to mine, but yours might be slightly more cpu consuming as you multiply and divide by the same number (segment length). This could be optimized, but then again, you probably only calculate this once each time you assign a segment to partikkel so the difference is neglible. It would be interesting to hear some sound examples or compositions when start producing things with it. best Oeyvind 2009/3/5 UnUnUnium |