Spectral "Compensation"?

As a quick-and-dirty hunch test I tried removing half of the cross~s and tested the patch and it sounds pretty good. Still effective, though it doesn’t sound exactly like the HIRT equivalent.

I have no idea how this works, but perhaps with 10 mel-bands, they would be centered at different points and work better for this kind of faux-pseudo-approximation.

Dark:
Screenshot 2020-06-12 at 7.48.55 pm

Middle:
Screenshot 2020-06-12 at 7.49.19 pm

Bright:
Screenshot 2020-06-12 at 7.49.42 pm

edit:
Actually, it sounds loads better if I still ask for 20 bands from fluid.bufmelbands~ and then simplify that down to less cross~s with this simple “every other” approach. Probably a better way to approximate the overall filter I’m after than this.

I guess it has to do with how it splits the frequencies over the space it has, along with the fft settings and such, but when ask for only 10 bands (between 100-15000 Hz) it gives me pretty shit resolution in the low end.

As a comparison here are the frequencies when I ask for 20 bands:

221.833218 362.220601 523.987791 710.390753 925.181305 1172.682637 1457.876324 1786.50259 2165.17585 2601.517837 3104.311008 3683.675316 4351.271895 5120.537773 6006.95632 7028.368896 8205.333946 9561.540794 11124.286444 12925.025005

And here are the 10 bands:

348.62 674.504907 1101.666684 1661.579668 2395.5 3357.503542 4618.47425 6271.323143 8437.83617 11277.647306

So after a couple of bands I’m already >1kHz.

Ok, this works better.

I’m still analyzing 20 mel-bands, but rather than (essentially) deleting every other cross~ I remove every other frequency/dB pairs early on, and center the remaining cross~ at the mid-points between the new remaining frequencies.

Subtle difference, but better aligned with the HIRT equivalent now, and probably “close enough” for half the CPU cost.

Dark:
Screenshot 2020-06-12 at 8.23.00 pm

Mid:
Screenshot 2020-06-12 at 8.23.29 pm

Bright:
Screenshot 2020-06-12 at 8.23.59 pm

Along with the updated comparison code:


