![]() |
![]() ![]() ![]() ![]() ![]()
|
next newest topic | next oldest topic |
Author | Topic: suggestion - reverse flow sequencers! | |
cristian_vogel Member |
![]() ![]() ![]() 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 |
![]() ![]() ![]() 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 |
![]() ![]() ![]() 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 |
![]() ![]() ![]() quote: I'm struggling to grasp that - can you post an example if you have time?
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... 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.
[This message has been edited by cristian_vogel (edited 04 September 2007).] IP: Logged | |
cristian_vogel Member |
![]() ![]() ![]() "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).]
| 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 |
![]() ![]() ![]() 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 eq: 0) true: ( seq start: 0 s durArray: selectedDurArray. [This message has been edited by cristian_vogel (edited 05 September 2007).] IP: Logged | |
SSC Administrator |
![]() ![]() ![]() 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 |
![]() ![]() ![]() 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} ). 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 |
![]() ![]() ![]() quote: 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 |
![]() ![]() ![]() quote: 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 |
![]() ![]() ![]() quote: 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 |
![]() ![]() ![]()
-Luddy IP: Logged | |
SSC Administrator |
![]() ![]() ![]() 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 |
![]() ![]() ![]() 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 |
![]() ![]() ![]() 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: IP: Logged |
All times are CT (US) | next newest topic | next oldest topic |
![]() ![]() |
This forum is provided solely for the support and edification of the customers of Symbolic Sound Corporation.