Musical use of descriptors discussion

Hi All,

Sam and I are wanting to do some work on the musical use of descriptors, we are interested in gathering stories about issues, interesting usages, points of technique, usefulness of various descriptors etc. etc. that arise when attempting to use this things for musical/composition/performance purposes (rather than MIR).

I had some interesting discussions at the plenary with people about these things and we’d love to start a larger conversation here with the hope that we can put something together to publish. For now the shape of that is very open, so if you are interested we’d love to have your thoughts. PA and team have agreed that it is of interest to them to see the conversation, hence I’m keeping it here.

Thanks

Alex

1 Like

Hi All,

This is of great interest to me as well.
In my big sound collection my familiarity with certain subfolders varies from ‘well known’ to ‘somewhat familiar’ to ‘unknown’. Methods of exploring descriptors on these different categories varies obviously.
All analysis have been calculated with Alex’ descriptors~ in non-realtime.
For example, I analyzed a collection of 250 soprano saxophone multiphonics. All values are mean over total duration of sound.
The range of inharmonicity is only from 0.005 to 0.321, while to my ears they are all pretty ‘inharmonic’.
Harmonic ratio on the same dataset ranges from 0.319 to 0.537. smf is 0.000 to 0.003.
All this just to say that the output is much less intuitive than I would have imagined.

Here are a couple of useful combinations:

  • durations above 3 seconds (to get sustained sounds)
  • energyMax below -25dB
    this yields soft sustained multi phonics

AttackLoudness is one I added to the game - this is just the energyAbs over the first 200ms of the sound.
Very handy on percussive or any ‘attack’ related sound.

Pitchdeviation comes in handy to exclude or search for glissandi and other pitch contours.

I have either a bug or did not understand the linear spread. My values range from 124732.805 to 920360.997. No idea what I’m measuring here. Sorry for my ignorance.

lin_brighness is very useful in general.

Just as a start of diving more into this subject.
Best, Hans

Thanks. I think Lin spread is broken in that build. At the time I was writing the object I didn’t realise that sfm is much more manageable in dB form, so I’d suggest converting it with atodb to yield more useful values.

Thanks for your thoughts so far…

Hi and thanks for starting the discussion!

As some of you may have already picked up :slight_smile: I’m currently interested in “automatic symbolic transcription” of some sense (that’s why I was asking).
What I use quite a lot is searching for melodic intervals in datasets, and what I have now is at the current stage relatively clumsy and unreliable. It works, but only because I know it doesn’t and I know how to trick it :slight_smile: But before delving more into anything, I’ll need to test the inputs you have already given me during the last few days :slight_smile:

Another two cents: I’ve used your foote descriptor over and over, I find that always extremely valid to distinguish between “fluid, steady stuff” and “uptempo, highly moving things”. That was a sort of huge time saver. “Ballad versus up tempo” ahah :slight_smile:

Hello

Interesting topic indeed. I presume I use descriptors in 3 different yet similar ways:

  1. for composing granulation in real-time. I have a circular buffer that I analyze as it comes (50 ms grain size, 10ms hop size) and I analyze 3 values (pitch, energy, and a timbral descriptor that changes with my current tastes - sfm or centroid mostly) and after the calibration I showed you all, I’m certain of the ballpark of values I get so I can compose real-time granulation beyond the on-off. For instance:
  • I showed you all the clouds of quiet pitched material,

  • the beginning of my soprano piece is doing random stutter of mezzo-forte noises from the singer.

  • I also do some cool alignment in my last piece (super long grains as looper with sync’d loudest points) to make a chamber music ensemble tight :wink:

  • And I’ve also done a granular looper that skips some grains so that makes auto-edited loops.

Fun stuff over the last 8 years thanks to Alex’s objects. The other usages are in the same vein:

  1. I’ve pre-analysed some very dirty modular synth files, and I’ve used the real-time stream of descriptors of #1 above, offset and scaled to allow rich overlapping descriptor spaces, to make some cool synth variations of a live gesture. It can be heard in the quiet sections of my piece mono no aware

  2. I’ve done some sampling of my modular, as I explained around the table: the patch is controlling one value through my Expert Sleeper’s ES-3+6 and I collect the same 3 descriptors above for each ‘control’ value. I can then query via descriptors again, or via fixed desired values. So far I’ve only used this as pitch tracker on complex patches, but I had loads of fun to make very synthetic birds… I was using the query for the pitch, and the stream of spectral centroid to open a filter (with some mapping), and the stream of power to open the VCA. It was great fun!

I hope some of these simple uses will inspire. If anyone want a patch above I’m happy to share.

p

I should add that before that I was using CataRT to do the same - but it was too convoluted for me to put in a piece!

I made a patch/system/piece that was played by both a vocalist and trumpeter. It used descriptors to chunk up the preceding 16 seconds of sound, and recall grains from that buffer which were most similar to the ‘now’ input of the musician. The caveat was that the 16 second memory was a bit fuzzy, and would have grains/sections removed based on how similar they were to the last 4-5 seconds of incoming audio. The idea was that instead of thinking in terms of a catart like instrument, the system would have some interesting corners for the musician to respond to and compromise with as they improvise.

If anyone is interested in the patch I’d be happy to refactor it a bit and pass it on.

Recordings below


As it was said in the plenary, I think that descriptors are fairly weak in what they can tell us about the sounds especially when the acoustic model is not that close to what we hear. Salient descriptors seem to be centroid, amp, duration and as you increase the complexity of these it becomes harder to milk them for a compositional purpose. The system I spoke of just above this paragraph used MFCC’s and it was quite proficient at picking similar sounds, but by no means is this a perceptual truth that the sounds were the closest - just that the MFCC’s data happened to be numerically similar. There were definitely moments where I was confused by the descriptor matching algorithm, and that another ‘area’ of sound I had heard previously would’ve been a better pick. In my philosophy for that system, I was really just using the descriptor paradigm to shape the output in a semi-logical way. Maybe I could’ve done this with another method of processing/analysis/synthesis and produced similar results, however, what seemed important creatively was working in this way and hinging the system’s behaviour on the differences between computational and perceptual similarity.

As I was going to sleep, dreaming of a better described world, I remembered that Diemo had made this list of people using CataRT and therefore descriptors musically: http://imtr.ircam.fr/imtr/CataRT_Music

With the sounds being made by the instrumentalists here, it would make sense that the MFCC would be the best descriptor. Pitch isn’t going to get you very far with this material, I don’t think, unless combined with a kind of gate that ignores the noisier sounds and includes the less noisy. I imagine spektral centroids would be useful as well.

I think the grain size/envelope might be distorting your results, however. With the grains, I am perceiving the envelope as much, if not more than the timbre of the grain, which blurs my perception of the correlation between computer and live signal. This makes me think that we could use descriptors to control the envelope time, overlap, and duration so that the grain shapes more “correctly” match the material.

I used descriptors last year to control real-time synthesis: oscillators and such. The piece used silent brass mutes on trombones, so basically the trombones were used as controllers for synthesis arrays. You could not hear their acoustic sound.

I found that pitch, amplitude, onset, and centroids were the things that worked. Because you couldn’t hear the trombone, I really didn’t have to worry about things like matching pitch or sounds. Centroids and pitches were basically used like sliders that I could map to any range, and I just manipulated and clipped the ranges until the sound and control I wanted emerged.

I found that the best things happened when: multiple descriptors were used concurrently and a single descriptor mapped to multiple possibly unrelated variables - for instance, in one case, i used the centroid as the control of the index of modulation of an FM patch and also to control the envelop of the attack and the pitch of a percussive oscillator sweep. Centroid is a weirdly good controller of attack, as it will change drastically over the course of the attack envelop (see Hans’s AttackLoudness above).

Sam

Thanks for this set of ideas! Bizarrely, centroid to attack makes sense to my mixing ears, but I would need to hear in context indeed. Nice one!

