On Mon, Jul 16, 2012 at 2:26 AM, Roman Haefeli reduzent@gmail.com wrote:
Hi Jim
On Sun, 2012-07-15 at 16:25 -0400, Jim Kremens wrote:
Here’s my setup: I’m using a phasor~ to read data out of an array using tabread4~. And I’m using snapshot and metro to let me know current position in that file. Basically, metro pings the snapshot object on an interval and gives me a reading of where we are. I’m trying to fire a bang exactly when the sample is looped.
Don't measure something when that something can be known beforehand. Instead of a [phasor~] I'd use a [vline~] to control the play head. Then you only need to tell [vline~] in what time it should play your table. You can use the exact same value to control a [metro]. Example:
[metro 2000] <- 2s interval | [0, 88200 2000( <- play the 88200 samples of your table in 2s | [vline~] | [tabread4~ yourtable]
I agree with you Roman--the solution is to use metro+vline or delay+vline. In either case, you get the bangs exactly when the new loop starts.
Where it's different: when changing the delay value, your loop will no longer reach the end of the table when it starts over. This could introduce clicks. That's where phasor~ has the advantage.
I think you could compensate for that with a line object that counts down the interval. When you provide it another message telling it to change the rate, you'd know exactly how much time is left in the current loop and provide another message to vline~ to make sure it speeds up to compensate.