evenly dividing up a stream of floats

Dan Nigrin's icon

OK, I'm having a brain freeze today. I know I will slap my forehead on this one when someone gives me a clue!

I have a stream of floats going from 0.0 to 1.0 (which represents a quarter note duration). I would like to send a bang at specific, evenly divided points within that stream. For example, just at 1.0 (quarter note), or just at 0.5 and 1.0 (eighth notes), or just at 0.25, 0.5, 0.75 and 1.0 (sixteenth notes).

How do I cleanly do this? It seems like it should be a one or two object operation, but for the life of me I can't figure it out today!

Thanks,
Dan

Luke Hall's icon

Have a look at [%] although be careful as dealing with floating point numbers can cause problems, you might want to scale it up by multiplying by a power of ten, depending on the resolution you want.

lh

Max Patch
Copy patch and select New From Clipboard in Max.

Dan Nigrin's icon

Yup, that's it! My forehead is nice and sore right now!!

Thanks a million.

Dan

Dan Nigrin's icon

OK, so I spoke too soon. What I'm really trying to do is to take ReWire timing info via hostsync~, and to be able to fire off bangs at eigth, sixteenth, etc.. intervals.

The patch below, although I think technically correct, yields extremely poor timing:

Max Patch
Copy patch and select New From Clipboard in Max.

I took your advice and scaled up by 100 and using ints instead. Overdrive is on.

Any ideas?

Thanks,
Dan

Luke Hall's icon

Have you tried hooking that outlet of [hostsync~] straight into a [print] object? It might be that the timing resolution here is causing the problem. If it is skipping a lot of numbers then you will never hit exactly on your divisions and the bangs won't get triggered. If this is what is causing the issue then you might be able to use [line] to send out all the numbers in between the values at a rate determined by the tempo of the track to keep it smooth. It's just a thought but good luck!

lh

Dan Nigrin's icon

You're right! Here's a sample of the output:

print: 0.021657
print: 0.044900
print: 0.068142
print: 0.091319
print: 0.114561
print: 0.137803
print: 0.160980
print: 0.184223
print: 0.207465
print: 0.230642
print: 0.253884
print: 0.277126
print: 0.300303
print: 0.323545
print: 0.346788
print: 0.369965
print: 0.393207
print: 0.416449
print: 0.439626
print: 0.462868
print: 0.486045
print: 0.509288
print: 0.532530
print: 0.555707
print: 0.578949
print: 0.602191
print: 0.625368
print: 0.648611
print: 0.671853

I'll think about the line approach you suggest, or perhaps I'll have to use the raw ticks or sample count output instead...

Thanks again,
Dan

Stephen Lee's icon

I've never used hostsync~ before, but as far as I can tell, hostphasor~ would be much better for your purposes. It basically outputs the same thing, but as a signal which you can treat exactly like a phasor~. You will almost certainly get better timing this way. For example:

Max Patch
Copy patch and select New From Clipboard in Max.

Dan Nigrin's icon

That's a good suggestion, thanks!

Dan