Kyma Forum
  Kyma Support
  Sequenced Wavetables

Post New Topic  Post A Reply
profile | register | preferences | faq | search

next newest topic | next oldest topic
Author Topic:   Sequenced Wavetables
David McClain
Member
posted 26 September 2001 12:25         Edit/Delete Message   Reply w/Quote
I have in mind an idea that needs the use of multiplying wavetables but these tables are not static. Rather on some trigger at audio rates I need to step or change the wavetable in use.

So far the only thing I can think of in Kyma for this purpose would be to compute all the wavetables in parallel and then use a threshold detector and a product at each wavetable output, finally sending all of these parallel streams to a mixer. The threshold would be comparing a control signal and its output (1 or 0) multiplies the result of the wavetable readout.

But in effect, I need a 2-dimensional control. The audio samples feeding the wavetables is the first dimension, and the control signal selecting a particular wavetable is the second dimension.

The parallel threshold idea is okay for just a few wavetables, but what if I need 30 or more? I think the Kyma/Capy will run out of gas at such a large number of thresholded wavetable elements.

Any suggestions?

- DM

IP: Logged

David McClain
Member
posted 26 September 2001 13:04         Edit/Delete Message   Reply w/Quote
I just thought of another way...

If the wavetables don't need really fine resolution then we could pack, say 256 element tables, into one 4096 element wavetable. Then the control signal (nonlinear input to the MultiplyingWavetable) could be scaled down to (0,1/16) and could have an offset added in stepped sequence so that as the controller steps along, the wavetable is directed to use one of the 16 subtables.

- DM

IP: Logged

David McClain
Member
posted 26 September 2001 14:05         Edit/Delete Message   Reply w/Quote
Another neat thing to have would be a collection of "digital" operators, as opposed to "audio" operators. These would be things like tapped delay lines, flip-flops, shift registers, etc. These would have 0 and 1 values for control purposes.

You could make some killer sequencers with this collection applied to control signals.

- DM

IP: Logged

pete
Member
posted 27 September 2001 05:33         Edit/Delete Message   Reply w/Quote
Hi David
With regard to your lower resolution multi split (16 sub tables) idea. If you had a referance pointer that was not limited to the 16 steps but could point to imaginary tables between the steps. I wonder if you could then double up on the whole circuit, such that one circuit outputs a signal from the sub table just below the desired ref, and the other giveing an output from the sub table just above the desired ref. Then by interpolating between the two outputs at a ratio of (ref - lower table) : (upper table - ref), you could smooth out the gaps between the 16 tables.

To save on all the amplifing,clipping and subtracting needed to derive the ratio , maybe this could be done with yet another table that contained 16 cycles of a sawtooth waveform. Subtracting this output (devided by 16) from the ref could give the 16 integer steps needed to offset the table pointers.

Would it give you the desired effect ?

[This message has been edited by pete (edited 27 September 2001).]

[This message has been edited by pete (edited 27 September 2001).]

IP: Logged

SSC
Administrator
posted 27 September 2001 09:21         Edit/Delete Message   Reply w/Quote
If you place all of the wavetables into one sample, you can use either the Sample or Waveshaper.

Using the Sample, constrain the LoopStart and LoopEnd to be multiples of 1/N (where N is the number of wavetables).

Using the Waveshaper, use a FullRamp oscillator routed through a ScaleAndOffset as the Index. Then the Scale and Offset can be used to select the wavetable (Scale = 1/N, offset = -1 + (2m/N), where m is the wavetable to play).

There are examples of both of these techniques in the Kyma Sound Library: Synthesis-Keyboard Controlled/Multiwave Synthesis KBD.kym and Synthesis-Backgrounds & Pads/Multiwave Synthesis.kym.

Also, read the Class Description of GAOscillators.

IP: Logged

dennis
Member
posted 27 September 2001 09:40         Edit/Delete Message   Reply w/Quote
David McClain wrote: "Another neat thing to have would be a collection of "digital" operators, as opposed to "audio" operators. These would be things like tapped delay lines, flip-flops, shift registers, etc. These would have 0 and 1 values for control purposes."

Dennis writes:
(Perhaps I should make another topic instead of "Sequenced Wavetables.")

