Kyma Forum
  Tips & Techniques
  delay change/event until next beat.

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

next newest topic | next oldest topic
Author Topic:   delay change/event until next beat.
CharlieNorton
Member
posted 27 November 2010 20:21         Edit/Delete Message   Reply w/Quote
Greetings

I am getting over my irrational fear of the sequencer engines. I am editing the values, it is not as unfriendly as I initially suspected. In-fact I can see it opening up yet another world of possibility for me to explore.

As ever it has led me to some questions. I am changing the rate of sequencer by multiplying the BPM for triplets etc. Unless I change the events on the timeline, I can't get it to keep strictly intime with my arrangement. I would like to delay the message so it happens on the next scheduled moment of my choosing.

I have had a rummage yet I am obviously not searching the right terms.

Many thanks

Charlie

IP: Logged

SSC
Administrator
posted 28 November 2010 00:29         Edit/Delete Message   Reply w/Quote
Would alignWith: or alignGateWith: be what you need?

IP: Logged

CharlieNorton
Member
posted 28 November 2010 13:52         Edit/Delete Message   Reply w/Quote
I definitely think that this is direction I need to head in, however..

no mention of 'alignWith' contained in the KymaXrev, I did discover a few posts mentioning it, I kinda thought I had cracked it with:

(!BPM / 60.0) * (!RateMadness alignWith: (1 bpm:!BPM))

It sometimes plays the first beat, yet does not carry on. This sound is on a timeline.
I am pretty sure I must have the brackets in the wrong places.

I can see how you use this message to reset the gate on a sequencer using Cristians expression, however I don't see how to implement this for a VCS change!
:-)

Many thanks

C



IP: Logged

SSC
Administrator
posted 28 November 2010 16:11         Edit/Delete Message   Reply w/Quote
Perhaps something more along the lines of:

((!RateMadness hasChangedInLast: (!BPM bpm s)) alignWith: (1 bpm:!BPM))) sampleAndHold: (!BPM/60 * !RateMadness)

for something that could only change on the beat. But maybe it should be aligned on the bar rather than on each beat?

IP: Logged

CharlieNorton
Member
posted 21 November 2012 21:11         Edit/Delete Message   Reply w/Quote
I use this all the time, it should go in the expressions library!

IP: Logged

cristian_vogel
Member
posted 28 November 2012 11:19         Edit/Delete Message   Reply w/Quote
Hre's the big list with some documentation on all the additions that came with every update.
http://www.symbolicsound.com/cgi-bin/bin/view/Know/KymaXDownloads

There's plenty of inspiring gems in there (like alignGateWith: ) , its worth printing out to have on hand, or save as a PDF file, so you can search it faster.

IP: Logged

CharlieNorton
Member
posted 18 December 2012 12:00         Edit/Delete Message   Reply w/Quote
Ok, being a bit slow here, I checked the link a couple of times, maybe I am not paying enough attention, but I can't see the list...

Ta

Charlie

IP: Logged

cristian_vogel
Member
posted 19 December 2012 11:19         Edit/Delete Message   Reply w/Quote
What's New in Kyma X.17 (6.17) - 26 April 2005

...
A new CapyTalk expression, alignWith:, for aligning one trigger with another. For example, say you wanted to press a Gate button but not have it take effect until the next beat. You could use the following expression in a Trigger or Gate parameter field:

!Gate alignWith: (1 bpm: !BPM)

IP: Logged

GregoryCichoracki
Member
posted 20 December 2012 09:44         Edit/Delete Message   Reply w/Quote
Most of you probably know this, but with most browsers there is a search on page function such as (ctrl-F) in IE9, I use this on long densely packed pages to find what I need. makes finding all references to keywords on a web page easy.

IP: Logged

pete
Member
posted 22 December 2012 15:40         Edit/Delete Message   Reply w/Quote
Hi Cristian

You've uncovered an anomaly here that I've been trying to get round for a long time.

Your expression

!Gate alignWith: (1 bpm: !BPM)

works fine if the thing that you are gating is has nothing to do with the BPM, but if you are gating a change of BPM itself, then the BPM you are alining with has to be changed in the same way.

It can't do this and you end up nesting alignWith: inside alignWith: add infinitum.

You need a form of Capytalk feed back so that the BPM resulting from the alignWith statement is the same BPM that the alignWith change is resulting from.

In other words the answer has to be calculated using the the answer as one of it's variables.

I came across this when I tried to make a midi recorder that would store notes and matching time stamps into ram. The problem was that to play it back the time had to be controlled by the time data but the reading of the time data had to be controlled by the time. It's the sort of thing that DSP programming could do with ease, but not so easy in Cappytalk.

Maybe it would work with a one tick (1ms) delay which was feeding a sound to global controller. That would allow the feed back to happen, and could allow a delayed nested version of itself, to sit inside the expression.

Maybe people have a neater way of doing this?

Charlie, I'm wondering if this anomaly is the problem you are having?

Thanks

Pete

IP: Logged

SSC
Administrator
posted 22 December 2012 21:20         Edit/Delete Message   Reply w/Quote
Pete,

Perhaps you could use the CapyTalk expression triggerTimeToNext: to accomplish this? For example if you had:

!Gate triggerTimeToNext: <eventExpression>

it generates a trigger at the time interval(s) generated by <eventExpression>. !Gate turns the generation of triggers on or off.

For example:

code:

1 timeToNext: !Duration s
1 triggerTimeToNext: !Random abs s
1 triggerTimeToNext: (2 ms randExp s)

Each time a trigger is emitted, the value of <eventExpression> is sampled and its value is used as the time to wait until emitting the next trigger.

IP: Logged

pete
Member
posted 23 December 2012 15:40         Edit/Delete Message   Reply w/Quote
Hi SSC

I think this may help with the recored midi play back but I don't think it will work with a Bar defined BPM change.

If we have a slider with desired BPM . Nothing random in this scenario.

We want the BPM to change to the desired BPM but only at the beginning of the bar (every fourth beet). If we move the slider at any other time it must not have any effect on the BPM until the fourth beet has happened.

So we use a sample and hold on the BPM slider but the trigger of the sample and hold has to come from a count 4 of the pulse that is being generated by the BPM that is being controlled by the result of the sample and holds output.

Would the above expression help help in this case.

Thanks

Pete

IP: Logged

SSC
Administrator
posted 23 December 2012 16:41         Edit/Delete Message   Reply w/Quote
If you put this into a SoundToGlobalController:

((1 bpm: !curBPM) triggerEvery: 4) sampleAndHold: !BPM

with a GeneratedEvent of !curBPM, it does what you describe (change tempo but only on the bar lines).

IP: Logged

pete
Member
posted 26 December 2012 15:50         Edit/Delete Message   Reply w/Quote
Yeh

That looks like it should do it, and it doesn't need the one tick delay as that is inherent in the sound to global controller.

Thanks

Pete

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