----------begin_max5_patcher----------
10538.3oc68s1iiajc1edleEbEBvahSOB08KueZWuN63fXmrX8DXDXDzfRhc
OziDoBE0bwAa+aOUwhhhjhWJdUpaOCr0vgWO0oN2p5T044+80uZwpvO6cXgy
+emew4Uu5+80u5UImRehWk9ue0hcted8V2CI21h.uOEt5WWbm4RwdeNN4z6c
NbbuWzeNJ7vgu2c6Cmtgviwa8hi+xdOyGYwA+GCb2tv4+N8F16Fu989AOdej
25Xy8Hn3kXDRfHDt.RjDH4NGBAuTBQLDDCkHIVxY24.Avkf6bPnkfrWXvwc9
ApuYB4hROo+lDpTQ4uQBVb9NMjWxsBySPdQorfTdvqV7f+VuO5EcvOLH2c+p
Et62m6zuJ2inYb+ZXxKRbW1o7CLmBlcpHuO5e54IYm0MRwVhU7jiQIrtEelQ
Vb90DtwKJ3nexaxbx+9qOQRIcVAt67Nr2cs4g08omt7YFMTJ0rOQBSDhH7j+
EmblapjFdba35O3kv+.mNY3du.+f8QdG7BhciSI9rKuw6A2iaiu+gvf3C9+V
BI.U8QUc8GRIwJuntQjP++oHekPyoa4wH+MgAZhnPWg9zm9bpFGMoUQy2XRt
i.28U7vJQCEeolKdP0HOdXkajtmZ0VubhVJcfvvsEuT1ys06g3zKu2OHnDWL
Nbe8WLx+w22vytJTcwcM8tStxg6OFXt58Jgh36O39whb6X2saSUoK95+raf+
N2XuXeSW.BjcQu.WUC88GVGEtcag1q4JerhqrQIju16S9aheexGJuvf5182e
RHZQVu7F+G8NDW7bwtOdn3YND+ECSO2oNtJUI99Xuc62pZEEuAk5g+g3CuO7
SGRuwSBZ4Y.msKlWoNu8wBmuI6jEsU9aacV+d2fG8xe0KLTt3N0+mI5VioRL
CsjfDTNz7KFCUx7PgVzmAJaarV6iksQBWT7AxYlDc5B+8W+5SGb2jvi13sUa
aXZ3QBRh0AgbIgvNeUJsmbLAcdXYJi5GbKJ4jwyj5+zL+pMdkDPWJy8GgP4k
Uo5m3X.2a4IFpdtCbl3NXBXoDy3xB8Ta8C7VGdLHtL02cdGT4hipkoRbiRS3
YXZe3Vf4ga0f52wfeMzOPEeU6pe17+sw5nXzRUbGkD6PI5nXfExcvp4jzlj6
dYxJq1i.MIXHBGzeVI75yJ+lmZjGVZnE0ZiSxtzFGilDJLRtrud.H7qtV63v
eDBwk7GJiOP9Cl8Rg+.PFkI5P4HhqNGYsd75VwUtyd8KfJnpxxODi9Egz6XH
HW+fRGG4GtYjoXIbnVbvuHkeDHtlkf4vgJwPt5RLSA+gSnIhLB1P4OrWHZTT
pIj6A6iBAdg3iJMRug6iBQeQZigxSrwLbuRHwKDcHrY38C2qDF9hThgHoiiW
IL5EoWIBDONdkn3WHZToyewv8JAIuP7JAw7wwqDk7hzFCRo1LJdknxWJQ1AF
GmRnWjxKPFZb7IwvuH8II.iiKIHedXOIDx3LEUULCLFUoreqmK.pIEWMMAd4
tx5vc67BJl31jWUvFuOO1Zbsyx52LleJ2C8mawGIt0XJfYngEsXyUIoP3DIm
lJ8PURObNxVFRMIPPzvHk.CU747R7PmPuZRbeRaUe8p4TGBOFs9jTyotPmhM
zMdGh8CxVwK+x4j+puQq5o5LUvrjJf7ojJzMQnETgNkaSKUXEuXBIBsyR6XE
xolJrgUniUdxnhjlnU7B7TSEVIVLo7BhslKDSIUXqzIFM0TgM7B7TpolXKBZ
qNBbJoBoETgNCxSKUvrgJvSMUvsQtPL0TgvFpfM0TA1VcjIkJHVPEH5TSETa
nBvTSE1X0BM0DAxVmYSFU.szzICO0TgMlNYnolJrQrfAtfoEFswrWB.SGogr
MVzIkAgsMJvIkJrxCGapoBa7vQlb0Wa7vQfSMUPrMVzIkJrx2h3VvHBjWuQD
3jPZD9sv.WNoUZmhyjRE.aCSdxnBhs7B3TSE.aCVexnB7MgzoswCQ3SMU.rc
fKSEUbp6951ifY2DTgsSw.ZxoBfsChaxnB3sPOxIu31EF3jRE.aGP6jQEzah
dDvMAUbKPDUDbWCCqdRoBammiIiHtIltbaMYQqOPqzSdZ+2uPuGq2buY+jeu
abbj+piwlbRlufBzo887iaCW4tszlUtpsE8qOSbI+Z3QCpvNr1c65i5MQ8e1
KH1K5uD48+bzKXsupIUWQdnwx6fDSur7NfYI6YYn4upufN.urfNjkX4uVPG3
DyBkxrffDxjb1yAxuVPG9ZAc3qEzgorfNLVEq.DQZjxgl0Nb+WyZ3WR0vAAc
j3JfqNWYuixgwN2s9G7F15VCwL7Ay5KmC68V6FgsaopUxQZw1esNTqyoZoGu
Jmq03fsdmrs6nsNmsEb3ZgS2RNdgXyBFjXJ8JTYRWCEBK1cTs2WK7.aiW3V8
Dao23J7HiJeoydkMBekalW5WtvqnIeys5etFezEZkM5mtUe0V3u1Fe1cwucC
9ta0+cy9va1Ody9xazedc9zq1udM91az+9aURQ2+NCCrvCzt+9p84W1lSYy4
Wb8VquLEssCwKgB.lxJeGMacu9fALaTFbh0DFsJK7M556hgJs3xGrpsBQAuf
E8DNTV3EdFKxA+CuQI90J26gsgtwVwBkIKXYXS63nNwAYWeNXaBguYjkBSYd
o+ESNXoP5MuTn5d82cbm8hh2o2IBcRhDmrca4jAyMIMyMQWetYryVmssKKdm
kxi3DIPIuKZzv54enad92G8979Hm+gGfN+ypeQN+wCqc25Foih0AV9oZH3PK
MAzbjgM1oj5oBxYCWrFd8sRTdyEM.inF9SZIYjd52l4Nf54NvVjZKKuWylpo
lMVyDxRuXGH0h.koX5YKGqA0bXK1IAiMGq3.htXaIcIirpTWTA67xcBR4TXz
TtTJm9oZVjhcRBXNH7KW+E0rxnlEJ+x0gQG1zIyCE1ABr59gqEqsCDN8VRZF
0Uo44Vj.UI2pFB7JPevtvAQsRf4tX9I1qszyVdVM60rezb5ZqJksEa.S6LPu
YUbn6nL2yXfzTeF58bOimoJyvI24UwObiV4GG4F8EGDH98NOjlf6u3DG5nm1
L8eG48FclLbheumyV8bOYUQDtxQSmLvOhHYjKPpYaUi6AqS1PgVBLORRt626
ErwYDJ7zl5wstHKoSbMs2xShqekg42Ti1cbR5ko9AYfkAn.16rdIt9kNycwg
OTb5T5uPhQmgzegDn7VPH4wnvi6GKoDBDXx3T+SM50uZPF6rxYqyusc8VuBS
3+kblUtAOdpjXe59siQgDlEES+cYAavkEddXTISHz+X1LB8O47MJcK5hAV95
Mk7DVRMnJECI5mjD7VP85Pbjm6NGzv0vNwYLyBQZ4bqWEb0qtF1Cwg6FIyvH
Leo.SjJe1TL.hDDwvLJeKHzLZqWkDVjYU.LDO2TvsRkmp8lL1T03ATDTPATN
WaLYfUQII5FrlSYUUTpJ1ACIGXQTRhetUDkj1tt6oS4FgPX8hMeJ2PcBaWs4
xIsZ4.rbOH.mbpvp8C6TJWXqXADdKr6sDS4l0FYcI6YR2UH1VJmDS4t.FZcM
WaJKwWPa6QPS5lEx1c3HYpIBzs.QXkTwTtyBgvaBp.bCTI9rlSfZXyaUXeGT
SPOmWNDG23G9SIKN06+Qufimis5zBqsZRe0iO3uc65vsg0t7oOEq8BycUXoH
e549E0X2PRhZv4p1yRLDyQrjiTGngtvho2w7bvSOHgRj.j91ILDmPSNRfvTr
9HPEOJ572D.kluDPJ.DyQpSowVrxOpavioKXWdoUR59nv8gQYqs4kXYgm6Xb
3iQta7SCbETYhQtKmzRj5NqZIktXmpivO+6nJosrN0e33ZWa6HcWuV8QKzgf
QJFaBGgPUbmji3lyUh2rvaq2txONWvX7jNCA.JDliTuID5xmO+RyQIa+er2K
v4mbCN37Sd67WEtcSwQos5wBeIIf.4ITpPRI5Ajn+RHo4qSKV5bJ7jDNEhSt
KjDqd3jinP.qh13AUibstOtXqDot4DdCjwQFINA.n25ekeA5wim7r26Gn2z.
dYRgXIBxLe6ShxHtffuTJrSJbYBcMny0A4+hZchLcMAGPEByQURzk05XmDmX
5+vMGYdaO+U59Q23XaU5xul19EGHnBshS60geoX7wS.g+W+Sw2m7Z.8j7KOO
PUXRw9d9xlDLqWulsBXjaq5nxu7hOHU65wXpfvAIpCZsAbEFARlQ9bOcxLfo
dEJqNTSCSoMvwcP4O44O8yKQs8N8nO6T2+428W5o5hnc0EJfyR5k.LJFlnt.
gHHxROvDFDBLgCIQLRROOUBUL+VU299urIJ7Quf2kHc0fVGjgUJMITFmvjxz
i.xVT5f5X7L9m0ZZI973mh1qzClE9bQoYcXhINbUrDJyDohV.K4cIuM0irOl
peeEpZxjP6utepRx10jHo1yq5nVTEdqWf2GcaTIPfkbicMrL0Uh9TTbKJAcg
p5mCjpUcFMeN0LjNX2YLCRbubmQZzzWdzfTTlYcgu8Xbr5iaoFwkwjHx3ffz
iRZ8yAo+cE1aEOiH7255G7TOnbk3QlWrKOZ9H+CexWou26w7CSsGb9mYktQO
6H7+sCa80KJaKo6JCRqC9.J41oQy3svcZchMZktlC96O3sYH7VVWXPkty4n4
8itwQ9edcbz.rVN+DsWrWzSWIQ9aByr+6ga7NLNgpNT1S2h7YVXNcyjXKFzl
EJ93tU1SvUYs7x.WlQx+u5uNdFbCMKMEcUhI9YYji+z5v8dOYeZyFGM9yI7R
h0+Ytk8dm6pgHz0ggps31SZ8cpQjupSCRqhIlXHwvMKMxvG0iPd.cxXNivgF
G0DLLYj7jKxL6M3no9O20gDgeCzU8ytez6gvncSz.XGzHF.KoSLSXiazGdSf
t1V8ljI8Z.5jcIgPYSKWOR2QMyNGIyVHOKavY4EVjPGSvjaCaQecxlutIahs
mq4q6WS2Or.Ptk5+T75Q8cLGzFyr5psdJeXl0aw2FF9gEMlwyFygAvJA7yYA
9hCltoh1dp9qh14j87C9v.rjxTsUfHKDGLCnrDZgQTKetJmyG6dzxYvoCVs6
ym6RsnyI.M4Qv4OxN+sV9oqSG7tB+NAYApaz4UvMzytrj9Ay37+YcYf84Pfo
a0gi0sgHUoJcVzOzLK1mDOZa9BA58wmYA9IwBd5QbwrLPwctelUn151YCnhh
CNlmJT2XqtT2Lnj6+NjH4Im4TZ640ggqPPXJRVzKt1DNbtH8KpVkMS7Wy0+U
tUw0oUc2kG0hgUtPuhpuqxitRAAMlljuTSs6RDk29jcchuysN1msoxxrqg+1
sG8xuOk69REGxSWEXmsUKyagdNZDQgeJXPshV8yLCsh+7WbGVi.fjTyR8iyw
XjQGGAUgaNeMh2F44MvVQRuP1bZCY5.zmuFvOprrGD6Nnlff.XLyLxy.pFPR
WBSBkz4qc7271Ln1.OKzaX1nlAoddmq1v+k21sgex9lwkqJcpD.DssBAEHpY
E1xEPQx3NTOGkPm8FJ5kbCMIUquMb6.EKylVVpJxXpY4GmOjhIsQr+Xzd6SI
xECHg.Lwshn.lLQ2BInLjnCK4Sd1Fbf.oJSiI130VHmkNwHu0d9ez9U.QUxf
YSxx4F.H+FAYZa.lgQqEC6YuXqBf0NcQDkOAYpOYd5VUSo7ImEuyG7B1b34n
W4ycXSqciZ2hP.NDvM4Ymv.xzcXHGNKxqwt66hOgbys+O3FG57C5YgYwjSiG
h8d331swcJgwk2MIBJEZx3ECywl8DISYYnsEDfduCyStcV1vM0S6X1VcYVZ7
wCNY4CXptPBtvDuINSCEijXo31l2oKzrOG2ujeROKreoejtt9Q0TN49N+n3u
37u7X3BKxC.P28kLgL3zdMkktzTXacHEcXmYVcBEfRIvLHGk5JIcUXw..LLc
6XM7NiWH.RawR164xz1+HYoyg89evyYcT3gCOoKOuG779mNci4EgPYyNVQXs
36819QuX+r88e0k8OLZojizKdLt1cFVG8AFlV4HM+UNAzB5UPKAuVBtZvqEL
hLL7RmMgdGB9+E6bH7XvFmsZl2lvP0+c5lKTBiwiLmTxAWh3uDrAweSQFiAy
HQSOiDszY86cCdLohPaD9pj+gFY9GlaJNxlBALHguQFJCCQldFFboixZyiO5
E47f+1XkgzwVIEkBoJhKqEkPJYTTQQinjUMfr8e3MY.4ykUdw7.KUUr.FUWv
VY.zRhZTS5oPSMFWnPOOyWBORUV0IKTgAqALs6Qi8XtEFX0Mq6JUNMqu4Qop
dXNVE5l.nFaB.QPUgHdKTwZr6voMm8+5e6c5W+c5eRUWsGUwqlOfyHzHkXpR
h9dCzJN1ZN672zjTOBarcRTAwVRrGYJbufNff57o2RvpD3zrolDjmT2gkhKa
Ro3KPWZRrouIoWIkM1GASwk2KaOnN2dFwvDJrPCpozZ2jBIBhz8TDfbIlohQ
hKM+QWXOLnfq9WqaY03FBNxJZ0X48adpVFwA+GCxUKUpFVpw5AfVLvFFROok
JCTHDGCopwo1OKwP.X7rE68aabW+zht1TTgkcQSwTimIzN0TfStOzu4oF7gZ
QeILIS5NLhxlJSHQRIBQUNafxSUr2t4GkNdcd0zh0kK+UMqGemE5yPnPrjTd
bNTCztbI.U1pBsrFMZTOZ4EW8Hma5G9jm2dkETEkAn.ULwp+3jbf52y5M0WE
qqY.eUvHvDkCUJFKYRBPWLUzUuLnj2cIB73IQTKewSMFOCuoe7.Bftj.4Ja.
H.VyEzkplJC9xfiMchCPkStNwpiO7fWzSoLAXClDx.t01UPPPkYPlfxkPAER
XX8LtRXxkRHhgfXnTO+g54FDB5t9BULd5K0vURSEUJaYPVIQJcD0X1gJ0LLE
xUFI004coZvGk4ERTmYEPNexkPzI2oDinJ2gB7RQ4orfpTNtv2f.zil4HFdZ
clBdTMz4nV5vawbHkojvk.kKQFBqhAfTSOMu6tGgLxH1Smjt7mpZtENCAt0J
teWY7DudDvcgFycy2hpjswvU3NkTgIT4kieM+DT.ZhWpHdyB7CTEyEM4lT7i
144d3XjWqAPeW9irHZjpbBWow1Kgh7107H0H1gGQMO8H+DXLBJbdCAoKbaRI
yAyPKUQqv.P0YUCMToVIINT0H4kBtxyhyavJuLHAFfUCZTmjB.mhcdiZ77RD
mpLmRWBEPLfpNGcox1CEo3VbzRlPmEP0YgKIJSTX0oITtRbigQD0oQK4J0W0
qEpD+VRAHpL4lwBLkRTimiodybpfZdEJVLlpmXM3RkAdQxaVESrfqB+wAq8v
ggP8BnI4cfPX0cnrJhWxTzKjYdIJCFTtCQ4hXIhCER06FJUikPxUOHEhz4Gm
q5fUmVrjSYLJygo3IKkTEUmby.BSYYQ07UubghApDqWpdPEg5nBNgpSemjjd
ZkoJlPoOwTzLAvULVUWsNIzpWohIAUM.jPYGSedrhMp7coNORySUrCflmpte
NTwOHMNk3cyDJFkh.L3JldRkrnYZc6hYSxzGCYdwWLVubawBYAwWkfJVqmhK
J9JVhTcuXQAwWrTIWvUxAEDf0J.L.UIVWPBlfWh0cvkjfUi0TuoDTBT4kfUp
VRU+HhVPBVcurhBuDtdSDAI7hBupSiELFnjvq54IbLhKJJ7p6kTCAlfKJ7pd
ITFfIfEDdUOm5MiXkjeUuCoRqfQKJ+pdGJBufrK0jMaXIQWkODbIoV0oT8OD
NbDkZSmSck2+KEZQfdHzxmWgVUWHV.nJImBBs5dPNVJKJzpX57h1aU7aUulT
TPfExSVmvDYQAVkYJoRlGU1jKUKZpzaJZxUpnKIVI7kWfUmiaE2UofTPpUqM
oLaqzwJH0pNsDpe0EkZ04RiohMCWTpEqnZfdG8TTpU8IIHoRhJuPKlpOBw3E
EZ04dROvWYQgV0ooT0f.fEEbUzg5zDsulhRt5EpgTInVR7MACwz7gwT7MMOY
p9lJL5xgcV9EAu0xIR5bUo5iLSYUioAIHz+fWVdP9n+Jcp+sMfIDXdxCRMQY
9OOf7hkxjHPXEyScOlN1oexKdzM1yA0PS1VAChwBNDH69.yl9YiXuShP326G
awPGZOcDodqLsUFr6iInlAiWXLddQkWtLO3u0SuzfRWtLm.rMMlHm6zEVeSJ
tyuZVIPh6xNkef4TYH91hHuO5e54IYm0MZsdkTsNVMlqDZ+yry3IYx.SiBN5
mCa2xV.QlBehd.sG1mNzxE41DWKNyKoRiXCwXVwHKIxu9wVr5wsgq+f2l7HN
2hv8dA9A60kkpf3LzWI6xoq3q6qdf4EudoA+V7hUNn7Ws3wH+MgAZhnPOg9z
4VFbIC1FRy2XRti.28U7vlkKUMW7PBBvrxMR2QkZ0Cks1mBC2V7RYO2VuGhS
u7d+ffRbw3v80ewj7mV+kWEpt3tld2IW4v8GCLW8dkLQ785kFVw6yc61T01h
u9O6F3uSYeJ1eW5h1H6hFK+u+v5nvsaKzdMW4iUbkMJY70dexeS76KLMFcbY
ncdclU.FeJcpiqR0guW4Vb+VUqn3MnKKPGhO79vOcnzJZKOCnNvAZv3Nphh9
xSFahMBAm0XTr1AeBRRntY9IY8GuiQWcTq8zj5mvhL+9FW3RW+GZjeU8L7WO
6Blag8AIno.IamMfzVYgJJ1YUyxS56wZ9iZTGIxS.vo.n6I6gBe1fososYBX
fvXKC+bEFaolFsY8FM.fqkQlPfqcR4.ox.i.KfNRr.zbgcuLaAfR5ThxeTnk
.PolAOsTgUfw4DRD1B.kLRC.d3KhMGPsCs7e8usOJbsmJhN8xeo2qwMV8ycf
nGocBwZaUt86lwXJLKeLyXL43j+EUR+5XL+5XL+5XLmrwXdZHT9QKOrKLL98
daxs5nFiwOQLq2YBxnCfg8d.BRvMyHN8iFctDUuQ10YWgQIBodC.RnzkHBhC
DT.Ap7xnglMNq27Ogbd3eEWX7EYfeWnd6l8gfvO4nD4c1cb86cBevI989GbV
6F3rxywemxSsJ3CmvHmHuc5Cy+pJjIHxcUuEQSD1pd6gdw1Gp1A9KMEANkud
FVv3PAOI2.lyBXMr6YgcrmAyZXH.y0TCrxo4oM4zBGt3hhp1AHlp0yyy7n79
O4IH77H8dQgoKGSREe01u37nqefy+PAs+ZhtvhYWn9PKpaEHJMYxQlmwJrXV
oP0vXyRCecIwZ5E91rJNz8JwOMBpJVYd9Io+dofYYJ65wO+CuQEUSe4mUne2
WlpxAVNlJFUN4pcPHUNOL0lz90QdePGojZvvJObabTOo1VvUUvEIJXgMcaS2
KlbSSD0LI35Gkvjepurzs9GFIQWDofiKv.bbAt5r0bQ4eR1cLCd03RhBDEjD
gCHSIP7UOTe+HMqJnHffzMowKYd8UIungT9.jFgnqugTMSUOoQJhTWG.1EGl
WxL+PQCe3Am2vAN5su0vRYSJiTwzxGLuTLf3lfWeNY5bZVfmoFapezXvrJMx
GHl0el0MfmE2O5Eo3iO47GMrJ2c5QQpK8NK5lRb8LLkah7LLQ+0SEyjSC8L6
ezuCRK5GvDMTNlXaoJSMRZ5kxSCvoJkMOrm1yUbGDOnhklrEH3jSIMX.IOFh
HOaydrgeP00bdtd8Py06NWfduOMfDoBQzILYxSRlT0p4Vk4tDuMSV9COkgz1
ICDXJykJyRxPLkTQhdkcbiIkJvV2mPmb5.ZkHJeRoC6UUjSIcb5saAcHlT5P
Xs7AdRoCt07iokNrdQPLopKPn0riobEg.GtkzyN7RxqYMd7NOZ1ia7C+ojjS
e+O1Aj+bDQJKcM6DZflNM5fY.MEM91PKYAqLvtjC5Px.xLhFbVviK518rCwr
9gi4SSV2w0j5AMPavhNtfw3FTkC.EByQp2DpBLUsTEf8+XuWJjL9Sd67WoKU
4MU7ek.BjaJK0RJIsthSPRyWmxZ.Jk4THNEgrvhTrxhBALos3PGGotYgoffy
QFINA..Icn7yhxf3pyPcJpF72ab.Eo9itivd.Zfk05rub69LTo6GUiw9YYIc
9u9mhuO40.5OFbzF7azgBsbYfZMY5Va1JvIbg3xiZtDf2ADOtLTVlBxbRkUG
pogozF33Nn7OCPf10UauSO5yN08e9c+kdptHZWcgB3LCZwynXCt0nB7DhrzC
LgAg.S3PRDijh8CPAWzp512+kMQgO5E7tDoqFz5fLbJ3mA4DlTldDP1hR2YD
fklg357SQ6YUMWWW013Fn3.AoLSjJZALTZMW+VTOx9Xp98UnpISAo+59hw2s
pIcBTAq5nVTEdqWf2GcaTIPfk7SfUZpqD8on3VTB5BU0OGHUq5LZ9bZC2wsm
wLd3N9Y.i8xidVf63o5BeamfN3KiIQjwAAoGM83YRJo+cERM9yHB+st9AO0K
PLEm4E6xilOx+vm7U568dL+yNFYWjtQO6H7+MC1bMDPOpK9.J41oQy3svcZc
hMZktlC96O3sYP.JUWXPyI7em179Q23H+OuNNZ.VKmehVWXfd5JIxeSXl8eO
bi8..YygpNT1S2h7YVXNcyjXKFzlEJNoPyZKAWk0xKCbYFI++p+53YvMzrzT
z6Cz3mkQN9SqC268TOQ9wdqweNgWxLXObNk8dm6pgHz0ggps31SZ8cpQjupS
CRqNTksmwvMKMxAipmmPvSsi5S.pN4hLydCNZp+yccHQ32.cU+r6G8dn3Jde
LG.6fFw.XIchYBZfa5MA5859aRlzqAnS1kDBkMsb8HcG0L6bjLag7rrAmkWX
QBcLAStMrE80Ia95lrI1dtluteMcq+C.4gm6I30i56XNnMlY0Ua8T9vLq2hu
ML7CKZLimMlCCfUB3myB7EGLcSEs8T8WEsyI64G7gAXIkogRaQVHNXMBMSrv
HpkOWky4icOZ4L3zAq184ycoVz4Dfl7H37GYm+VK+z0oCdWgemfr.0M57J3F
5YWVR+fYb9+rtbN8bHvzs5vw51PjpTkNK5GZlE6ShGsMeg.coh2r.+znMQ5Q
bwrLPwctelkqdY0CCnhhCNlmJT2XqtT2Lnj6+NjH4Im4TZGZ0ggqPPXJRVzK
t1DNbtH8K1XmMS7Wy0+UtUw0oUc2kG0hgUtPuhpuqxitRAAMlljuTSs6RDk2
7bcchuysN1msoxxrma+1sG8xuKe69REGxSWEXmsUKyagdNZDQgeJXPshV8yL
Csh+7WbGVi.fjTyR8SCsMHiNNBpB2b9ZDuMxyafshjdgr4zFxzAnOeMfeTYY
OH1cPMAAAvXlYjmATMfjtDlDJoyW63u4sYPsAdVn2vrQMCR87NWsg+KusaC+
j8MiKWU5ToFkkZYEBJPTyJrkKfhjwcndNJgN6MTzK4FZRpVea31AJVlMsrTU
jwTyxONeHESZiX+wn81mRjKFPhF1sLyoKfISzsPBJCI5vR9jmsAGHPpxzXhM
dsExYoSLE2gOLDaiYSxx4F.H+FAYZa.lgQqEC6YuXqBf0NcQDkOAYpOYd5VU
So7ImEuyZTR9vyQuxm6vlV6F0tEg.bHfaxyNgAjo6vPNbVjWic22EeB4la+e
vMNz4GzyByhImFOD68vwsai6TBiKuaRDTJzjwKFliM6IRlxxPaKH.8dGlmb6
rrgapm1wrs5xrz3iGbxxGvTcgDbgIdSblFJVipxhaadmtzb+bb+R9I8rv9k9
Q5XVy64juyOJ9KN+KOFtvh7..zceISHCNsWSYoKME1VGRQG1YlUmPAnTBLCx
QotRRWEVL..CS2NVCuy3kNJWjfomiD.JlhYjm.PQTmQ2B1WAPwuBfheEbKNo
1+UvsXtA2BcMsekU0z9dfzclZZ3MMR20.q4adxFHkr05ZnoBNZpV579WduIh
qeoTUGjgCG.FEjADRRrzS6eY4mvt5kLUc.ZOMlHO5Iliz.YdjdybZBuLlIEn
jHsFQknTlBgLIv6xMXMQ8qXn4WwPyeGiglBaKijjorJR9Uj7rGH4IgMgTAQL
br7bDnBaqDu3ojWfYcQGA9RFWS89sMtqOEtQCyVCSpWdrBIRJQHp.vgRMPxk
DZAst4tAUAxjBjUO4MfdP7G1qHyni61D49or1P0yYQCgbWO3YTIf5AnKIPNg
KP.rtHiqKrTLjNooHBBg3XHUBz4dh.LUmdJIG+ohYLoHOibIOSPqALW6AKq3
HUxgAQdwUghKMw1pDS6QlBvtXofi4BlRPAv.HcAXWBadh9pPXgyFuFdMSsYx
b4tNL3iga+n2SZvWz427hBaadNsX9MUM6kDBKYA1HDLnPuJzfF7msSS2IGL4
bA8DZrsYzK9tV55SQvXjvr7dI8.zhg0Mutinb9N2O3oQxDAThTCJBlMt7NJo
m1bSivDBocV3VJl7t08Qd68B13D4cXeXvAudpTKKzTAcWBFIm7lpezwCZjn5
Ot+8tG7b1kgdZ8GLtUt6L8srN2fkn1avIurhQ9aZ+kilIkKbQTLxBQzUSDLx
BUu7E672rOzOH9voVpLYbRDC9Yl6eYBu4h9FqoMpEzVRr.4tqvnMlr1.mquM
7xuMXXeahEeaZNbDXXeIXasRFootenJlkkRNRWqF35UOBVuXenFn9ChInkLI
kyvLHWHgX8F8nwKhUF+IPDCo9mRc9804tWo+vTmUBXJugHrJDIRk24P4GXa5
0Ijwf0ir4SgXiwmBXymhypVOBLCea.XRzgswzF87fy58GRXkQTvX7kr4CME7
Rg0ciit4vRBl0.UDzoP50pOMeRDd4.akdGp4AFyVo2Qm+l7oay+CmMWMxoom
jJ6f76f9R1D2.aL3lHYGhZbXeInMLOwTHbZ0mNY7liuLCxJ2liQHfPa5JyCV
T8+KIlKwSnvpvZGiuDmOaQLB4WMUAq9zSjpP4geLor3qmqP3r4JDd8bEZ5kP
swfGktRBoC8kivmpc6MnQ4ac8LBPthFAPLacSMzgXAsyHfvloDKcZNy8uFEh
qMQMznDX.vtgtCmj96N7waY.mloHsz5yV+cKstrKslrub8XW+Zwt75vNIetk
.lPS6uE.IrzdrHk6TQUx3TlfqtFE0GfGrmfNXOqOQUWHLpuHXTSAv3T1pu60
0uaKJtSKxKLVAPBVcGPuAOvg.bfc.z.6KfA1KvBbP.E3fAIPqTFJWpX5WAao
mPDV+.CvaKEhyf7W0JD0uQ0pdSpMXBpL38YEYkOYa8Fr9ZFn95IH80K.5qWf
yW2KLSO6zvr9wtoTwx.VOqDkEMKJaGP5MDPzyJ.zqefmWu.NugAZdWOYbKAH
uWDgUU.z6rQLW1rTtkvHPK.bW+.2tdArc8v3a2.zt9NzftBfc8UbrWngf0Bw
SfrZdPoqZI1NgJGiEYcFv4tgHpbfIWqTkkPdvnQZ4AJNKGSWcUO1QllP2TDU
A.dqZZZ.P3js.5lcf41P.xswhekAXa1yqX11nqn3zNVjcYfXyVqHSGAkCj0l
bwtY0zSNvSqqg7Ljlb2AJsQqA2tIDK.AsQiZxA1YUSLcFfyFKRqLPlMhx8iJ
YlCjxtgh1HO.jU2zjObMm1.brwp0jArX1KDXY3yKtdRNkALLqmL89FWvnR74
psY12ozN3ecEiBNG.eYmh7DxdKAdWiw.F5cTgYf00fabUCJWVK2a6D+1WP3Z
3.v0.lnrtfzIix7KL5SR1XN+BW.hViwqB0k3Lo0lQiZAHqdCNVC.XrF7TZYI
PX86AQtLvsxZKRsikQ8ALq5IPV0SPrpqnyT+AupdCbUcGzpF5h.wBPpZ9Lae
SkkhKAcpqWvRW.nTcXZlrqx51K.jZvsqBvOi0FiZGbnrEXn5JnPMJM3bkhJK
B20F.eZTHqBap8pIr4bMCzYvapm.2zD63dHlpJpcXWuX9JXksS5VC.vzfkrt
DnkreozYC3JMVDXdPTx9nhrA3jFIJLO.IY+DnXCnHMRDXAvOpaSwSCPqvHQb
k.1H6c0XCXFMRzXNPKxZ5yJfJZjnuh.RjsqztBXySOwkmwsAfdN1.t..grWD
wFPCZvDXdvAxpog2R.AZffAzfaWEA8G6saXCP+LbhqLf9XEm2RzfoG.3yfaP
4.pmaGOHWBBOimtWkK6Wa.cmA2px.Wm5sC1Df5LBe+J.NGqjesDrb5AXuLZM
p3dkzndNTcKA.mqB+HCjatQ1u.4AuFaHo7.VS6fUyv.plgBRMCAfZ5Fi0r04
pAGQd8e+0+e7N.VDM
-----------end_max5_patcher-----------
1 Like

