Training for real-time NMF (fluid.nmfmatch~)

Hello!

I’m stuck in an airport now so cannot test you patch, but there is one obvious thing I can suggest here:

this is why the almighty bufcompose exists. You can make a single buffer as temp, and grow another buffer by adding to it programmatically.

Your problem for the bufnmf~ can be then solved with a script. You can also create nmfmatch~ with a larger number of ranks since it is maxrank.

These are not perfect solutions, and I will need to spy on your workflow with much more attention to propose something clever and/or find missing bits in the toolbox (I’m sure there are don’t worry) but maybe these hints will help for now…

more soon!

Thanks for looking at it as I realise it is quite convoluted.

So two of the problems are solved immediately.

  1. I would say, it took me too long to get my head around how to do something basic with fluid.bufcompose~. Perhaps you can provide a didactic example with it on how to simply copy multiple buffers into a single buffers multiple channels?

  2. Is there an overhead incurred by doing @maxrank 100000 ? If so it solves the problem :slight_smile:

Oh nice, I’ll take a proper look at this tomorrow.

For your first problem, I was going to suggest just using a single buffer and then dumping the data you need, before loading the next slice (in a deferlow loop), but using fluid.bufcompose~ would work alright too.

(on the usage of fluid.bufcompose~, I strongly agree with you. I really really dislike the “really long messages with context-less integer-based arguments” that was the norm in HISStools, and appears to be the norm in FluCoMa as well (e.g. process something 1 0 1 1 -1 100 50 1 -1 1 1 word1 word2 1 -1 0 -1). Suuurely there’s a better way to do that where it could be legible and/or contextual…)
(edit: I’ll actually make this a separate thread in the Bug/Issues category so it doesn’t clog this thread up, or potentially get overlooked)

I was going to post a simple-ish patch that takes fluid.buftransientslice~s output and dumps it to a coll automatically, but didn’t warrant it’s own thread. You’ve basically done the same thing here (although I found I would also have to dump the first entry, which was always 0. even if there were seconds of silence before the first onset). I had to play with the settings a lot too, to get something useful/accurate. The settings I found worked the best (for general snare/percussive sounds) are:

fluid.buftransientslice~ @order 200 @debounce 1103 @padding 2048 @skew -10 @threshback 0.4 @threshfwd 0.8 @windowsize 14 @blocksize 2048

I found that without such extreme @skew and @thresh settings, it would miss out on a ton of individual attacks.

(actually here’s the whole ‘unpack’ part of the patch I made, which creates a coll with all the data I need in the larger patch):


----------begin_max5_patcher----------
3227.3oc0bsziaiiD9bmeEBdOtNd4SQxbpmcNLW1A6BjCKVLXfgrMsaMQOLj
jS2YFL429xGRxRxRxztk5LIAoa2jhhU8UOXUEqN+w6dXwlzWj4K79f2u38vC
+w6d3AyP5Adn7meXQbvKaiBxMO1hMmJJRSVrzN0wfhsOElbXclbag80Pnq.K
8XrUDeAV.39BHA3inK8PD8L5u58qkqO4Tb5ohHYg4kCKG0NTwWNJsuxEaBRN
rndQg6LTR5le68ryDRVPrrPlsVlDrIxrPv4MILodOzi8mu6c5urzQdNQ9rZy
p1pB4KFVcwN4dYVT5yWELfPwJASP4XFAfvDLSgFTKZftcznWjfTCEyE69O7f
qFgUwBCC4ifqnBHS3yK4R58wk6iRCJ5kUQhdYUzzwp+cO3HbJhhzbJggWA7g
PNiQH053h6keCSFfaYyM2lGDeLuHMN+qWmooT9J.GRInRALSbE0XzPLbd3gj
fnEKGUTSlas5iR4m9pWdT3VYdQPl58ecL.RWQYPBDBwHNTK1g.v8ZMOBy62K
yiuCleaZbrTofcgKrfh.u8oYwAEpeLLYm7kkdFbvqHLVpFwKNuZjio4gEgoI
K8jI6ZMu9mqlsZO1mlTjn7Ia1meHKTKpGDYgX6oF.+U9PDji7gLnQ+RonYPV
vfHK3RjC1jHxC+cCQ.0Bu4UYpvaajLHarCDDF1w2mrBBfBDmAABy4AD38pAY
2y9zffnY+TgLu+F7SAJEH0Au6tKYOw5y7BOKbgi.hd21Grs0Y9tcnoB6qHrs
oQoY1mErB6STphKUehCXbBVYfaNGuAo3hlE3M6vWDF7Fc3KDvm8yirti+wzS
m8XcadSf.Mii4JMJBfCP.koFEa7TytVXWfQzpZgC9yopCbBcxqNmMMS5odNk
W8mS89bPzIY84bQgIxsFntwg08.pbyYeXhRQCCnDNPPYfRLksx2WoxAfUdsw
3axcM.t3MBD1GloPACBb8iiHbl43HJBHD9k9oEr637H.3syOr5AhRSOt1bn8
84Qt7Pp1dSfDxr6PV3+ch+3BuP8eGAD88MpPJGyTpR8QoKgAjRjDwtBRhGKK
gks9VuvHdtU29sTUnezqx98DmClvlzDeEnd4U5zwqJUwnxLDtJC2SDr9WK0.
xf76xF+qWde.+lkClG7Y4t0pGTQjqCJJxB2bpvVtmGpgfGVHi2H2UaeXAs2x
TKgHv2fTK4h+JkZYEF7FkZo.LYoVN.y+9QKgRo2g1GvL80NgO6wp9dOzUK+G
V8MZ2XllAlc1KTzoeO75LaeAcS.264clJ+t772Gj4wyMyGq7iYbmMtqLiXs2
B9xXyo6Le3e8yzuDc56tAdKR1+6kXKuLT96tzJk9eVITtYUJjBdcHnNWtoWA
fy9NAvOZJl4XksiZnBODAeYBgVPdxhmEOfa7lDmLqaLb6CijeVlkqK.64s7g
EAGO1X3GZrDMz7aVoBeY8PgI1g.0CkI+bX05Q0iFjofnBE9bJypJ9heUo50u
lzcxrjSg0dfLBoRRxHNzpv4GKUqLRspoa.5FeBPfIsSr89xv9MprfRbeHJc6
mJidsZvzixjvjiYxbYRQPQIsWO8N49fSQEq6WIq87cT7aOYulgOr3PV3tzDM
QzRRnGtZ6TtBsWLHsIyXdhjfi8rXaL7CLoJ3xhS4aBxzBpx69rRRsnHMMp8T
0qKRtunb5igIIcPwhziCOYV3gmFYsaRUSFO161LS95SI1YWqKN0Zc9Jsetfn
nRa11u9WBRBiCJjZ6VC6Bpmzd+uOkuMSk1VK90Nym6YlcJc7sxmC2U7jYiZp
Lnd7viUJQKpkx6BOnhpu8XEAGxaORdwWrfdigNsozFdcgL9XjhKZ+.stR9lF
rM8t0Z7w7x0wSWl7n9xZxkEMmuuyp4vUX0eTmYy4kohfvPS1IHer.5CfTej5
zbTW2eC6B7JtA65JjhWz9M1ItlyYq9P0o.SLdsMMdSXhzKV8C4dq7hy8d7Xv
tcJrxC4AL+qEQ1W0TG+b6aQ.nGSi+LURSDyY4bcvl1S4oiJAPiJAVNhTfzhA
GvqY+0eY9EPmRLUhhbMvjoh1nKXpxJgqTmwpzT3.UnHPk1rOzAsY5Uwx9Jby
f2s82LsaSTOdOVd+uO8zGhi+Pd9UfRJvdpr8aWlY2sp6YSoYLfBNLPglPfx7
Vch4sLMt9qStiOevfbbSCtp65n4wGl2j9d7mZ8HWfGHCNk3Sq19ZvDdekXzT
pBY4f64jUle2594D7AF.aPC6Z40p+bNdU8YcCDnhgs0y2OnkmdJaakTtRX50
lQUQdUDlTG99ub1WfGz6WcRncyTA3VnBvLQE5ndbhJzR4YiJHtREUj6rPEnR
w8UoBxrSEHWoBzbREXWoBxLQEPWkHngsQJGrpj.tdOU2TtXGhR2DDUloUcf2
8jp18emWC0pA.vG.nUHJzgBJwwqHPDDK3BDkY876it8NLfMc2l0wfDYzbS5Y
pbj1YqJP00etIMamLqUoBAKa7klEHrY8x3idGn12ZyQzEmpIonBxnrlIr5D+
Wr4PKBQWsOcsJgXFhRDKcbnlj7wrzioY0UiZ0DdA0GjEZqFOy0Sb0xAi7Uad
mKkWIKuyKnYz6mlfl86XMX6m7TP6VYdtWd1VkGm2Cc7NWKaNekNKgKXLe+yA
eg.hIsntz4tGE1bZ+dYlq21r8pnv.kTGAvpjfIHauJ.Az68RppyiaveYMl8l
RYezovcqTPQQVPRdnx2rAN9p2iFm.5pD583N4FkumsRcWBhaTMG.g68X9mjO
qTfTOVwSYx7m1nUu.qHU+79m2ou2BuGeVEib5y5BgnxA16wM5xPa9I864Vas
tR6RK1SrMGTyx47p+0j45lglU0Nhdqfna7AkhiKhKP24VmiWbn3l08ibUPAW
HycdqvMCAYfsR.lpc5ZLktICllcBckcpB8pNHKb2wzvjh7p7Jw5aWkn7mgAc
5AI0mFXtWKcib.gDvo.g.tHKDSvNYdIWU+B05gNGkw7u0lVvtATTu2fW2dyc
QThlB.l4hnD2OSBm+s1za2y..6hMt.OA.rKLIYJbEapay0zWo17VeUaD0ANZ
JTMIt.cz4PyzocFylCEShKNw4Sg9BA4f9xTXAfcAMYSwoEHgqtMIu1cxEdB4
OE7jKAy0r.O2+NQb8rV7Tav4zV2Q5NQFbtXu0wnbpXZWcx.mZdF5jE4DnRAc
Q40eJBIE5jEo.NVT6T.WGYtufpuLZ.2Gxg9kMEIiNvTuV5F3hOKjXVTCbZus
g3N4gW2Mx4Qb2fZgw1zi6zLc5coSSz0oA5tr44Ftw451zblpiaafnNojetMR
NsKL8ilt+Z8OKSNYyxupG0ZiEaNrOLJptnlMqqdUEDJaSy59zqYAPQBBDx0E
4zTcSS6ah0k4j171.rqAVsHBkH.H8ipR7jQnlOwQXJ1TR2NKCcdu.PgcG.5N
V09I0PvVUTs+J2dYgVwh5m+TQ5grfcgkW5Y6eeWVVpJkoqaTm91ZQrBPCqVS
SUuZgw+5z1fwD.Ma.Hkh1+9nLw6iAI4deTFGtIMZ24J23hrplOFPb4HD1Vfw
qESbFfx41OoqnceKqVf4SUah9Y80+gY+j8MMKxqpB2ucqZh18VbUo3wjJZpu
Zw2s59.BjYVFWPILCCvIHAy.ET+500ZUDFEhMOARfUKz7IpJ2wNalLRF2kNY
bENYAZ.jyseRQxHT60lqV7VMzzd0H0lXXNnOCYMl3..jzdw55hZV25vDseKY
s1AVff9V5sxBE0TLOIFD+menXsYYfavrv1Ybe2ZI37xleSA2LJuzTvBM88ol
Kq8hn5iGr1JU81uFrwhgaq+ewz8fmee5+OrnwKEZu1OgxZjZ4BEfxvNpfe48
FNIZzeJOJTcF8+Ue.9X5zc4iVeYhnk3fW7qaa99IidTJrJj0l+rRShAUH5P9
JA72LvWyvM5Asqh7JGzpHMPhlmAncyQnvolrhk44AGju1vu52QVCWRU1wW9o
QbIw35HtV16mtbYeyhAaZ0pZac3lTrYy64f1kgVZDgaS+cShlk8RN+mQmjU+
+Yjyl4XHS4H131rl.E5gfy.Alk9bxMSgmoKZssIdlnve7KA2NABPpPAsNIYX
LxZsgz8m4zSf+TlTdGTnA8zcRJ1FJnN3iom39Ykmsjhfal73DfuuM1Tefh3L
Pou.JnSOM9+jQQoOe6jnJbcl0eHjaheAPURc50hZgJ..9Tw.mh2Hy9IU9e2L
4ypC1hpNPmZ3DXSezSBAlYC5QSgie.2sQa8EGoOQowHJszXk4gojGhI0l6L+
L8HduQGCXPf4QEXhOPTlcICd+FB1xQMvuHku6Oe2+GLdsWTF
-----------end_max5_patcher-----------