This is only semi-related as I have nothing concrete to add, but something I’ve been wanting to figure out is a way to get meaningful descriptor data out of onset/transient-based music, where there is little to no sustain after the initial attack.

I spent a bit of time brainstorming/patching with Alex to get something that reliably spat out loudness/centroid/sfm (and perhaps pitch even) for a given drum attack. Obviously there are a lot of problems and compromises there, with the biggest concern for me being latency.

The dream, in this context, would be to be able to have some sense of a couple descriptors (loudness/centroid specifically, but sfm/pitch would be nice) in the amount of time it takes for normal-ish onset detection (<10ms).

This AttackLoudness idea is great, for offline (or delayed realtime) use. I started building something, but never finished it, that kept track of some ‘gestural’ data for each attack. Not useful for immediate/onset use, but my thinking was that it could be useful to create some kind of descriptor gesture/vectors which could be used elsewhere in the patch. (My exact use case for this was going to be to create “long” sounds concatenated together from a pool of samples based on the stretched micro gestural information from a short attack).

@rodrigo.constanzo Can you link the patch? lets get the patching/brainstorm going again!

@spluta At times the duration and period parameters of the granulator hover around values that cause the grain to be significantly distorted as you put it. Also, when the duration is lower than the period you lose the continuity of the sound and it can disrupt that timbral fidelity.

In regards to your silent trombone piece, I like the use of the centroid as a kind of dirty envelope follower!

Totally. Would love some thoughts on it and further brainstorming!

So here’s the main audio file I tested with:
http://rodrigoconstanzo.com/temp/preparedSnare.zip

It’s a stereo file with the L channel being the audio recorded directly out of a Sensory Percussion drum trigger (you put a metal dimple on the drum and it has a hall sensor pick up the “audio”), and the R channel being a DPA 4060 recorded at the same time.

The software for the Sensory Percussion sensor does some cool machine learning stuff and is crazy fast, so I’m trying to replicate some of what it does, but without being inside their sandboxed “app” (or using the 7-bit MIDI output from it).

Here is the patch:


----------begin_max5_patcher----------
15717.3oc68strihjjl+tpmBryt+HqYNoJh6AiYyZSWcaV0+X5cZaqY1wFqp
wRiiD5bnSDnFP4kpsIs80Xe81mjMt.HPD.ARBP4oTZcmoJg.73y8vC28vC2+
ae627vSIeJH6Am+Ame14a9l+129Mei5qjew2T7e+MOry+Sqi7yT+rGVmraWP
b9COpuVdvmxUe+yAY4GRCb9PXvGcBicdIHMn7GEEFGrN4Pr5WBK9x8oAYhGj
edXR76L9Kd5vSOEEH+FP483mu9kv3meWZv5bMUCHtqbgtLNDybYtH.j7nCl6
txyyiyXdPOJmI9JOvJ2GcPrUtN+mEOs3C6RNjGEjqFYt0FQqShRRKd9xays5
u.0t+vMpQdxS+k2B8d33CMLt7YBje2+029sx+5wKDf8i8i97uJF7NBj6CgIG
xbft6xbR153eXSXhy1zjcNqCSWevOx4oCa2Fj1OCnMXRfT4fj.fq.TJhC3Hh
GRBeJXVfenAwu5nBe5QkMaB1HnNMPD4mGDu9yJgOme3e6e0I+kvLmvc6SS9f
3mI9qT+nHG+0qOj5K9c9wabDhgGhDDlInB0MTgYdqj.CxCsB2TTCvTBMX1nv
J5jiUY4oA96jRPVOI0pofDJWNdoHxJNB4JlKplDBbgS5TNvjCX69ryNeALkD
mEj6rIHWLjEZqb7idNIML+kcqjyEyy+ryV+r7QOYCgU3CPAS.Lb7Sv.SOF7+
JvOJObWfiXlTdxyo96D5VBi13bX+C8nU1EvVQoLOWFCf4XkNDgFE0Hkvj+Cz
cLizoW+5uSqDMLJHywOM3e3Wh+kXv247Swh+CgRh0IoRMMeTv1c7cDqbkkj9
Ym8AB0sYYRghMoG14jmF97yAoNuYm+ywA4gqK9kBQHgtn.mL0SKLOKHZ628K
wvtd9+g+7uyA6Rccdiet9F8Er.EevOy4+FPbunuy4Wd3GROj8RP1u7f7q8EO
lmOD4m5rOILNWpPLMPrJfPkn4Y4jtYfPb6UUAjxEGD+CCOF120S41SJh83Ra
RUYeHLK7ovnv7OWWSUx1shos5gyaUS0da8IWQIqeevlMo9OmsNMIJpNkuNJb
86yeIM4vyuT+6Ch8EpCeo8MnuvGZegmddWxlfFeijQmV+aLpaPq5CozEBAdx
+g60IjWNl8SetvZtG9mjhxO7n.wzxHq7C2J+O+mhRRDScE2h3yeHIR7wZOUg
XlBl2DrKISHmrYk.8EDXIbqem4edePwqIK7YggIOXRCMyHS28LX5wAeT7.aM
kcuidIs+2BYfGFdoZJFsBUaAJtRcDDNFAYhYMtMXkZt62TMV9lGjrBgsGR8D
03VB1098095uo1sHAf+hdAQ9iUeUXbRcIGwWIMEr79O9s9oBLPtZkvhbEo+I
J9giOFgDYZ7gvpofJVQAIo.coXP1d+05aVxaJu7QTUunOApW8hRUBrX42Vhl
Roe8rr5T2CI6ChCiqa9eiKuIXquvfr2sMINOK7W0FeHeIFt91BRz3Eqjk+co
gBIzxexyogaRhkDQCVg7qKec+bgpN4eebvn9Ew96MbyBICAtzwEyDCxCYO4m
pTSoslBVdw7jjnlWp59hB1lWb48gwwmfh4I669hhUgdom68oDwE202yVckr2
cHVe02IDJxeWl+GZh14BioKlZ17w+I+3vcBawkKXoFttUWrkJTPyq7ACWYiP
HecvGC2jq0FWWXP7yC2WJD8PEWdSnzgzleWtuV43wuIK+yZPu1WcnbEl2kGr
auzihl+fFdLWeFackXM999TlcpBssBFS8KYPcFWr1fb0X85vX7oJw5d4AyZv
enwMV25RN9glOxZKceJMdToWywdmJ+5RA3I2tIEgcnLraEhCqTrKEiMTNZgB
xSTRRTKbCbULIgcvJdEysIyxrdRKzUZi9xA0YZodydzcZm9yAzgNndzA0kNf
9zg0oNndUKzsZi90wnisG8rCpqse8s8qyse8t8p6sK8ul0A2gdXqzEaVe7oJ
PNUubqq2qChsUR+6ShE5rxc1lF7WOnB2zg3vbGgGWIN6B2D5DmjGn9tGkdk8
w.YDmxbD9TreuL3KBu+bDJg2eH2I0O94fUm9lLEBp9VP.p0qfn07ttdvm5XQ
A2StpA205P2e8qorjullxYhIrVyDDdLKigmBaEeVB+8hlvgQSsWA.O5JOBQ3
5qWweXZGvZFhlwCs3adnUEG4xI2IoYGEzuNPqVN0ie4XI71WLUHX5HzKH7RM
KQoqUOm+RQR.DuBhvbpvaV8evxPH5th6QoPX4WxOFE1KBnAL7WKZDbpqEN6h
wYA50Bm47UbDiPvkpFjwVvaEiR.HZ42QubL2cww7VtpXP51ckRv6ggASr1nP
LcE5ToTpmIuX52SFK7loElRY8honkGSkN.5LB3zCuBcpvHlMSnIYwkPUuMqA
K8RO5Xqhbub3YaThed+XDGzKFcpBfRsbiag3v3MAeZtfbMJX+7cwJ83SsjxZ
VPeJH4Cr9eOPq8lOZEz1zIW4hLC3QhBsj+t9w8rjCoqKE1pDmbZCZBoj7v3p
.D7y0lfJ+0mkTwYSiRkr1SiRt3BPijQgirAowZWrd7hdP5P+l2oCrw67yySC
e5PtV7vTvxNKmpeNJ4I+nBWkqBeSG9c+ssG.Ue5HTO2A0DCIp8nYNhpI5dTM
uGUy6Q07dTMuGUy6Q07dTMuGUy6Q07dTMuGUy6Q07dTMuGUy6Q07dTMuGUy6
Q07dTMuGUSolPwjuABcIAy0tnhkG+IHATnPfKzHvnVDGyZVr8v1jzc9pGLs2
naJyqegI2cGkSTSpNUfe4AouSGZjSzA0wBbSaXg8yS17z.PK.hHqf0BKLXxB
Kr2CyAdr6PTdXVT3lpCvxvCcgO6B4JFtzvRWoQ3dEBVTqkrLJC0DNxBxEiaA
AWbnY7zGBkSVOqgXl6XDyJijJYok890HGkc5EmeDAAYM2vzrb..Mxo4VvLLc
L+ZCXvEQ3rLEzWLQSsfItGIS1uMDLK4DKgXI+FSprZODugEKA+1PrrhUrDxk
vYQtrG3Jst+sCfTPvQm2YrIy7llbr1GHyYexpdbeSabCD8aiIqErhEYp5hOW
8P7d+0uWFu2Z+Oq.LJqsnKfh3V.Xj9.Lc32dzhOz4hL3Q4Lywi3ZqX7bDnME
ShZvcqXQ3cZjH5JJDflAgnWt8XIBtkDAaBoA4zO6PB7DREPnkTgTo2zQE1BE
SHMnNUqVQE7IkJP1xPZ86pJfDfElz.ntoM2og1j7NjEjl2Tx6rU.BBmZp.ZC
WhimZx.XEYLkZV..akYc6jJJ9xx.cOTPt+amSMHn+fZeZ.s0D2Up.G8S4G1t
04iog44AwNaR9Xri+Vg8rN6BBxkovkp1C86hB9jyaxR1EHqePe7kv0u3DlIy
6.YcTKJP9nC1374f7uSUhjd6lfH+O6DFKdsxGhtVz8zm00js2jm3HL8nnBZ8
h+98Awem3lzEyt.cErKOI2OR9NcdKzc02odpGxBzOp2l5mGztBbEuwIy+ku3
rMIUXmqepZ.ndpYgxmni+GRBE+FALu4PjXPlEkr24M9Q4uHKpON9hg4+u+O+
eE+zOF3+dUwiSOPjO4saycjlyWV43TkQNMcU8J9XXr.BcxDOtnMNOE3nb8Q.
PxGU0C3MUTxK9ePQhNO6m9j+yAeuXDFEjk47TnX3nKxSAwaJdKxBU2y0dl52
lbf8bf3WlJGghO4rKIMnnb1IPoO3GcHP8.hRNrIV9z+neliP5Pvi8yNjp3dh
KuV7OoBp56y1tSboMg9wNuYub3qjAD2v2Ktg3irheV3Tg1ch+SUpnneZ5WXl
5W8wWDCBAtnnHAtkjl6Gq9lb4U9bxAEAuVvICyDBf4E2rwBSEf2c07gSAqHD
hmKGVVWpnpMGffT+CDyGSA8Ae8JMUcTkh96c.OLxBskNMxfdxP60S8IBzUQY
JLN2XEYBiMNXgmwf8fPT5vXGWZFEiOPcWprrKFlGrqrbVUTw0jN+7n7u1r2u
5yEU3piCYi.xim3KZCfAcbnzoa9SlDhTSv57jzuHLsYrxJPjNIi7DBKTHByv
.HvUWzNOGQmdpmWXy09J70rfdoKDd8fAblALfqBbFgLfb04LnQlqhYfe6Uvu
ZbpOnXc89h6dudecudecude0SvGamhu0x0TY4ZVVwN00q4B0eGsiVZd6uHlC
pqAqxx7Yo8mu4O+6jUaz0u+6p+f65PVXb0DF9XJqWTemO8.VzcdqY2FtLSg7
9uyA1Hls8dfuLgEHLZEzSXeBsdRlyQJCvZYF1X2UlAhVq6ojt4C71hDd7+9u
3.PPjq6EAuPOba3EBIqHhOh.keI6whpJ4k.1mrVdu44yMFXuO48AewIWE2hm
uL.WXoMqEfSYx5eJjCpe5efV.3tVj..1hkn4AKES41nxPtAxeBfJ8IbUZ+z0
vzKQ3q2bxCCVd8jnKSOozCNIdgAx89BApe.RPvoVOI5Fdt6lr8RC+B9xkguX
0lJhvk6pH.bT5zlshE2G9V3Eb0tHV7eWOZAsA8yZ0IvWaJLAXOkBSraotwoP
goG4FVi40YodfPiJrEPtLK0eKquPYk9WbbuFXdwhXByUoh+PHk.uWktiIDk4
7eSXQk1+nqtFABco0Hb5YMq6AutnrX9PNcEEnPcm8J0Aj5G7o52P6i1zU.jZ
c5vLmVPdsU8gP71RLVggcHwfHVU9ZNK3YZxDHaSm.4pimrUxSbpNXMogHycl
N3MhjTALUoOks4OkAbbW3FUWnoPHxqnQlPV4JruEW52..I2sKWCld09WNmBF
1Oxma4BqoL4JKcMaBNIjF11bvfOkYVEBOF0MyZlUgFYlmMeRUVSYJoJ24TpR
41u8Zg.8oEBvzcqFFV1eCaZorbiTaoFxvubVSEOqG6b9bOa2dZC3N6oInzgJ
6xJM2IMqzbGwxHfWyIkVGa3+eQL4ruN2EmqNFQDJP1jMYDBunejhom6d8adW
9gWsDiI3W23u9KiMKNzYvft1RfIipwg5d0H8NyJCYvz6YDgPjUDLfPwdX.1k
JGQT2VrLzUkkAn26Da2SLi6Ilw8Dy3mmmcOb7aBKjrBS33phXkm2rsUi3kdW
aDpsx7aTR.qUMv1lqRyxLYyjUnw5wF0CppbWFnxb48gBfUHpQokYpbTxyuqL
ClE3YwocTlvxNx7Ytw2zYxw.u7fAC7DpkbcAGq4ax9AdQr8HSvg3Eu3IufUw
AsHT4xCXqDcJC7IidYA9j9UVbOw1FBO5D5AB1VG6wdu1OWLxy2PTXVde1lC.
rVVx5oqOtdJKzAPPm1uRN18n2+Rfbke8TSP4byN2JjGM+IUdtGpNwK9oe1rU
vjdSO4M949mxWjjWGh3Rqiq.++j+ZY0eN6Em+3e3e36+2xDlG+8oIaDlzj78
+zmiW+8+YE2J66+W0au12+unNjN+gpCoiPmz2Kaj4u04m9yN6B+TvFGgsvYq
9n+GNNyT8NeuX1otnPIy5Qciqt5Gn5W0MlkKKzcxiPx6TYbg4YBpkMVmjlpI
lh5yQiIBaEl2j7QsjmzDiDS+nDw3ULaIR.LOm+R4wQ3TEXR6qjmOFw6z7aJc
mebd+jihhydIbaor3Iui+5A+xVbtZ4+rv0OzCoVqhjHHu0uO6ASjj4WkbphI
RrrWl2+6uFVBfmhTY6CzF419spdj4GhkaUq18e7I2azgzRKYK3A8ot554A7l
fHmiyzLVuSzAp.6RVoJcBLOnGkeYt81vBuFqDBmdW9ENBIk29U85DEWuSCkL
FU.OUoIhx4xPnBIBC.HJEpLtLnpLOWFCf43gNpJ3NCKvi09+FUNBqS3ssU5D
362dQNPu1jCSG.AjtH6SjK3cOzA2Ccv8PGLYs6Hftrswoq..glQbs.DLks9H
x8Nez2bQc9H457pyXrtbjpSgQjK8dqO5dqO5dqOpNa8Fp0GMPuI3zBQb2gy0
SXi+IIwL.gVQXTOJo7KAcUlh6WMtEpxak6n27cuj7DGY0U66WKEFGFgY5SZm
teFvzf3kUL8c+pquDYMLo2AbcTotLTheyCRkMmL8dAnZtAkw++X+J6XqJqr6
GHKUIGxN1ehtB8jLzwxPNf.eMzSxFP6nLCMbvVHUpqCEfhjg20ftxIWgX+cN
C7xClGhGIb5oCdDCIygbDqpYi.sBMIChlO1QTTLpL8VWTskmWceJFopr5iWu
uVAPLgyXHtWUh5i5xYrqtfqpDsMhl9hAOzZic85oVedqY3Q0kWa834V+duYm
Gb84EWKO4rzat9RdlN6ks85TmkN1YqycV4f2Hbxa.G8r2YOKb3yJm9rxwOKb
9yNG.sxIPKcDzVmAGqCgC3TnUNFNrygC6f3vNINnih84rX2NL1iSiV63X2NO
ZRglo0dL96rxTUylqNU8R2Ascsa6Wsqm5NrMrCYG6.FHzxHg1FJL2LMqadZ8
lKQ8dLcOmdv63YE3u5YEV2h.uPVwP8r2wi8vu9mFXWu88rQ9qRO9c7Ll1852
uZ0P0au.974KW6dB74vibuo4QFc+zvrGy8N3NScjyo+AOrGnV5EZ6SUAaPd.
51lGXtWC2O7Ot9M7Dh9ja5Y.l5Kw8CrC0ahmNnrUKJtyyJTy.HbNsp3Nxv3E
fCYrMFOfpmw0JiOC85bKLKZ.Vw3rNeTrh1w3vXqN1LWpqV0aG7Jaa8w8chUM
09iOaorKl9M2Vj6i9M0ZjWP5mLZ7mYM8exO5zvUZSaT1Tbcun3uLbaU1TF2a
dPdqGmegMsDUQDollskMN+n6w4+db9uGm+6w4+db9uGm+6w4+db9uGm+6w4+
db9uGm+6w4+db9uGm+6w4+db9uGm+6w4+db9uGm+6w4+0db9MsLS2mEB8oto
aEViMR8xZATuQqu+X0e5g5ouETN8AYVu0DgxFWpnaXFhFGN2ygaZbGpg5.Xe
GbPq.ulmRYiJ5ahocof4DjskhEipU5PkhTgHpotBq44mK8gFA8AZqvaxoO3H
nO7BPepilyn3vvYmBQijBAyMEpk6sh9HKAOdj32RPePamCywKDEBrlBQCRg0
tXciorwPp+1kVQCF1vISFMcb.LwEO00QA9oCUdYftEsDL4AcjiwfZEXFDaxJ
vLc24lfybGqpDADCyVUXmKuCV0cE145z5ptlnUese5vXwUk6D4QaUcTlEaSU
y03AqkzEnqKv8mF.YKaahdKciSMWnux0wlodXY2LpnJVfgbBmW14Pja0AhZw
bOjE8vyh+QSQcIMxXKOtE5DdQEQarrsrzEdhroy6AsDN6rAG5cK2ATC7e+k0
WCEnGTU4JE+qqmKtpP1fL0kMtLw09fYO3sbejLMXeP7FmrlK7L99LumVZFSf
qvTO.iUh1vGcXSWke67ZEpykLrvSeo90qCxZRNl3McHK9FVr8u2AbU.UDArx
Cy8.3ZhqVo7ELjxgNwUxMLt9hvFoD4l+dcPWgopTNmAK67XblkhrW5RadzkF
j6ySGgxVwaU1CHbc9uCtNqxYRuqGY5zNvtgkhs2nVfK1Sge2BV0Rge8aUq.3
5FOmEqZonWyV0Bb4tcaNvbZVKE+a.yZ8H7tUuNgl0RIu1MqsBYmYyZozWwl0
VBpKfYsT1sMtJTaRtJqrYLzyDvkhsaiR76Ac429NMvuRxtKlSCL2ei3zvQiH
lYuFXKtx291z.YO1aSXlpGAMH.RUBqDW1JFzCUge.VWE3Y61Q.x7DY69fAcs
H1Nff.Y59XrQbfcA3.dwwgpJwrcPASWwpMhDd3K.IfKNRT03JsCIf.9ptjIz
8btyCIvdKNRjrcqrUvs4GF.BnX8tTyLXp.+BP.5xOqHMvOOvw2Qsp+yo96bR
15r4vNY5L+A+nCMNQOM2jU7.xMpVGCjCau9u9fjPOOPa4UkHOT84N5l52.gN
EpUZhXsCeB8BzmhWdsHRHPcnrkBL6NDkGlEEtIH8b2SdHUe.M7nqXm5.I6B1
T9lA+91dS4YEsa4afnWBIe8G8RgbTmv4rD7RH80bvKYdpTWZwCcIj8afPWR0
qYN2QtDxesG4xRfclCbI5079wWfoKPbKQu92N9RvcwBrFh8aj.qUt.2LGVMz
hGcXqxbYcqAEhVQu9Itbqy7Vi0jviN6ksIAhaedstYRqANX0MRRM.QyhaAsN
Kf8lsGDwZ2sBMkUBgc3yHBZUCnstDVGQatRnBO2nSgujWerALZrouPuVAPn4
FfJy.9qOB4NZDpyfzOIG0B6lcoU5b0QGn2nQm9BX8bq0NKHpYwb4LNp..c9T
Z9TOcwVv8je7ysZRdMNn.7a5j86Ri5SkgIKVJq8p9fX.AnN8WdNi5CC7agDV
yc0BjtZL3q9zUyc0BjrZLzq4jUSAoKPHeX3W4opVwBZKRlpwHu9yTMsf6xkm
Z7eiDNsRKGl6rTy6FVD1Pm197UPfHq7b4PFuVGi..X1XTFoWnsu1uci8Z+ps
aQUug10Doinuop.RMdPqp+gWqZCWGk9CoG7m7CWmDoapDB3VUkBk+kawmNVF
P5UZYzzK0R50ib6Pu.anWbqeXM50USpDWfGE7XE423mmjtQ2uQ.K7HANVj2z
fvcZFDDaEev2FhOXaoWTezamhOSCQitJ5TlYhFZKRytIjLjk1B6nW5YoXY5H
ZfsDc+fr6b.xbKoWCbiECjY1JY.8tIjjkF6aE8xv2NzqMBExXaLvLOKVHDrv
CBvs6p4xhjTypq2YoNw0f5jZ+xcga1KbHIuvhaJfoO+2dvUDBmxKiTl9rd50
0EmJoQ1XLKCLFLX5n2qlwAy.8ZqCGH3sg1IasvkN7RVyB8ZqEtLzsA9ZqwsL
3sA9BuJVCLezKvV78Fw5EWamuwtcnWaVuf1qeCMH0425EqGD3aWqWn1ZmtAa
0VhYlTacdyfA8KgyaTa8qfhridmX+1n1ZYDkdSnIgZqkQTxsA9RtdVxMKzq0
VFciHOXskQtickkoidA1Ru2.5yfV5sKy854sK.vH5h3qI2c8nrtt3TBBVux+
x6tKEdUT5LazK15Hdxuch3I15HHRtI7wQQuHaDh42DqDonWaz7.sIr8kBESM
HaqLA6JpsDBJR9HvJnGm.gkYNiLujbc0wFr8EM61AbQwEJblvEfKgqWEwVfw
cQAFHYl.FF0a0XfEvxBKn4RdwqqqYFVPSBrfrcMGD3lv5bj0wcmb6Pu1XHBB
ag2DsWyY9l.Y8HAxtcCVExZmmuM1jVj0ps32Nlr.uh5TlOh1ZEK7aBICn0an
G6rTrLcDMvVhd4iUgxFI3ESuiypANmtpqHUPY7UyZfJfjqxbY2YkiY8pTKef
Uf1pfGPtMlQfrM5c7q2LBjqtTLZZFAv0siqMkHf0obzMfDF55sy4yA8BrUiS
Y3xlFpvVhnSZ334bHK+yQccPGNdZPNrIL4mx8yOj8t+TP7giG2Bwadq+gnby
T9SOuMLJphQ8Ms9EeyCkm2iB1Y81HZCFLzCC.bICFAPLHU8IwGHjSasp56CT
diXB1SdTeDehBYXh5SbHhfTRKFtU3w2ozxC0ax0i6h0epJbqMuU+3miTiDHy
s9gNQvdSS1mjVxaDOBuF22AUAPcSXQYGv0XOS8wZBKoheohscRGx7AU4vr9y
vjvVES8e9vZeaYj0OaPBgq+k8AwN+jeblyOErK7ojnMMOaNYAQAqkC3FrPFz
k5oXg.JCpgetqK.2VGq7fJot22EF+gfzrfJVBxCBTrDXEeEx3XTaVxnj9p3.
8H.NBgglhf7JAONykv45OYjnOUDjRb0PFU9Gl9S5m1rHAVCN8WKKnJMvDjjI
n.BbIcJmRJ+t1LiF2omKFvT2J2ifYpAFGC8XJXhP6VSOlQ.H0uB5gD2rVV.H
DsZ+REhg6NklYbANpYFt.NW+IA4CgsV3XBlz8dc0p8e+kv5Ew29m7YzCNSaG
wDPu67+DUdZCsjT6bdauVTYPxROGoZxNqXJWuRUm.NBwnY.bNolkYMmTHHKV
CB5UeNiTUFl.lK9Zqye6TvauNJgqoJsTMX6OMfpTFWtp+iF+j4a8qJ6.ZOSc
7RDmVglFgzrh+WyVKANg7lCIY8ob9GhNDTu8h2OkaZoL.ih0quVMH7jeEXFG
DoIeL9hFEGocRkNEzLOJ98e1+xFDtPgIAZ09LDBpmiCA..Z9FD+XZPvENJTb
Aj7OZSdkVANeCf+ifnnjOZ+Hn9ol+mUmadhmqKev0oEldwzZRAbcLZIBtGYV
FnG18TP5OJ793hXTxoGtJwMhvbChZz.pqceRGDoZCBkiB68pdbzeWVRSwTJx
qX1EqvFbAuy65MOq3YT9.dHy+CAadmP7T3d367yySCe5PtN7C0FjOTVtTKVp
r5k7vlvmCxxa9cOGk7jejJFJAoU3Z0ky8eVWNLd3aOtXp5u07E06rVE0PSC8
0PJZzqmJ+tFUOi+XPzGBxCW667+L3PoAVlKgFLtvgNgufh+xixkNlvfdq777
H..Cn9BnpHk.XG4klK4gGsPqamEJ9klZTEMTA3UZ5hgZlwUB7JKOmWHBBbIq
n.fvWPLiRnPSHHFMkHXUgSdtQPU467xfONErhPHx52hKBXD7zkQqIC7nKD3U
VcOuL7inqU2sk3XSJnglXPqci0wbIrxcvodPrZ6Q.xZzX0PI6Xc9w0H5.K+g
JRnoEG1ELsGBeNNQPpQgqeesh3TGUYn5TlttSUyLNBxLW.vOhMoBIm7fz2ED
6+TTiAVUoHBW9Mmr9cWtOarH0JIvpEemNNK.PHCutzW+rVDuCVq633sbvWO7
VJlHT4ScQtPFBidsxZwl4rbuWsSZQ5RJ3qQlIqCUvUsB1ulll1nt7UyZNGou
MGR60bMgAEPWFGJb4iUXvFlyU6NDgh8vBAV05vzVEnyNr+ntROPYA38jZRXc
5IH8Tm01FFEHiGbgyZkUKwG72uu1W2vIVAd7WznO+wpuJLV+UUwL8gzfODVd
+G+V+z0xcOYsBpjz9mnGqigOrKQHsFeHrVtlV495CJdfzHur895cT+gZgL8g
5Ugdsn.Pa6qrdjHkBg0lAIEhhRV+9fM0IuGR1GDGFuW1qFiyq1P9pKW3X+65
nHE135aKnQiWzbkZ7gmSC2jDKIhF7B4WWK5NZGJI0GLpeQr+dC2r1c8NtXlJ
q.dxOUxpJl2Aq78NIIp4kptunfs4EWdeXb7InXdx9tuXZ3yuzy89Th3h656Y
qtR16NDqu56DRE4uSFZhl+N+nnhopMe7exONbmetv+.MK.5VcQstmWxVmlDE
0X7puxGLbkMBo70ApdZodeApwuGQXPNFmiFo1wIe0gmJlE+t7fc6ijsRzF+.
wnqqrA4x6cmezOLWlST6xbxSDZ6xcBhSN77KNa7y8O2F3Ihnkl4PUwH0Eb98
rSvx2ZfARv4kj8NpYqCLx4jx1clP8OhC3HhmxdNN876wq.xhCB9w9Qe9WCDC
.AX3m636nlpc1BHZ6Agx1nbCXx6RjUvKciJce39.4rogJ+wd3h19gxJPBa5Z
Zic29hlqxFMRX7yJjKEzjVFi3hryVorZ1snSrqmiMA3Ef9vsRWUC5phPJAJm
hHrjrViI3x6pZcC.vQ2Q0l7lTjMnEEOcfUlvoIg8bcAYdWGDat5ZQq8iBbdq
vZZgYMx+GX0P0TbXQCFg4shfbYzxtN.WldVtzIS4U2yEoyj5bmsByVG.dHEl
t6QWwQHD.UJ6gEKvMcclEfGyptm0IdHdZh9zgmhc4s3I2tIuF6vywt8dbXOH
6xKxSyGxg7l7DOJQEsLCsHLlqas7PuSSeHSNUZgik13b4fNXZoSl83nocNaN
fCmC5z4fNdNfymC6.5fNgZgin13L5XbHsGmRGzwz9cNseGT62I0dcTsKmUM6
vZGNsZkiqlcd8TMHmplt00GRc8I9ojmr4oSupoE0X5vHIlsSXTOZUeeBHzDX
rS5zulaKzdepFbxCse3F7XoY5F1XotKEKa6vWSvLOwQ1is990RwugwTlttMP
THKCXxe29clq8V9byCQaSS1UqUBmYMLoaPddrKGk327fzuOQlcx4N5dape7F
mp9.61zf+5gf30e1ILVHtsKbSn9GDEtWFQpCYRUfNo9wOGr5zWPCeHQCi7Pt
tsCo2GesbJlcIXOcww9AzG1pmB08NUoshkWCalbUfvdgO7xCeFZJS8CfdnRm
AjYYpvkoh+PrBMIChl80+kZo97VW3rk+U83BpZ+z3zR7jp1BnU..h6Ap0jqL
6w0UWvEvw8CtlFSM8BqM10q2X84QlgGUWdl0i2Y86glcdo0mmZs7VyRO1Nwq
Mcm3C3h0NsUDZBCqf1siaV57lsNvYkSbivQtAblydG5rvoNqbryJm6rvAO6b
xyJG8rzYOac3arN8MfieV472vN.NrSfC6H3fNC1mCgc6TXONFZsygc6fnIEZ
lV6w3uyJiSMaf5QqQODGlWyjz3j7.028nielyGChhj+qzHUgjxyNg4YNhEP1
eH2rkpCZsZ2Vrpzugn542rtrXcXqVGxx0ALPnkQBsMTXtYZq0LsfMUNLrW7Y
I6ZPzGZG5yqLlyiPXtnR6LXO5v8LsOkmGq.+UOq3TufONQ55xJzyC7nWOrG9
0+zfBOkSC7yRhO5s70B4AP7JHByo02XC.VVk.nTHr7K4RaxfWOFCfgesngxo
9pHYWM9hrk0eJegyWwQLBAWyuSp2JFk.P08c5Zwibuo4QFc+zvrG4tfJDnev
NfGSJScWzoy.ndc484vdfZoWnsyXA1f7.zsMOPFD.mQB+dXYoFpofNls.nO4
ldFvooNwv.qdIVyIMwzBkbvfPoI8Q0SrhwYGR6TuXA3PmVeGrQ0iGeE9TCRG
EGaH85bKLKZ.Vw3rNeTrh1w3nUmguatjoB6VO7p1E5MdqR8Vc2rMUIFK6.OW
EorKl9a2ukFh94vaJ5mLZ7mYM8exO5zvUNzgkuq35dQweo+CSugvz7scOHuw
iyuvKO41lfqqXy7VzOWg4GcOL+2Cy+8v7eOL+2Cy+8v7eOL+2Cy+8v7Oag4m
eOL+2Cy+8v7eOL+2Cy+8v7eOL+2Cy+8v7eOL+2Cy+8v7eOL+KSX9MsLS2GEB
8wroaEVW0H02eb5O8D7z2hIm9fLqyZhPXiKSzMDC01BYMF2yIYZbmmg5.Xem
RPq.ulGBYiJ4ahocob4DjskREipT5p6lo6U8mEO+boOzHnOPakcSN8AGA8gW
.5ScpbFEGFN6THZjTHXtoPsbuUzGYI3wiD+VB5CZ6bXNdgnPf0THZPJr1Eaz
bxrvHp+1kVvBF1nISFLUu68b409pVEB1tCwJqXadfqfPtKmWlPCX4R4X8FdS
6sXw.6sXwb5IB0Xga8zFPQWG399peq5Gd49j6tvkcseMx44zjC6c.t1xBfxx
iqG9XkhRVkdcsnZ8LRFPiZ45rTawFr1OUDFT6p8StPPO09IxjUdiHyRseZDy
cK.ha24trW6ScK4.KvTW9WeybYT9hLwEdiMws.Gtcm2hdkOusjAr.SawK9z1
Spe7cl+OtLYMAh3ovCpMnRW0.2ktD3Fk3u4I+3mqewdyCxtqlmH01bi.PONG
xUEVeqfldUbonsNEXvmR1lyEzoCY6qR5tcatR+PlCA.EXziM1Crxlmjv2NwS
rnVKIaM0N6B1D5GK9AO+tp5tDv0Qsi1hKJtT11cM+lNqTu3KmshgdqvddTDh
w8zsFAPgf+TrfD16b3oyjBhTKUPTVjQIjUXNVrXdoRTOgVC9zUjQ6wmE24Ag
LTAl5AffH9J.WHGWkELxFdqKBXADQFbcltJ7RMgL2kVE73Kwukn2bWgeEO6Y
wbwmNjmmDOXrA3ppLtX9TqhHMTe9CvSz5NddiwHvkPlRNIbndefvqBUe1iVn
eGWZpsbga9JxDID4s3l48VYEbzVzAAKZMD0zPgtX+w1Jr6JuaHht3sA.gWQN
C4pfPhQgCbpdFHoTMjDhltljf2x2jDfC1yHP51eDDiJzNUqyRY0xamI13tzS
txcdZXmLQHsSlD21StvfK0ISs+Lx7en6oXb5Ruru+50GNIAK6SQjr0z0ZVFw
aZUDw5NRZn4SbZqySV1gVpltUGjDtw.GdwLjMRTZz5wALOfQVZYqC+Zni2PX
Fk1o1arM9saEhYybQ17XQf8Agrv95a2fPRouxiBYIGXAhBIkr3ggze29r7jc
Ye4hhJWoCR.hRoHwEWyCIl2kBhEsYmGGZMD.aoCRWesLF+26n5UZYAN4pTp3
YGf1M7KB6KiPrKusAN.h6jY+GFdNfMYd.6Zg+7KWEzU.js7bkcwg+HJLqaoY
B5FVZVVq.xdII+Jo2..jk2C3QgWlvXJ5zZwI08ZE92iMl0Von5QH2TRYUC3a
kLVxH+zLe15HSrjii5IhUuL9QSETKoBO7TREXKoB7IIm60kJfVREReYlNrv0
VpfLkTwsfvImdKvPTTAvVp.LUTgsPwDhDLaIBCZURR2nKORfElzvs3lUjl6z
PZjSSL3tHM3Tx6HiQJdRoBqDimxkaX1tbSoBnIgJn1hEzIkJrc4FvTpYwVE8
.vDRDDjsTwTRD1JZNgz.11U+InojJr1nPuojJf2DXgkDwTRCP3sfgo1RDS45
GpNvqk5qlR6iUpjsYMcCrtI1nGqIM.sa6wlFSEA1JB4Mk5U..fsxPdrIkNbO
8b+0kYHSNUXiQxjImJrZB0jSEVIY3Ns7DqIiojJbs01PZ2hFGCfmphV1QD7N
FZyCaBS9IU4P8c+of3CGiiXYAd0Lw+zyaCihVmDkzYWWuL5kOn+UM5f4k2mb
S6fdX.fKFOqP.DCRUeR7AB4zivo99.k2Hlf8bgxeNlBYXh5SbHhfjex0vsBO
9NcAd52jqGWVswjeR7UfV6f327fe7yEkHV1I8e58oI6SRqp2tqPdMtuC4IOm
5uIrnHB3Z7rY9XM4kTwuzTgHUuKr0eFlj2pXpuWues+6x5arsLzZrDPw9nd7
upKoMAzqN37+Pzgf5o1e+zq+ZYZd2PPBAXTLSxJoURFdxuBLiChzjOFeQihi
zNQLG.6oDMm4Qwu+y9W1fvE5Qvp4WLlrCwJ+DGJLD.MeCheLMH3BGEJtfrXs
qzn.nbpbnLWCf+ifnnjOZ+Hn9997ypc9g345xardhgQIGR.JFDiC3.kpShf6
QlkA5gcOEj9iIQatHFkb5gqRbi3AAD0nATWc9jNHR0pakiB6W9bbz+ieq40N
oXJE4UL6hwzyyD7Nuq27rhmQ4CXnJdPwfryJcfopbv.U3fSqtA5UOU+slund
m01HXMMzyF.W+vq0tpHYNW47VQvfFYjJkqRhdHQrHCQ8MsyODyGnMSGlMC68
8HGhMN..FyOHWjNqHo.Uhp2Je+MuizCjm+lNLh8kcUW9.sYRFWu.nF3m1y3W
XlIdkQFW6Du1VnvHLfLyTgWO4VY132yHEyKNlG.VQpzvQBkBLi4QssC05YiX
iSCMYpGs6cRhyBx2DH6WGg8JiiKxCCjdj2LGx87ttrYyScqSbG6SJkJF6nun
XpenTtfgg9ehg9dh49cR+84DS82jpkJFnelzUeLA.vp7TWX6QsktL1.SFnwk
LTCKo2FUhEMnjNZLIC2PR5oQjzaCHo2FOROMbj9azH81fQFnwhLTCEw1FIRG
MPjdabHc2vP5tQgzcCBYbVbzpQfXnAfLXi+ncC+XrokV1ZgHxWFJsdgJWQv5
CPEPWHDAmVIDs6nyiQyRd5Z03BnK0I51OwENrlmS2z1nDwyt9qR7hB2I9pS6
UMlOcSH84CT0+GHiMgr2ljtyW8nnCkl18dPKP7ahyg4EhkvaBrD69J.KKrJd
wkKIuFvR3MAVBX2DXoUGIcrtZ0w.dq.PgaJrxCsB3whVkCGMQGIcD9UfHm7H
oICVmtxgsbSeguBvRrmBDo3kEKgnaTrraHCwHKKjAdMr5AsnqSgW1UO7dMfk
t2FX4sg01sawWGitVbRXVfi.sarK8i+HP4wn5B7FaExiw4rxdzEs5DPcVN2w
7V5SOVen2GRhNrKvYS31sAx8U4DbZznHSGLMinHvkeAvH6VFFeKx8hfMtmZ8
GLAsBRHtTRsyNJ7BPMB7lF0vWGTiiuxnF4lF0HWETi.nZTq7b1SnWHpQuoQM
50A0vdWYTieSiZrqCpwcuxn1M8hpWnZMVQDyMtX.97AM7Msn1EtBpL.LctVv
k.Z2z1c.uTPSUy+LuTvk.Z2zKE.tNflwUBt.PCftkAsKUkFQgYlVGPOw8Lwr
E2RMq1qPlNCcvTPakSW1VG1TAftcieL+OwFdlK3Vl5ATtXOAv.FzAL7Vcki5
snYCI16GGL3zAWOEPfM.DHhRVAvoVCDOUcPrfcT4CaHkn+4MxDSLxCBzY7bY
9aCKxjaPe.W8MuPlLNmRYcc3CNMER4UGABNykv45OwwHCoPZ6isvLoBLKJ4i
NAweHHRHq2Y4WGNz1nq2hMgwcxre0kWqsYSTREHzYMCXdJ.g8gOa8yxuX7QJ
2KwGNWiOkkQcH9BwG7hiOuYsXFhipYl9m+cN+qoA6dJx+ye2P5JX5cQDiVQv
HNurvWgESR.X3HW6rdtl0gxBvxiT5xiddhSrLN1Qhkz23nUp2kTEZnj0QYjA
y0cE8zcoko1AHYaZ8L7CEs7XUPjXX5DDl+RPpiLZ9NIoNxIgqCy+rylf8Awa
j03tjXGkJ5yDBgLc5WabmtK191yCDa19GVDPbSfXln.7xDBZBbpglLmsIxSx
h.b2Dr1+ymqhMnmRwFSlu.bp.vZLOFc9Z1PzEG9j4FqfPkyX8+fr2krMxW7q
233mm6u98Ym8hk5ijf.sVQnHHprpzIOMYdT8FjcVP1Mvz10urKLW.YogO+by
pS6nVtTCCDW7JnGC4BKq2mvxcM77PHHaoqmw4Nvg5UMLUIgDIz53Awt3pVhw
QGwufZVXeUuX.b4QGvPnSQKGe9QmEWzIUPtA5CcQ0Bg1gVPOzJuSM6D.vWZo
wdvdRCYoK55O6KfL3fRUPUbUTwyokgTD7jVjlmmb+VSS1gBbjAaxKl1cVgwn
mUxabFJ0Kqn5n.pEXcdSoce961GEleP3mwabWIWOFr56Z3gQX7lfOMmKzMZJ
ryk+FeMCF6oYSBtUKWmJp13nKtE9cqEoVwOTllQ0.5OJ7MHL1Y8gTYJdLnIG
C5HftCHRVAk9ATUk1EZJ83muW.nk2K.+mxRhjKczQNEMFCyvXsgYDd6HdSu.
SWgKdil3W24u24sB2WVIC7fkc5VkHivSaJyk3gpIx..SWWCp6.YLSU+bc+cX
vSRDrvKG1J1oynrpaZhsql8eZ06evx3OhMKK416TRYE9wYvFaF.WbHyV455A
oRmePWPtls38GvMAQN.xfKuol5vjsDvSin.FMocgUBXwkLdIbu3mIMfHMXWx
GBb9C+9yNzLEg1BvcWIzUy3kHoqL7fnKPYs2h2Ufh2Ks9Zqy1KZ+aqZMdDxJ
Nxqp0r3B7jBf5FwzEX3ukJjfza4NwfrNp7EUS5E5RtrlcgdlsQuQ4Wb++pXc
ft63mmCHilUPFiEvr7utLo5hsOwnS+5DveJwYvMLNuNMIK6KNvKLWSKBOoZy
raoX0850NhF.puk6uzpsd3xDi0mlXi1Oh7lT6.n2xHaRbfJnCfqgtXiNu3QV
QtN8sx9QY5MLJ+28kqA7RnRSvZkYXnIVGLDdCir+O9hykl+03xiUq2J1oaOD
lL0fK9FFbC17bvUQx0nZWqv1KWw.jeCaOb9KoAYunLHFbULG1nTL.Quz1V9f
1C6szFpodp1YpkrKKWDBDq1IhKAYPcGmD2t1uBCwyY12RheLHNHUteWEIMie
UZy3eLwY9fezg.m2nLOKXiySeVHEuK66NljHgwh2gLwZTioU+R7uD+Ook4c9
GKta8nc2AY1j7o0AxDhHdii3cF6jFjeHM14o.YRE9Tv1jz.w+HebEgmW9ie1
OL9Mh2wiNhw12Id9kIZw+nirfTUdeEz+Ze4y6z624Mh+ufvE2sL8eD2ZVP7l
rSF6uQsaoeWiTG5MG+zSA4eLPP0tqTi.4V1Hddp.jKdflhadwH6iuDt9Ew2W
lIHNeLLJpIUJouM+f74UDRm+QAztWLHK9O2lF7WODDu9yNqOjmrcqy9jv3b0
s8G+0t24H1EYRMSkkl0lLQJpeUtmWdpeKG3B81kWH5VJgoYhErfSyarwaGBq
nZcJPOWNAiKy5Ut3KsZ60oVs85OZwVseVqYRmqdSqpfs4m9blSoxD05mqbJl
sIrHzoRM.Q74BVDT9Y0Db0L4qA2xX3PwXvztK+1FUjSK46tU+U+Yr9xcv5cl
lc4FP0oAkX8eYkR0EWKQeXWRJfcCqx5sWES2wtfU7SgL6x1mKwrIOxMreQ94
Iad5KWivpZLyyzEW0oDbukWo8J.tEhtKD3dK2W2EVgdUfViFofXSMzd0NQ6K
aSv1PyHZW3FkI6EjBjn8XmwVg4LLrLEBUUxbBniqMm8DM6Grtyc6y05FZmGY
t6jbVSZHlkhHxpxFhRfdjRCPkMFBDuiqMq7A5X3Ccz17fKKogaOU8kvMaZVz
uMvcJljhAB8jbOBxqV33DNKqrrp80lUQQag.HdHQwhAKhSVwEpjHUlJhjIYi
aGWaVEEssSzBcOO9cwrQrzrNJGWE8U4rQFtqqMq7ah0Jr8lcM1V1oBmzlXI2
xVGYah0d2rOQpg55pWJmtB3IzC3UKig7PfgtFfHTyqh8VoDE6wRIQCWaBwMa
XdzqHvQDVYpNL3hE3XByPKGiX414qSqQCWaBA.r8c6S6G+SF0ZklP5XI2tYW
XccwGK7Pfv4b2xZ4frcVg.jUPyWbBQ.nsK7csDX0MjIrLNTHJr4RjEqcz9ZS
D.vFWC39pnoCopKAL.XEiQAbTwXTNgEBAcbsIZ7Ss02EZQ+bdZnBq6ErdV5K
f7n6iIb.zqlzEDg0mI89tH0k19zCiPH8oXo00lSaCrFlP341aN6Is41+FB37
8yzPCxrnQEJK3MtxH8Lvj8BwQtXBcqjtG5BG5ZTWCYKRgKsFt1DM8zVykY2D
qpSrsC0CuIHWr6XBU1ToAFaqB3Ami.rccPtJaH4PY2+jAqb8mTsJX6KMQCdD
eLr.3TQELK85Be83A.lxVDJgH7rBHL6nDokvOoiKMUiexXBi5jwEf1FotIb1
HBXoNL90yrTO2hrSV1Fq8nTXshLGtrYd05ZSE.3NBtP+.f0yEfZ..PwxnEvq
1pLO3i8bsoB.tZ5imi0vPVJtZvVLaMwZRnaHeLd+LYTAcTgiDLkjAvZxXpj7
g1ZJhLY7mNv.MFORmLp.NFeW.V3HBwitBhPdXdsU5KrBvv0lSuasdvZXV6D6
cKDLlMHZpjF.diROwTMAEvuITWAXiwbwIiJfKP.D45Cx+MQ.DA1N0vvlrNwJ
Trlzvn4VghoMVrmU4lJKO.ValMa9QHaYdvwIWU.kkM98GjM26MuS2Hyemedd
Z3SGx04AUMZbbMb6miRdxOpH6rqRpLC8i6u8Hwo9aMxodm0xvMMMzSlsU6.u
6uaeVdxtpbaq67Zy7A.jqKbCb2Ux3hK71C5Iz2HUoz5nAaNIt66bW2rbMXrG
t1QtrYHO1tN.1d+263KHuOmE3jqDvdVrXgpPEcVHHxyUGbVvJrmGiP3DOjpZ
gztq7YNe.6ohEYrKfaEhQtdHV4LgjzyTHqDhvnUHDxUdhAj65otpOcN3STXl
Yopp5s7jIU8Qg1CY2S7K8Ld8jkQZ.vCwwLJgJGqxiGzIyuDqTuBPYdtLF.yw
JYFObMv34zvMM7VFwnXlxQYjrz2ikeR8WcAfzt.vSpmJF+fBjerCgwJYwmNH
O.CUhBEyndXhEI0u0uTMAVFv3yRzDTzdvK5ItFp1X1pzqB2ZbhbM1JulaUdY
w96ydII+BWh.iOUDld1yf6dgAp6XPIXMTR8zZlTyZP6TSQJft16IRC6G6KK4
p779jMyrE+55+pca+pQWzqlYwaVQdUaUQqD7PmfCPccpCIOfLbD.5w4Psld0
Uz1gc1jIEZAcRcOZ774+lbs3MU5M5E8lHHadSPybc2Y3Ua9MCtLQcrsBbWJ7
hsYLVRNW1axFgyRHe5UTzLyFtZLNqd0SgvJhMh49KvqFz0bzKCvQ1HUoD8PW
nTEBXqhHvk9lrgSNMnoMf4jHBYsDzU2rBHwlorvqfdIPiMjnu2D3ZiuV8pOA
ItRxT.5bo2GPrcUSv03MAr4MAuz2Dzh2D26Zfd1nIkQuVuI3Py14Wq2DZn2j
a6Wk1OI+86+PPZVwOW8VDNS9WzQaf+n5+LLV+epb85gzfODV960eiepvYwbg
mhGR09R9IptldoZ1eowGBKlhoB95CY4eN5TeyN5FprV37S494Gxd2eJH9f1K
PwvZq+gn7lXwSOuMLJpJ1H0CaaoOlE61RYDXaDGEnGV32uJNJ.DCp5qgHwGT
aM5wiGq5d.Us.QRYmODW0LBwbHhfZDAlhaCd7cIytA0av0i6h0eRmvC021Gy
sBQCMyvpe+g7jmS82DVT5jbaDZ4GKDkjkVBErWKfzOrS.ngk2ScQuJlw+7g0
98w.pG.Agj1+x9fXmexONy4mB1E9TRzlit1q6+XhAPCV.C5R8Tr..kA0PH20
UFSqZnhJDFp66cgwRo0plWJrpgTBq3Kv1MDRqjTpPwNDVrjA1Tbw1NV4IhKT
cFvH9f7OL8mzOoIQZo.l7WuVbglAaTBrpAKtjljSQjeWS.twc44hAL0sw8HX
lZ.vwPOlBJHzp6qY6EkQ.H0u.5g3d5OQ.BQjluLgnztSoSFWfSZf1Ev45OIH
YHrVhDcwSHdupvBm9uKU202DCiIiFnQxXcwzxN+OQkwArGxny4Mcssylj.zx
rG67qEh+cx8OY.KX2WwAbsRb2fHuPfRnWF5UWlUpd.S.Wa9vtfrL+mCtt7hy
WoUM0OkpOZ+odT+v3xUzdz3mZea2jqw0b1gcbw5M0IKjtT7rZ1CHFyHuqojk
NN9+PzgfxVIjYpxjZafbShTqaTQfdE6azUm.SS9X7novizEoZtIZhnve+m8G
OA5BEKcoU4wPHndtCD..nqOA9ioAAmAEpPOj7OZSnjVab8It+i.YiMsepq9l
z7ypsog345x6ccEwR6LslE.Wsclh6gTYhy0Y.bX2SAo+nvRzQCtRQQWE6mHV
5innTPcsYWEBLUaPgjB62SmwQalrthJaT1dERwrBaxD3s24KOqcgTswixQT1
9hVFsZ+I+1+qu8+O.bTMP.
-----------end_max5_patcher-----------