What would be really nice would be a kind of execution/control flow de-multiplexer.

Many times, I want to have a lot of Sounds in my signal flow diagram, but at any given time, I only need to compute one branch. The particular branch to compute must be chosen at runtime because the branch selection criteria is a hot parameter. It's a real-time performance decision. So I want to "turn-on" execution for exactly one of the branches. Currently, I have to compute all branches then select (via a mixer or similar facility) the desired outcome. While this works, it burns a lot of processor cycles computing unused numbers.

I think this also describes your sequenced wavetables, David.

Graphically, the "ExecutionSelector" could look sort of like a reverse mixer with multiple output lines. Each output line is a seperate execution branch. A hot parameter would select one of the branches to execute. This would not work with the current Sound Editor, I know, since each Sound generates two signals (which may have the same value for "mono" Sounds).

So here are some other implementation ideas:
1) Make the ExecutionSelector look like a Mixer (i.e., reverse the above graphic). It would accept an arbitrary number of Inputs. A hot parameter selects which of the Input branches is computed. The DSP does not compute the remaining Inputs.
2) Have a DoWhen Sound that is used like the WaitUntil Sound except that the Sound is already loaded into the Capy and you can start/stop it's execution via a hot parameter. With this schema, the ExecutionSeletor function is distributed as a bunch of DoWhens instead of appearing in one Sound.
3) Have a new window, the Control Flow Editor. This window functions much like the Signal Flow Editor except that you're diagramming the control-flow (i.e., the processor scheduling) instead of the signal-flow. In many ways, it's a kind of non-linear TimeLine (a TimeLine in the Performance Domain?).

Of course, I don't know if ANY of this is possible.

IP: Logged

pete
Member
posted 27 September 2001 15:02         Edit/Delete Message   Reply w/Quote
Dennis sounds interesting.

If it downloaded all the branches to the cappy at load time then there would be no gain over doing it with a mixer. But if it would compile all the branches at download time but hold them in the host computer until a switch command took place, then I could see it working but for the situation where a some branches have ram type sample files , which couldn't be downloaded instantainiusly. Which is what would be needed to fullfill Davids wants.
But to have this as a bridge between the sound editor and the Tool. And to have many branches, each holding open there own sample files open on disc, ready to play them, would be very powerfull. It would probably need a compleate kyma rewrite so I won't hold my breath for this one.


Buy the way David , a good point that SSC made, which I had forgotten, is that the waveshaper is not limited to 4000 odd samples and therfore could have a larger quantity of sub tables so long as they fit into RAM.

Also these logical modules you were talking about, would they need to be sample rate (48Khz), or control rate (1Khz) ?
I was working on making sample rate type FlipFlops , Track and hold and various gates using the current kyma modules, but they were very inefficiant. I had to use 1 sample feedback paths to get the hold functions and loads of scale and offsets to get a simple inverter. This is because the value of 1 that travels through the sterio wires between modules is realy 0.9999999 something. This has to be compensated for and takes a lot of modules. If you want I'll try to fish them out but they aren't great.

IP: Logged

pete
Member
posted 27 September 2001 15:20         Edit/Delete Message   Reply w/Quote
Hi Dennis again
I've Just looked again at your posting and realized that I'm talking rubbish. Of cause, just because the compiled sound is living in cappy memory dosn't mean that its filling up prossesor time, which is the magic Kyma juice we all crave.
The penny drops !!

IP: Logged

David McClain
Member
posted 27 September 2001 15:45         Edit/Delete Message   Reply w/Quote
Hey thanks for all the feedback fellas...

Several items:

1. I tried the trick of putting multiple wavetables into one big (4096 element) wavetable. And it works... but... it turns out that space is cheaper than time, and the extra cycles that it cost to compute the scaled control value plus a subtable offset pushed the sound over the top of real-time available cycles. It turns out that I have more than enough memory to hold separate wavetables for as many as 30 or more. And simple direct use of these is fastest by far.

2. It appears that the MultiplyingWavetable does not interpolate the control value. That would be a nice feature, making possible the use of shorter, multiple, subtables when time allows. But without interpolation the results are too ratchety...