I don’t mind the MuBu syntax - @sourceBuf “name” @startChanA 0 @numChansA 1 type syntax would be nice.

I put a smaller segment of your prepared snare playing which I got quite good segmentation with. Can you test to see if you get the same results? Its possible settings didn’t carry over…

1 Like

Ok, gave it a quick test.

So I tested with a slightly longer chunk of audio from the same recording (12s) and with your default settings got 51 transients. I compared to my settings (posted above) and only got 42, so I was wondering what was up. Turns out the @debounce 25 is too short, so I’m sure a bunch of those transients were samples long because as soon as I turned your default settings up to @debounce 1103 I only got 36 transients.

(with your audio example, changing the @debounce time goes from 25 slices to 19)

To test, I also padded the start of my file with silence too, and yours captures that initial 0. as a transient. So I think regardless the first one should be thrown out, however, there is a possible @debounce issue here (which I’ll also make a separate thread for) in that the approach used always returns 0. as a boundary, but if you set your @debounce to something reasonable (> 1000 samps) then you run the risk of ignoring a transient that happens at the start of the file that happens at time 0 + debounce time.

Also noticed that you’re calculating the resynthbuf and envbuf, which aren’t needed unless you want them. (unless I’m missing something, you only need filterbuf for this kind of matching)

Onto the actual matching.

So initial test with my longer bit of audio, and it’s a fantastic (and actually fast) match slice 22 machine! In my test it literally only spat out the highest slice.

(on further inspection, it was fluid.nmfmatch~ spitting out tasty tasty nan bread)

Ok, something weird is happening. I managed to get the patch working one time (while testing with different settings). It wasn’t super accurate, but it was producing somewhat useful results. Since that point, I can’t seem to recreate it working. With your default patch I can’t get it working either (from a fresh download). fluid.nmfmatch~ returns lists of 0..

I also think the “red error message” you’re getting is related to the short debounce time I mentioned earlier. I think it’s happening because you’re analyzing a buffer that is > 25samps but < 30ms. So I guess the debounce time has to be, at minimum, larger than your analysis window. (when testing with my settings, and my longer audio sample, I don’t get any error messages)

Ok, in testing further, I think the problem has to do with the filterbuf buffer~ size. Because you’re doing this via peek~ you need to know how many channels there will be, whereas with fluid.bufcompose~ you don’t (and dynamically/manually changing the amount of channels results in a crash)

I tried refactoring your p write_master_buffer subpatch, but I can’t seem to get fluid.bufcompose~ working right (due to the confusion mentioned above and here).

The refactoring should be super easy, and this bit of code is just adapted from my batch processing file, it’s just hard to tell why it isn’t working here.


----------begin_max5_patcher----------
918.3ocuWssiaBCD84juBKK02XirM26uRUUDPbR8J.i.S61V09s2wClbYWRV
RJs4AGyvLdlybFO17y0qn45WjcTxGIehrZ0OWuZEJxJXk64UzprWJJy5P0nE
5pJYsg5M7Ni7ECJOqR2WaH58jtRUArlNEp6qT0kRCZM2IrIyT7EU8gssxByf
2EL1FlGIHzNlhiBPB4ymVGcuYbgXNopcny04O+jHgZk8q0qsCdyDNvxlKau2
fkGDfAK2NFhAtPb0fU3jNHx78F4vpPodDZdV8A5QCOGOQziAPaVkzHa2Jqyx
KQqYOBVkeCV32vbOQ3ShewMvuevFQnGgKRQrmtI7lY.90x.JnRZRv6+HjYdu
wnquaxjKPvLvlhfww6EKWmIE+mXx9enHh6mLc3OI9TM8M3R+aheuS+eUtkQW
NHaHJh5tY7wx2X1rJeE2p78FHkmrfHsoUcps6bQZjCfga3QAQwhjPdXjE59h
2glmnCKOdAgCbNRtpVR.PQ1VWse6dUo4JchmQmHAGqaGaH8fMimlEiVPX2gz
3dRSqFNjri7gNBi7DGF3D63G1QNkL110W8pGe37Sn+FNKLIMLMMhk5GaqABC
emj0U60M8F6ELOsurWsaSd+dnNoQ2I+8itGehZeNK4Qw8U6w6GdN3QMnkP88
qtaEFnV4WlQ5z8sEi9X7vexonamrynpyLJ3zsyThAJwIedxr9r8j+L7DzHCU
5uyS1vU7dXxeA7DeVYukvQIyI4EsDIOwbKHVDLwmQx6utxaN4t3KTR2tCNhv
tA8etmgMzS5Y1a1lm0z7UYamybzoPKtm0n5Id3ip5gGwSUosxupF0G6cSyZg
9WFn4UeKFnzWhBnClpAGW2qbnFfK3xNy2KecqkZ3lknoP60HaOWLxAzsOquz
bYFw1lsPWpa2ppswtK4fWV3z.+r9i4GP8c8Vcu0Mv1DdTurhB3qCOSW1lDqF
I9oBdjcVLKMgE3V8gjomi8ZASQng3vAfJH5UiY9yY6K.Ldlvsf7EgTfvOTjZ
iF+XQX.NSDGDxW5vpBNiO6fbo4B39.kGAzpiqErXtipnGZy1oN8c5N7yOxIQ
vuXuImclqblIFMKNIAxbdSN6slMZkHkwSQt22w81YfH9qrBNbcHIKvKl6jBW
UpQ2Nt8DLM8n98F8QfNt2bXy4UouK2cLOVb3Z.yt5B4r.nrhIvY.lgX9QqrF
ZxfWXxFTcMYC8xv6Us9Wq+yV3Jwg
-----------end_max5_patcher-----------

