DW_ICE_BEATz
Usage:This is a compound that generates a Beat Pattern, rythmic scalar values based on user assigned parameters, based on Music Theory.
It works by setting up the parameters in the compound, and attaching Beat Generator to whichever parameter you wish to drive.
Song duration is currently disabled (it has no effect). Ultimately I'm hoping to use that to help keep the beat synced to the fps. I primarily tested this with a tempo of 120 and a Time Signature of 4/4. 120 is sort of the sweet tempo, resulting in 16th notes having a 3 note duration. I hope to be able to utilize different time signatures in the future; right now anything other than 4 beats per measure will probably not work correctly. And anything other than quarter notes designating the beat will definately not work, so no 6/8 time, yet)
This is my first compound I'm releasing to the community, so let me know if you have any problems with it. This was developed on xsi 7.01, but should work on any versions of Softiamge with ICE.
Get it here...I will try to create a small tutorial on how to use it, but if you want to get started right away...
Empty Point Cloud
Non Sim Ice Tree
Add Point
Attach 3d vector to Add Point Point Position
Attach Set data node to Add Point on Create
In Set Data, create a bunch of additional ports and enable self. color, size, scale, etc
Import DW_ICE_BEATz compound.
Attach Scalar to 3d Vector to self.scale. Set the vectors to 1,1,1.
Attach Beat Generator to the y value of scalar to 3d vector node.
Settings (Now for the music theory....):
Tempo = # of Beats Per Minute. Start with 120. As I mentioned, that's the sweet tempo. *Doesn't have to round the beat from say 10.5918 frames). That will generate a beat 12 frames in duration.
Time Signature: That stands for (# of Beats Per Measure) over (Which Note Designates 1 Beat). A 4 on the bottom means quarter note is 1 beat. That is the most common for most types of music. 4/4 is common for most music styles. 3/4 is common for waltzs (but probably doesn't function properly, since my patterns are all based on 4/4. But if you just loop it to infinity, I think it might be fine. It should count the measure durations correctly. 6/8 is more of a swing pattern. There's a ton of calculations that need to be changed in order to support Eigth Notes designating 1 beat.
The different patterns are 1 measure (based on 4/4 time) of beats. There's 1 Whole Note, 2 Half Notes, 4 Quarter Notes, 8 Eigth Notes, 16 Sixteenth Notes. So, if you set it to 2 Half Notes, for every measure, it will generate 2 Beats.
Beat Gen Min specifies the starting value of a rescale node.. You can set it to 0, or a different value to offset the mininum number that the beat gen produces
Beat Gen Max specifies the ending value of a rescale node. If you set it to 10, Beat generator will generate scalar values ranging from 10 on the start of the beat, down to 0 (the min) at the midway point, and back up to 10 for the next beat.
I have provided ways of customizing the curve that the beat generates. I have split it into 2 parts. The outgoing curve from the start of the beat, and the incoming curve to the next beat. There is a midpoint slider controlling the distance of the curves.
There are a few different curve profiles for the outgoing and incoming curves.
The First outgoing is
Fade Out (Cos 180..360) - That's an easy ease falloff, going from beat gen max down to min.
Constant On - That generates Beat Gen Max numbers for the duration of the outgoing wave
Constant Off - that generates beat gen min numbers for the duration of the outgoing wave
For Incoming wave, There's a few more choices, which I forget the order cause I don't have it opened here..
Fade In (Cos 0..180) - Easy Ease from Min to Max
Fade Out (useful if outgoing is constant on)
Full Beat (Useful if outgoing is constant on.
Constant On
Constant Off
For very fast beats (16th notes especially), it's useful to set to set midpoint to small distance (.25) and wave types to Constant On, and Constant Off.
For # of loops, set it to a high number so it continually generates patterns, like 200.
One thing that I had problems while designing this was Current Time. But I fixed the problems and it works currectly now (I think). Plug Current Frame node into Current Time slot. That will add a round node which is good. While developing this, I had created a seperate object that traveled 1 unit in y each frame. I then took a get data, and used that y kine pos to drive the Current Time input. But it should be fine to use Current Frame now.
That will hopefully get you started using it.