Kyma Forum
  Tips & Techniques
  suggestion - reverse flow sequencers!

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

next newest topic | next oldest topic
Author Topic:   suggestion - reverse flow sequencers!
cristian_vogel
Member
posted 02 September 2007 06:36         Edit/Delete Message   Reply w/Quote
I have mentioned this before, but i want to bring it up again, in the hope that the next update might include this...

basically, the AnalogSequencer sound, but that sends it data output the other way in the structure! i.e. to the right

this is essential for efficiency i think, so i can build large multisequencer performance sounds, without having to replicate the oscillators - maybe thats a bit vague, but basically its hard thinking in reverse all the time, when it would be so simple if there was 'reverse-flow' version of AnalogSequencer....

here's hoping!

IP: Logged

SSC
Administrator
posted 03 September 2007 16:43         Edit/Delete Message   Reply w/Quote
If I am understanding you correctly, you would like to have one synthesis 'patch' controlled by several different sequencers; is that correct?

One way to do this would be to put the sets of sequencer controls one after another in a single AnalogSequencer. Then use StartIndex and EndIndex to select *which* sequence is currently playing.

It would be difficult to make AnalogSequencer into a signal source since it is generating vectors of data (KeyDown, KeyPitch, KeyVelocity, plus all the ExtraValues), each component of which is destined to control a different parameter field of the Sounds to its left. It acts more like an 'environment' mapping specific values to variables in the Sounds to its left.

IP: Logged

keph
Member
posted 03 September 2007 21:34         Edit/Delete Message   Reply w/Quote

I've not tested this, but could you use a combination of SoundToGlobalController with the sequencers?

With this, you could build a controller section that controls the synthesis section. The controller (sequencers) could be kept routed into a muted mixer and placed in the structure independently. You may be able to copy the same SoundToGlobalController into multiple mixers or at very least clone them (at lower CPU cost than items like oscillators and filters).

You can then set up something else to trigger or toggle between the sequencers.


IP: Logged

cristian_vogel
Member
posted 04 September 2007 05:53         Edit/Delete Message   Reply w/Quote
quote:
Originally posted by SSC:
If I am understanding you correctly, you would like to have one synthesis 'patch' controlled by several different sequencers; is that correct?

One way to do this would be to put the sets of sequencer controls one after another in a single AnalogSequencer. Then use StartIndex and EndIndex to select *which* sequence is currently playing.


I'm struggling to grasp that - can you post an example if you have time?
I like the brain warping that thinking hard about sequencers does to me!

quote:

It would be difficult to make AnalogSequencer into a signal source since it is generating vectors of data (KeyDown, KeyPitch, KeyVelocity, plus all the ExtraValues), each component of which is destined to control a different parameter field of the Sounds to its left. It acts more like an 'environment' mapping specific values to variables in the Sounds to its left.

OK, so it would be difficult , this I can understand - but would it be *impossible* ? - i still maintain that a discrete ReverseFlowAnalogSequencer sound would open a whole load of creative possibilities... As well as synthesis and all the other amazing sound design possibilites in Kyma, the invention and exploration of compositional structures (i.e. musical event generation and control ) is also a very significant part of the system - but like AnalogSequencer and Script based algorithmic scores , one has to think 'in reverse' , and for me this doesn't allow straight-forward and open exploration of the relationships arising between metastructural control inventions and unique synthesis inventions.