Let’s keep the bufcompose syntax questions in the other thread. As a token of gratitude towards your involvement and suggestions, I propose a game in that thread :wink:

I’ll have a further play with this later today, and see if I can get a well working output (post fluid.nmfmatch~) stage going.

(will also test with my “manual” batch processing patch posted above, which requires you to pre-crop your samples first)

I’m also wondering if there’s a way to apply some kind of median filter or percentile selection for multiple dicts as a good use case for training a system like this would be to tell it you’re playing a certain sound, and then doing so (perhaps several times). If you accidentally record a wrong sound, or if one particular sound is way out of place for some reason, to be able to groom that out, statistically. (e.g I’m training a classifier by hitting a specific drum, on one of the hits I miss and hit the wrong section)

Correct. I just did this to make it clear and possibly useable in another context where you do need that info.

The whole debounce issue is another kettle of fish which can be addressed over there but an interesting find nonetheless.

I ran into similar problems while building the patch and I’m not sure what caused it. At first it seemed to be related to @maxrank on nmfmatch~ requiring that it be set to the at least the amount of buffers inside the master buffer containing the multichannel storage of $1_nmf_filter buffers.

Multiple data sets for each hit could be interesting. One strategy (that definitely is not suited to this patch) is to have a training phase where you hit multiple times and it averages out the nmf_filter buffers. They should all be the same length and so the math would be quite easy. Perhaps this is another application for fluid.bufcompose~ @tremblap ?

2 Likes

Gotten something working ok (as in, producing sounds, not necessarily matching correctly). I’ll clean up a patch and post it, but I’m building it around having individual files that are pre-cropped since that will more-than-likely be the way I actually use it (as opposed to feeding it a single audio file with a string of all the attacks I want to train).

Although ideally it would probably be something like the Sensory Percussion training routine, where you select a sound, give it some examples, then move on.

Actually on that note, to create a more effective/representative dict, would I create several @rank 1 dicts, then average those together (iraverage~?), and then make a master dict for fluid.nmfmatch~ from that, or should I create buffers with multiple hits and then make a “pre averaged” @rank 1 dict from those? Are those mathematically the same?

edit: I guess if the analysis window is only for the first 30ms or so, then it would have to be made individual @rank 1 dicts averaged together… right?

With only a few hits, this isn’t really an issue, but is there a way to median filter (or something statistically similar) out anomalies?

Here @weefuzzy will be of better help - a simple sum and scale of the ranks should do - he used to normalise then anyway. Owen whadayathink?

Ok, did some more testing, and tidied the patch up (a bit).