3. My thoughts about the "digital" effects are for audio rate (i.e., sample rate) control, not the 1 KHz control rate now employed. I need to switch among various branches of Sounds on a sample's notice. Doing these things at control rate is much easier since we have Smalltalk at our disposal.

Pete, do I understand you to mean that Wavetables can be arbitrarily large, i.e,. greater than 4096 elements? I had been under the impression that all wavetables in Kyma were always 4096 elements, whether used for Wavetable multiplication or for use as oscillator waveforms. I'll have to try this one out...

Cheers,

- DM

IP: Logged

SSC
Administrator
posted 28 September 2001 09:09         Edit/Delete Message   Reply w/Quote
quote:
Originally posted by David McClain:

Pete, do I understand you to mean that Wavetables can be arbitrarily large, i.e,. greater than 4096 elements? I had been under the impression that all wavetables in Kyma were always 4096 elements, whether used for Wavetable multiplication or for use as oscillator waveforms. I'll have to try this one out...

Use the Waveshaper not the MultiplyingWaveshaper. It can use any sample file as the waveshape and it interpolates! Look at the above-cited examples in the Sound Library to see how to use the Waveshaper as an oscillator.

IP: Logged

dennis
Member
posted 28 September 2001 09:28         Edit/Delete Message   Reply w/Quote
Hey, Pete! I'm interested in seeing what you came up with for F-Fs, Gates, etc. Please post them to the Forum or directly to me at dennis@mail.worldserver.com.

IP: Logged

pete
Member
posted 28 September 2001 13:19         Edit/Delete Message   Reply w/Quote
Dennis
It may take me a bit of time to fish them out but I will find them eventualy. I'm afraid my fileing system just isn't.

IP: Logged

Bill Meadows
Member
posted 28 September 2001 14:34         Edit/Delete Message   Reply w/Quote
quote:
Originally posted by pete:
Dennis sounds interesting.

I was working on making sample rate type FlipFlops , Track and hold and various gates using the current kyma modules, but they were very inefficiant. I had to use 1 sample feedback paths to get the hold functions and loads of scale and offsets to get a simple inverter. This is because the value of 1 that travels through the sterio wires between modules is realy 0.9999999 something. This has to be compensated for and takes a lot of modules. If you want I'll try to fish them out but they aren't great.


I am a little surprised that there aren't "AND/OR/INVERT" expressions in Smalltalk. I'd like to do that occassionally myself. Control rate would be o.k., I suppose.

There is an "asLogicLevel" message that might fix your 0.9999 problem.

IP: Logged

pete
Member
posted 01 October 2001 06:22         Edit/Delete Message   Reply w/Quote
By the way bill ,the 0.99999 problem isn't there at control rate ,it's only a limit of sample rate signals. And in nearly all cases it isn't a problem. The reason I have a problem with the 0.99999, is that I am making use of the fact that signals get clipped at value one(ish) . So by adding two singals that have values one or zero only , I get one or zero at the output which follows the same rules as an OR gate . If I wanted to invert it I would amplify it by minus 1 and offset it by plus 1, but I don't the get exactly zero or exactly one , because of the 0.99999 clipping. An AND gate can be made by multiplying two signals that have values 0 and/or 1, but if the 0 values aren't exactly zero then it doesn't work. When flipflops use feedback paths, this error gets amplified every sample cycle and becomes unusable within half a second. The 0,99999 is not a fault, but I am just trying to use 24 bit limitation to my advantage.

But there is no cliping in smalltalk control values and smalltalk has these gate funtions in any case. But I'll let a smalltalk expert tell you about these, as I might get it wrong.


IP: Logged

SSC
Administrator
posted 01 October 2001 13:02         Edit/Delete Message   Reply w/Quote
You can find expressions for implementing logic using arithmetic on page 479 of the on-line Kyma manual.

IP: Logged

All times are CT (US)

next newest topic | next oldest topic

Administrative Options: Close Topic | Archive/Move | Delete Topic
Post New Topic  Post A Reply

Contact Us | Symbolic Sound Home

This forum is provided solely for the support and edification of the customers of Symbolic Sound Corporation.


Ultimate Bulletin Board 5.45c