Now that I’ve got a version of this working pretty well I’m wondering if there’s a way to better generate, and recreate a spectral envelope. Particularly since I’m now only use 10 (of the 20 I’m requesting) mel-bands, I’m wondering if I would be better off using 12 MFCCs, since that is supposed to better represent the overall spectral envelope, and the mel-bands here seem to have a narrower resolution (in context) here(?).

So it’s easy enough to swap out the analysis side of things with fluid.bufmfcc~ instead of fluid.bufmelbands~ but I have no idea how one would then create a filter with the output of fluid.bufmfcc~. Is that even a thing? Is there a formula for turning those wiggly numbers into some kind of spectral envelope (that can be rendered into a filter of some kind)?

I think the short answer is that, even if there were a readily available way of inverting the MFCCs back to the frequency domain, you wouldn’t gain anything because the MFCCs are derived from the same mel spectrum to start with. At most, you’d get some smoothing.

There are other ways of estimating spectral envelopes, yes.

  • At the top of this thread is some discussion of this, mostly based in FrameLib, e.g. making a (non-mel) cepstrum,
  • or one could use fl.peaks to directly estimate spectral peaks and have greater control.
  • mubu / pipo has an lpc object (which I’ve not tried)
1 Like

Ok, that’s good to know.

I’ll have a look at fl.peaks, but I think I’m pushing at the edge of my ability/knowledge here as it stands. So the 20mel->10cross will probably work plenty well enough.

After getting distracted by a couple of issues I’ve gotten somewhere pretty good with this.

Some final details to sort out, after which I’ll post some code and stuff, but I wanted to show some of the results from the points @tremblap made last week.

So what I’m doing now is asking for 40 melbands between 200-10k and then processing/filtering that down to 8 bands, which will then feed a chain of cross~es.

The first thing I did was apply 5-point smoothing to the envelope. After struggling with the results of zero-padding (particularly since at @numframes 256 my low end resolution was dogshit and clumping a ton of energy into the first bin) I decided to mirror the edges to keep some the center of mass around where it should be for the first/last frames. (wish this was an option for fluid.(buf)spectralshape~!)

Once I had that I needed to get that down to 8 bands. So I compared “sampling” every 5th bin vs taking an average of every 8 frames and spitting that out.

Also for comparison is just averaging 5 bins directly from the raw output (rightmost display).

Here are some of the results:

There are cases where the “every 5th” holds up well, but I think the “average 5” seems to best represent the overall contour (short of doing PLA).

The straight “average 5” from raw isn’t terrible, but in the 2nd example it turns the peaks and troughs into a plateau, which the other versions don’t do so much.

I also compared the smoothing in linear and log domains. The results aren’t massively different, but they respond very differently to empty bins (which is what prompted this error/thread)

Now I’m at the point where I’m trying to optimize things (which prompted this thread) and wanted to compare to see what kind of results I get from this smoothing/downsampling vs asking for 8 melbands directly.

My initial problem with this was that if I specified a range of 200-10k, the initial chosen melbands started 484.957172Hz and was already at 1300 by the 3rd band. This is compared to starting at 371.274232Hz for the same range when doing the smoothing/downsampling.

So I decided to “fudge the numbers” by massaging the frequency range I’m asking fluid.bufmelbands~ for, so it more closely lines up with the frequencies I’m after.

Using the process above, I end up with these bands:

371.274232 753.952319 1269.088749 1964.959113 2905.690638 4177.751245 5897.994634 8224.419765

Now if I ask for 8 bands directly, but change my min/max frequencies to 100-12k I now get this:

387.683717 778.82 1310.610312 2033.635117 3016.662999 4353.192273 6170.343679 8640.95117

Which is pretty damn close. (this also saves around 0.1ms!)

And if I compare the output of both approaches, I get this:

These actually look really good, and I think capture more of the “extreme changes” that can be present in the original (obviously, since it’s not smoothing everything).

There are some anomalies, like the 3rd example here. The native 8 melbands version has a huge dip in the middle, which I guess corresponds with that particular band being centered on an area of low energy or something, but the “cooked” version works much better for that one (visually!).

So all of that is to say, I may just go back to request 8 melbands, and “fudging” the range I’m asking for to get bands centered more along where I would like.

Once I tidy things up a bit more, and finish testing/working some stuff out I’ll post code/comparisons.

1 Like

In thinking about this more, I want to see if I can try proper “compensation” by comparing the target’s spectrum to the source’s.

I would presumably do this with the most resolution I can (i.e. 40bands for each, which I can then smooth down to 8bands for efficiencies sake).

So in looking at @a.harker comment from a while back, would that mean literally dividing one by the other like this?:


(In reality the spectra probably wouldn’t be so different as I’d be querying and matching based on descriptors, but chose these to see if I understood things correctly)

Is normalizing (or some other post processing) desirable in this context? I imagine fully normalizing (like in this screenshot) would probably be too much, as I wouldn’t want to zero out so many frames, but perhaps that is “correct” for this particular case.

edit:
I suppose any maths would happen in the log domain as well (this is linear/amplitude above)

You would divide in the linear domain. You then apply the numbers for each band in a similar filter.

The normal way to avoid overcompensation would be to add a small number to the divisor (as diving by very small numbers makes things very big). This is called regularisation. You can also try interpolation schemes (probably best done in log domain) for partial compensation (e.g. 50%), but I’d try the raw case first to see if you can get it sounding reasonable.

1 Like

As in, vexpr-ing like I’m doing there? Or divide to come up with a single number, which I then apply to the whole thing?

Right, regularization sounds familiar. I’ll try that here as well, as obviously the compensation can go right off the charts.

You wouldn’t do any normalizing or other stuff after the regularization?

Alright, here’s a patch doing what I think you mean:

Not sure if all the normalization is necessary or desirable along the way, but I wanted to have the values up in sensible ranges for each step.

The results sound…alright? In this particular case, the division produces results that aren’t too far off what applying a filter made out of the spectral response of frame 45391.

It could be (and quite likely is) I’m doing something wrong here, or misread/interpreted what you meant.