I can get ok looking results if I look at the multislider (as in, it kind of looks like it’s activating the @ranks it should, but I can’t translate that into returning a useful value, temporally.


----------begin_max5_patcher----------
7568.3oc6cs9iiibb+y29WAgfCBfybZ6mradeHYOG+5C9hO3yIFA1AKnjnlg
2RQpPRsyNmg2+1S+fjhuYyWZzFb13lUhjhrpe0it5tqp3e+Me0lcQexKYi02
X8Ws9pu5u+lu5qTGRdfuJ66e0lSteZefah5x1rO5zIuvzMOnOWp2mR0G2M7e
N0J8RnmU5S9IVoQVQWROeI0x05jmane3iGuDX8Q2fKd4+3.+Pu8QWBU2Ab1A
OG6kHd.to9Qguu0qv+f5IFs6G+ZaP98J7xI+v.uTEUByuWto6eR7jeer29TM
WRwrszGr3H1VvCVPHR9ODwWr9etdmDTd9sBHO3+3MuQ9mGlIFo.lfnnOjXE8
Aqm7h81tc6llbE0YrbEDBfJ1BPJwVHvhxVmCbeIvOI8y4Tm99k9xYOMUrIw+
wP2fMOz9mj+2A+8RAqa7KaJnrRbNB1KmuOv+7Sd9O9jhs4PAS1Mj..xyaws2
RXN..1AXiDPDAqj7bTmXCM6nGbScyfiL7PSAE1KkNg3Tt6RhBtj5InkmTLze
1KI05aubvOZ6yteLiwjW4Q+.uP2SdCeUevOTCNtxKPdjRWfPS5bIzQQdQgoB
Mu2mHre7xo8xToPaz+j3IF6I.LMeT.C5mZT7I2vz8QwRnTHpZ6hNEcHWjuyM
we+l1tEYhgsU+oQw9O5KTHDHvio4TfTfHHr8eHo5c5+8hafe5Kc+nRBtDKYn
h6SqOqTuSmixHGT8KRcWE9sDZO5KgPpdAm8EPUxS9G6fiTmue75XTPPzyOFD
sqBwT69HLuZ63Im87NXBXdJoDLjeQJab8GxNn9Hiz126mN3t+ys3qxA0pEKp
aCSNxV4bBC2Zy3TNmayfblzzjpbFSWTuVgdOKnyF9hChbOHLDRjnEsSGZs5j
hgFs6Y.gHcOSI.kWZkGHT2dffq.eBGISBm.SpFChfU7JCrBL4oKAo9IA9G7h
yIuD+eRwHj7uKt8ouD3UlZ2839nfn3ByCFmfgXFhRb.nGL5HkL8ZAAenCTDg
2T.XwBO9odwuW35eml7.WIYADKXzRtCK+7DwSHva+c94NCy4qjyt6y7akGbj
HNrCuH9il+AiTFx4Torylhj+CFwUjBoagHZACOxU3+7ip39r9nXjzSdVOJ9l
f8ZhqiW4DpC3ixTbFD6rBAHYNikrWLvVqbl8T4LhsshyHjUfyNFDItIa5S+e
mqTQL+QphAPQg1M4QhQVEi14JSGBLb.+Nnky45G89z4XqewQn0+p3uHq2Ikq
twxviFq+Vx3GGMyVEnk6L9J3ucYk6P6EVtqGuwl95I2+kyUtCclnbm3P0xc5
pK2+nabwzUDGd20AemqFApOEhbYu.V7OInFoNRwL9Dja9AofqG1TkGDQYtXS
1xE9MXLFVLuPoSjghZIWvj39QuCu2MMM1emXReW+TR8oLpVxiniEyFKetXk3
YACl56Fzj2qbUmxhPnD+11cIacNJMSgRWSxSQwosKLqbc4hz1dNBciGqeKdS
4IaLoYXHvtTwrm5RwppRUYCnEcvDaG0jSXNXowEROVJYYCTuhEzQwL1O5tuu
vUUwid8OCDGZUfR5xpxMygaiH1.hCQ39jPT2P.SLsXFmCbXXt9YfXhv3gh4l
IB.lYWMbzxfOzDvWxi4goiuZq5+XXj.4CDy6uL22pnRdKJz498dAezK0euag
i4XeAWW8g1lvUGhDGqF2PHhEBWL+VLfQTnmTtzyfCJw1C8nmyF63D1.0h.x.
HcH82tgGO3EH7+LdSY9nYQQX7RdyVIJIva2zpSs1I9+9lINE+qub8vZy.BL5
ESHStZiTtnbHCvz3kio6lc6h8FcvMYlnLplsTh2aiD8mBrN5GHbfIb+sYzSz
GB.ikUoD8LR0qIDkc6rOyhcpOFUD.nHnsdTbo7oxuhIpTMlKFYEX8tlKNbq0
uRRaV+4XW+vRyAusAhKyufMsLZFh1ejm8OrUKfD1NKhCIDgcnbFAfvxwoQPU
noX3sX0QOasSRaeebzdujjeaTvgAh4eefmabPzysO211cCfGBFDNG2RrghfS
rAThsZMhkKarYQnqtsdw0CGWtIJezKNIao5yCzdi64ykNb0H0O49i5Hn3EgC
K3C8gtFgbr2G8y+8nhi5FKXtTAmcIVqF7Iax0HtkSYLN7hegyLkvqXylDhIo
5ibc9z+XozL+zklMCWM.HjmAa5uxsKuWGhnJCh1+A8VIjSzahN6ILBJumqUN
8AuitWBReeYcd0dK1x4yMdZ8jEFAearbJJ4Wxiw9GhBkDQEYg7v4ONwD8Ugt
.okYF0UD5dtkerPiS.LcbR4FicIYmarTTkElZtrZSZTTP0SU76B7Nllc5y9g
g0PwznycexX49U18o2EIN4o9t2pyj79Kg5y9dgVQ56ky+r504FDjYMW81+IW
wzmcS8x2mLDn3j5P0eJYebTPPE9UelO1xYNHzx268r+A8t2AJqLHtb+y4JQa
JjxG7ezKIs5wRceLo5QJV09RG5xtLq32K21rfrM075ETI8EptcrW86UaCP61
+WUef6tb7nW7msjOYKT4Ko6QKqDZayXDJeSZa7hNWxGGndKUDiKvQXNEQy2N
asIeY2gcM.ZscC7gIhXUGXsJjcL3h+gsBfKM1MLwWbYIhY248Yq2EEK7yIU8
rd2AucQWB26ISZAr06N6d3ffaEmivsdWxG7d1RfTVuK8IgSom14t+CBcLR92
O97AwWEW3y9gGhdV5jvBJN6NouM02j2mxDWkTHg0tjgMUAiCUE7FzwYqMlhb
br4HaHSLwYoCK8F4..8Ja.2ZYS3oiBAxSQmUvEFovR0msE.4wioEeVLrUrZL
gDIWX8NgP8CVPw0nhSVbqT1FcB1nNLClLZaSUiqwr057Np8vAiuYvaONKNK0
S8stp2acT.CGr7CsR500QmdK3vNgI5.dKx7IP4aQNDHhSfLGczSPJz.2EvaD
lEKlbg0uINNJdSG1kSVUICCvhHHcnRTf6PnXnzioMx.H3Fo1j3EXg6U+HeAD
5TOgY2IFgF1bRFQMD2z4ElbiGVoGP5QuT4pqak3d57.FSOTaJ5M.Kvb78HMf
r4acX1DFvgvP1T0XvPfIpT3aCZkG1hZjWQ3twoIKPrKLxjANG8JO1lVFDPue
TyjKo2QirE0PVWPksyTgJwL9UocgCZKhAnNNXaJJaQRZtTXudHkZvty50Fv5
P7kSIFqs0Mp0skI1HKSlHDLpH5XQTkTGJCfgxMGEe+Lbmx8kXpdIetWD5Z9x
NfZFYltxvD1VaHjQoXFD3nWJNm6G6wyddeXrtw5DrnyT6ps.ITQ1eunckZA6
EeJuNtMPG6YpJ0VnlHz8C3z87RKlLJgTc548uqUMPP1biq.Q1hgh.KPBGXNP
hXx8Rvy9Fig8MAxSph5vU3b5kexqi.1oSdrOGrJgLxRNeb8bXakCQWQlSafK
Z2hdv.rrN5GLROSk7+1mntzYxEU8KZBO38oaXvmmDCvoFmaYFiChmr5jFaa0
rhwtwCxUI0Vlf2kJiz2ShVLUmOjhzboZxt7J5rYuav9Kx06UnXm5FXc3hdkn
F6hMQoSUCBpWdIlDbHBkGNCCx1CJN3FuvS8gT5UQY+k3XwUXUsDgpBESNfQh
MdqZkSz4XpC7F6ctO1WuFkxhNLN5xiOo.fjtPfIO6erVYPlhwBOKbNlwyV+c
H7dBM1G6IAC2yhYmITLTe9jzDwJ5n09mbCC8BRjKJodUBFq0DYxg4HrfTpPX
csu.0qj6chIj6gCVxBSTNHppBSxPpohRS1Piwr0FZPzVaahMCwovr0XRWRm2
KHlNTCqmeJJvKClrtjH2GmnvfWrNFGcx5OXEEa8mxU6FMJN8cKipBalfgaIM
W.b1cDL97SdgVGhB8rjkokD8ZIFNS.K7jU4fhotom6OQOisrY0dmfPRbQ4SW
3zRXcNMCR7LTkz4HpRow9dxm0SQOacxM7E8.d+aFAIxe7OdII0+n+9hb8nCL
CM8.mP4ZTHJZKqlAn88j82Y2KIxHLs1GDI9vAe2fnGWbnDxmNTpWgI.eKr9Z
mytm.xDu.AQa4ZcrbphsfP3z8uQr2pb7C4a40mI3cUTH4AcnwxZy0oLVfl9V
w.UXgdQVff6oHWa04dK4F9nYZJjoqnCcD7n6HdtsI0Vd5JSd1JPm6UVVUEDB
YclCiltKJOr8T4eDFomrgNfFsBvMD.FXSF2YzlL16JBgm7J1iAD8TLrAaQHL
EBXDjt8KXCum1LVe4+evsz3gJ+Smv0jcYhEQ.1Ebwue1z+CdBOmxzudRKgMD
NmcunC3gRte1+m4AOH1bM1Hb3V4dSSs4XpN136I3IcLlZchRy1kDAau0ow1H
RA2QaIs6GrjYGoenZSNrfVCrogciV3otgzDLnKcJH5+2Xywvybc6aMeitmL5
zqa+eaS0pQ5usoqTgbxCgI6GOnNxd77IXdWjLj9SNAFXv4jCjRffJS3QBCP4
vqkZjIob0sRawRV9FwSL2p3SEdPbUwCyHBnn9lfg1xL.dpe+uVPVUQhNKLqt
JNqZ+71JRqNJTqtKVqgKXqtJZqJEtkAEuUsB3h5nmQtx+DV6lBaWacIZuDtL
nLtLoTtFrbtLrjt5ortLqztFn7tFrDuFrLuFnTuFtbuFrjuLnruLozuFS4e0
SIfMXYf0eof0e4f0eIg0aYg0Uog0d4g0QIhYTYh0dohU2ARcuzMN+PdqqO9t
mPy7fURkDKx.O2MVFHb8eeWi92YHQhPEwh+GD4HB.fqRdQYczRYPBxF6.sAx
cYT3mu0b1quQ8pLxW0Q+VY7cezoc9gdVmDeIwZq0ojR0RlEP8eMPttVLZCp1
+V2ixFOfd7t1WY7zrXwa3TcDxV4wjhVlCjQ3xArk4Zu1WKlNnvE85KbuD9iQ
9gVjMFIhdniJ+nwjtHy1RhA1xqi1DftZ8gNTN.vDGsq0RqslM7qOXqhrz5c5
F0k0SO8MmN8MIICB8EENRuXNreLGMLlWpLJ0fsY.6sPKtdZiZXt80asOzaZj
1OFQ.cmIo8GadiLJsNAUjHovuffU3bgUHCdqv0ag5plF2zChgVkPMX1pPMfP
HN6PFikfkVGs57LjwCLPPgJlTdc8CzIQWh2mqZlq8Y0j8DQCm5G5dsSgW3kz
BdsqcOJkfISgfwRgfaLEJC80XJTp7dyoPxXnvb14lRgnLUKinPxqFEhFCEhd
MnP7XnPxMlBgiQJiF1VtzIKurVYs8T85uzROOs9Z5Mo49qeOIjMi9hID0wxC
7llLvso9p008pHrTvBTd0T6om+lns5JDt0xFVLj6cz1mksjHh+IPt5hSqdqv
K.T0Rou5Pum1P1cB6ycVptplUQuUyjzFIamZy+p521ZCZqAthlakxzRAXicL
Q8idaU+D+6Q+OMMsOryLQoVafDb18itmb8z0IBqJ6rFreazqeMzbUpZs.9b.
2SIpjZ8DsB5Enzq4XeclDDbta3cK0fM8dKitlaRlfmcp3PQ1aQBqOo+IyKhe
zsqc.AlW6.ZxcCHDirk2YbDD9VLidGgSyCkfSFlJxeRHcK0lX6TpK.cGoIob
3LP9BjYuk+e8Z2M4lQVgcGCTuzIYlfWjaCdEKdjdVYtoGpCS0oObx7M9Zqor
bq8he4jW3kJ4gTpW9KWtM.n0Wa8GbiezS+9JzZyCx+.PhC+cdG7ubp5wwhi+
CmbCBpdXh3veubmZUGt5a0t9TT6zh1YLEIu6kznyQmujuUwPSFUQRQZ.5u7s
+W+lMCo22U+mCYi2xa0WZVfoxmv2IewdkFk7j0u+W+Mu8+LwKN4swQGh8eL5
s+vKg6e62GGoxAh29aCt7uG8ctu86UyWN4s+IO2.4N5XEd53aO5ljZcJi5dq
5kH4akUoYf3B27Zmzxms144ctq7ciN2Q5aKe2HlLIOvOmyRljyRnrFWh90OF
NqqZPQ+bRK8yIszOmzR2oIsj7UAp6idclK.+5+3+wuYdoqzr2uenC+ZOfhf+
xIijLHitaD0xr2uUMXAEwTXK9ehYjHh0fzaxc2WBd+5AdxWuvVPKTOfECOWU
qrtZqNMaozubPme4mGznLqmZ0moICtL.XqZa5WGgegj6furOv6yVbNXQfUvx
.qZOd112Qd7FZ3BoxfE0BXQAyaTiJMM2oMrAT+t0VChzubF1PtauFad+fI48
DagvRHBqRlGBlBn7rhLq8NC9W1IfGiL6LESiXH7qaF3cyxtIFYLYliSqWr5c
BxzMBuIjNoeJGbao7wjRYL7cEnOZRGd2f5iIM4x4yaah74LFiQ1qAExFKFdq
SFxw3T.9yoO0z25N0rjOV75CP810BX80PwefVx+9OcPmaUesrkLlT9ySr6VP
ma2sfxr2BEQ.4Pcbry1TFL9dr+lKBf3bTh2mmduFFOazxFx2Bq07JA76nBuu
4auBk9m+.cP+NgrtSIHayPrVa7EPwDp4L5cmJ1qxqOrwoCilqJLgw2JqeAD.
AI7rLfP2L9qW+bqnzX3lReeaYOAM09ROygnaSbyuwz2eOsqQsubS.s9a053o
hZ4ogEa1f1v8HsFSEbA.tFEGTEXYxiJP0uBdj5TH...E1T4odkQfDnCPp89E
3ZnQ0OvL49RXdq0XoAlVapf8ovb8kpai0K3JT0VX0k.LCB3uqf8AUCltWA1n
oBfgTQ8IEsnTgigDAZEoAjohC3JRDbnoTwZJNjuvDqt5BcPEb3ZSEFoZZulT
A1TcyUEKLUuPNUt0iJL0YAydsoBSzNYj0zwoo9rbVah.ZHQfVKhfaHRP3qIT
Xr2h0zBI+lOLUrp5lDCUKrWUkSCIBzZ5rfZZTVP7ZRElhEqoVA0zQxnqp.AU
uTl6R2roakS9GNGIlQeR9qbHUBUf0MqcjtaCW8aLrdJmNnhusl7EwDQLcsQW
STzjkqPMwPczM6U1LW2hzyR5hJeip6gOXArpVDX4WWSFynvvPqM7hMwahyPJ
uDMRJeoEwkE8AjB.HBART0D5VZqmZkXKhwdFVSvkfFQDUj0hHLc760bR4XSi
sjslCZgMcnSLbsoBS7nAsqtmnKKUXZzkr0z6N1zvHTictZXgow3BWU8BSiif
gVap.Z5pFA6c.AndTTFgV+EEfrEZL34nxLqpV+Y1lg63bqId.VjAHwY6whsr
XaqxyHzV0p.2yoPNvFkUldX0lmYsvBiWyl0LdajwdwWyUTDYp+SzpSEFMkT7
JtdIHiiwXMgBSC4iPGLRVgcktUJXuUXzBwD508Dlp2CmVN2ZwXl5ABulq8AB
tX9AkuZ6xbaAE95v4YLxUuYkN7ZxNvkgcHfWc1A5Ll82n5j5alhkuNjVKqlS
yDWc4IMSh3BslqhEzzQRv1qMUXz5rrlQeBMMRb7ZNqDHdDaBAdsHB3HmrZ2d
nrsQYAdpyKCcS3n12.zRqqX0ukupXPrdXwNWUrqoUfp.X6HuBtVO1xdSvOnp
.52+cUZ+D40uc6X0tGO5GDrOJHpyhzOO2e1nupJE7d9u6uZATcOIHWfeaEbG
CYq9j3CTZ8rQW+6f4+PBk3.PxKmXiDyhQ8ItzQu7SfV9onqOS.zQ+j.Nb.Q+
IwgfhmY8epqrwMnRuEVsxUV95dOJtnD5EQiT42cIM5wX2C9Y4HBn0r98gRpm
whqrs5Vdi50id46Qap2EB0+vk8tlKHqHLb.xTgTBGbGJgwTehfbXJzkZWQGu
H8xpbKXHfsiRdBsYHsrfC.PRCnUklipe668CkMsAuB4C1AAUxGTgPFwDg30T
9TUYhvnPrhVQNXAKnuEPAE07GNFc3B4XOpwiPkpphLuP8kKmNMW+oV415Jx1
TfFqkEFpMS+I8c6lnGWt4treu3BpfIXozSADjb5TZXSZQXTtKQH7p9GO6EZ8
CtgIV+f2I+cxNhWkKWn4cp9SiwEHfFFAPNW+IwCFgxdbqpQ2GRB7EgJ8WjMD
DSM9JQ9J26U9yJSumb+jcktLxH7STiXENFLyrVcs4+otFPK5OZKgBeArLCqa
C3TKkVMVRJbBgjuA7JqsK8dQnvaEo2n9g6m3ml7ZYbeVxIXtCrleZ.mfLY+F
RYt27Ss+S+hJNflVpiWind1zNBsYk7uTrVBbB6bKzj0kEwuJ3hW4F1Q+TdaC
BI6io5QFKXBUqfEdCYh3nmCmEWbk1oE9Tv2Xt3e+E24wD.jHnRsqbFFiz13H
4KnhaGS76h87lIWnjBxJzGqixUF+1siA9u8BBhd1bNnbS75upZiWTG.fO3Xu
hvlYZOoPNTMF.UH8n2DF8xocdw+NQTeyRPo52yJ0MpHDBphafk8tupLQrNfv
eWkt47nlL1fzeWyBxlXaicxrtXYyhSH6bVN6rr6Q9MXnRrMiI6rzZaqrZGnj
ZqWNs5ASU+UKWTOyRUahlFpVkI4kvQFWTtU21nHfZsN4pTUJ4cikVqHkVq7s
rk5YKlxjBpqs8WUJPcUF2VuQZjrZ0fBK0CVq7ZAnmBvr02uXs1jSZsvazLEj
fESRW3.pn2P1nFUaq19VHdM6ksl5sCAVLZprQRJYUqmEpuOX8b70IuYJPvmJ
PvERcNgyY1NY6kLzAsBXQkpKsiWnFUJzaSeaZTFF3nwp5mACB+SxnvYrhc2S
DNv.n.ZAMzAfuA.E9WKDis0cjLlov1spiqMyQfE0d9raXQ+3V1HkCOnaIjjl
LRQqxRbKK1OmJGoY.NsLsu0GFxNprqoV96sMyqFqboiMPslYWmysIGpL6UeZ
bzIHUDi5kVTEfCTErUZ..4U.aeMQ4QJ.rIp2PlWGWAoahTjk0WqL3.crN4rP
d3l4phIdWiq.1t3qrTQOOmgORYYW+sL7JuwULAnETr.oE7YIahJJtxV9fap+
N+.+zWJyWxd3quTH+MV37q0M7vKh+n4+wJKcfZGkL5VJPXLADwkSYYuP+PYC
ptrNK6XHCcyHH7zQUqs9yVuS7iTcW.xD5LAkaHAlLFTfeRZ6i.yFqWZNW2zD
wvs1LNky41LcldQYzUXD3tF6Au056xnt7yUtaJCagWArxWYtcFhtsWspJsf4
euWvG8R8K1hnVqpdftYcho52wtNTNi.PXhb0WI5Nx.bQGMqbyuuRiu+W+8eq
LeI.1f7lX+ObI7onKxUorSi+1Zc8UwQ6kzcalBED3rEIrEo1HtsMR7URqueJ
ZquuuLVn+KEMSk96ZEUl0xnCkOmcku9aESbAPo11YsiTjS81Q55EAqdNZQhX
XQ8v105jnU0BZm0wCy5N5W9zDFBZm25XPDmUv4ws0vfvVR6B03RsDGxJYSnV
0nM8EPPmgegnKZ3W77Ixgw1PNL25fBVgY1z0bckN7qzRu9EvwM0VDXrNFx3a
JYKAvnNnqBbDbELMjSZWNi9OWL6F0bZKFoqkvJZOkETcAJ01DH29c8NDz7PX
ZkiUIIS5YNy87AULMcZJVHtjsymniGEwj1oxHcPgB2t5jwvZaSlSmhD6RhD0
kTsSknkP0yopL4TyBruRJzZv6A2F5Bl9jf.SdTrE3IQL4AAAUZvA0RnxYvkD
Cd3NUJkjWgmcK7MZVOatgxV3hnEAG3IwWB8UlArDscrDr9O4pYe8sUEpFAtP
rsiIOY7q1SFtF3c0d8hA0LzzeRl3ZXAdNTtA1mEiELO+7Nl3JXwdRCgd1KA7
QLQNky3y6IYjkNfrDLE1DlBsDLkIC8iVEmHXroRt4BmHpILIXIdRPi0QfKwi
BZziBM2GEvDIEbIvOSUIlKKAcL0Ba1gEYRjdKhS2pU+SegAM6fJI2LdBXBSQ
HK17sPFLj+7iI2DCJZyfx0yds1aFR4So1aBxZuAHa9ler623i0eSOpRLlZ0f
ilaGn1apkgP+82zUx1lmRMsWmMSoFalX80LwZqo87os6bosi7nMOsed3McmD
SUSfoxpdsTyLcI.lTcxLqZjY10GyjpMFiz0pmP2SKspmXcvLsZfYwz2xSJgo
VuKinVWldctLaChl0yR6FFFTCKylVpjA7FXe1c8oL9ZcXJ0kxhvvkp+jAQdy
p4jEgrprcCsSXiGimtKmQW+HSr1QlnCtawXbUsNLSJVtdPLP6ZnZ.Y1ZVMq0
i1opoVeGKEAVtNNLlBMp1MVHJrbMZXLAZTcYrPDXk5uvbJbfZtXgHtp0VQ6T
2.0SwDqkh4y.MpYBiAWipShYSfMpGBiBz1vZfXB0+v3XH8THU68rjijY4m9x
kddey+3M+efAGQ+F
-----------end_max5_patcher-----------

I also created some audio files to make testing easy. I have 4 individual hits, and then a ‘test’ audio file which has those four files in a loop 4 times, and then 4 more loops of the same sound, but a different physical attack. So rather than hearing whether it’s matching correctly or not, the output should return 0 1 2 3.

(jeez, I really wish we could upload audio attachments directly to the forum…(the shared “box” is useless as you have to go searching for it, then download it, then adding it to the folder, and linking to a personal sync/dropbox-type thing may make dead links on the forum as files are moved/updated/deleted))

The four training hits are here:

And here is the test audio file:

I’m using some of @tremblap’s post-processing from the piano patch in the fluid.nmfmatch~ helpfile, which is useful for getting gates out of the messages, but beyond that I’m not sure what to do.

Basically this:

I experimented with trying to set up a histogram to check the amount of activations between each ‘tick’ of the lockout, but that didn’t lead anywhere.

If you’re using Sync to do your files can you make a folder and just put stuff in there? That would be easy for me personally :^)