As Keph mentions above, I have reached some kind of bedrock , by capturing the events in SoundToGlobalControllers, and sending them back out to the rest of the program structure. This works ( you can see this in action in my XYsequencer http://www.symbolicsound.com/zzz/pub/Share/Sounds/XYInterp.kym ) , but it can get messy , having to have two names for all the events from the Seq etc.

[This message has been edited by cristian_vogel (edited 04 September 2007).]

IP: Logged

cristian_vogel
Member
posted 05 September 2007 09:55         Edit/Delete Message   Reply w/Quote
"One way to do this would be to put the sets of sequencer controls one after another in a single AnalogSequencer. Then use StartIndex and EndIndex to select *which* sequence is currently playing."

I just can't figure out how you mean - i tired pasting AnalogSequencers into the fields of a leading AnalogSequencer - but i can't seem to get a peep out of it... can you elaborate on what you meant SSC?

edit:

oh i get it now - you mean putting all the different data sets in one AnalogSequencer sound , and referencing them with the sequencer index points. Ok, but then what if i want one of the sequencers to be a chaotic one, the other running at half speed, another in reverse etc... could get confusing...

[This message has been edited by cristian_vogel (edited 05 September 2007).]


OK - so now I'm trying a scripted approach, which I think I can handle, and could give me the flexibility I'm looking for.... but my first script is failing , and I don't know why

| selectedDurArray durArray1 durArray2 |

durArray1 := #({1 + !Swing * 0.5} {1 - !Swing * 0.5} {1 + !Swing * 0.5} {1 - !Swing * 0.5} {1 + !Swing * 0.5} {1 - !Swing * 0.5} {1 + !Swing * 0.5} {1 - !Swing * 0.5} ).

durArray2 := #({0.5 + !Swing * 0.5} {0.5 + !Swing * 0.5}).

selectedDurArray := (!Select of:#(durArray1 durArray2)) .

seq start: 0 s durArray: selectedDurArray .

[This message has been edited by cristian_vogel (edited 05 September 2007).]

IP: Logged

cristian_vogel
Member
posted 05 September 2007 11:03         Edit/Delete Message   Reply w/Quote
so i tried to make it only with CapyTalk

and why doesn't this work either???

I never seem to get anywhere when I try scripting in Kyma - I need classes in classes!

| selectedDurArray durArray2 durArray1 switch|


switch := !Switch .
durArray1 := #({1 + !Swing1 * 0.5} {1 + !Swing1 * 0.5}).
durArray2 := #({0.5 + !Swing2 * 0.5} {0.5 + !Swing2 * 0.5}).

(switch eq: 0) true: (
selectedDurArray := (Array with: durArray1)
)
false: (
selectedDurArray := (Array with: durArray2)
).

seq start: 0 s durArray: selectedDurArray.

[This message has been edited by cristian_vogel (edited 05 September 2007).]

IP: Logged

SSC
Administrator
posted 05 September 2007 19:18         Edit/Delete Message   Reply w/Quote
From looking at your examples, it appears to me that what you want is a single sound generator with several choices for control sources. Is that correct?

There are two approaches that would work in this case. One is the aforementioned idea of putting the sequences on after another in a single sequence and controlling a "window" of where you are in the sequence with the StartIndex and EndIndex. If you want some of the "windows" to have chaotic jitter, you could multiply the jitter by a red variable and add it to the startIndex offset (being careful to scale it so that it does not go beyond the EndIndex for that window). Then when you are in other nonchaotic sequences (windows), you could set the red variable to zero so no jitter is added to the index. Or for random or chaotic sequences, you can make that sequence exactly one long and add the jitter to each parameter of the single stage (i.e., Duration, Velocity, Pitch).

Similarly, you could save your different sequencers as snapshots or presets. By using StartIndex, EndIndex, and jitter that you can turn on or off by multiplying by red variables, you can get sequences of different lengths and vastly different characters. Once the presets have been saved, you could feed the AnalogSequencer into an InterpolatePresets Sound. You could add tic marks and labels to the fader and add a grid to the fader if you want to jump between sequences rather than smoothly interpolating from one to another.

IP: Logged

SSC
Administrator
posted 05 September 2007 20:16         Edit/Delete Message   Reply w/Quote
code:
durArray1 := #({1 + !Swing * 0.5} {1 - !Swing * 0.5} {1 + !Swing * 0.5} {1 - !Swing * 0.5} {1 + !Swing * 0.5} {1 - !Swing * 0.5} {1 + !Swing * 0.5} {1 - !Swing * 0.5} ).

durArray2 := #({0.5 + !Swing * 0.5} {0.5 + !Swing * 0.5}).

selectedDurArray := (!Select of:#(durArray1 durArray2)) .


CapyTalk expressions can evaluate to numbers only. You cannot use !Select to choose in realtime between two data structures like arrays. However, you could make each element of the array into a CapyTalk expression that depends on !Select. For example:

code:
durArray1 := #({1 - (!Select * 0.5) + !Swing * 0.5} {1 - (!Select * 0.5) + ((!Select of: #(1 -1) * Swing)  * 0.5} etc....



IP: Logged

SSC
Administrator
posted 06 September 2007 08:43         Edit/Delete Message   Reply w/Quote
quote:
OK, so it would be difficult , this I can understand - but would it be *impossible* ? - i still maintain that a discrete ReverseFlowAnalogSequencer sound would open a whole load of creative possibilities...

It would be cool to have a way of switching between different sequencers (sources of controls) that affect the same synthesis algorithm. But reversing the sequencer would not automatically allow this (and it would make editing the synthesis algorithm a lot more difficult.)

IP: Logged

cristian_vogel
Member
posted 07 September 2007 03:05         Edit/Delete Message   Reply w/Quote
quote:
There are two approaches that would work in this case. One is the aforementioned idea of putting the sequences on after another in a single sequence and controlling a "window" of where you are in the sequence with the StartIndex and EndIndex. If you want some of the "windows" to have chaotic jitter, you could multiply the jitter by a red variable and add it to the startIndex offset (being careful to scale it so that it does not go beyond the EndIndex for that window). Then when you are in other nonchaotic sequences (windows), you could set the red variable to zero so no jitter is added to the index. Or for random or chaotic sequences, you can make that sequence exactly one long and add the jitter to each parameter of the single stage (i.e., Duration, Velocity, Pitch).

Similarly, you could save your different sequencers as snapshots or presets. By using StartIndex, EndIndex, and jitter that you can turn on or off by multiplying by red variables, you can get sequences of different lengths and vastly different characters. Once the presets have been saved, you could feed the AnalogSequencer into an InterpolatePresets Sound. You could add tic marks and labels to the fader and add a grid to the fader if you want to jump between sequences rather than smoothly interpolating from one to another.


the first idea is like a kind of scanning window through a databank, a little like how the waldorf wavetable synthesis works, or in Kyma the MultiCycleOscillators. I like this idea alot, especially as with some innovative capytalk code in the data fields, you could generate all the databank as different ratios and relationships say, only 8 VCS controllers, and control the 'data window' with only 2 VCS widgets. This is the sort of thing i like - see, i don't necesarily want to have 128 data sliders on the screen, I'm much more into warping ( in a recallable way) the data.

The intepolating idea is also cool, and one that I explored in my XYsequencer sound that i mentioned above - as it reverses the flow of the data, by remapping the !KeyPitch and !KeyVelocity to global events, the sequencer data is warped, by passing through blocks like InputOutputCharacteristic or other waveshaping. But this is very inefficient, as these sounds work at audio rate, and the data only needs control rate.

anyway, thanks for the thoughts, I'll see how I can apply them

IP: Logged

Luddy
Member
posted 03 October 2007 10:33         Edit/Delete Message   Reply w/Quote
quote:
It would be cool to have a way of switching between different sequencers (sources of controls) that affect the same synthesis algorithm.

If you encode a sequence of control values as a wavetable, and if you concatenate several such wavetables together, you can use the oscillator's index field to select bewteen different sequences of control values. A wavetable can encode a sequence of triggers, or a sequence of numbers in the range -1 to 1. This works best with sequences that are 4 seconds long or less (i.e., at that length, you can encode about one value per millisecond).

Similarly, you can use a Xen Oscillator, where the breakpoints correspond to the time-dependent sequence of values, as a sequencer. There is no index in a Xen Oscillator, so to select between several such sequences you would have to use something like a mixer.

-Luddy

[This message has been edited by Luddy (edited 03 October 2007).]

IP: Logged

Luddy
Member
posted 05 October 2007 21:59         Edit/Delete Message   Reply w/Quote

CapySequencer.kym

 
I've attached an example (also uploaded into the Sequencers section of the Wiki) that shows how to create an analog sequencer using only capytalk expressions. The idea is to use a ramp expression, triggered on KeyDown, to index a map of time points. The time points are then in turn used to index an array of values. The values can be hot, but as far as I can tell it is not possible to make the time points hot using this technique. It is however easy to select between several such sequencers, using of the various selection mechanisms in Capytalk.
-Luddy

IP: Logged

SSC
Administrator
posted 06 October 2007 09:36         Edit/Delete Message   Reply w/Quote
Cool idea, Luddy!

For moveable time points, could you use an InputOutputCharacteristic for the first into array? (Would require rescaling the time points from the (-1,1) range to your actual duration).

IP: Logged

Luddy
Member
posted 06 October 2007 18:26         Edit/Delete Message   Reply w/Quote
Right; or you can use the Xen Oscillator (very similar to InputOutputCharacteristic) to create a sequencer with hot time points and output values. Lots and lots of ways to make sequencers in Kyma!

Really, the only thing that the built-in Analog Sequencer offers over these is the allocation of MIDI voices.

-Luddy

IP: Logged

SSC
Administrator
posted 06 October 2007 20:03         Edit/Delete Message   Reply w/Quote
If you'd like to do a form of round-robin allocation, you can put your Sound into a Replicator (where the number of copies is the polyphony) and then trigger it with:
code:

((!Trigger countTriggersMod: ?NumberVoices) eq: (?VoiceNumber - 1))


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