![]() |
![]() ![]() ![]() ![]() ![]()
|
next newest topic | next oldest topic |
Author | Topic: Quantizing Time/Rate changes | |
Phi Curtis Member |
![]() ![]() ![]()
I've attached a simple sequencer which allows you to determine the rate of playback in relation to a given !BPM. So if you set up !Numerator to 1 and !Denominator to 8, you are playing back in 8 notes, 3 and 8 gives you a step change every 3rd 8th note, etc. What I want to do is quantize any changes I make to the !Numerator or !Denominator so they happen on the next beat (or actually a user-specified quantization level, which I know will mean I have to double or quadruple the !BPM rate if I want to quantize to 8ths or 16ths). I have a vague feeling that this would be done by using countTriggers on the !BPM and using alignWith: somehow in the rate field of the sequencer, but it seems like it would have to avoid somehow piling up several different new values on the next beat if you were to turn the knob and pass through several values on the way to your new value. Any ideas? Maybe there's already an example of this in the user library that I don't know about? This same kind of problem exists in changing beat-timed delay times, for example. I also have the sequencer set up to have a user-definable step !Start, and a !Length of the loop, which wraps around the end of the steps, but I would like to be able to have the sequencer jump to the new !Start step on the next step after the change of the !Start parameter value. Any ideas on how to do that? Finally, I'd love it if there were a simple way to reverse directions with a hot value, but I guess there isn't, beyond setting up two identical sequencers and making one go in reverse and then gate them on and off simultaneously? I know that you can use countTriggersMod: reverse: on sequencers set up using that expression, but I'd like it if reverse were a hot value in the sequencer object. thanks, IP: Logged | |
pete Member |
![]() ![]() ![]() Hi Phi I think you need to use sampleAndHold: i.e. you want to hold the old value until the next beat triggers the change. You may need to make a copy of the BPM: formula to do the triggering. It may be a problem if the the BPM: itself is being controlled, then other tricks have to be used. IP: Logged | |
SSC Administrator |
![]() ![]() ![]() "What I want to do is quantize any changes I make to the !Numerator or !Denominator so they happen on the next beat (or actually a user-specified quantization level, which I know will mean I have to double or quadruple the !BPM rate if I want to quantize to 8ths or 16ths)." Should it be aligned to the next beat at the current tempo or the next beat in the new tempo? You might be able to do this using an EventVariable. And only set the variable aligned with a beat... IP: Logged | |
Phi Curtis Member |
![]() ![]() ![]()
Thanks for the suggestions. Working with Pete's idea, I now have the expression (!Gate bpm: (!BPM * 4) / ((!Quantize - 1) of: #(16 8 4 2 1))) sampleAndHold: (((!Numerator - 1) of: #({8} {4} {8/3} {2} {8/5} {8/6} {8/7} {1})) * !Denominator * (!BPM / 3840)) in the rate field of the sequencer. This pretty well (see the attached sound), and allows me to quantize to whole notes, half notes, quarters, eighths and 16ths of the !BPM tempo (depending on the value of !Quantize).
quote: Actually, I'm not really working with changing the tempo at the moment. I was just keeping the base tempo (!BPM) steady and changing the rate of the sequencer so that it is advancing steps at eighths, quarters, half notes, etc. Where it gets tricky, and the current solution allows things to get pretty out of sync still, is that I also allow tuplets - so I could have the sequencer playing 5-tuplet eighths (5 notes evenly in 2 beats) in relation to !BPM. With the current solution, if I have the quantization at quarters (!Quantize = 3) and I want to go from 5-over-4 tuplets to 8ths (change !Denominator from 5 to 4), if I change !Denominator in the middle of the 5-tuplet the eigth notes will all end up in some weird 5-tuplet related offbeat, if you can follow. If I change it close to the downbeat of the tuplet I'm okay. It's better in these kinds of situations I think to have the !Quantize set to quantize to whole notes or halfs. Still, there might not be a better solution, since it's a pretty hard to figure out how it should work... SSC, can you give me an example of how it might work with an EventVariable? I'm going back to the manual now to review that... 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.