----------begin_max5_patcher----------
9708.3oc68s1jiaijfet8uBdJtOr2sUqCIdi6K2Mdmc8bwZOqi0dCGa34hNX
IwpZ4lkXETT8iYi0+1W7RTjRTRfOKU8ndFqFMIAPlIxLQhLAR7e7MuY18YeN
Yyrn+2Q+Zzady+w27l2Xej4Auw+ueyrmh+7hz3M1Oa1hrmdJYcwr6buqH4yE
1mu4orrh2mrLJd8xnkYeZ8l3mdNMY4tOLc05jEYaWa+Zr+gq29T11hzjBaai
7Oc0RaKlc+u8VAaW8eNtXw6Ws9w2kmrnvAvLJLGcWjfgL+kTY9kPlih9+uu4
WsdWqClm8e9Mei4m65IxlmrYaZQ75hn+xrUq+XRdQxx+xrnMOqgs7sO0Sbld
FbVP4Fzjis+E.hIEoSJhdXUZQRdOwP7YvPLwhZX.lytKxMDOrH3SIa1D+Xxw
rvEw4EQ.BqliEThfanu6KyPyZDAgiQPtX2m59thu7bhC6lMqDOZ.2UDC1Rk7
4.BwjTAFSTLACqoGHKk.iOEk.O3TBzbPBTjE0qTLbpfraTAtkAfRXy4GRE.A
a3oBI+0kwK98Ygx8xUytDryjriGAoVP276vA5qS9jFjNZ764z3u76Q+V15GS
0Z2aDwvMHVhN430lUOtNNc1cQytOd8iAL5wzhrGQADpyO3MjZqVlE8+KZcV9
Swoq9qIQuOIOIJdSzmRRSuKxLSU9mVsIIR2+2mjuIJV+5MEqRSixd3gH8qiV
7dsLPi54HAyov2U+62d+8oIUkSZZ9LgvQ5rZ9.N09ufofZ8WlsYslDnmC6uS
K5+XRw+ivEGJmt5gr0EODuHoJ6UCnIfjVLyoZ2MsMFMEXoyjjn+tMYayWjzB
TjzRTjKg8XnhMcXXdxiaSiy0b7+eBF6XjSykZv2M5VyhuFyrNsgIHpCMs+Ef
cFlbZjtRGrN9IaGL6Okj9wjhUKhmMfjDqVvuLOd0CQwZyWx0cVjLbhCzzP+4
DhQUF5AKMahF6aBQoLhBBFYopVhrRtrBxRECOxN91pQ6psZ9QXrQY8qPqyn7
9XcF2p1dTLG6TnMLOpo+e3HLpaHL.R2BRDtkbgGdT9TlwE8TRp1fqkaBFIIx
KYC2kGawbKJJtDKc01QujPG54wOsJjUoI5UFuYU15Jv5alE+7yUd7apTECQ4
2xrMj7txGsZs6QP4ixS93pc0mU9z3bM1TnQks4tYS9bokIllIaYR95sqJ0CY
Gd7fjcfvLKzlm857riW6dcE8c9I2bL+HvpcWfpXRudj9wzrEeHYYEcr5AimS
VuZ8ylkPutHtvC7kudYxCwaSKdW0oas7YM79cpka7kkSk9GxWYrW2+IOluZY
1ZCPTanv73ccmlO2JKC0PF6WrN94FprlaSSWNwK0pnJ1t493byHk2lB7tWVj
kkV+Uk0KM4gB+qed050GPEKxd9zuLe0iu+L089L8Ke5bss8Mad210t29NMSQ
w61D+w5T6h3zTu3Z8l+ywqW8Tbg19km7lKU9xj0wZD88aVjmklVCecu4iM7l
kZl7EIeZ0xh2a6npLC5Oe0y6XhlUNJub0iIaJp+rh3G2T+IaJ9hinW4Qau2K
D+thDsIxZrn9GnEOVsoXy6y9zF+GtiQqJAXuiDqJTWU2WsmeVyZpqHLd6xUY
QZMZUeailybn9P.pVklc4hpxejRtYEXJ2p3OzdlSXSya1ow2qVYDn.ZFjMa9
8nGiWsNJUOVDsZcqoEpKPJHL9bpPnPTpBQDBNVaYCQ300c8PKbbCcf.Ht.AP
xNlWvg+rIF8qYPPcre65eKSyDHNM1KaF6Y3pU4Xaft6L+WMrtIVGr0ykR2xA
TJqMw3q.p0+yeOBNMkBZlRUZDUPFRcxUDyg4JAkqDHsrjBwPBMswYaE+HaqN
ggjWoTHJYHnPbMw3U.Exq6kq3z4BhjoNC8BeB5EOD50c8jxoWgh.nXIy8Kmy
uqb0KuZY0vngfUiomaiS3.gKoJNRHYvIHXu1EMwrgfdQYn4XkfIzbZ.Cy.k0
V.x78TKAPHv0nfpd.VaTGhALUqETwxgUPsQ9tFoi.lMmn0tvQXrDIwbF+0La
HAFB1Ph1vqiMIUu9anJ86pjKjPkTMXRPDZq4BI3gkKrYo4FHiFlvqL5HlHUy
0yzUWuVPjQFYXIiMxMh0Cy6og5eIjuBl0EnCg3KlxlCDEgRwbLVo0.pNAA60
9rtrAgdAT9bBn3BLP.fJzDGMQghlWkbwXrqQ8c.SXzmHDP602Ueh59Kn1LeW
SzwqIEdcybuAwZOwb5gN9PyFNGWUNUHuFY6TB4bPHAT6mdfOvSOznzaijQy9
1SV4KYT35hpxLg3PHX71KKChA11kl3MYXWr3l3YYssZqEQk7wRF0sUIInC2q
EGSEp5Qzc9VspK9sf75kIedn8MWGIYmmIJT+QNRzmgjkxgas1U1R4r1ytvHx
PoGPe4W1GCQydm6DQFxB2l22LgxsOs7i46XKhpC0KS1TrZcYHU+08959fObQ
VpKPx+pMXZU9wtC6BZHs0vKOP3EDmGdsigbPxHHrfPuy+HhBIoH8CsOAQADg
PPLLVq5VLlHlYpyHHjABkCwFOnHH1A5HBEVTLHZAYrghfX0FUZAMPnvn+Z7f
hP4NI3wFJBgVXbU13AE3P4NoG8guDpLsvKO.3kRtdfWQHixxqG3kDJW4UB7R
C.dM9G7ZAdYg.unqG3MDsT3qGvEG5zbu7vKMTK.oiowAVn.BUI0nAEjqAiC1
ghuvPQnSKiGcn.Epx0QCJfqgQDrLvQjchziGTfBc5iQCJXWEiHnqBn3Z.Hr9
GHDlSNYrghPsUXz.hAXIl6cNkc2PeBuSseyza1vo+jcKs+teHY818NAa2luu
YX+9GeXUZZoYGu4nu3My14TSuwI2U4U0LWAqn.HMlqP.h.yskzErwvpJwvWO
XWEoLpBgMeNkiETlsjDSXDqsOMTU799DAJWOgTRmOlHlGAdKlpV0XyYM15bT
w98pta.NO64r7xy7vbhpV81Vj8Xd7xUdOLhJeW4309SpgkcIW+kGuI1M9UUO
PrpZazD6V4f52ucQ7XLPVhLmYrrEz05ilxxwPo.wjRWIIkbxpVNZxY5Ny78b
yeDtRtVaRFLOkg3TACHVTBqHRkqDCPlP1d.fMKdwBcKWq5DrlA2RAo6PPiXA
sgZmjl7zgUWH0zBGAEARoqjtkv3iq+8OV2mrHJHrcsFpoBgqplsYioDqtOL1
n67EFxV8dGqQSKLCbA1IQJQHfdbmahPmstuylvQ1jTxMQTXf6nZ6D0wMyRT6
z1p0R9u7bx5neJd8lneJ4oU2mktbVU0kifP2ODWTDpPW0C6zudvjeUOnTlST
d80uMB.9O9GJdmsYP+sjNiVU0oToghYlPzImQEHKgwPWHgozHbcgGxogujNA
2PRSkNrkWjlDmWo1fycDJspDlC3zDcAoEpBN1mFmV12c.AGYole4m+mBUboz
Lv5r8Fqcr5EALv3NE8FNQqZN0ACEWIBbgOkzUmEWmRdCLFc5lWyHjYo9hcle
dY4MFRvcgnjyHfUdCzCnX0Ek2jALGNkC.xYXqByoV5GSAR6Ns47xq.mn0eXg
GyooP4KgTWT94O8kk4YOlr9msrTiqXjc2BrZQ+DkNqxgAXkJ6mugnDtYJHJu
RZyiXjgk8uFxIKMB53R8RvIDCX8y6zTo.jMZS0qKbnNOuc3iCCyLJeWx5jOF
OQxBe61hhr0gJQb7rrxRVMjuDL51P5A8+XkSl+qJ.+6hWs926.jqkiJmz33R
SG3u4SqzJFCEANRTE7x.6+YRga7qN.+edS5pkI4ckW+.H9RFAzB0nGnn7rJ4
Zdg6Wr2lB562WlcU6fdjSguMQa4mIVoiG58CwE4q97hh7zABKmDfNoHIOXkj
CLi7UgZ1+b1xxbNY6lknEFwcAKg5DccRHNcVkH5Ehg9OaSPlgBvMos7XCWlP
v+GWsnncz7qVdmezl.leUZ43OsH64jtY539nVoHl+bxEvd8Mf8yw22MTtEy.
zD25E0iNIHudIk22qEocZ6+ZXUzuLJG+4rGMtRXTVRzEFjIBNU.tZQIf0WIT
eHcmBT+e6oVDH7qfEi7KweL4gr7m98Qezp8qX.MmMxDgkw4e3sqMYHu2Z8NX
+bkHsTshnLhikwdTZQpQvy7vEX8GMmKNZdkuYmKV5LtNDEtlTMdwXkMpbd+l
OgAhPUNayiQyi6GO89PBdTgwyU4mIRQnuR3lObgZryFCz1PRNJhl2mlnM2vs
gF91rrOLazYsWs9C8kq6tZ+NBwkorqzCwHYoYRDSxHhd4XYN95ZG43Xdj5zv
HDcg303VMHrZ1na2BqpGF1mVLawwhe6Czqs2HUKElgNmCpGUwwO3Vm+uXxBz
uFLLM0XNV6VhTibIkVdwJ0StSp8R9KDon9MbmRQjBeIgbRrL3o3OyqjlsacX
Mzr00Wiqvqq4rX8ACynClPpEQBczINGj5DZiGDvDFVUetSiVAXp.854v+IZu
xUYGusaWccboKLykPZ1az20XoWH6p5ybdCCW7wRpsmi3v7bQac7ck8w9js1E
Wdx4aS2l7VnGpoHfvuIi1qqVUUC8TfD4YeZcuvhKNOyDfE+CeIteHABqXtMH
lPPHXmlALns5Y5PhuKOIomXgcTnzc3.2Xy2zg.+fVy95h3dgBRJhycNymizH
fcHgqrIlxoBO9WSV1KbPTthHnbspH+LuSEN7umjll8o9MTfYtsjoPBR6R8PL
sTRP6EZlBgjSIhh+ZFQsgZ86xR6IaYoW9XZKiYtc2ZUCQFUj34s4Om1BC+NX
AITjytULCwUVYKSd4FKawdVTTty6o.iKcg+xngbRTsjmrHY0GCeGPzDeZ451
2i.npGOgwEAbKi1vF1Iq03TshckehUg+XQokxTjKtdzWVN2MI6unsdUMq79A
rv0abvoVQ.HgKF6TNR4OIaBHrc2+K6vVQ7ys4DkUwgweebQVz2a7ByrQGF2T
j7v1zzhtGvXyA.VXox7xUZB1TJ+kOkCRFCbgoiSDD2gEjqUovmlAHGxOQ39.
6iLrTHcFpRJEsIXEQImDZm4B85034k7SFuv9k9EbDPoPtUFnYUo9stDGgHvw
G9q5HnIueFfqpQFtJqKdHdlIsxLezRC1biVdVBqn+4OtJu3KQ+iOlMHpe7sw
tFXl4lqa46b2ReuKtnHe08aKbo5fJT+1cax8XZ18woGbEv0zkM22r+.7OtWF
6D9EuL10qQa2Eu9U80uNgMbW+5Z9Z6US4HbgqeBb99sO7PRdIVGs+1HNbB.8
jDfGRyhKBB+AFqxcXJ3t91lDJvy6ut4C+5Zkzs6jV+sLMixC4lZE9a7apUN0
ZcNUhtcQsd6hZ81E0Z+tnVOysGvx6Kxha+UEU+x06T2k.fzJUPTW9FAXht5I
0qtb48s+h2oeDC2Eif.+RPKNJnuUHFukByEBrPPidq4xnRXBVusHfvHUzawD
skzBl90D8rYXpjRzEw5E7AZqo0umNmKAJUWIPYcyN2TKXNWfoDP+Tvbx8wl2
ymqv5+RpWiGn.psFTc+vY1OS.DojXeJwrdBtqcvXooxXyAkfHLEmq3Ttoo0v
FmwYfssoLIFaZTwbfgQLcipliwJ.QrMOhnXllWO2i4Rby7ditZIASoVnBQ4D
kAkvl.0qjNrSCTHC5afdfS0s.ZdzaM9NSWSMHpshUHEJSyooUZbmX1SVJhzf
pV+0HU9mR3LhCULQ4BIsOEHX.LjbhFAEX6SMeffU65ovsJrstvKqWy8fdczb
4KtGl65FVYsqgQb28vL5UvMix+s2pGPZu374kmc10dwKVFm0dfvooKfaW2Ih
ln+tUOs8oyRXN00DCI.Bycl6OjvoOtq6CA8p4NJpHJMJs8jF5kunlu37.tc3
ABEJGyDMo3GS97y4Q+2e.h960+hi9+tYQbZbtwn+tbK0oZg5lSXy9YIfX2bn
9kSeAdpS3oGuI9u32oNb5PXZAweYjnm.Wa3rTY7g7U8EPTGufc3rYgvfPvN5
gD6oGD9q4KXGdnIW0w7JqHzzDNeLSJ0Pn2mJGCsY4KcNYAdYgriSw3kPF5kM
07BpwNAAGRtRFF0bkbnbwvXJJAPaFQfwBJ5+USzWIQ23DtNtH59nv8SNVbRm
FacO9cGtthFiS.UXMJjpZ1BwQyM4FbMMbbkeQb87noyxMJkLVnolTqaivQH1
9.Vkq4wJRxemy4hUivUiF8WO1GZv1r1qZ9bbl4DNGaQc9kG5Q1kS5MzcJF5C
w3+KGyDb+hYBVIOgI88Odf1vxVKcibYFBPFBCwlj8ABFNGSxdRftJZzQCeU1
fRUhH84BqjlDwP6+CX1kqXWPTDUBs9rUOtNSW6zUK9PU.qwfOsaoWTzvyPgi
9eYYq5FCEv6WP3zKx1JNwFdFpALTiPGEajbYEwlagZ7VnFuEpwagZ7VnFuEp
wq0PMB74RPRv1.bQoJB2DUQ5bvrU83139AbEAQsgHyEdPDfjJcQr8v7HYXaf
3jTF0TYfNmKTXaML6gTDgSrEI.mqXQuULWxTbSj7jlSWBV5BHoTfrQZTNGHT
lI5al8hFhKQ1ujomlvDyQ1bLgiASynXfh6hnmPIDXW6PEDgowYy4Tl8gZXig
E1XKplScvEhALFwB3HpI+p6BlntHQ4JxkbgqsEBpAbzHC1jAzswZjp6cIiJr
TABWfkJaQMADgINhkDiMg4TORKEJto0vywRLyhvZb2fGlnPJMmvQj+oXCjB2
hx3snLdKJi2hx3snLdKJi2hx3snLdKJi2hx3snLdKJi2hx3DEkwN40Xb+B1h
K7h27Z7MuFeyqw27Z7MuFeyqwWodM13.Twb.yEXy44.YtOHsd+jx4XPX73Jw
c9NvlK9R2qL2XzRq2PEBNw34TPLWwAr4.afoyILDivcGEEF.1ipAcNkhw9Sz
gIaGaOGKr4..Tq2aIyERrxdVUD59TRDN2vpaVv3LZrwgpbDycBVvTjf6bCrI
qD3KI3fjYOVKDSp8.rMffK3X2oQAvRA3Z.E170VjPQUfP3bor.3lCFiFDDRl
wc0ZbPBLhzAsTgDPfEIQFDV3aVFx3LZc+Rw.ErOTaJ.x5Zc9blhHXNpDUIrm
RFC8fqInBKlyXRFy6MaBwctWzzYciRom1+wxa9O9l+iu4+3a9O9l+iu4+3a9
O9l+iu4+3a9O9l+iu4+3a9OtS9OtSaicz0y1X2ukkIZyhtt1F6cgvxu5Nd.W
gz0ZN1opSczfGmBQ1B.h6JfjBWApTYKnei+UTkzWf3+FNw8MHI18sDf6KvXt
BBek.N3pD.Dh+UTru1Res3bG3foDeCJDdn.uqK.+Gi8eBFAdffJn9NW4gOAB
1An3cE10bN3iBRWkLdQw0dLvWIJ1i3D0NRAa2S78Ig5wJDCndBHy+.Z4oYpl
GYjgFdIZuNSBbkyBVW3F.9K8Q4QRudjUwJhyQqi3Q4Q9xFaRYGiMomzXB5FW
yCKoBrdEzLACeKRk2hT4sHUdKRkSUjJO+wXPM2DxHS3Pz7mTLXNp.34Bt8jK
flSXBPYeIUXOwBlPXImq.jxjdxz5vLQehwNYbSzSE7hF2DT4+3VXStE1jagM
4VXStE1jWrvlf7aHiagM4VXSNiGNmv.CrKvI2hYwsXV70YLK95d6lWcuVFvM
gfneNyQByAJVxDdGcYtjeHiv0ewYb0LEwvVGAqsk24yYfRXNGsR18DEy40X.
Pbo+UbuWdUd2yx.Ly6iXuyXoNWwJ3dW5JDdOWi8eoDqbcDi48xMQH7NilIvd
2+hcdFlRT9lk58jKg58JMQ39aA3cqLEsqm14AaJA4ZX1tliS8fqtq79WFq10
LTeG38BOWh7tmV58fMi5gXA26EdIC4niXAW3Jf2eSYzMOMWtVstcPFbtZFKF
CWMeRWht4orrh2+Gy9z5MwO8bZxO8rFrxOUxFqIOj1KYpFSCTvEuSY9aOOjR
bKJk5bTJxwqvEhatH8lKRu4hzd5hzihCWWcC0YhI2ohKWn9n4Bwm6jGLD2VG
mJMYdE6sigMPTLow1EuuRoG1NMGntyuFzZAra78CT2NkMPOcgwNpoVML8Hp4
q9ScSOc8N0ZEiyGyS9wtoGhvuNjf8z0wPjkhtRFIj7WECEX8XwznLkRul0lJ
YCh1TLQ9xqMcmKTaj5Tt5nnhrHYzCF9xMQ2+kHsIZ4wOpwpHyBN9RDKx7slu
5zohLRa8jr5BNRFLIEMldVIEeNliMWfSDAAyDf4tWF6lwRbMPHW79rmixd3g
nmVkmqEJV5IkCGsRbAZkR3HUlaxK.QPDNVI4Hg4BImitdnTr29b1p0E9kmux
jExOAIB25.SbQ1I5bLyrELwGqkyenZIWCzHGSTjFiSxuDiTqoRWJ5MXliJgc
m7ZWLiuNnKKxL2dzEFsPmyJvSf3zKf3RlEuc6XK+FJ.cEXy6SIwqa+p2Ft8P
f.4kZjW0KM3ulF8Xd11mijsmXcgsbQP6q.gvRlXLXNgn.tfp.DSZu064vUyF
unabSWX4ksiexSnP5I2qLotjbswNsxn9k0AhEav3lnb9bPxYJPSeXJ8LWB2D
4WIbSZpTdxGaOIBC8mDgMYNByDUlTxqI.KDIG.kPnnZNoqJZjdUiKRhH7NPn
v8mPARjkPAbo4RWkIXJjfxYfPbUoZ52zFFFQ5f2c5YJlwOAGVunMhIMPCRfZ
xv0.1DwF3x6PLxTsm4t2rq4z+u+Z5hzj3y3FB1oHUmWOd4sBTk+aWeElSx.L
aNqhZcNHb2tGjp+Q.WOZ46l9qgPEums60h5KZGHS7AiL0nxKF6qBxDY.L+TK
9YMXvbUfe35+utHSVqz6.QhNXDIhzbQiSQ.iK3lCNHhqIRvUEuTQdR7Scw5S
hX3TMoXyk5ICIJAWx0LTBrIz7SKcpaaoWPz6P9fcy6a2SuRDki4BhP804d5E
jyBZ8HbDxt5VgmfPwvq4M0qjE39PzD+lwa2PJ5edHA8xBYlHrNwa23f2Tui6
1oUbEjMcryMFFeLaxYgHgOPM84YGaWFzlxFF0LQDlGrf13BGrfgiQUrxrN0H
ZPLMhQGNBi4kN5vQP7oX9nCG3f4OfQENHAAG3QkdD7woXj4SwAyeLpSDggVo
+.OZvQvfwnJ1BAqNcbO0Xgarz3ZsT3m9H4jaJP3vFcxsgZ.lDZ+5mrasrSr.
p8608sKWk8S1cb969gj0a2uNsc6M9lg86e7gUooKxRyxq7AU9h2La2xvm49p
6p7px5Y14ZXykunTiOyIZsmlSSqYsmBLicfpNe8fcUjxnJD17450nJnLaIIl
vHlRnFpJdeeh.kqmPlE86JoeDbz1n6MyhW+neW3KPUOzz5A37rmyxKORByIp
Z0aaQ1i4wKW4WDbISy9wq8GjB21ET+kGuGyMq82rmDq1FMwtUNn98aWDOFCj
kHyYFKaAcs9norbLTJPLozURRImrpkillqrT62yM+Q3J4ZsIYvrlOOpPMnBF
PrnDVQjJWIl4rub7l0LdwBcKWq5l7duxRAo6PPiXAsgZmjl7zgUWH0zBGAEY
xA+1R5VBiOt92+XsppPTPX6ZMTSEBWUwJWyw3GrUTSSVXHa06crFMsvLvEXm
DoDgrmNpC5bi+Ps08cqL66mMIkbSDEF3Np1NQcbyrD0x2.Z0j+KOmrN5mhWu
I5mRdZ08YoKmUUc4HHz8CwEEgJzU8rH8qGXOW0ywjIwdLGMx.9O9GJdmsYP+
sjNiVU0oToghYlPzImQEHKgwPWHgozHbcgGxogujNA2PRSkNrksQRtRssgbQ
+4ZUILGvoI5BRKTEXq+tetfru676MxRM+xO+OEp3RoYf0Y6MV6X0KpWMEi6T
za3Dsp4TGLTbkHvE9TRWcVbcJ4MvXzoadMiPlk5K1Y94kk2XHA2hLHNi.V4M
ysJNVcQ4MY.ygS4.fbF1pvbpk9wTfVQ0EmCG3l6rbK7HnbkxWBotn7ye5KKy
ydLY8OaYoFWwHaDsVsnehRmU4v.rRk8y2PTB2LEDkWIs4QLxvx9WC4jkFAcb
odI3DhAr94cZpT.xFso50ENTmm2N7wggYFkuKYcxGimHYgucaQQ15PkHNdVV
YIqFxWBFcaH8f9erxAm+UEf+cwqV+6c.x0xQkSZbbooC727oUZEigh.GIpBd
Yf8+LovM9UGf+Oe34Csc75G.wWxHfVnF8.EkmUIWyKb+h81TPe+9jkcWOxov
2lns7ipvTfd+PbQ9pOunHOcfvxIAnMmj4fURNvLxWEpY+yYKqdB8ZwrDsvHt
KXITmnqSBwoypDQuPLz+4sOce3.bSZKO1vkID7+wUKJZGM+pk24GMI2ohWkV
N9SKxdNoalNtOpUJ6ok3jKf85a.6miuuanbKlAnIt0KpGcRPd8RJuuWKR6z1
+0vpneYTN9yYOZbkvnrjnKLHSDbp.b0hR.quRn9P5NEn9+1SsHP3WAKF4Wh+
XxCY4O86i9nU6Ww.ZNajIBKiy+vaWaRfcu05cv94JQZoZEQYDGKi8nzhTifm
4gKv5OZNWbz7JeyNWrzYbcHJbMoZ7hwJaT479Me97CgpbJmGilG2Od58gD7n
BimqxOSjhPekvMe3B0XmMFnsgjbTDMuOMQatgaCM7sYYeX1nyZuZ8G5KW2c0
9cDhKSYWoGhQxRyjHbjVExkik43qqcjii4QpSCiPzEhWia0fvpYitcKrpdXX
eZwrEGK9sOPu1diTsTXF5bNndTEG+fac9+hIIM+ZvvzTi4XsaIRMxkTZ4EqT
O4No1K4uPjh52vcJEQJ7kDxIwxfmh+LuRVvt0g0PyVWeMtButlyh0GLLiNXB
oVDIzQm3bvg8sMdP.SXXU84NMZEfoBzO55naJ1qbU1wa61UWGW5BybIjl8F8
cMV5Extp9Lm2vvEerjZ64HN7rX2VGeWYerOYqcwkUB91zsIUSgbsVMEAD9MY
zdc0ppZnmBjHO6Sq6EVbw4Yl.r3e3Kw8CIPXEysAwDBW9CSqY.CZqdlNj36x
SR5IVXGEJcGNvM17McHvOn0rutHtWnfjh3bmy74HMBXGR3JPwlN73eMYYuvA
Q4Jhfx0ph7y7NU3v+dRZZ1m52PAl41RlBIHsK0CwzRIAsWnYJDRNkHJ9qYD0
Fp0uKKsmrkkd4ioL2iRVFzpFhLpHwyayeNsEF9cvBRnHmcqXFhqrxVXIiiks
XOKJJ248TfoUMZ0wazPNIpVxSVjr5iguCHZhOsbc66Q.T0imv3h.tkQaXC6j
0ZbpVwtxOwpvernzRYJxEWO5KKm6lj0K27ZbV48CXgq23fSsh.PBWL1objxe
R1DPX6t+W1gsh3mayIJqhCi+93hrnu23ElYiNLtoH4gsooEcOfwlC.rvRk4k
qzz3psPNkCRFCbgoiSDD2gEjqUovmlAHGxOQ39.6iLrTHcFpRJEsIXEQImDZ
m4915034k7SFuv9k9EbDPoPtUFnYUo9stDGgHvwG9q5HHgGjqpQFtJqKdHdl
IStA1EszfM2nkmkvJ5e9iqxK9Rz+3iYCh5mq7q.VKgnd5pyciVdX9eveuVdb
5oqVZL4TIEtJIVlit6LCtmBnij3AniDn.5IdsqR5Cx7GSPWCG20nd007Pnu6
fu90ShIqmBni.9.zQzPPIBaH5I9j0SgvKRj6SgVcumBYXhL.nDIDdbBeLjrC
uqGbIaRHLmRZyX8Dz063g7ezSqVZu9k7SHQPXS1sW.jiu+uo1k2clWgY9L9t
vlg7YUl5evFXYghh8l6kDx33nv7FROCxwfCBGBGDdHTNX6IHjdpu56vS17RX
d.3DvGBbJDw.7PXGHNDlwgf3AAMU6Pv5AAIeMDVDA3oRbBfPvogvdcHDCUvG
yQ3V6yA2K8lN4f6i9CtK5O9dn+z2A8Gd+yaWF3AY2NGxdgrZ2AKT2SJZXCZr
aAjMu+C6R1qqiYttNt2CadOXb58ewI16E6Vj6ceyoWxd8kqWkyqgrQW2G.Nb
mwzs8mRGydTcKayMXCBdQxtjY45dVkqOYTttlM45Uljq2YQtfyfb8VfXelhq
YAhS3syS5oydCPGlA395PNM3pMlBpAlM25dlb6LYwsNlA25T1aq84Ymyk015
MGcY1YqYV4dkQ1d4DDBL6q8Ra0PSxAAlk05dFV6LYWs9jY05VVUKfLpVuYwq
k4zZCa9IEH6nkvsM6n0U1yNkPMBlo9bFaE1gVuGY.sSmyO5VlOq+ZiqkwyFJ
d0pY1rl4XaUpcXn.q8YsrqHfpRFI6hPUfoGmACzplswZF3BNQcMvvD9pBnpk
kvBi2pwLCQeRlRglQv5S1.annWkY8qPkCaBOBOKeMTf8gYyqNA8CJ.UISc0L
vLfLTSppmJYfq.zJFnQBmY12NmwjFLDtUpPPiLiU0LlUy.SqyRVCEncX1vZ.
46GTvrRlt5JxZipYwp.3xtblqpSYspgBaJyNUgfJAp0qyYipACoNHqS0G6IB
NKSMX.ekMH6PXN6YFTtT1iZnPoJYIpNMTLjvxAY.pAjB2iL9TuQtlyrSswUG
sHaN0Cu50lLJxf37iA2id0c9QWyRScNCM0aNkixDSCQSgaO+VHYZod6ls.Si
PuF3zNYFTpyYOoPybRC.KWYFRpcbHmLqH02chP.4TmoSe0.GKgNjoiZKwoaY
3nNlci5XlMp6Y0nNlQi5sXxwYtnWNikNJqDE9ZDC7TV0orPTuwqZ4vj.c8YH
YXnPytPsMmrLHHbkLHTHqxKfrFzf.V0xNPC89nn0YAnNlAfFYa.ZqN+9wUUW
5HrQwpYzmPc51YxhO8ly53r0Svh4AkgdFJ.rZl3IXHLnruy.AgUyxNACfAkY
cFH.rVFzIbH7BmO+AB3NH63D9TMgjQbFHXrRluIX3Knrcy.Ae0ypMgSBCIAu
b9j6xvh.3WiHvQYglvYQBIQPza.rZFl4TFOzkrJSOynL8Fupm4XBmmIjrES+
AtCyJLALiefYBlNkEX5MBUIaub8LCxwYxk.HyAl8Vd4DXKyPKmdmbetrxx.z
+Mj8UBgvFVVGoSYakACoFIbZ.WeePYPk9SOJyTJWImWfpY.k137y.y5ImIim
zurcReyzIWJKmzNBq6nyYifmoM27reHblY0pey+427ew3Re8m
-----------end_max5_patcher-----------