EDIT:

I also learned to turn my speakers down after the batch processing completed!

1 Like

Hehe, yeah the beep is there as I was doing a whole bunch of batch processing and it meant I could go do whatever else and then come back when needed. With these files it takes no time though.

re: Sync, that’s what I’m doing, except I often move/delete files, particularly when being very ‘work in progress’ with it, as I’ll realize something was wrong with the audio files (my previous batch of examples). So there wouldn’t necessarily be a static link to those files anymore (whereas attachments would keep them in-line, regardless of what I personally did on my computer).

You should try increasing the iterations of nmfmatch~. I am using 100 right now and the activations are looking really accurate. Report back soon or tomorrow…

Also found a big bug/problem in my patch. There’s a sampstoms~ inside the p batchProcessFolder that shouldn’t be there… (I was starting the analysis from the wrong place, so my 30ms window was missing a lot of the actual transient…)

I’ll try cranking the @iterations. I had it down at 10 for the sake of speed.

Oh, and I should do the + half the window size thing in there too.

edit: ok I fixed those things in my version of the patch, and I’m getting good looking results (again, in the multislider), particularly when using the “audio” from the sensory percussion sensor (the R channel of audio). Still need to get it to ‘return’ a match quickly though…

Here’s the fixed/updated p batchProcessFolder subpatch:


----------begin_max5_patcher----------
6039.3oc6cs0qaibj9Y6eEDB69xlyP22ax4k0SxjL4gLaFDu6FrXRfAkD04v
wTjBjT9Xmf3e6aegTh2Yyq1FXRvbrDuHV0WWU0U20E9Oe4K1sO9C9o6r9Vqe
15Eu3e9xW7B0gjG3E4e+E6N68gCgdopKa2ov3nqm28f9Tu2KIx6ru5LhCu2O
o3LhuEDE5motKX9AOEmb1KSdDV9Qt3kc3ofnGeah+gLMcfHN1fGrXDaGJGx4
bLAyoOXQAxCiP1.q+98GR70rhmBJ+nhGbvYAMJNj7VzGTecYe7hu9ora2CV6
16E83ta+ZB9r39nf62YvQE6Eu+W9Fztajchfsy7Sdqej29P+xLYp268O9Vur
rjf8Wy7u+ozbXMGWknW3U+3SEGt33k+4ErRVfWnllw237JWS5SwIYsOLT45J
XdPKmSLp9nA+D4jSSttxUcVfj2PQ8o+Wu7k2+G0e+Wu7ACE4NDe9reTVA1m4
+AkjxNns0uUJ9X8em3IHLwPY+xdQ2Ao+ne368yBN3sqa4PLSIuoECwtTGNAf
vDh3XPknHF1onHnzC8j2gJxGkjmnfcktvzf+g5BQTMpMRXJx+YwuYCT5h0dI
u8SIwG7SS+CwgG6PIEODT.AHaBCBQ.FfRXNRkRjDDLRqrUEvCg9dIgwOeWIr
D5PbqL5HH6Z5OmBB8eueRZPbTYQwcdWtT5vUUsN68KwpeHmaBtBLPen6JFI9
uOn39Q2NpWh.XxDnx0DsXzGXj6ZImiEHaz0.EoTH0WPRpgIo3W5kbwA0nYwo
KY8yAqvZmbHW+UGF3N.KDDdLL9v67OVln2EewWnDbIwOUnr3kkS82N8Q+SdW
CydaYIMHxt0yWHx15IuoD8cIRKSEWxiIAGiijDQkwB4gKdb+rEjp3JZYlQcE
QdWZ4lERABfoiSlJXxqo68RjCU4ViJFq1kEGGV8T2tuP+SY4m9RPTTMTLK9R
2mLI3wm54d2GKN4499sUmI8sWizm8sBohr2Jmvn504EFlqMW8m+CdhY17xDV
tzCAHvsSpsH+T5gj3vvJ7q9LuukybTHkev+4fiYOUYxR4YDWdvkBgnc2FkOF
7neZV0ik48XZ0ijl8QMnW5PW2mqE+1L+yWBEbQ0KnhmHkUYKa2qxw6y9WUaf
+FKd4iWwrGpzIZwzmvzusvNGlRT14bkeor0tVr3AKclFV8BDSjU4dKYvCtq3
v4SWVX9eggi8WOcxO4SVxABKTmHCrejwwEJACNPLCoCB6PQTrKfgnRyU0mTn
6IFZGlDtYJbTrtKZM.LvRhXU8ynJjcJ7ZvQaAvkk3EkFHtrzPgtymrdcbhvr
uTSz50G82GeM5fuEDBvVu9h2wiBHSbNhi0qSem+yVBJ150YOIrQ+zduCuSnx
QJ99omOJ9p3BeNH5X7yRalVPwY2KM0q9l72oLwEFD4eP7.UTHehihtB2pEiX
PWWaFlhbcYNHFjCcbj1oA5Ig.8NPBZevgu4iMQmOIFPdJ9hBtvHEVp9LS.jm
Nkc6yhYwSTSQlJ4NqWKFTemETbMAghyH9oT5FcB1nIB1LpZ1bNSqeHvboaj3
oftP9FYr3hTNMv5tbu0IALbzJHxJsSSGzALcjaff5XibIPjCAxc0NTBoPCrc
zqI1NMW3rUFXujHLya86SRhSlr0UMDgE9b6RkfjiKghgRqqLjAHTWJkakXSp
enEdpS5J0SjyyJl6sgQILYtysnlR4gdjS3rMBjdzOSt6.VodmujtaFFUjJNL
GaWNivAtDNhQUSDKWx1vnEtWsoGx+uNQKvF61hZlWg2+IYSGybUKDoUALHft
MduvIaDvkYs2JXpPUgCvtHaDGPccwLJJeK4LxcXizE6ysXl6VNU2E8FkXcL4
54Tij0vFoexENXQENJK7Mj5R4.LTHpwwq1jcrsRs7hu+69zBBTsMkmxEz4AT
ZcxNQK5loKBmog917ZBglK7zqB3VMeX2qx51RqHDHXtyThH1XnXpRjPYzERD
qYUhcr4Bg8ZrmsYKGRX0JK1xKxK7i+C+oBUtXUPXvb0tOpsRMoUARWTi2J5u
SdBL.OomXGizNVW72E2xKsxlMULT06PiXI+9J9GuMJZmSyhUNc9oIKfnAyV0
k3745.UZviQx8VdHy1P7RJcs+ZVVbzLstPH4gMJ+uqh0DxtJzRyfQB1HiMG7
BObUtYtBA6LuPqiW06qxhu0IP8lkvkvKQHp4vwf7XP4.l91nPoakYY8dBb3Z
Rh3JrjgtZpBZDF1VsO.bkMZW3LrNS1J1WuiaBwjmRhu93SJ.XxKeCqEFnbns
vNjiCl6juyyP3bPiMa6jOj3KACuKhUaHDLTe9rTEwJ9j0gm7hh7CSkawldMu
Kt1jPCRIBgc35.xgmtJDYy7rw63QqiAGxjShd9ZXVPNRsVnDmyzJZPjMiQXb
jCEluwJPzLPrMSqK2UCqmeJNzOGlrtlJiJQbT3GsNkDe15OYEmX8WJD6VbTz
gp7rlfg1jl61KeFv3lot97S9QVGii7sDdinhoSK9vsLSyIVbmqZuUH50zkux
2ogP3MSPShKJa5BiVBsyURgzQ6.u1nEaF1rvalnySwOac1K5i5I79OWdAFTg
.Chhr40zuXiU8RR2+x0zrfSAGtkCIn1AQz146j20ToGlVGBiEe3XfWX7iq.T
p2jIfiMr9lByWSfD5rU.Ypenfcs7rNUNOvVPHjvrU10gN1N0WV3ncxXTX3lY
pqvoCMVFLiELJ7bWBV5MYABlgmqPzVw8sZbeLbMEpXWdtK7noyzalVSaKpcT
KWA5tPr7lYwUt6CRCt4FLZZtXL7OBizq1P6QiV.XZ..dCCY19IOdCH50Mv.1
HDlBAbBBpmPFtTQut28GBy1LbJP9+mLRI7nqKjxYtQtVFRiGp7OcBWnMBtN5
KrbJy24YrGicfWTxpEJQH7qD3oPwi3.skwZkxbvTs2wqH7f3aox1rwFLy1sQ
7Cof4ZWx.0LDayBj+6rj45WPjJHGVPqdBZ3.QklfAcISAQqnPE9qDct7Mlu0
ToYEU533MMW99a6pVpQ+scSd26wZ8v1xa5hUfNsT6aqlDKXNo0mjMoxb3ivA
TG38BIZUyrd9lk4mVxZyHYpHDxAoxUHh.MpGkKjMmtV4Jjyt5z08pspJRzYU
W0UkWU61aqBr5nJr5tRrFtZr5phrpTUVFTYV0pNKpqdo5J6Z40DBlUaGMZu9
rLnFsLoNsFrVsLrds5olsLqtsFn1sFr9sFrFtFnNtFtVtFrdtLnltLottFSs
c0S8cMXMd0ecd0esd0e8d0aMe0Uce0dse0Q8eYTMf0dcfU2.RcqzMN+PVqqO
+tuPx7nUZkDKp2o06zUHgKhXw+ChbEyr6nxbQYAxR4PBhgcgLfL7gB66sltd
8aN2.S5M1sn69HUYlupy9sx36g3y6Ch7sNK9Rpks04zRUFkEP8e352cWaFcu
UZRyx7tgEuQLvIOlbbi6B4DG4rvxbCWaHDSGbjCM3H2CCL5QZfJ0mR3y+f60
neINHxhLaMGNv1o9..AnK8dnK0A.3hi109m0B9SMB+eni5anwpwHeAnIo7rz
505lng0SO8smO+soo8B8ngg9R03mFyMCeGT99VMPzKvB2DfsdZi1api1OPQ.
cm8nSw.diswsk73u1IKmQo0O2sDIE90BrB4vOO3JbR3JZCvUMyrJdivYJuQf
PHN+PFC4fdvRzhKiVccFR+AFvoPEBHut9A5z3qIGJDRJjCrZx6BugyBhtsDs
e9l4JgQRq+9jDBlLEBFKEB1XJT3no4TnTXYyoPxXnvB1YSoPTtnkQTH4yFEh
FCEh9bPg3wPgjMlBgiYTFMrtboSVdasxaBY58eokNPV88zaRq8+wv38dg4qn
+1Zt5X6AdYSFXapVXccbJ7ucxkMFjhr006ZqEAqXpzsodgoaV3yx2RDw+DJ2
cw4iaDtMCB4TJlCA5fm4RWsXCQ2xrDAH9OUaLy5VyLalk3RKEJL10DYLpoUZ
8C2+phnasUr0.UQar3m3eOE7gYhls1VDb3qlrGdqJVc49oqSDVU1YMWXps53
yc1IEvf1zPnMSUUsehVgyMN2sT80zYmTW585rutrAB90TRlPQLajPmSZ8x75
2et4WBdKatMfIGiWNw1oSuIHN1XNckavMrsCmlJJcKGJgTaJivbK0Sa.qdG.
BtUHjRwum7EfZn9FGTuRH4lfRDCz3J9ud071JqSIBpz2J2b4b0+ZwqTNbIlx
qaq3KZUJb8rezUiLUKoO887W+t+2e+tgDp5pyigXXamVsNk6ql7I7idGj0.V
5SV+wu+ae0+SpeR5qRhOlD7X7qdyGiN7peJIVkV.u5ODd82E+idu5mTKgL8U
+EeuPYPNrhNe5Um7RyrNmScux65wf3WIKbwPwEtynDBNHy+b9lFtC.s9Fq+j
Wxi91O68d4XzCx+.PhC+i9GCtdt5wwhi+lydggUOLQb3eRF2Z0gqf.dWyhuD
e4ZQTsglpZ0oMH2srH+6Mml166eYttDzV9tQnyHc2n+ZNKYTNKgxa3IHcIrk
2bNnneMok90jV5WSZouPSZIgpcp2i9clK.e+e9+52O2H+Ccct2cmH3MIkj9R
HOJLHitmV.W03IT3jDS7+DqZQ37Do2L6dbgYE9E.3cz6vmrfVn4J7k2FW0YR
KkNevg+kPxt8e7okAWZUFxk1VJxOEUz71qUeJp7uDD1N7wCg9exxwArLvp1T
GisTl5LAGAaANNzzERQJKpEvhNajDBUML9bnjtIyZTpCv94SXTFs2OsPnGDg
U4lCASATm7xIq8Na8Tx8t6sOugSCJ9WMIfWN1gvablhwIe8lcSbxXxLG2VuX
0a3homSgaBoS5mxAaKkOlTJii+hBzGMoC+hA0GSZxUvmaah74NFkQ9mCJjOV
LbqSFxwXT.9qoO0zCcmZUxmt0N7Uuqn.VeCT7Gnk7u+6G04V02HaIiok+7b6
tETNyFJ7Kxk55xxCLCFiVu9aAcq6u4BGHtDm5+oY2GPfN1vZclRfyp1HywzO
euMFTxeA8zA8YlAas1CLfh0W6rZkXs6VKh8UwKCK0fA2wVVgBH.BRbxyBBc2
3udc1sXBwnuXZJ8bWhtIvsPck99hROA0Uiou2dZWyZe4yMnUjKV7kAy5uUqi
6BzFrGo0bofK.v0n3fFW22S+FmQJ0g...Tn0UjiVFgic0JdocARs1u.WEIp4
ALEcdikFXb5BXZqoB1q.y82XtM1uf6PUatUWBvZ3NciUjzUoHT0U5dGtFKM3
.MjH37UjJ3r5KlsCpvAt1TgIXAislTA1TwhUEKLUtP3+9JRE.SkNYqMUXhzI
mrhTAyTyEtqMQ.MjHPqEQ3XHRPbVSnfaprIXMoBisYsl5oE+3CasXMIBSMVv
VyoxLclLzZZwhZprIDulTgoXwZZ1jZ5zozUc.AUu7c6R1rossyAGuDKVZYZw
6eGUpHf0ctbjtU8V8abrdIZtnaeaM4KhICwz0FcMQPCCaLLTGcyeo85naW34
oqPkuQ08AGr.VUaXp7qqIiYjufn0FdwlXMwcHgWhFIkuAebjkLAjB.HBART0
YoMs0SsRrEwXKCqI3RPivsNxZQDlNy4Z5JC1TGb4q4jVXSm5DCWapvDKZPV0
3.trTgoNWxWSq6XSciPM24pgEF6h6pJWXpeDbzZSEFsfXXiKr9DBP8rnbBsd
S0W11HF7bTYFIUqcFy33NN2ZhGfEYBRbdHIXx5SsJOiP1psDsmSgbgMpaL8z
pMOyZgEFuwQqo+1HishulqEDYp8SzpSEFsjT7JtoMHi8wXMgBSc4iPGzSVgd
kt+CvrEJsPLgdODpTc.MZ4bqEiYpEH7Zt6fH3hYGT9hfK2rETXqCWjgE2slU
5vqI6.WF1g.97yNl5L2Z5.CzcLQ5o5NKzL2F+7PZsrkRMyXzkmzLwsOzZtUZ
PSmNCyVapvnM6YMcAFZ5xAvq4Rif3QDNF7ZQDvQth4tMSxXnbue0YJgtOZT6
a.ZoM2r52J1ZNHVO27Jt0blxzrtmv8dREnJ+0Nxpf6UisrML7FU8O+1erRym
nn5samz2+3ofvvCwgwcVh9E4iyN8UUob2Ktue1BnZ9RPGA+XKfXNho9j3CTZ
8bQWeevhajPIt.j7xILjX8bpO4HmxS9IPK2J59yD.c0OIfqCfn+j3PPwyr9s
5I6QEpjagWqXkkur2iStU.8B+xpbeWyheLw6XPdFh.ZMmeenjzRh3Jaqpk2o
d4nW92nMosaCp+oqG7Lcfrbs4Kjt9yW7irdiWTp0a7OGrW1GxpHOdKexpLDx
Q.lqZHDx3HM76..PRCzTkWip68sAQxtzf+sgDrKBpFRP2FWQbg+sMGRFkz2s
QfdD.GgvPUQPmaBdNxsDvQ+oVI55hfLJPCYxxBkw0eR+qsIRfUfyJ3gKPlCs
JVwkR3JRygfb4JFkxpLTT4NIbJDqtJjKVby5QSnP3n4Xn2gCBppxsiki7Jzm
T.NR6.jVtagX3452N2Qfi5AC.zwQ+IwuDBke+qpR26RCCD9q8WksCDSU9JQ9
p4Xp7mUldO68AVkdLR+jZm5sfGJ8mlJpcyhBQogDHz5S2LLvyUO2FvoVBsZ7
HoPM.Ieu4UV7UZJiPgaEo2n5gWmw1kvHbISoElAa9oALkxksgHk5dyO09s9U
ke.M0TGuDQ8bocDRypw+R9ZIvIr6VHIqKJhea3U+uAZJk21rJxtfpd90aLgp
AxB2PlHI94nYwE2oc5MaJ3MlK9cezadLA.IbnPaJmiwHsNNR9tqX6XheHw2e
lbgZTPVs+XsKuRu.2NF3+yOLL94YwANBmx3ZqjPGnx9NULxzzbYk2PU+rpCf
QcA.m0lQudduexOHV8wrXSUWhVItQEtPPUbLrr08UkIRzND9CU5kyCsp5wQ+
c4GNivXX2bsKdtG7hwW2kSOK+2n3GXnBrMmI6rvZaqnZGnfZqWLs5ISU+UOt
ndlkp0DMMTsFSJJfibtnbitsQI.0ZUx0ZMozZ0wku0R1XJWNlbu8.qx6q6Cm
sWGJUpAEcKnYjrZUmBK0AVq7RAn0FfRq0WilxgDrXYeBaB2ZAjMpV01qbqdJ
0xVdehsP7Z9qZM0qmArX1TYajTRAVOKDeev54j6Kdaz.giXn0g33vYt4QIG5
hVVrvYJXQkZKsiWmFUJyaiEoy4bgIFoizb9sPUJlQe.FG0Ei29aNixnfCZ2B
pnC.eK.Ja0xik4wrVE+0p4HvXzmy6FRijit3EcqabuYTchv72QcimjzjQ3EM
iJAoKCdUS2lZYwj4WaYBW1yTK+TaakWM10JWFPsya2WysIGpLgTeYbzILpHl
0K6VM.NxgEFQ89w79jCHcCjhLd6Gcp8fKp90ta.wijiK2zpMlggDTqbbK8B9
1aHzUZFze+O8cx.6BXfhF67atF8T7U4NY726BhZqkMWYVV9RiTZ2ZGsrgSwr
HXLS3tNKu6ARAS0FaulWQzkls6ZxXoGcU53H+avwN2aN1PI1D.W3j7c4HDbQ
m5EMIWtjdUHc43SsxWzBWmaMlJp1YgZqKjAVPuqEMODlV4XUB7UO.lCqp8er
Vcj6V1rrxAgatc2teBk.z7V0gp0CDe5j70ucIS3cOQeOeHLHMqa8SX4gD0UT
sPp0iP0iAa93TyzUuRlZzUBjTJ7+MjEF0SBLvSpbHdm9ShavSpfwm0SBiM8I
MWdBQM3Ig.KwSBXBOAWhmjofGZlOHniAOoEQHGRl1SRqGWqE9KeH0ZY+0ZU+
MaQ+c2Z9q2R9U6gQszkPyrCjlD01Lm+4K6JtHE69Q6oDwTRGhIlJDSLMHZOz
GcG1iNB4QwNz7vK6d+lptWSkk7ZI8FZe.v7TZXVoyvrSkAijTpG4roE+pIl1
BSKkEVLokNVnmgomvjRMgomVBSOkDlsBQyTOncECCR2fYSKUBVY6jwnC2roo
QvTRgfEggKkp.Ch7lkd.KBYUYgWK2XwTMZM5P8Owv7OQSjawbbU0NLaTrbn6
MP5Znv0OaIqlgkucpZpgheoHvxgb2XJznvruPTX4voaLAZTHzWHBrRnxMmBG
H73KDwUML3FScFE569C687YfFg21Xx2nPZOaBrQnq6ZkNSIb0SHT0iigzKgr
iWoZu7e8x+ePRYNfK
-----------end_max5_patcher-----------

