úÎ!) (      Safe7J tempi·Musical tempo is represented as a data structure with three orthogonal components. (Generic instances are derived in order to allow later generation of instances for Aeson classes.)tempiThe W of a Tempo is the time at which the number of elapsed cycles/beats would have been 0.tempipGiven a Tempo and a clock time (UTCTime), timeToCount tells us how many cycles/beats have elapsed at that time.tempi}Given a Tempo and a count of elapsed cycles/beats, countToTime tells us when that "beat" will (or would have) take(n) place.tempi¤Provided a new frequency and a pivot time, changeTempo modifies a given Tempo as if the frequency changed at the pivot time, with the count continuing to increase  monotonically tempiYFor convenience, changeTempoNow is an IO action that changes the frequency of the tempo nowN, ie. at the time returned by a call to getCurrentTime embedded in the action. tempiÿ`Given a tempo, a window defined by two UTCTime-s, a metre (cycles of cycles), and an offset within that metre, findBeats returns all occurrences of the defined metric position within the window. The window is inclusive at the lower limit, and exclusive at the upper limit (so answers can occur exactly at the lower limit but not at the upper limit). tempiÿ=Given a metre and offset (eg. 2 and 0.5 to represent half-way through the first cycle of a metre lasting 2 cycles), and lower and upper limits in elapsed cycles, findBeats' returns all positions that match the given offset and metre and are greater than or equal to the lower limit, and lower than the upper limit. tempiÄGiven a metre, offset, and a lower limit in elapsed cycles, nextBeat returns the next position in cycles that matches the given offset and metre, and is greater than or equal to the lower limit.   Safe'õtempi5countToRand converts a count (eg. measure of elapsed time‡ in a Tempo) to a random value in the range [0,1) by stretching 300 counts over the range of [0,2**29 == 536870912) and then apply a xorshiftr algorithm. For the latter: cf. George Marsaglia (2003). "Xorshift RNGs". Journal of Statistical Software 8:14. .https://www.jstatsoft.org/article/view/v008i14tempiÔcountToRands generates multiple pseudo-random values by converting the provided count as with countToRand and then recursively using the values calculated to generate additional pseudo-random values, as in the normal, usage of a pseudo- random number geneator.     #tempi-1.0.2.0-AX38DVnImvGlF8el2krjR Data.TempoData.Tempo.RandomTempofreqtimecountorigin timeToCount countToTime changeTempochangeTempoNow findBeats findBeats'nextBeat $fEqTempo$fGenericTempo $fShowTempo countToRand countToRands