Your normalisation doesn’t seem to be designed to achieve a particular aim and I don’t think you want to normalise in all those places - what (in word form) do you want the filter to do) and what do you not want it to do (including effect on the overall amplitude)?

Otherwise this looks sensible as a way to get a set of band amplitude changes, but I’m not clear on how you apply them.

Yeah, I just kind of chucked those badboys everywhere without much rhyme or reason.

What I would like to do, practically speaking, is play a sound on my snare (or whatever), using a separate/unrelated part of the patch to query for a matching sample, and then adjust the frequency response of the matched sample so that it sounds more like the input sound. I also want to compensate the overall amplitude (though I’m presently doing that with entrymatcherlookup $1 to manually compensate for the difference in loudness).

This is basically building on the more recent patches in this thread where I’m doing half of this (creating a spectral envelope from the input snare sound, and applying that to a sample). The main difference in what I’m trying to do here is to also take into consideration the spectral envelope of the sound that is matched, closer to a mic/speaker correction-type thing.

For the sake of speed/simplicity, what is applying the resultant filter response is a set of cascaded cross~s with crossover frequencies set in such a way that the center of each band falls between the crossover frequencies. (all as a workaround to doing this “properly” in HIRT-land)

If you do the division with no modification then you will correct amplitude and frequency response together. The main problem is overcorrection which is the point of the regularisation. If that’s not enough you could also hard clip the final correction.

I you wanted this spectral correction not to adjust the overall amplitude (which is hard, because we don’t know the effect of the EQ on the overall waveform shape) then you could try to create averages of each curve and divide them out, but getting that right might be quite hard, but you could try averaging in db and then subtracting the average, rather than the max. In the patch you have right now the db conversion isn’t needed, because you could simply divide by the max in the linear domain, which is equivalent, due to the laws of logarithms.

1 Like

The normalisation you have now is definitely not what you want, because if one band is high it will dominate. I’d also only “normalise” (based on average) the initial two curves, and not subsequently.

Two birds with one stone is good for me.

So in testing this out, as a point of comparison, I’m getting amplitude values >1.0, which I guess is what I should be getting, since I’m not compensating for the maximum.

Here is averaging (in dB) and normalizing the curves before dividing, with no additional normalization afterwards:

The final curve ends up fairly wide now too, which I guess is where the “two birds with one stone” amplitude compensation also comes in, is that right?

If I normalize that (off maximum) I get a curve that isn’t too different from the one in the screenshot before (not as big a dip in the mids though):
Screenshot 2020-06-25 at 11.58.47 pm