http://tinyurl.com/y7n2wxyw <-- evidence

Incredibly lazy-just-about-to-sleep documentation here.

http://tinyurl.com/y93jua7j <-- patch

1 Like

Ooooh!

I’ll have a proper look in the morning (too).

will look at it tomorrow too - in the meantime: check the schmidt gating I do in the identification example (bird finding) to check which one it is - although you might want to have the singe, most probable output instead of the polyphony I make available in there… more soon!

Ok, got it working, but I had to massage a bunch of settings in places (did you mess with more attributes of fluid.transientslice~ in the inspector? I couldn’t get it to fire as often as it was in the vid until I brought thresfwd way down, at minimum).

Also, did you analyze 30ms or 50ms windows? (in your video it shows zero)

I still get some false reporting in places, though it seems a bit better with the Sensory Percussion audio.

Pretty exciting!

What’s odd is that it works alright with the incorrectly placed mstosamps~ in there, meaning it was matching some arbitrary-ish bit of time before the transient (I was wondering why my filter dict for one of the hits looked very very different).

In terms of the fluid.transientslice~ vs the p onsetdetector subpatch, was this matching faster, or what made you switch to that?

I’ll have a look for the schmitt in there, though I have to say, I have no idea what that example is supposed to do… (you keep referring to it as a “bird finder”, but following all the instructions in the patch still leaves me scratching my head)

edit: had a quick look, and it’s just a straight unpack → schmidt thing. I thought you were doing some fancy vexpr schmitt-ing.

Hopefully @weefuzzy gets back about the best play in terms of sum/scale/average(/noramlization), so then I can create a training routine to build up better dicts to match against.

Its very possible I did some massaging… it was very late and I did a lot of nasty, cheap shortcuts.

No windows. I’m using the bang from fluid.transientslice~ to sample the most likely nmf match.

I was using the DPA in that example so I’ll try to tweak it more openly with your other channel of audio.

fast_onset is fast but I thought for sake of consistency I would use the transientslice~ to chop up real-time audio as that is what is used off-line to segment the initial audio chunk. It is probably possible to tweak them both to be equally fast as each other and I have no idea which one is the most performant.

EDIT:

I just realised (as I was writing this the next day) that there is no segmentation and that the hits come pre-separated. A lot of the other reasoning for using the transient slicer is relevant :slight_smile:

1 Like