;@ map d RNDbpm
;@ map d MID000
;@ map d MID000
;@ map d MID000
;@ map d CLKswi
;TODO Something wrong with SWING

;@ ins k
;@ outs k k k k
opcode ClkGen,0, kkkkkkkkkk
kBPM,kOn,kSource,kSync,kSwing, kRsti,k96o,k16o,kClkAo,kSynco xin

krst zkr kRsti

if kSource == 0 goto InterS ; Internal Tempo
	kBPM = gkBPM ; Master Tempo
InterS:
kTempo = kBPM / 60

kSw = (150 - kSwing) * 0.02 ; Map 50-75% to 2-1.5

kRst trigger krst,0.00001,0
kOnT trigger kOn,0.5,0
kST trigger kSource,0.5,0

arst = a(kRst+kOnT+kST)

a1,aS1 syncphasor kBPM/kSync, arst
a2,aS2 syncphasor kBPM*24/kSync, arst
a3,aS3 syncphasor kBPM*4/kSync/2, arst ; div by 2 because of warping
a16 table a3*kSw, 23, 1, 0, 1
a96 table a2, 22, 1
aSy table a1, 21, 1


	zkw kOn, kClkAo
	zkw k(a96) * kOn, k96o
	zkw k(a16) * kOn, k16o
	zkw k(aSy) * kOn, kSynco

endop