----------begin_max5_patcher----------
9392.3oc68k1jiajbnedleEvL7Gr8qG55938E6UV1ZivRxJrjCEN18ESflDc
KnAMACPv4PNr9s+pKBBPBPT3rQOZ5cUOnwYlYkYV4QUY9+75Ws59zOFcXUv+
2f+Rvqd0+yqe0qLmRehW496Ws5ovOtII7f41V8TzgCgOFs5N60xi9Xt47f0D
HlJHAf0BtDIDpCjRr53.3Z0wbgP.j5SB4TAWc.UcBj99Qpif7Suwj3cQaROt
y7ZQtStOK5Pzt7v73zcus16X2wmROlmDka.Sn6rwaM.W58+5afjSeA68k+o8
QVDe0pf+em9Ng4a9k3cO91rnM41qx3r0f6BDPrBeN+iPvtK.Q.5qgoqAEuBE
fDu6Dbfzm6+80uV+q67kBeLIO9PR71nrU0hbnZPNzpBLHK7on7nr2FsK79DC
JBbW6f5Ej+I64fMRLtqLAQ8HJzQAe1qZPWXIrsYBFGIVSAm+ABIEDL8cT7Jh
ebWp5oSh27tx.VE53oSdH92LvonOz0F4boHHWwIBWCARnTe.hh4Dl9.Fjvr7
xT.kquGJmBz7ubBjy07uXDiHuI6aqLmx9wahj34k2bWzGTf6Ujv8Agu+wuOM
6ovD8.juXMseXME.0XFhH0+iDY9CTSnIr7KRIRYQNG18pUODmD89nrCJEKkt
6WsJb+9Rm9UkdDMI4WSMuHwcEmJdm8TvhSkE893SOOs3rgYJzIWgKGyLH6pO
xNoXR+ZRUR86NFadS1SpFbbfjYXXmR59v9vM1GVOZc5xmIPRjgs.gMb.Rl4u
3JljBRjZb9wjzMuKZaI8Cpwg8Q6h2UVYakKuM5gPkxo29P5t7SRhPM4ulq+f
CDq8hZjv.++or3vjBL3wr3so6z.QkgB8oO849KAPpQGDsLxXticg6q4gU7YJ
5RCW7fBIOd39vL8HkSYI5zEySSSpdohmKI5gb2k2Gua2ETw7z8Mewr3G+ka7
r2mpt3S25catxg2dbm8puUwTj+1CguuJ0NOLIwIrV80+wvcwOElGkGaGBPfh
KZmv3WNrIKMIoB9Zux6q4JaUL4ah9P717ew7gJyLnt838mXhVULJuM9wnC4U
OWd3iGpdlhIpJcpi26DheadzS6STXQ0aPIdDeH+vuj9gCta7DiVYBvY6cJKT
WVyWkyeyYQppF7MD5ZLgSo7xWttYDZV+XSyLzhdxFmg.ZTRBsSTPuZJgFlV3
UmlZvoApmDqJSWTkVs897zvUckZfGF0fHL5EEFUHX4kSbTyjGyCwHLOc68cl
X.GFwfhrlosvnEOEEtqYRApARwsYLdHIMLWaXarVJrE5BzZdADyVXTl7fjfj
tSZH2lM4NeXUr18CL+CRtltPnHuO5i6yB9ae.F7F0uQA+yG1DlDloshJ.1c4
otnqsAaftIADYYlfbb67TnK9VWXxzHReMeyNSrXjwP6CFXcbgyAJCQDRDybN
6UtA0oL4dS5SOEsqpAEFfc21nON1LiVDsYpEnApEckOLHXjkdHPN5A1S5Abn
ziy1RqMWoAKjLvs950SnNjdLayIF.2r0AUAZkQg4w6J7r3ubl5nuQuFm5JP.
8DHz5ImLffQ7EJlRJgFHf9.D3oDJjdRJvSMovqwC4TBE3t.EUG4Ry1ZClA74
EztAjApUOyqKGTiUZGW29VqS5uMLOOK99i4V8OkiRSmbl7wjz6CStvCv5707
0mAtwINXJyL2pcPT6Grv6vfg5YXvTdapMDCXbpQvaILX8.KOMSxkn4gmRSy+
knsAg61FrM8C6NDpbGOZaGhAJ3Zx.mt5VHqwnbtcdRgwNJLdNP1rnCGSxC2k
G7WUSg99nr7ns+0UAG1qfsriOMPblbCblSLdfvPl+AB4yJRGkG7PbR94jPzS
LDcCLDY8wBAgZNY6P73hfMEz+C4gY4JOZTNyf3DLmooumOlB7V5kw6m3qMhL
DAasxuJpfvQJ2CnbJRKRCusvLZzoDf0PAj.LndoC8mJH5Y10LL.DLcM6Rp.j
SGepPzusMbyuuxWtWlbUavNUPudDjX.cxrj6kjvO86A+Z5tGSTya5aBC4fFG
uND+3NcP4CVce3tG8XzipDYuhBvky27Q+0UG1ElEozJ+2oXleLJ+u2+A3BEv
kSZApYTFBDDyXK77DQHvrLqqYR1f+NqsZc.EwcDEYB3YLTRmOLLK5wiIgYw+
Vz+j2XGs.6t+38UySSkXzfJRMQsS0BHVzz7OPD+RWtqOmhUBLyeNJ48Q4waB
WMhjDib8mVGF+PPnZBYct8CD9Sbf0MzCaM0p1gdHBLei80gnDJVB8FYOmCdO
QVASTBYI7wGYmdqOH805C2HLx5BwKN6MHrgXuAyEGV57g1v0A08+8GgA8Cgg
PaNurdO.gnwGkabQg7TThxDhsG7FIwh1rJo8wVDylWq1Xo+i2xBQ3lbyx7Cf
1khEf9kkExWVVHeYYgLrkERUyZtH69G2FmFnzn04zFAgsj1HYMK7OpMKiTwk
1yLsoo8VT.ECxgC+dvigw6BRTiEAw65LsP1Bo.SYqIbtDPHR.lyYHkkMXtSW
2xgVX4F5AAf2BAPPulWvh+zYF8uQF6Ot6WSULA7lwdQ8XOE09xXno+qsbQis
qWRg0c.4xY8M7O768XYLTXDkWFR0nGwL3ZImvjbfRVRBn.th1XsshA8X8Krf
oPD7XPgXJhwK.JjS2KSxHq4XAUB67RHpvYq1BX3fnbJOT3PBRPs+lwX2U38x
KVVMDXLX0np41XXFDyDDICvETXCDrW5hlH5XPuHTvZjjS4JNMHEQgRis.30m
oVbHFCWhBpD850WIS.oxNKnhDiqfZs7c0RGgH5ZrR6BCfPBf.wnrWxrgX3Xv
FhUFdcsIoJ+ugkoeKRtPLQPTfIFfIclKDiFWtv5klqgLpYBWXzQDVHWqloqp
dMuHiT73RFqkaDoFlOSCU+Fi+LXV2VVyydRvPD5ZHVhIDDCgjJMfxFHXuzm0
kNJzKHgsFCkLNBhgPBWQbraCwxjKJktD02Aobs9DNG1c8cT43JnVOeWczwkj
Bu9Yt2nXsGeM4x.enXCWiJKmxEKQ1NIWrFxEPP2mdfMxSOTqzasjQ8JQST5N
oD3xhpR0o3fyortKKC4irsK0waZ26Cy9rr8aidHXSkLpaCVsj2tG8jjwG1di
wEOxIh9fd92NLBwptytPwBeoGKysCi2a5.M4Y51zAbOgBzTCD9rUTXS4t.As
DFOzQHbA.EzEATH7k2DL0PgOLm53hOYPAFtDFQv9JifnSMT3yHBZRoEhkvHB
AuHfBlmiH3IGJ7gVPlxoQzolN.46VLsJQaSZhcAh4psVm+koJaMcvquV.rP.
WpuSJrPfWhupLWHvK1GQY3xAd49p5Yg.uLeURsPfWeTsSWHpy7cBQ7Tt45oX
emPbJ8qhtHbwjJWB0bApzW93oz3.lubmTxTCEdQKlx5cfvWy0pIFEUzrXBJD
CJnX.hiI24NEVBDDf5jly.HP.FiATDhyo7oTEjv2XpTioWcWk44fSYVMzMDc
pyKld8BN8GMKo829cQ6NdNHXmV780ik2+3CwIIEf2qt5Nd0pSA0zgD2U5RUP
Kjj.gBMZggXttH+nNRcfIGVkoFtmCd5AIThDfz2Ngg3Dp4HABSwFZTMOJ572
D.k1uDPJrrDX8ofUpfstkHtd2yZBNJGTtVNoq7vo6SyJ1yCqwxJO2w7zGyB2
F6hvXQIu37304cpgs57ptyqWD653ppK6ukeG0wXVLn9sG2DNECjEHyMFK6.c
s5nonXLTvATgvdjffa7QKFMYT0GSe+L8Ob6Q121rLX1j.KgSgXCJgjXgzdDE
Bzor8B.aU3lMp2bkGGiTL3FJH4DBpEKH07zQIQOc4iyEJZgkfBfBg8H0aBgt
94u+wppPUpG4lOsBpIbt8Q0KyF8Qzp1qdP8w2nIaU+5HEZZfYHiirRjB.PWm
mu7iqyPm4YeqoDZbHpfaBKQPlkpcRTGUOKQkcaqRe5+w9ncA+X3tCA+XzSw2
mlrcUY0kSfP22Elm6qPW4M6ze4hodKuQoz6n7p54m..+G9S4u07Z.+QRmQmd
z4TogjpmPzJmQ3.CgQSWv9ozvecgWxogZSmfcHotit7MuIIJLqzSCslsHUpR
nVfSQz43NnJ3ZaeZV12tAAmXole9m927Ubovfwpr8ZqcL5EgHHkYUzq4DMp4
jWLTrPD37eJoEmEWMIuA0FcZmWSKjYn97Sle1t7FEvYVOJXTLzHuAUCnHYqx
aBOlCmvfPf0vVIhQLzOpDJLqzlaKuBYXk9CC7n2MER2Q.YqxO+4OsMK8wnc+
jgkZZEiLqVf3MCST5lJGFAOUNOeCVxsyTfkNkz5SQwiK6eEjSTXDz0GMHAGe
Lf0MuScG4grQWd7pBGxaya6+3v3Lix2DsK58gyjrvWcLOOcmuRDWOKqnfUC3
NBN41P5.8utzNy+EEf+Mgw698d.4J4nhIMt9n4C7O7gXkhQeQfqDUgNYfy+Z
VgazKN.+euRKXpy75W.wsYDPGTidghxapjqdG2a8qMGz2usndg1C8HMgu0Qa
Y2HlpSG58cg4YwebSdVxHgkyBPqabXdqjbjYjWDpY+9zsEUQwtMKQGLhqEKg
5EccVHN8VkH3Yhg96O9z89Cv0os7ZCWlQv+Gh2j2MZ9hk24GLkT3WjVN9iaR
2G0OSGOm0JIV+SiNvt7Fv9ov66GJ2gY.piasU8nyBxqbo79A4jVy1+UiWzOO
JG+ozG0gRXRbIpkAYLmQ3P6SQvPSrRHtT5NGn9+0ScHQ3K.mQ94v2G8PZ1S+
9jOZ0cOF.qoSLQXaX16dyNcEx6MlnCNrPIRJTqvKx3XQtGEFjZBhLOrEV+IK
3hSVT4qO3hEAiqGYgqNUislqrIky6WcELP.nzdadJd8ngwSeNkfWcvzEp7aj
oHvmIbyW5nF8l4.sKjjqxn48IQJyMrKnguJM8cqlbV63cuanbc2U42SPdYJ9
TpgXfnvLIrtXDQZOWlSut1INOlWoN0OBQeHd0tTC76IqMra98nWl1mNLaw0h
emSzq4qgKejeF5bKndREGem0O+eVWEneIXXZh1brt4hTsbIEVdQKzSdRpss3
EBjD2BtSJwBt6HtXVrL3ovOxJUls6bZMTr0U8wk6z0bSr9hgYvESH0gLgN4D
mKJcBcIBBHLEIqN2oVq.bt.8q5w2ywZkqzJd6zp555iZYlKtPu1nuq1idlrq
ZHy4MNbwWKo1cNhKqyEcMv2kVG6yluK15jyWkbLpbmBuypovPtaQFcVWsrrF
54.IxR+vtAgEsNOyLfE+KeJbXHA.Io1EHFmiwHqlADTY0y7gDeSVTz.wBynP
Q3vgLsMeyGB7cJM66xCGDJHH.FyFLeFPg.lgDlzTXJmK73+LZ6fvAdgGQvBe
UAtYdmKb3+NJII8CCan.QsKISt.JLt5AnJoDuVKzTI.HlSDE84LhZR052jlL
P1xhn7QUVFSsqt0xFhLoHw9iY6S5fgeW3PBAXsaEQALoQ1RWWtQhNrlE4Eq7
dBjxD1zeo0PNKpVxh1DE+d+WAD0wmV329YD.Td6ILsHf0MZMaXurViQTJ1kt
IV4tsEkRJSha0ezmWN2CQmazVunlU97.l+5MtXWqvg.tMG6DFP51Iabneqt+
m2gs7v8cYGkUJfweaXdZv2piBypIGFOjG8vwjj79mvX8F.lanxrBOMglRJe6
6xAAkBsooig4X6lEjoTovlmAHKxOS39HGiLjfKrFphKDswHIVJlEZmtgd8Rb
+R9AcTX+zvRNBTJAVOCTrpD2RWhA.X30a9qpHntte5QnpAZtJSHdvNlIkxLW
1R81biNtWBKo+4qiyx+Tv+5ioih5G263zKXkty0s8s1tz2aCyyyhu+XtsTGT
h52stI2iIo2GlbQKfqtlM2qOuA9m11KNl0Z6EW4i1oVI9htghioiWCEWwWaZ
MkSPKDuAb99iO7PTVAVGbtaD6OAfzHA3gjzvbuveHkVpGlBssusYgBrOXWZ1
SgIZsPd2tVw8rI7xccgWttSq0VmZE9G7N0JiXrNmH.eoQs9kF05WZTqCqQsd
itGv16ySC6dqhZX05chsI.HLREXY6cDfYp0Sp7tb68cuw6LLhgswHvQOGzhq
R5aIhwa3JqhEbHM3Mv0Jytwb0Q5.vp8oRIzD7Fj11dJybZNQGBrf2PVyfHfj
ndHn5jfpsVFqCCGsYBERF2NmR68XFpsy3JMyDSwE+wydO73u4MJBZ2Y7tMmm
0BrVaAJ19DLjakI8nOvNSzD08E+zwmtIgooFZB1CByc5Ncg+zGaiofSVLcSm
7fjfjtSZHs2RgaUikcsH..9xwLSpueezG2mE729.L3+i52nf+4CaBSByzlm1
m9olrCZaZv5xaR.QVs8NG+ZgmpgXR3LF8Yu6uvHiwjfXWUtjyAJS7DRczNWz
sJmd1JXXzU9vffQV5g.4nGX1K5VAyRn.4B8FJbUR2oAJ7s.4Bmxx2bMkl+Ff
B7TCEdOhLYPgr28Gfzrs1Hz.ddgrq4oJfL3zzaP7DvXSYaRg4M6Si.wmIwgu
gfblGbef+QzEwaL7ll.4d2k9UTarNIlfbhHx5sPbxBnqFWS7GWYshq9DRWBA
OUnohTqdG9iPzyoVISwikGk8VaXvJmKlZM5uZT5Ufs12qJQGakdu3FZPcV6C
8.i6jNCcmigdeL9u8n6i5Yz8oVuDQRQClzO7LWYRfXkBiQ6LDPgOLDGhNmxR
3sXRNSBTOhBcTvWokRSobmdCRDUQhnfy+.0qGSjMb+7RwhYU7i6RUOcR7l2U
FvpMMImb8h.FeFJTv+ngspeLTP1fXnTTJq3Dc7YnZLoXgu+wuuy4EC1SIGAy
F3I6bERzWxK1E4EChroDCSs+i6u9Rlw9Rlw9RlwFZlwtYBPXv0PpdEn2XJLP
cMNYxAlACnMjgR7YqqvzEPvn+RZD+ibZDuUVbhB2sfxeyBhx7k72zb9adyKp
72f+R9a9R9a9CP9a7MduxYOD43NlTm4KF4uvxtA9y9zMMB4K3tOORE5Hj9lO
SxbRuBsJX4DZUWLzvJCRVVgVsODV1hKj0KP5ZkvVb1BZEHA.LBLvb.DvrG.D
b6ADgzbf5JtKQjB2AX28vv16AHP16ECYtCnT6Ab2CAYP6CAglkDp9RDj6oEt
mhwrfChfcuPN2AEnSeBn6lQtaAAfNffvItOtzAeb.7DfhNcvoWmE9HPg8gHp
eruOJz8PDjCwwxSjB5oy39lXhCq.THwQ.otSPJxvVk3.I7MJ4jAEjblMzu1j
A.grm6zKIHKGYUjMlXbzDldIw3kkkxALyiMcDue7MNhBS.WCIJwCtipn2Os3
IXmlcC8RD.EYzZ.4BqBJHASsRk3SmQRspXfJETB2kXNUBRmrLEhnNEJNIWhU
tkybx+btSMGxcmBjz9gnTmJQLm6zbQ4HmtBjUMBAKcuVhSrGSbpvvb6+xgNc
PDvouzI0cDLv9homdcLhCbUeJmxHj7zqg39.NU1LAvoKS3T2QINHlybprETf
kNh3Lt8.z4MkV+TKUrRx6WVJs5kP7oPuTiYo7vSoo4+xWm9gcGBeZeRzOtWA
VYMsZIpAoECRlp17XCac6a9Gu7WhsKYdhc68Ar7JLN+Kou7Kou7Koubfou7J
i15aRVtgAbMYDmuYfnEi4ZL6d1MnEQPVKobNR8+QXkAB5RcK1sStHW9dp2pt
aGg0JV2sTSUJbfAn+D0ToFlbE07EepSG3FCjXrhwtC3l8sf4.DgeYHA6nqSg
HKArPFIDrWDCEH0Xw7nLkPVxZSEzQQaJBKd90ldJAg0RcJ7NJHOMPD7flu7P
v8eJPYhVV3iJrJP6vwmBnA56UeWvFWsS3tlmTYKoIEBEq003QhjsFwPBtjh4
XDka56YH6LV7k.gbyujtOH8gGBdJNKSITr0QJGOZEuEZkjaIUP8lwGfAXFRJ
X.tt1+w.KGJE8M6Si2k6bOOVuMJ57hmqozt2J6DYstSXfwnq0x4VYT3k.Mxx
DEnv3nr1Xj5LUps0l.hZoRH6xmyti1WFzkMo5B0VtVKzsrBrADmzBhKnF71V
mgbk6.vK1kH23sB43.mTiXQ6ZvukD7XV5w8AhtSrZYAE50pliyMjIJEtFikP
FmHg.pvTfIYvESYgnebSs3dY23mbDJfZx8RSpKvKM1oXs5WZOHVzQiahvXqg
BFUBUzGpz1fCH7EC2jhJkE89tShPvgShPJJf1jGDDrlqSvBVvfPImqqx33EE
MR403ln.LqGDJzvITPAvPnfLgYCKvoR.mvnPco7dAoZ5WUFFFf6QzcF39DvM
AGR4zFFPgTn.RjX.QWfkgbX6q+Y7bshvuWulvU+ueKwzm2ZlTQahTca83Eaq
4R+2oukeAIChnqokTqyz8mA81SDW9GcUZdonkue5uFCU7N1tWJpuH8fLwFMx
TsJunzOKHS3Qv7Sk3mwfADdM6R++WVjIiU58fHQFMhDVnzUgI.HkwY5UYltW
GPgKJdo7rnvm5i0mX93oZRRWKTSFhkblfoXn3Hcp4mW5T+1vJP9fS4CxNuuY
GqH.DFhwwb4mm6XEnXkW9iv..i2sbGAgff+gnjigm1ZNFtiq2+Ybqy3OrIl6
5KEz+MOyzVgxfTugiIkOB4KXflVvvawJsmaAnICNP9tghPS5l4A4sHjdt6ID
Nzi5XunGnIGNPdye.mT3vO9C1jSOV.SCYfCxBfOk1I8GSGbv7FNlxJXnw8P+
3SgSKb3Oe5rWqI8G3DzY2FpShKOu6oT+G8lRnvaRAZ1Yg3CuPpNMLPBeUHJX
2Xq3VYwJ2fCTmWq6G2Fm9ilUb9a+tncG8u8u9PbRRQOY6UWcGuZ0I2vcMDv6
Jcop8oOcOBzzG1vJIHDy1w93HJ8BsgtmCd5AK0X4cssM0QBDlZ6N007nnyey
SMiPLP6zu8nRM9xxOZntuXYB2AGTtjfnFfyR2mlUrkDVikUdti4oOlEtM14D
bASy4wqooE98sG2DNECjEHyMFK6.cs5nonXL7bWzUXZT2M8nnt2H+llAy6Zn
4WR3TH1fRHIVHsGQ068Eu5Nq3hFdYQSJG6ZBl9z5L4BEsvRPAPgvdj5MgPs1
5Lk.BjaalrRJw0IfIHo80QYdzgF4HEZJrsSWNxJQJ..ytix2FzHBKQPaOOsP
TGUOKwkcnw+i8Q6B9wvcGB9wnmhuW2Rjm39l42El+xrge9C+o72ZdMf+Hoyn
SO5bpzP5ZioZ4rScmYMcA6mRiN1TSKwogZSmvoly90Gc4a1jI4ROMz1hskJU
ITKvoH5bbGTEXd9S+pEYe692ahkZ94e5eaX8HWj1ZGa+FGAoLqhdMmH55dj6
hQfy+ojVbVb0j7FTazocdMsPlg5yOY9Y6xaT.mQr82XJFZ6f5pATjrU4MgGy
gSXPHvZXqDwHtV0NT3SqCmgU5OLvCmvjR2Q.YqxO+4OsMK8wnc+jgkZZEiLY
zJdyvDktoxgQvSkyy2fk1dMs5.mRZ8on3wk8uBxIJLB55iFjfiOFv5l2oti7
P1nKOdUgC4s4s8ebXblQ4ah1E89vYRV3qNlmmtyWIhqmkUTvpAbGM8c6dGn+
0k137un.7uILd2u2CHWIGULow0GMef+gODqTL5KBbknJzICb9WyJbidwA3+6
Wt+P6Fu9EPbaFAzA0nWnn7lJ4p2w8V+ZyA88ai11e8HMgu0QaYW8.yA58cg4
YwebSdVxHgkyBPq2IydqjbjYjWDpY+9zsk2gdcXVhNXDWKVB0K55rPb5sJQv
yDC82e7o68GfqSa40FtLif+ODuIuaz7EKuyOnKtS4uHsb7G2jtOpelNdNqUR
ytknQGXWdCX+T388Ck6vL.0ws1pdzYA4UtTd+fbRqY6+pwK5mGki+T5i5PIL
ItD0xfLlyHbn8oHXnIVIDWJcmCT++5oNjH7EfyH+b36izMkweexGs5tGCf0z
IlHrML6cuYmt.18FSzAGVnDIEpU3EYbrH2iBCRMAQlG1Bq+jEbwIKp70Gbwh
fw0irvUmpwVyU1jx48qt54G.TZWNOEudzv3oOmRvqNX5BU9MxTD3yDt4KcTi
dybf1ERxUYz79jHk4F1EzvWkl9tUSNqc7t2MTtt6p76IHuLEeJ0PLPTXlDlA
TpPZOWlSut1INOlWoN0OBQeHd0tTC76IqMra98nWl1mNLaw0hemSzq4qgKej
eF5bKndREGem0O+eVWjleIXXZh1brt4hTsbIEVdQKzSdRpss3EBjD2BtSJwB
t6HtXVrL3ovOxJUEr6bZMTr0U8wk6z0bSr9hgYvESH0gLgN4DmK1rucIBBHL
EIqN2oVq.bt.8qZUrywZkqzJd6zp555iZYlKtPu1nuq1idlrqZHy4MNbwWKo
1cNhK2K1cMv2kVG6yluK1pRvWkbLpbIjqypovPtaQFcVWsrrF54.IxR+vtAg
EsNOyLfE+KeJbXHA.Io1EHFmaqeXJMCHnxpm4CI9lrnnAhElQghvgCYZa9lO
D36TZ12kGNHTPP.LlMX9LfBALCILITRmO73+LZ6fvAdgGQvBeUAtYdmKb3+N
JII8CCanP201syyAEFW8.TkThWqEZpD.DyIhh9bFQMoZ8aRSFHaYQT9nRceT
xvfV1PjIEI1eLaeRGL76BGRH.qcqHJfIMxVHAkgDcXMKxKV48DHUoZzniWqg
bVTsjEsIJ989uBHpiOsvu8yH.n71SXZQ.qazZ1vdYsFinTrKcSrxcaKJkTlD
2p+nOubtGh1s8vKwYkOOf4udiK10JbHfaywNgAjtcxFG52p6+4cXKObeW1QY
kBX72FlmF7s5nvrZxgwC4QObLIIu+ILVuAf4FpLqvSScn17YWNHnTnMMcLLG
a2rfLkJE17L.YQ9YB2G4XjgDbg0PUbgnMFIwRwrP6z8aqWh6WxOniB6mFVxQ
fRIv5YfhUk3V5RLcum85M+UUDDy7JT0.MWkIDOXGyjt1.ayVp2lazw8RXI8O
ecbV9mB9WeLcTT+rvau3FBQ0xUmsiVdY8ev0WKutCrWoRSbqZBWAq+EkhhqZ
lli6mtRM53h5yQ++zbO9zW.eiEV6ymVVO8dXHM0iOb4pcTu+PPnGeI5X7g7h
CBLBeIhOenwf1I7gwjOBeHu3CEj5EAPyfzmnhLvSwaMM0GmZNL.oqY5bH95t
JsqSa27kPTWcDmap65zxs06BTDOLNSlOLLhoPAiWeZwTnUE4iBlQQtG3yWhM
BeIjOZXFkOjWZmGCAeCcA1FqI6bUQbXeIfOeoAiSbOvoxU5wg8klkYQwTe0R
N3ujWS5vlDa.89SO5ZqHfNLKzv9R9HGfGCEiD9b8klMQalOnDeLrwiIlquD2
GVOlbJD37+S2h.m0yyv860ts6dbyWc0Sg+pMX.h6L+Y7N6eZpO6qxhzMPd68
aZgLqBy1nCqwl7iYVOe+Hy1GFV8Tp5Cu6Xr6aabB+hZKnE6aolBdQXRbzlZV
dLmbeu9U+Yepcf8rtA1yU9Y8q.llW8KMrxWNEhg6dcyALoZvRJyJVSs.r+C.
Wttj52pCpm0tq9Uq+FsAAm3Wepqe8ul9Mj54WeqkeCpN9M3Z3m20uuAKPbtN
8Uu.QCwZtw3LOX.5x5u2mGxod+XSofpm0Ru9WG8tQMzqm0OudU675dUN5V0L
uAyQWTa7pmUdP0CumOAAOq8cO2VMTmbfm03t9We6tQssaH00t9US67nd1MXV
7J0sttvl2n.YOsDtq0lt9xd1qxYh2L02xXK+JY.Cn9y0bEWoe0ctgqMtR8la
r3UKWW4pmisSEViwBrNWy3VP.Uo5AWqPkmEmnQCzJWq2pG37tLoMxvDZQATU
pQa9waUac4XHkxJeqGaCoVrMVzqhZtluxg0gG9Wi0FKv9xZoVuf9QEfJUmzp
GXFQFpYU0So5elGZE8zHgaL6auqWUiFB2IUHfIlwpb8Jqdfoy0nrwBztrVjM
h78iJXVpNisfr1nbMDyCtr1qaX8plgMVXSQsAyGTwSsd8tVfMZH0E07qgXOg
203qQC3Ks7jGCyYuwfRa0tqwBkJUit50PwXBKWT+sFQJ7.p2VCF4putZ0kPc
zgZo0.hpWWpmKiRvOF8H5UM3G8sFY065i0f4TtpNXMFuJT2427oNWM3vr4YQ
b5k.mVi0updW6p7stUMBrbE0mptwgzXMoZnqDAOpnQym9pQNWB8nNS0UhS+p
uT8r1R0y5JU+qoT8rdRMXwjqqaTOeFKcUMgxeeD8bOt0qZ.0fwqJUPFOC8oO
02IeqsScsh3LJHbo52jOd44QMaZT.qJ0lowdcTz4ZvTOq+RSrM.cUm+v3ppJ
c32nX45ojuAc6F0PoAyYccsRxawbupORiE.VtNH4MD5UsOZjfvx03HuAPupq
QiD.Vo9E4OD1R0QXj.tKpMQ9OUiO0inQBFKU2g7F97pVCMRvW0ZJj+jPeJuN
2tz5LtH.5kHBbUM.xeVDeJCGCF.KWeeZx3g9TSeFX87Yv3U051i+7L9TqdFN
vcYM4wiY78rN7zqZvyfQnR0ZmkyLHWWGc7fL6Ysy44Sfsn93z7J49V0DmQ36
WSsuwGBqe07kdUqaFMjZhvoQz+dupeMCmdTTmZVH6Wfx0eltD7SOq4L2ndyL
rZMyPqyLsUiY5Fg0t04LYvS+NOr2MDtR6s5q+ee8+e.cZOaG
-----------end_max5_patcher-----------

The final normalisation in the previous version made the other normalisations irrelevant.

You can expect some values over 1 in that scenario but that is the amplitude compensation.

You could develop a better “averaging” type algo to remove outliers etc. but not sure if it is worth it. Probably best discussed over a video chat.

1 Like

Alright, had a great chat with @a.harker earlier today and I think I’ve gotten it working.

It’s possible I jotted some notes down wrong, so do let me know, but the results here appear to be working correctly (barring my terrible k-weighting approximation (more on this below)).

So my rough takeaways from the chat.

  • only normalize in one place (if at all)
  • if I leave the initial two filters alone and do the process, it will also compensate for amplitude
  • the resultant filter will modify the perceived loudness in an unknown way
  • if not doing anything offline to reanalyze/compensate, need to come up with a k-weighting-based compensation

That gives me something that looks like this:

(code below)

So I’ve removed all normalization (and regularization) since I’m normalizing at the end, and then compensating for the loudness change of the filter.

In my notes from what @a.harker said, I’m suppsed to “multiply the weighting filter” (created on the right) in dB, but if I do that, I get astronomical values (e.g. -37.025 * -14.351 = 531.345775 dB(!!)), so I’m doing it in linear amplitude.

