another multistream related question

fl is great to work with. … even though I still miss some pieces of the puzzle.

I want to dynamically change the amplitudes of lets say 4 streams.
how would I do it when the 4 amplitude values come from max land and hence have to pass fl.frommax~? since these 4 values will change all time I need a quite fast updaterate. so far I use the max-list to framelib frames conversion (recommended by @a.harker ) but as soon as I update the fl.frommax~at higher rate of lets say 200 ms or even the rate of fl.perblock~ I get a fast retriggering (robotic like modulation) of the sampleplayback. i read about
fl.frommax~ /mode params but I guess this its only meant to change with parameter values of objects. I append a patch with 3 failed attempts.


----------begin_max5_patcher----------
2858.3oc0b0rbiiaD9r8SAJeLkGMD+Rx8zjjJUtj8VtMUJWPhPRbFJRUjP9m
cq0UdZxCVdR1F.jxTRjxvVPZ7L0tZFAPxt+5+P2.M0ue8U2Ls5QUyMneA8Uz
UW86We0U1gLCbU62u5lUxGmUHarW1MypVsRUpu4V2bZ0iZ635k4MnrJUSoF8
PU82Qpb8RU8uflKaznZktNewBUcd4BzCKUknYKkkKTludurXipAkWhfa.sZS
gNuoHOSUijkYaGtJSgVKqkqZPOHeBkqQM5p0Mnhpp0lmRUMbqZ34Xt5pM50a
zH4bM7TVWHexbElIfG7L3ZpJmolLYBpCEE4kpYUaJsPg0NXdlEXUS+1mvQ7t
Ksbyp7xBk1JMvuLHPxtQiZGcsTOaIP46pUyzNYbLKcB+VDiDa9KhHcRzsHQz
jHz+wbO+w0Wa931STW7++u+OqrifpL5.z75M4.20zfjZsZ0ZfMODioh.AwDl
AT3TK1HDhEogFhqU0SKpl8czL4lFPidnUF.b0f5Wx.XmEFryiSlfEIbFiSiR
f+AEfNkLATzB3+33zDNLOHc3QFoCk9NEKkpG.99.oRQkLaJ3WMj5E+FfHdbH
RYXCmyHlO4INcrAEs2h6oneZsxc82X4mPBx4ESjaxxqZ00OO.XiIgAroDgEf
fIcLiREblPvSYfp7VThGXOn3dFD656ChVZXQKmdHZoouNZaxWTJKBJl0nonh
gf7awgk75PlXiYEK7zb91.qZAS50RP4hRFBqCGXN4cpdowwSRs+IgfwIhHAn
dScQoubFy.hmsrZMfXDdHLGOHlICh4jWGybaPKuP4sG4+CrDXdMr5l7wA8oS
BpOMkfmvHXQZJIhDIhhIDvbmbgifAPFVCVt3YHEPoVcupd.jydKpd7wR0BBZ
CpaJVbn8NNJ9Bi800p0JHmrigbQXz4cHm.KUePfbHU1KuVe7faLZXBtsUa+y
PzMFOLQ21B5O1g2PetW0aCHNvoA1tOI8vfcX9YKZ2X0nznqUxUnBvcunAMDv
CTIWBgMWTbz.t6tBMBd8W1BoghyyTyxUCpTogAaLJtEaCnROMrsBpHVtPc.1
vXDlfvTDlAz.gEHbLBOTzKLNLqU0BRtMIaLidoWaxtGICtlDNJL9lPAw17Pb
XyEu5UQX+GGvcNb0BrqtYdtwyptIuprGwu5F4508F9pd2hQZ7sp5dQUMCkW5
FhtcnZ084c2+KiJqAPoADso1xi27nnqJDyiABwUWtI2xJtAA8RKKY0.kRvfC
VIzcyFEU2z81.AmE.1suPLq8MKI5E4DngWX12CUVO+FP5A4VjWB4Xz.NqRcK
uuc5L0b4lB8cyqJ0M4+lkCvl3gCL+7VNbvIMXvx9+05bYwV.rnNOqpzvD6nI
LC2QtuBtRVrw6CF6UTJWOvMCVefXYjIa.PtoYpr1nnlVn540A10UUE6N016q
PMW2N857xx8jh5p0iOYc9hkG4dmVASt5XOa6LM2sozM6cfMg9tF486Js0xhh
V2zce7OJKyWA4Npycp.Rz1IUkR.nKalUWUTrCdcyb+.yjA13yTOjmoWZITei
A3xyW2YDcyVsbV9BUid2wfr4a1cjF8SNgdug1Ls0G9Ny1OV.nX2K.7NxazMK
qdno8B6Lz5K.dYip66S2Ol2NierXeGlgZwllm2lr19QAoj9SLTr9wiFNZ1JN
2gHqON+fxQNZX+q5B82Fl4rHR9VUd4yiIPvgWf3VMGCKEZ1gb1GOAxCP5NUO
.oy59GHcsbs52pxyPe1laqRCK6fHnznQjZBd3kZIwtsi0k6+gaH6Odwl00ZL
IB9bIQnBp0N5CnikcGPJTkKfPuiHVhFUrPOMwh4Hm.wR7GP6D.jianvEmKCE
BUXjHeDi.2rtHWO9pR72iyCwqfvtsRfK7Tlb6kUt.wZWCggalIKTH245MxxT
omsvKXqDBSh93Y1TqjYO2cT2edSYttA0.hrhsEpefbhe1VNWDYkSBxGU4zzM
y8SHgiNaFSoLqPhk9iPHYgwHXlMJjiNM6B24IRi597UAbuo61Sp9kPX46xL0
i8p+NHRGGuLh3IdTwCdTwSjW4yEaWTZD4y6R.7RQ2ltgXjRorLjY9gkLMUap
m0oT5xnEsKyAkOpyK2tGDecqjBE4oY6akIXdxClp316BqpybarTzOVNCONmg
OKbl.6IqYh5c1zbhHeEPoWbAzah0v6bgqxyVCEOqacxRa8ksE1hSi29sKoon
IAZuvi3bpv49Z1YsOOpTkaKjgxRb4gw19sKoUh23wJ98.ODh0XASYa+1E0J4
Pw9Qvy4xJY.u8iXkb13BeWaieV4BxaYMD74hK70NuSncV3BruwjEiyEsC1c1
L2X1.9r6bG1vcRstNepoMh2+vldSaJ9hhpoxh81I6g1y7qeg4BWuVz1YrC0U
Qz.0UQhDW0uIoSvrHFamtJJ5Be5kYS0Uxg.afZmFdp6DnGBr9zVjgtsJfkLT
02KKdFnaDOZ3hW2oJEdPOCWbjvsGQwejZjHdfZjnVs8OE8QDmEl9HpCyeLai
ninyiBiNuq4Dh3G1jIe3z4jvnyawLINoEyzjnjXlfG+SUexxXAMH+Gl9j8uL
3x2r.0tQNcOi5hmSvmK706k4piymUUpyjZYeVrQoA3.2oiXexkBQuc8ZGGfs
8G71Cc8NWaNzuSxFzZvwIypJbM7yWQ3V5z9AtGEG9UHnqaVRdgy21uCGKeoX
W.FWa5QZOn6jW0+Jrs0FhfnHFhiDn3AimRiCZ6rQsc3PxOf9M9HALRCZtPC1
h0IW5jByjydFJ8iL.bEz2fJM5UwKG6duu5oSCphqIuDVq+yS2LeN3Va71P7H
yed8rbEjvFbz8tYRn7y6K9DTsoFpobf3bu6vb9+t70u2iXcedAeU9b54typb
nHRg407h1Fx0V3RrGtmyKpjZSH3yvau3l7rI.vKqtWUnexB8mQewsYG1Si7K
4kY1yts8Hb+hdYspYYUQFrLEe.oDIPRIqPJs8sDymlPNz450YOXjB+6Z0poE
xm9ze+e7u9z+rHGX2m90MM4y9aUO9qphpIOHuenFVNjxBb6q+4oYwXuocO0M
mLZ+8+pURc3tusy4HM1ddQdYOuNPa3Mkh8fR6r6r6uM1Ll8.+E1vlLWGLuyW
HD2IbJZKxHdxoxzbO34PHbLkdAYNcbBYpI0bQmNkD9PIQHnD2GJwCAkX9PIV
HnD0GJQCAkH9PIRHnD1GJgCAkh7gRmr+DyG+IZH7mX93OQCg+DyG+IZH7mX9
3OQCg+DyG+IZH7mX93OQCg+DyG+IZH7m7YwaKkNY+IeV7lJB.kh49mlvIQnT
ejcgXs8cOZwwjcrPnk7gR3PDeEiCTxbt7eayeamuD9j4D9r7iftyEsaSdbAH
M9PRGcRjl4UPhPX9w7w0kQCEkv9PIbHnDwGJQBAkn9PIZHnDyGJwBAk39PId
HnjvGJIBAkh8gRmZpklVp30CmmNb7pSKnA1mUGYwgvU1mLKX7PPIwaPbdZJN
enzdrydKOJhrKORLut1wQDBSDginQTAFrq3rIjgmLz1Abpu4tfeEjvb6SJWv
19sWdr4MlceN6zWmkc57amzcPF9zRs0mBChSNlYQZ64m6NFSbDwcDB69Up6j
TRobaiqhImNm6S5Kcb9oQIeh4EGh.Ow9XpDGhB.h8ICr3PjWTrOASiEghRXe
nDNDTh3CkHgfRTenDMDTh4CkXgfRbenDODTR3CkDgfRw9Po3KxB4ryQEidk7
24gzo9Tb+dGmydqSQ4tipQ39ED.evWbGBV6l.P2esU2wZs2u1NF1cuekc16W
XmC+00Y7eYc1+WUGaWaO1ulNW+GW+m7RtNrG
-----------end_max5_patcher-----------

Glad you are enjoying framelib. The issue here is that both sides of the fl*~ trigger calculation, so each time you update the amplitude you re-trigger the grain at the new amplitude.

If you drive everything with fl.interval~ at the same time you won’t get the re-triggering but your amplitudes will be fixed over each grain.

If you need the amplitude to change over the course of the grain you will need to find a scheme where you can generate a frame of amplitudes when the grain is initially triggered. If you need a dynamic control that responds to incoming audio in someway you might be better off doing the amplitude changes on four separate audio channels back in MSP-land.

Hope this helps.

Thanks alex, that makes sense.
Does this only apply to binary operations (that process two frames that are running at different rates) ?

because the grainsizes varies alot its possible that amp changes during a frame/grain. my idea was to do the panning part (fixed ober the course of a grain) in fl too, so for patching reasons i would like to keep the amps there as well. An Alternative would be to do amps and panning completely in maxland. Will have to think about that.

I also wonder: when using one stream in fl is there a way to not overlap add but when playing a new slice to stop the previous one right away? Is it possible to change a frame once it is sent to fl.sink and shorten a grain/ window etc or how will this work?

I think fl.trace~ will do what you want if it is in “full” mode (which is default).

1 Like