The main bits to look at are the central histogram view, the “gesture” subpatch, and the “streaming” subpatch.

Here are some bits of info I wrote down after that brainstorm session with Alex, some of which are implemented already, but not all:

Stuff written down after meeting with @a.harker (some of which is not implemented yet):

  • delay incoming audio by 15ms (to let onset happen)
  • analyze 20ms total (so -20.)
  • use audio-rate onset detection and sah~ for starting analysis to avoid scheduler slop (although alex’s tweaks of delay and fft size improve this)
  • analysis window should be multiple of fft size (to avoid having a garbage/useless bin at the end)
  • average multiple windows together to get more accurate value
  • loudness was max measurement
  • centroid/sfm median (play with max/mean)
  • use [zl stream] to measure values
  • what is more important is that you get consistent values

So - some technical points:

  • I will probably tweak the net version of descriptors~ (or similar) to not ever use info from incomplete analysis windows - the meaning of that data and possibility of skewing the result is just too high
  • I think the comment about zl stream refers to zl stream into zl median which is a simple median filter - that adds latency but can remove outliers in a convincing manner.

https://huddersfield.app.box.com/v/AudioExamplesForum/file/322660705237

the link to the audio files opens an empty window. Do I miss something?

Hmm, paging @tremblap, how are we supposed to link the files that we’ve uploaded to the shared audio box?

For the purposes of testing, this file will work too:
http://rodrigoconstanzo.com/temp/preparedSnare.zip

(I’ll edit my post to point to that instead)

@rodrigo.constanzo the link is the link to the folder. name it right, and people will find it.

Alex gave a talk on descriptors. He spoke of many wise things. It made me think that I forgot to add to my list in this thread that I’ve done mute electric bass guitar as controller for corpus navigation through descriptor since 2009 in this paper (http://eprints.hud.ac.uk/id/eprint/7421/) An even more naive version was implement in Sandbox#2 in 2007.

Some of you might find that funny.