I’m also a tiny bit unclear as to what happens at the very end in terms of loudness relative to the original samples.

Since I haven’t normalized or regularized anything at the start, that should give me a filter that will compensate the amplitude of the source. The weighting filter just massages that so that the shape of the filter I apply ends up sounding the same loudness as before I applied it. Is that correct?

So if I wanted a version of this that I would I would have independent control over loudness compensation, I would do the same, but normalize (via something better than overall mean of the filter), which would then (presumably?) neutralize the impact that either filter would have on loudness, and I would then independently compensate the loudness however I would want and then apply the k-weighting filter compensation on top of that. Is that correct?

Lastly, the k-weighting filter is dogshit here. I literally pulled up a google image search of k-weighting and eyeballed where each of my smoothed/downsampled melbands would fall (371.274232 753.952319 1269.088749 1964.959113 2905.690638 4177.751245 5897.994634 8224.419765).

On top of the fact that I don’t know what the formula for this filter is, or how to compute what the gain would be at each of my bands, my two edge bands are shelves, since they are the bottom/top ends of cross~ filters. Meaning that my first band of 371.274232 includes everything from that -30 dB at 10 Hz all the way up to the 0 dB at 100 Hz.

Is there a way to calculate/computer/measure how my actual bank of cross~ fair with k-weighting?

Have I overlooked anything else here?

p.s. for this code example, the filter bass drum (top play~) should sound like the unfiltered snare (bottom play~).


----------begin_max5_patcher----------
10135.3oc68s0jiajbtOOyuBbX3G1iO8PW2ubdxq7ZKGgkj2vRNT3XWGc.Rh
tGnAMACPv4h1v529otQPPR.xB.E.YqyzZTOXv0LyJyrxJqp9x+1aeyrE4eNY
6rn+uQ+kn27l+1aeyaLmReh2392uY1KwedYV7VysMawtxx70ydvdo7ckYIkk
eYSh8cLaQ75mmE8e6tb5Jyyju3WdmDr+Y1DWD+RRYRwiIqiWjYdRf6Zq28R5
Z0az7sfGNo86bzY2DWt78oqe9whjkk1uNSfmCdHhC.yITNGo9CBKoBH6gHDQ
eI8ui9u0uf+m29V8udvS1dY9KujrtbOOTl7Yy2bFb14rpfOye1YOm+T95xso
+pQZHmCt.ShnZNgAwyoODA02aDjGX1BzDaIlB1RfFQ1B0DaQGS1RZYKtfbtJ
4T11wl.lTPwSFS9Wmkkua05jsa+qyhT2zlj0aiKSVs+FyRWmrLe2Zyci1S5E
IaUur3xz70O13cTWjg6gHqAgCUZj.BfbtrlvgCvpShzWBiCrv4o3ceN5Cu6S
IoO+9RE0D8TZlxeaz12GqbTeIITc9uxXYwtEN2zvfHQfPNZNS8ChxwBj.hnT
sqYvbJ3vOPHQo2.MtswgV84O7TdQzpzsaxh+RT95ru7+tIiFPXz.DJyCiOMn
lWjbSGQfaAGwkggiHRP33n0IeRQamwPahVmW7Rbl1ATaQazXjF7tz86Ehlf.
EFWWVlja9MBoYx5OSRgi0b7lxsYZVxGSJ1pbxT6K7lYwa1T6zuo1inEH+Rt4
EIdn5ToqsmBVcphjOlt+4oUmMtPQ4kJxdWgQtL6yLxrCul7UIEq2kZdS1SpZ
ZbjjoQXsJZrsahWZeXca09KWSE1XFBQFWYLkkp5uHBvAggpQ94r7keHYUMUG
UKlxub5559cO5xqRTtpxJerdOMPz7Fu9SNJrwKp4AC4+GKRiypXfmKRWkuVS
DG0RnO89OmxcjoyK8uOvLl6Xc7lFdXkJlRrzxE2pXxcaWDWnanbNMQ6uXYdd
1wWp54xRdpzc4MoqWehTrLeS6WrP6ju8KuHWcwWtz61bksOtas8pOpzIJeba
7GOVZWFmk4rTO90+430oun55sL01Df.UWzFe+62trHOK6H90dkO1vUVozwWl
7ozUku27gpqLnt8zM6UhlU0JuJ84jskGetx3m2d7Y1V9EqPu1o1svYC+XYxK
JOmkmbCJqizskaee9m15tw8JZ0E.GF.Uca55t8N57Wx82wt.WsnLOt9UZ2A3
oNAw0erl7C1tuvV8GZbGhDFyEr7f6v8OkwuuyAS3EFwk4qVzOgAL7BCpIxMN
ZDkEJuxaieNoQgAbdz6XygHFGE8NU6BjSXQuSEqMQEUEjG8N5bLVcBvbDGqu
G8kfBAUD8NDbNmyvD0cAYykLHBodVDdNlBnX8qgqNDBE5GSEQOAYtA0gXDkv
jp6kLGphLip+Bn4bARxnlWFFKvbo4qodsPFQcu74pGGXtWwbUPdby8pNTphB
1dDmAEpCUQPf4P.GZdAbFWEfn5P0GCI3P6KPhz2sgIjDIjyMmkvgL.yPBbAE
vM7f.RwBK0R3BH.ZXRflg4tWKEPHluKAAIPyIo.HPpOoJlMIlSsRIhjSEXq7
foDnbCmSoBJUcup1eLFqERJor5URH0azNJPatnWZvnV0fQ8UCVE7sM7Fl9un
lLm.AH9zYQ++5cQv4Wzh9or73x1MqggWpnTSriW05rSpCycJ8xotuzW18hpe
OODLODMKc8EjO3dHeP9IevFsFNYp6EnLJKJ6x8B7vk5IfzitBthHgBrlNfai
FyGS97lhn+tmfQ+eT+FE8OtcYbVbgNt+HXG5ur8vnOUFJGnYWKQ6eQwKB6xi
DaTz3LrP+Btf0tJEXXQWfAyk5e3bfJnZgDwLmydEvQzy9rBTO5UCctdUxmqM
zufHrr7QKZGLZOrv7RE.irxCAxIOvAVdbX3e5traIndC4oudyBps46JVtWmY
u5QzwDmZfLkoqqFM7eoJH0HeUp6JQf8jFzMdiFQn8a3EUbN0lWrxlmE3skxT
ggEAalx.iCk4s1ibLa4Hmw2sPE3wjJ7UTPFSh.1kFD3XQE9ZPCa2qh6j6SF3
LcFeV8nM6VOFWVVjtXWo0KX8ra1orv7bV9h3rSRcRSIo4sGHtac1iYgI6wbh
7qYO9qYO9qYO9qYO9qYO9qYO9tJ6wuS4tR.EXTz6vv4DhZjTD0g34PFEHYlT
pBYRLPcVn5FLm..UC4hXRMKjPETc1gUuFBkneXHdNiKQ.S1P0KtAFVeDFxX5
r7xlKnRlfG8N9bt.hDPSxoEbfPmVU9bHlPgBy6A.XBf4NopNIDpSRlivLDT+
ZjTnjgzuZtZbwH6qgvwb86lLmQnlSpHLJhSs4WlXSQKERMYgVoARfPyiRmKU
Ghk1CYBF27l4bhhVzuWFV8H5jsiUeYA0jybEWw3HgMM2JQG.gshIABAvlTSK
3Rl9cAmiDHpgYU7slGTOElOWxY.2YQZxD1d9hYeMeweMeweMeweMeweMeweM
eweMew+tOewgH0N+tIMW2EY769H4m2GIB99MQ42sStvcwbuDfYg52I4KtKaj
G1ntqITiBVb9xfmpiK7rkA+zsSQ3va.OyjSFO2zV.hMpaAHHE51lGzaZKKCN
EbIAPBNW9xtrxzsYoZ+zsNYNOzxD5P48diGtU8u2m22lES622L6EQhCOo58o
XBK0YGRxoS9SyadQIroMuHvtwFC6VrnLZQzSWdqb9voIU4HQaWraPWcCxz79
17jAHGFN+vff+GZcPvdNggzl6j.02MuJQ1vlnylp3PKE90rns6do6lTDZGX4
q2tynh4RHkPoDBQo+SgRkeD7XvwGZ2+60s6cqkFACSK8d1Vu5qOskVvFDaOL
Okn6DOkvK6oDBHrlBbhcdGO2oNNIhv33DBEx4vSkDM1E7cuezpEM+.stZV6f
nmvhyBK4NysJLLtUaVq.yZPBLNdYqOyyd15CCypto4FejnAWCmNuqc0S6Qyu
Z84VELW4ESOogn4Q34QD2e5l7.OlFCH8jwelw.Be6554URL5PD2l+XBN780z
lFk58Q3PISQgHrPOO3f4XHPuMuTwKCjHDReIj4ehXDf9FfTjdJ5UOKFJODhZ
ia5e+zHkgQiDuGiVPGElKUHqjfXZfGM71WxyKeexpn30qhVk+o0aieYS1U.K
h5Zmzvrs40I+PuB3vhi3cKTPHGEnfnHYqxtLdcYzecV55OlTTlr5uNKZ6FEQ
UbnSpqJAHgQBvUddz8FqFjir1OBgdPNP9XIBRJcPfg27KJPs3X6hlfyMrMbP
LXaNH1VFWTpWKFx4HNAyYZQ4gioft00CiGFKcoYx9ITzbH.PEDmxNEowJB3n
z4qURn79IfDfg0qcXGkBh.MrdtMqXv4rSkBPNcPRgjecU7xeqoL80Ee0fqQ6
TJ77VPB013FXL+HK9K+Vzuju94rjss1dsM8405UavEPaLNHLCvx05IkmKA3C
K9w1A1nsqiKRT9n+CJk4mSJaBGWpVCAypu1lQAwkkzsvTL4nv1qTvAqFa+uQ
+A67T0HGhGONjxvG3PIcT3PiN7WlGm9TTrpyGcPsQhF3ypk92Q7YXvYIWnVN
zGBAlLFUMXaYSymFQNdLK2hTTNlkLLHIZh5okDpdZMowPXBs5UPWqDVH6ZEa
2.FCruz1XanYj7m8mNxvf.MZd27nYsqgvQI6UahdIIS0w5pq1Abi4sHngMgP
hut6oNZ2SAAPWVFnec6S80sO0W29TCa6ScbTMmrkg1sJMOR4tZVm2NA8dkqJ
wmmWDpMS0TwwgzDnEm6kj.JEjsa+snmiSWGkoZKhRW2hrPFdQAlxlS3bIfPj
.LWCFTVf.8g8apfIUVX0FZU.vCu.PPOWWvx+zwg8uvlFX25eIWoDvu9Nons+
uskCOE0CIm3JpN1oxvlsU8f2m3sXwe+uckcRwIAP0ZPTAbiJwYv4RNgI4.ks
jDPAbkrggrXI9TusbFpDhfCuDhoDF2ORHmuWljQlywBpzK40CWWxwB+l7pYI
mdKOBIHA09aFyjiewqMUMDH7pZTUeaLLChYBhjA3BJrEA1qOSSDM7xKBELGI
4TtFcKoHJTZhE.O+fzhCwX3MzPU0NphcSuIikgwPEIBugZi5cMJGgHMBhpTB
ApwfCDHFk8JqOzQXy9hUAdcdHoH8Fhul76VpEhIBhhZv.LILZgXT30Ba1ZtA
wHDQuQxQDVnwRW4wNy5uXjNBas5F0FQp1+CxP0uw3Wk85dgMdc+Qv.BcNDKw
DBhgPRkGPYKBrWe85RGA4EjvligRFGAwPHgqDNtxzQ8vTnzan+NHkqcav4v.
4uiJCugZy5cMIGuAN7Fb3diPzd74jyVbPR1bTc6Tt3Fp1I4h4PMlhGntGXiA
xazj0aihQnArzObmTB7lHUo5o3fyor.YKC4iPrKMoaZgegwpW1qi0DWQNHXg
GwIZRNXw3k6ADmX.vygfGdgkKejCS9flJD4PHBetraRcghEgVeYTPjCsFgW6
cdcpriNkKxrSjra8ke3Wv4i0d8Wat62d8meY50zToKMGX.hiIO3NEVBDDf5j
ly.HPcwu.PQHkqa9XxX5dI8BINniIFXv7EPGniIpjPk9JKviMUbyQnEpufag
1y13QE9pchQiMU3ENnLlvGDE4q144fqysvkogdYdPuD78C8x8oUVb+PuXe0J
uSnWhO3bD89gdo9Puf6G5se3H0MibQ91M2smdI9FAHYLCNvPEPecRMZTA9dH
3f8r3MlJ7saYznSE.ectNZTA7dnEAI7rEYuI83QE.e69XznB5cQKB3tfJtGH
BS9A7Q4jgGapv2XEt4vu4EZPNjbJypgtkrScXwzqWvo+nYIs+32mrd2gjfse
w22Lsu34mRyxpB63MmcGuY197f5BN4gZW5nvUPZzwW7fAuAvbMbBqNRcfYpp
pKLbOGb+CRnDI.oucBCwITyQBDlhMw9zvihN7MAPo8KAjBaNlv5SAOBWfbKQ
b8FE0jbTNnNtPqZfKx2jWTsmGlikG8b6JyetHdUpKCiUXR5g1qC6TCKpTnty
yWD657ppg8h5uilT2pZT+tcKi8sg7nlBBmBwF4HRhER6QTHPOUhmHVlEuboh
ZO5w0UtWoQTRnJwp4Ht8bm9z02QGJk5+8MIqi9w30ai9wjWRWjms53Tmmjk7
xoeMtfw3FRT.zEcXyQpOLBc9maq5ErT2Nc7a.o3LCYBYbjUqQ..FbJ4jWfdV
jLO6iF7MXaRklDVhfLqfZu5HhKH3y0jTFMGm4S.AxMxKknlv4VFPulUzGQYm
7r9avUozcAatNn+erUmnxVSvATgvdTiL7oVcr8ZEZrhgwsGYeau9M5993xRe
M5puYm9Kmz4W8MJkFZcNd7ai.g+m+ikOZdMfd4yPR0NvsZrDNvnTo0ov94yv
echS8YX2GXGOL3rj3hZudncXvRkwE09QT5rbbGLuOerzWxd1Z.0zQm+nu9Mm
6ziNF1ysa0fFcqle9m9W5k4BTGii0Au1FwzeAeezNW2bgB3L6LhwnXnwbQWk
gPWuK1+0urpH+4j0+jQs5ZctRXPHvFQkDwHFcKpDJLqjiS9PUg4drNoNZNSe
pJ5ixrwEnUSLrr7RFRPFV4Jw7n506uzcDPdGaG4erO2cwh1tYjXzMiLqVfzk
8KZUWuLMcjGlRc4wOwV5aSVm7w3YAnKjlsc5RuNBrjac8hktNh0mhhGlwRKC
ZC18O6fz2OkUcwZe9QCxRwGiA4TYK7M6JKyW2CKBWzNhJ4KvcDbpH8+zQ0mo
WQD92Fmt925kSHbUu3mezzQ9a+TpxOhuLvYNCgN+LG90jR2nWcD9+1QPPZm0
0OghuVrXcniplSzQWdCmz8xklLwwS99cUvlYO7izVGmMIaY2D166iKKR+7xx
hr.wkSBQqALWucRNTE4STCuKby9C4qp.Lvt0KQGhbYvRtaTXK+PucIdqbx7C
6dYg+DbSdVOOvkIj7+yoKK6lLuWZVSBqXPO2WkQN9iKy2jzuPGOLqURr9G+F
u2cQC1OEuXzGxdSZqW0O5jv7pQ5uXPCRq83+ZHOE2Fmi+T9y5wOOJCI5JMxX
Nivg1mhfglDDPbSo6Tv5+muzgIB+NXvH+b7GSdJu3keazas59nK.yoirPXUb
wGd2ZMB48NSxz58XI61TYUktudLaHsj0ORkKMd0LIWMmxBCcLB49FdEytQKa
diVdumpY78Wb.FH.TauMOFudTWlW45yP5hrDUuT1EVw2jm+gKOaoWbRL.doB
eX1bO6fwKUz9S0utTduvX5Famp+xlz0enWcmvTx.fnJjErF+eH9sR.76IaLK
N98nm4y1ym6bCkCyhq4Qv0OxuNM87S2lY1CG86qMEQcnqo.tv97iEuAcC8pa
sE8A637+YMJP+ZHvzLc3XcaHRMZVWE8Csxe9d0iqkuPfj3V+hRIVvcGwESxn
jeI9yrZvrcOBEUb7Xb4Nk5QXcKchxw3GvtV3bBzIzkLHfvTj73930d2fSU65
wX3+UI991BEzP6EUqstyO5JNV4B8Jp9gFO5FEhTHcIetkZ20HNEmK5ZhuqsN
1mr73YwImuIaWx6fCvMEFxcqTqC9pk08POELQQ9mVOHt3p8yLAbw+zWhGFS.
PRpcc5w4XLxZiifpHUmNl3aKRRFHWXZEpRGNjoicc5XfuW4YecY7fXAAAvX1
j4y.JFvzjvjF7mbp3i+ijUChG3UgdCqFSMv0y6TwC+WIYY4eZXMEHpcMxxEP
gYLE.pxJgdsIMUu9goR.PLkLJ52yLpYpV+17rApVVkVVpJxXpcIBWOjhQkI1
rqXS1vC7iWs4.HPJSXmCKsaNpGipg.rA+hn.lzXfpwvajXJ3+hjkIoez+U.Q
S5oU4e3.uCpucOFWFvNLZsZX+xsEQ4XW55Xk61vVJqLI9psb2VM2sIGJzVup
5U9PCl+9MNYO4vg.tcN1ILfzsG63P+1tE21lsx3M8Ly+eWbYdz2oyByrQmF2
Vl7ztrrx9Ogw5M.L2HkYUiYDZPN9qZWAETJzNUYLLGa2HlLkKE1zz.YY9Ih2
CbNxPBtvFnJtxzFijX4jzaRotfd8Zb+R9IcVX+ROML+SoEkeI5e947YdLGA.
spgIiKXmFgxijaNp8NSfcXCV17jM.kRfcTLJyJhaYVw..L77Mx0wMFZnHMDM
Ft2w9WvLckqa0i1pz2iwkkEoK1UZg5fZR+tUM4dNKeQb1Ik.tlJ1bu8PxkBU
kzFyBYkzFI.6qZ12w0NaLMj0NaHw.NxCrZY2BOuX2SOkTTw0QGJFwsJ.dJKO
t7x7OIL7uJL5Z0vTHlOFRfxnEQYsxrFd7gVpJsHVX3SWkWFiHl5r1IUastVG
d09XNZsy1RclqINBVU7YUdwTNJJSJdzVrKqadpr.xUTeV5xOb0xO81jCtBur
fYuuUB3vipdgJlqVn5vSqfsmTdd.XsvinjdTaEBPa4vBqFyGS97lhn+tmPQ+
CpeCi9G2tLNKtPWqZqpD.dVWigApPN6JT4XtQCBy.2PUHvqaUHNw5nEqjd09
ApSY3PUnFjfk85VtRbf6+nHWao1iCzeJFAFYN.BX1C.Bt8.hPZNPcE2kHRg6
.r6dXX68.DH68hgL2ATp8.t6gfLn8gfPL1cIBx8zB2SwXVxAQvtWHm6nBz9O
AzcyH2sfTidxQVbh6iKczGG.2Snn8Gr+0YoOkj29PD0O12GE5dHBxw3X4dQA
c+YbeSLwwU.Jj3DfT2IHUQ5XCsdmclJEcq3tGFeftdQold.P1pYODdSLUEja
uspn+lptdSXJgmjx4H0ePXIUnWuFiTepqVTlG2s9Nw7ND80066jxjyUi7iJH
VtUMXTUOoCKn6K3Wh.nHiWCHWXcPAIXp0pDu+LRp0ECT4fR3tDy4RP5rkoPD
04PwY4Rr1sbly9myct4Pt6Tfj1ODk5bIh4bmmKJG47UfrtQHpwm6NiyrGSbt
vvb6eygNePDv9uzd2cDLv9ho6ecLhibUeJmyHjb+qg39.NW1LAv4KS3b2QIN
JlybtrETfUNh3Lt8.DFG.2RUUm7vDaVf7K01XWi19Rdd46+S4eZ813W1jk7i
aTTPwtW5lQkHr1THVCE6m5ijs9qHo3zrb7TZVhNgOtrb.qJr8a1T6zGkVJkz
5Wr42opDWOSwI1SUU8UlUj7wz8OOs5rwEK0I.aY4tBaNR9bsJozLc.9Eq2kV
q1oTk2G69UQmaksabIyaVs0dyrZhFSuTHBwVG1YFgAiyqkupYKdNKe4GRVUu
tvLKeSx5z0azamv0kUnlY0kcYp6w5ooROEnMc884arwKd.+LKpA4EydtHcU9
ZMQbTSg9z0RQoU6lVmYL2w53MM7v1zb0xE2ZPtyEwE5VJWWmnpbVkmmc7kpd
trjmJcWdS550mHEKy2z9EKzypP6WdQt5hubo2s4Jaeb2Z6UeToTT9nNkdGee
wYYN63ie8eNdc5KwkIko1l.Dn5h1vGd+1kE4YYGwu1q7wFtxJkR9xjOktp78
10WVs16Nj9vC4G7H3W8jSsagyH9wxDk+GEWb7Mn2NWaK2997Os8jLQVW.zFn
t5WUY57f17Hvsy76eToj6BAvcgf3Z0EZaAy0d.cMETmOA1053vnFWy5xba8f
6n5UOLl5x3Hb5Jcc0i76JcTcVKEoG0YKnehGk+YxYhG4TWsDiKyWsnmBGzHH
bLKiZtspiMNBifXBeGaAS.AyD10NLV1rAok33Jm3cVSAIXMEHUawqcuoB5n4
MEgESl2z8k8vFkNUiNJpLORD8jVcbazhuDoBQqH9YEwGoGvwWhnQ56UeWGUa
eOZ3j3lkixvW7G0EFU8RninK9rLjfKoXNFQ4FrgvVaLI7ITPt784ahxe5onW
RKJTlrqbhxtJq3gWVI4VQEDNGBAX.lgjBFfqWeTLvjKonuaSd55R2vyS0ylX
KhHTKU13wPchLWuCOwXz4ds3lYaFimPYjUIJRw.IEWSQpEoDM7RID0JkPDS+
rbxjKWVlqWtKkZuPGGEXCIOOfLtfZ3aA4PPFHvz0E1KIwquXOXUK.gTsJQag
+1C4xUpb0bfypQbOLzfeMK54h7cahDCXntvQnroy4FwDkBmiwRHiSjP.UXVD
dSe8lOPZS8ZnldJn.pN2q0ot.eiTmR0teoCQahNZZSDFaNTvnRnR9Pk1MAFg
eCjREIeb.hHDL7hHjRBnC4AA0k8EgfgELHTx45MQA9VHiTiZbYRDlMDAEJ7B
Jn.XDTPlXNjpBelJAbBiB0a2go20zunBLLB22r6ztmabeGslqCNjZPaX.ERg
BHQhAD8hPGxgGulhFe4iYk4Y9ueMy.SIWTTUsR8p8+6et1kh8wsN0mjjAQz4
zZt0Y58vFBPcqGc2O5Ux9qK+WigKdmZ2cl6KxPDSrQSL0nyKJ8UoXBOBgepL
+LALfvyYmN9+ahXxDk9PDRjQSHgEJeUXB.RYbld4mo2OXT3sPWprHI9kAE8I
lOdtljz4BUmgXImIXJEJN5g86HgPKmNA9X5TPAsKA.CXJeP198sqfC.ggXbr
t19gMYSCeJ72sOiFGu2WTD55UIet1ZmHHRqSwmjlWM6AL4Htwiv..yna4NAB
AACq.4v5mPm9qVlU7tVDVEdWffY2C0i1yK734EqrqRHvskxfn1IM3ss94BG0
RIL1aIznREdWLgoStJD1+FJ7jqDY9j9TPpM4xY7Z.QLuMzFW5f5McLplU5wg
FQ7RogO5zgeJujQmN7ROEwFc5.4s9AbToCrWzwnVD2QXu0OFW8Tj25GiZGQ6
e6dpefFM5vaxXTMagd6NENtzg2twF2nkfdatHl7PA7m1HSdLTAnSnCiexr5v
ZY.TGVq66Vkl+ilUb9ieeGJQFADRo0XeAzhv6ZD31htn6qdxWBUoqgwlUfgM
Qiho3vBR7u5fV5ua2x39ADubJD6PXYrvg0xT8l0vKjUx+5k7oPnx+9lDWIM3
GSdIcgFLutJJ4vELF2h.5.nPXOR8gQdWjS3HEmIrneEGY0ZD..rKfxLpBOmO
TWOPshC6mfiUDH2hdURJwA8XDjzxTT1u6Jt79CaMuBM5993xWmXeze9OV9n4
0.5GXW0gBrSi3zq2PYzoUBEy1z5hE0AG5mKUFWT6GQoyxwiBlqqsm2CBjmez
caMte.lyc5Qm1hbOZzsZ94e5eoWlKGpxHzpRyEeezNW2bgB3LacSiQwV3gEp
FMF55cw9u9kUE4Omr9mLpUWs3jxfPfMhJIhQbvkHTzDD10LDigzQyYgVRDjx
rwEnUSPmCwXmB.fLrCAxgbBSJcGAj2w1Q9G6ycWrnsaFIlpxc2nW3IavTpq0
e2Z1Reax5jOFOK.cgzrsSW50Qfk78UVDWGw5SQwiRc.B18Oa3JPWcnhKOFEn
qIxV3aFTYH8lV3b+S0137upH7uMNc8HUpMmDxe6mRGRYx7VUkSczM5UGg+u0
6Bi9UpUvCsPw28p45U5d41Toh+tjU82ORacb1HTKeSXuuOtrH8yKKKxBDWNI
DsdCL+aiZco+BUIg6A2r+P9J+qTB8MxkAK4tQgs7C81k3sxIyOXJfI9RvM4Y
87.WlPx+Omtrrax7doYMIrhFbmJeUF43OtLeSR+Bc7vrVIqvp+qOdu6hFreJ
dwnOj8lzVupezIg4UizewfFjV6w+0VgZYxcN9S8u7Wb09puRibKUKXvTw5+m
uzgIB+NXvH+b7GSdJu3keazas59nKF+RO6p3hO7t0Z.r6cljoMfRhTWlJqyp
63cofb2bV+HGJMvUyjb0bJKLzwXVPYmfhz8zTKYmpY78Wb34G.TuNVMBudTO
KLM+wEYIpdorKrhuIO+CWd1Ru3jX.7rH1ue1bO6fwKUz9S0utTduvX5Famp+
xlz0ene0SOcgtRTExBVWiiH9sR.76IaLKN98nm4y1ym6bCkCyhq4Qv0OxuNM
87S2lY1CG86qMEQcnqo.tv97iEuAcC8pasE8A637+YMHM+ZHvzLc3XcaHRAt
N3ozBHt0unThEb2QbwjLJ4yq.8ctnpd7Xb4Nk5QXcKchxw3GvtV3bxl8sKYP
vUwpq2Gu16FbpZWOt1F7ldWxfuRKTPCsWTs15N+nq3XkKzqn5GZ7naTHRgzk
74VpcWi3z8hcWS7cs0w9jkGOKpD7MY6RFTw6FC4tUp0Ae0x5dnmBlnH+SqGD
Wb09Yl.t3e5KwCiI.HI0tN83bKLgYJo0pHUmNl3aKRRFHWbqpJ0VF36Ud1WW
FOHVPP.LaI3Ev.PaUVkyjPIc53i+ijUChG3UgdCqFSMv0y6TwC+WIYY4eZXM
EHpcMxxEPgYLE.pxJgdsIMUu9goR.PLkLJ52yLpYpV6VMe+tqzsuYWwlrgG3
GuZyAPfTlvNGVZ2bTOFUCAXC9EQALow.EInLzjTcuKRVlj9Q+WADMomVk+gC
7Nn918XbY.6vn0pg8K2VDkicoqiUtaCaorxj3q1xca0b2lrd01Wi8JenAye+
Fmrmb3P.2NG6DFP51icbnea2haayVY7ldl4+uKtLO56zYgY1nSiaKSdZWVVY
+mvX8F.lajxrpwLpycXSa1jS2pHBJEZmpLFlisaDSlxkBaZZfrL+Dw6ANGYH
AWXCTEWYZiQRrbR5MoTWusdMteI+jNKreomFl+ozhxuD8O+b9LOli.fV0vjw
ErSiPiiu14n16LA1gMXYyS1.TJA1QwnLqHtkYESWmbOeibcbiAlElFC26X+K
Xltvxs5QaQz6w3xxhzE6JsPcPMoe2J1aOmkuHN6jJzVS0Bt2dH4RcrDVtIdc
x9E7q5V0XIww1iOT6W0KUsKpvcBz4UtRIsCktRP6ktRjsn8vLP4GzVFKkrZT
gtLPV+czTJ6NyEyCG8qZE9xSxpG89QdRBi7DaqvkVAJyBY6TB++OTfhCi.EB
vzVqj5JmbFEWN3VHfM2zw.VoUdeJBv3j5mg7KRPcneoEXegVCxuNqk02uDk4
wWBKpCyTydIckoX93XNlDogDct.ddYx1pmegKgbkJUjv.q50KYpm.8O8lE4b
OXwPHKgPO9PmPMGCgP8mG8oYDBB.SR7gGYiAO5yWF0xWFN9MrvQ4Si4cvSPX
+zd4ZfNJpyDpOeZZH7+QmLOszibhdguDbfeIjOpqjPH87R67DxITpHDe+zvf
aS5i2fPzehOtZGCYqW5OvQwSqOeYRyeYzvzm75SKBQOnBObDPHAvQ.QzAw43
aMRQiRnO9DqLSNFZq9+ogglqY9zzxCQ.eL9T8kH97kvgneKBax9RfNL9pg0q
jOZD3wIHUu+zA2N.S8U9NzVRDqCCBX3eInOeogpy.8gmDiRG8dIMEiQGFdEz
pnkfLvC5S6kcBepBLukNlPmkIq3Mazygf6oMezYuD+K1rjIdv7OSWa+ml73M
qH4io6ueSchaVbwR8DkrrbWgMW5elYyrpIsbEq2k5TpLo0+DzJ1x7WAkhOYh
W9ausskN69IDn4MtPePi3dhDw8bSKz7pis8UFaKqJ18SZwCus8of43oeotlX
CnKbyM.8AQg6OZB2AjDdHnH7fPP3Aidv8E4f8xX3z0Od+VE28DVQ6GBAeeYP
b.4ea1fnkYut0YtdvDzoH5qG1odt0m6OB9dYz6sWH2a22aE8Dwde0YF48iEJ
6nl0nQASitBsc8PU1SD1s+nqqWHq6PPU2ggnt8CMcuc53dhbt25XmZVEWDLU
7iPBWehrxOnzY.He6UP81d39sanca+P519N.fthrs8UerW3Bm2ZwWRYUFZc0
5HU6U0XuNTcEJx5.JzdGQT0PXVOLt8BtCCFoUG8Xal37F3UCLMgtqHpiP8U+
zsZDouFBDONLDd0OzcMTxqJTb0W6vl5DveTaMTj8onyZun9fRP0Pd0lIlgnP
0GjVMTbVMDU0Cuhd1a4fjFibWl+PmbgL1Fn0Q.0lIlNi5oghzNEcSCndePIy
ZHW5cTzF0QkTeFKwUQhzdgBoghapPaz.NrnditnAioNAEQGR7DdiZnAi3qsg
mBQ3rWnQ4ZnAZnXoZn9YuZJBIsbBhdFPI7.PvyAybMiTmdFau+ontuHy4vQk
yAjCst.+YAIyCAO+YgbFUNCYMCwqBcs4nwKjyr2nl4.PLyAmRKOQHy6ZEqVh
OOTNmpg3kd3t85PaX+P3xdhtk8AYK6OpV1aDsr6nYYOQxxgtHP7.4JmN212U
y084HQ4sKXoyPYR+Ginm6Z9dgpjCluNBS57N7nqiXjCc9xaCoHCBCWCQH8YT
ddfBjAgrNBsGalv5iTcvgI5KhN1Szbbj6ReHtpN15vuVw5HznuIc6Bnx3f0r
NG8E81L2KDWLTDXcjUzaJzKzTLPTXcTSzaBzKjRLPD3QHhn+T3Uvao.Qbmf1
g92UiOHbXfnwZHYn2zmWnWXfnuiQoP+Eg9.XeWFr9BKCfdMx.mgpf9qh3Cvd
MXBrNhA1wfG7Dk.6EBANX95Xj.zecFeP+ugSbmhxe9Ldd+P1udgpeClgpgde
2O8fbNx74ypL1Oz361YvVg3ddkkvyPYu.78a.M87Qv5GJx0KzyKXL0HwSAb7
8dgHdCWdTg7c2I6Wf5HZmWJ9mihcCCA6FJ50MLjqqUTqqaBV6VmyLCdZQ01M
tlPCna81+m29+CGo4bbB
-----------end_max5_patcher-----------

Ok, I tried this example with the two samples/filters reversed and that shit blows up after the first step. Rather, the filter at that point has linear amplitudes in the 60+ range.

So I guess regularization is still needed to “tame” that, independent of normlization.

1 - Regularisation is to avoid blow-up, so as you’ve found, you still need that

2 - Your notes about multiplying in dB weren’t correct - what you are doing in the patch is correct (multiplying in linear amplitudes).

3 - I’m not sure what curve is used for the weighting in the loudness analysis that you’re doing - K-weighting was just an example, so you need to check that (could be correct) and then find the centre frequencies of the Mel bands (rather than the edge freqs) - hopefully that is already what you are doing. You can then either take the value at the centre as a “good enough” approximation, or try to calculate the average across your band (more complex - basically that is some calculus assuming you have a function that represents the weighting filter).

4 - the point of this process is to estimate the effect on loudness of the filtering and then compensate it. Possibly we need to actually account for the content of the sound to get a better estimate - I’d need to think about that some more - earlier I thought not, but now I think I was wrong. Anyway, anything else you want to do in terms of loudness/amplitude becomes fully decoupled from this - you still need to separately loudness compensate for the matching process if that is required. The idea of the filter also adjusting amplitude/loudness assumes that you haven’t done what you’ve done here.

1 Like

I think @weefuzzy could give some good input here on both the loudness curves in the fluid stuff and also how we can do our loudness change estimate - to get him up to speed I’m suggesting that Rod uses the appropriate weighting filter in the final 8 bands or so to estimate the effect of the compensation filter on loudness and compensate that by simple division. At the moment the calculation does take into account the content of the sound being altered, which I think now it probably should do - @weefuzzy - thoughts?

1 Like