Hi there, this is a technique for calculating the noise floor of a spectrum, and extracting the peaks.
It'd be used pretty much like I04.Noie Gate Miller's example, that has the "mask" table with a constant multiplier. We'd have instead this "noise-floor" block of audio, also multiplied by a constant.
To get the noise floor, we take the magnitude (or power) spectrum and get the median of small bits of it, like every 32 samples. So the values of every 32 samples would be the median of that section...
this is where I got this from, check page 4 and 5 http://homepages.cae.wisc.edu/~sethares/software/SpectralTools.pdf
this would be kinda like using the [median] or [median_n] objects, but over audio blocks and not number lists.
Since there's the need of calculating this in and using the result back in the same block round into the audio chain, I can't put the spectrum into a table, and then calculate the median over bits of it.
But then, how to do it? Should I be able to pull this out only if I write a "median~" or [noise_floor~] external?
Or somehow there's another way to do this with some existing external, or a similar technique, or even some audio math trick using [fexpr~] or something?
This has to do with the other post I did about a project that attempts to isolate notes into a chord in a spectrum, something like melodyne is does.
thanks Alex
here's my patch by the way.
I can't attach files to the list, right? I'm sending the code in the body of the message.
I guess one way would be to write an external that would give me back this block of audio with the median of each section. I'd replace it in the [avg~] object in the patch bellow. Cheers.
#N canvas 1374 303 359 446 12; #X obj 52 128 readsf~; #X obj 52 46 openpanel; #X obj 52 73 symbol; #X msg 52 101 open $1 , start; #X obj 52 26 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 142 288 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 70 286 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 86 347 +~; #X obj 78 387 dac~; #X obj 179 112 noise~; #X floatatom 117 142 5 0 0 0 - - -; #X obj 52 166 *~ 1; #X text 187 178 floor level; #X floatatom 196 262 5 0 0 0 - - -; #X text 239 264 floor (average); #X text 74 24 open sample; #X obj 179 142 *~ 0.01; #X text 60 264 dirty; #X text 133 263 clean; #N canvas 222 138 574 729 noise-floor_filter 0; #X obj -38 635 *~; #X obj -98 78 *~; #X obj 3 503 *~; #X obj -98 50 inlet~; #X obj -38 504 *~; #X obj -99 107 rfft~; #X obj -38 534 rifft~; #X obj -38 665 outlet~; #X obj -263 221 block~ 1024 4; #X obj -57 78 tabreceive~ $0-hann; #X obj -20 597 tabreceive~ $0-hann; #X text -42 104 real Fourier transform; #X obj -151 638 *~; #X obj -110 506 *~; #X obj -151 507 *~; #X obj -151 537 rifft~; #X obj -151 665 outlet~; #X obj -151 566 /~ 1536; #X obj 1 194 expr~ ($v1*$v1+$v2*$v2); #X obj 118 258 avg~; #X obj 118 226 bang~; #X obj -251 255 loadbang; #X obj 236 51 inlet; #X obj 165 286 outlet; #X obj -38 564 /~ 1536; #N canvas 0 22 450 300 (subpatch) 0; #X array $0-hann 1024 float 1; #A 0 0 1.88351e-05 3.76403e-05 9.41157e-05 0.000150591 0.000244677 0.000338793 0.000470519 0.000602275 0.000771582 0.000940919 0.00114784 0.00135475 0.00159922 0.00184369 0.00212565 0.00240761 0.00272706 0.00304651 0.00340337 0.00376022 0.00415444 0.00454867 0.00498021 0.00541171 0.00588048 0.00634927 0.00685519 0.00736114 0.00790417 0.00844723 0.0090273 0.00960734 0.0102243 0.0108413 0.0114951 0.0121489 0.0128394 0.01353 0.0142572 0.0149843 0.015748 0.0165117 0.0173118 0.0181119 0.0189483 0.0197847 0.0206572 0.0215298 0.0224383 0.0233469 0.0242914 0.0252359 0.0262161 0.0271963 0.0282121 0.0292279 0.0302792 0.0313304 0.032417 0.0335035 0.0346252 0.0357469 0.0369035 0.0380602 0.0392516 0.040443 0.041669 0.042895 0.0441555 0.0454159 0.0467106 0.0480052 0.0493339 0.0506626 0.0520252 0.0533877 0.0547839 0.05618 0.0576096 0.0590392 0.060502 0.0619648 0.0634606 0.0649563 0.0664849 0.0680134 0.0695744 0.0711355 0.0727288 0.0743222 0.0759476 0.077573 0.0792302 0.0808874 0.0825762 0.084265 0.085985 0.0877051 0.0894562 0.0912073 0.0929892 0.0947711 0.0965835 0.0983959 0.100239 0.102081 0.103954 0.105826 0.107729 0.109631 0.111563 0.113494 0.115455 0.117416 0.119406 0.121395 0.123413 0.125431 0.127478 0.129524 0.131598 0.133672 0.135774 0.137876 0.140005 0.142134 0.14429 0.146446 0.148629 0.150811 0.15302 0.155229 0.157464 0.159699 0.161959 0.16422 0.166506 0.168792 0.171102 0.173413 0.175748 0.178084 0.180443 0.182803 0.185186 0.18757 0.189977 0.192384 0.194814 0.197244 0.199697 0.20215 0.204625 0.2071 0.209598 0.212095 0.214614 0.217133 0.219674 0.222214 0.224775 0.227337 0.229919 0.2325 0.235102 0.237704 0.240326 0.242948 0.245589 0.24823 0.25089 0.25355 0.256229 0.258907 0.261604 0.264301 0.267015 0.26973 0.272462 0.275194 0.277942 0.280691 0.283457 0.286222 0.289003 0.291785 0.294582 0.297379 0.300191 0.303003 0.305831 0.308658 0.311499 0.314341 0.317196 0.320052 0.322921 0.32579 0.328672 0.331555 0.334449 0.337344 0.340252 0.343159 0.346078 0.348997 0.351927 0.354857 0.357798 0.36074 0.363691 0.366643 0.369605 0.372567 0.375538 0.37851 0.38149 0.384471 0.38746 0.390449 0.393447 0.396444 0.399449 0.402455 0.405467 0.40848 0.411499 0.414519 0.417545 0.420571 0.423603 0.426635 0.429672 0.432709 0.435752 0.438794 0.441842 0.444889 0.44794 0.450991 0.454046 0.457101 0.460159 0.463218 0.466279 0.46934 0.472403 0.475466 0.478531 0.481596 0.484663 0.487729 0.490797 0.493864 0.496932 0.5 0.503068 0.506136 0.509203 0.512271 0.515337 0.518404 0.521469 0.524534 0.527597 0.53066 0.533721 0.536782 0.539841 0.542899 0.545954 0.549009 0.55206 0.555111 0.558158 0.561205 0.564248 0.56729 0.570328 0.573365 0.576397 0.579429 0.582455 0.585481 0.588501 0.59152 0.594533 0.597545 0.600551 0.603556 0.606553 0.609551 0.61254 0.615529 0.61851 0.62149 0.624462 0.627433 0.630395 0.633357 0.636308 0.63926 0.642201 0.645143 0.648073 0.651003 0.653922 0.656841 0.659748 0.662656 0.66555 0.668445 0.671328 0.67421 0.677079 0.679948 0.682804 0.685659 0.688501 0.691342 0.694169 0.696997 0.699809 0.702621 0.705418 0.708215 0.710997 0.713778 0.716543 0.719309 0.722057 0.724806 0.727538 0.73027 0.732984 0.735699 0.738396 0.741093 0.743771 0.74645 0.74911 0.75177 0.754411 0.757052 0.759674 0.762295 0.764897 0.767499 0.770081 0.772663 0.775224 0.777786 0.780326 0.782867 0.785386 0.787905 0.790402 0.7929 0.795375 0.79785 0.800303 0.802756 0.805186 0.807616 0.810023 0.812431 0.814814 0.817197 0.819557 0.821916 0.824252 0.826587 0.828898 0.831209 0.833494 0.83578 0.838041 0.840301 0.842536 0.844771 0.84698 0.849189 0.851372 0.853554 0.85571 0.857866 0.859995 0.862124 0.864226 0.866328 0.868402 0.870476 0.872523 0.874569 0.876587 0.878605 0.880595 0.882584 0.884545 0.886506 0.888438 0.890369 0.892272 0.894174 0.896047 0.897919 0.899762 0.901605 0.903417 0.905229 0.907011 0.908793 0.910544 0.912295 0.914015 0.915736 0.917424 0.919113 0.92077 0.922428 0.924053 0.925678 0.927272 0.928865 0.930426 0.931987 0.933516 0.935044 0.93654 0.938036 0.939499 0.940961 0.942391 0.94382 0.945217 0.946613 0.947975 0.949338 0.950667 0.951995 0.95329 0.954585 0.955845 0.957106 0.958332 0.959558 0.960749 0.96194 0.963097 0.964254 0.965375 0.966497 0.967584 0.96867 0.969721 0.970773 0.971788 0.972804 0.973784 0.974765 0.975709 0.976654 0.977562 0.978471 0.979343 0.980216 0.981052 0.981889 0.982689 0.983489 0.984252 0.985016 0.985743 0.98647 0.987161 0.987852 0.988505 0.989159 0.989776 0.990393 0.990973 0.991553 0.992096 0.992639 0.993145 0.993651 0.99412 0.994589 0.99502 0.995452 0.995846 0.99624 0.996597 0.996954 0.997273 0.997593 0.997874 0.998156 0.998401 0.998645 0.998852 0.999059 0.999229 0.999398 0.99953 0.999661 0.999755 0.999849 0.999906 0.999962 0.999981 1 0.999981 0.999962 0.999906 0.999849 0.999755 0.999661 0.999529 0.999398 0.999228 0.999059 0.998852 0.998645 0.998401 0.998156 0.997874 0.997592 0.997273 0.996953 0.996596 0.996239 0.995845 0.995451 0.995019 0.994588 0.994119 0.99365 0.993144 0.992638 0.992095 0.991552 0.990972 0.990392 0.989775 0.989158 0.988504 0.987851 0.98716 0.986469 0.985742 0.985015 0.984251 0.983488 0.982687 0.981887 0.981051 0.980215 0.979342 0.978469 0.977561 0.976652 0.975708 0.974763 0.973783 0.972803 0.971787 0.970771 0.96972 0.968669 0.967582 0.966495 0.965374 0.964252 0.963095 0.961939 0.960747 0.959556 0.95833 0.957104 0.955843 0.954583 0.953288 0.951993 0.950665 0.949336 0.947973 0.946611 0.945215 0.943818 0.942389 0.940959 0.939496 0.938034 0.936538 0.935042 0.933514 0.931985 0.930424 0.928863 0.927269 0.925676 0.924051 0.922425 0.920768 0.919111 0.917422 0.915733 0.914013 0.912293 0.910542 0.908791 0.907009 0.905227 0.903414 0.901602 0.899759 0.897917 0.896044 0.894171 0.892269 0.890367 0.888435 0.886503 0.884542 0.882582 0.880592 0.878602 0.876584 0.874566 0.87252 0.870473 0.868399 0.866325 0.864223 0.862121 0.859992 0.857863 0.855707 0.853551 0.851368 0.849186 0.846977 0.844768 0.842533 0.840298 0.838037 0.835777 0.833491 0.831205 0.828895 0.826584 0.824249 0.821913 0.819554 0.817194 0.814811 0.812427 0.81002 0.807613 0.805183 0.802753 0.8003 0.797847 0.795372 0.792896 0.790399 0.787901 0.785382 0.782863 0.780323 0.777782 0.775221 0.77266 0.770078 0.767496 0.764894 0.762292 0.75967 0.757048 0.754407 0.751766 0.749106 0.746446 0.743767 0.741089 0.738392 0.735695 0.732981 0.730266 0.727534 0.724802 0.722054 0.719305 0.71654 0.713774 0.710993 0.708211 0.705414 0.702617 0.699805 0.696993 0.694165 0.691338 0.688497 0.685655 0.6828 0.679944 0.677075 0.674206 0.671324 0.668441 0.665546 0.662652 0.659744 0.656837 0.653918 0.650999 0.648069 0.645139 0.642197 0.639256 0.636304 0.633353 0.630391 0.627429 0.624458 0.621486 0.618506 0.615525 0.612536 0.609547 0.606549 0.603552 0.600546 0.597541 0.594529 0.591516 0.588496 0.585477 0.582451 0.579425 0.576393 0.573361 0.570324 0.567286 0.564244 0.561201 0.558154 0.555107 0.552056 0.549004 0.545949 0.542894 0.539836 0.536778 0.533717 0.530656 0.527593 0.52453 0.521464 0.518399 0.515333 0.512266 0.509199 0.506131 0.503064 0.499996 0.496928 0.49386 0.490792 0.487725 0.484659 0.481592 0.478527 0.475462 0.472399 0.469335 0.466274 0.463213 0.460155 0.457097 0.454042 0.450987 0.447936 0.444884 0.441837 0.43879 0.435748 0.432705 0.429668 0.42663 0.423598 0.420566 0.417541 0.414515 0.411495 0.408476 0.405463 0.40245 0.399445 0.39644 0.393442 0.390445 0.387456 0.384466 0.381486 0.378505 0.375534 0.372563 0.369601 0.366639 0.363687 0.360736 0.357794 0.354853 0.351923 0.348993 0.346074 0.343155 0.340247 0.33734 0.334445 0.331551 0.328668 0.325786 0.322917 0.320048 0.317192 0.314337 0.311495 0.308654 0.305827 0.302999 0.300187 0.297375 0.294578 0.291781 0.288999 0.286218 0.283453 0.280687 0.277939 0.27519 0.272458 0.269726 0.267012 0.264297 0.2616 0.258904 0.256225 0.253547 0.250886 0.248226 0.245585 0.242944 0.240323 0.237701 0.235099 0.232497 0.229915 0.227333 0.224772 0.222211 0.21967 0.21713 0.214611 0.212092 0.209594 0.207097 0.204622 0.202146 0.199693 0.19724 0.19481 0.19238 0.189973 0.187566 0.185183 0.182799 0.18044 0.17808 0.175745 0.17341 0.171099 0.168788 0.166502 0.164217 0.161956 0.159696 0.157461 0.155226 0.153017 0.150808 0.148625 0.146443 0.144287 0.142131 0.140002 0.137873 0.135771 0.133669 0.131595 0.129521 0.127474 0.125428 0.12341 0.121392 0.119402 0.117413 0.115452 0.113491 0.11156 0.109628 0.107726 0.105823 0.103951 0.102078 0.100236 0.0983929 0.0965805 0.0947681 0.0929862 0.0912043 0.0894533 0.0877022 0.0859821 0.084262 0.0825733 0.0808845 0.0792274 0.0775702 0.0759448 0.0743194 0.0727261 0.0711327 0.0695717 0.0680107 0.0664822 0.0649537 0.0634579 0.0619622 0.0604994 0.0590366 0.0576071 0.0561775 0.0547814 0.0533852 0.0520227 0.0506602 0.0493315 0.0480028 0.0467082 0.0454136 0.0441532 0.0428927 0.0416667 0.0404407 0.0392494 0.038058 0.0369014 0.0357448 0.0346231 0.0335014 0.0324149 0.0313284 0.0302772 0.0292259 0.0282102 0.0271944 0.0262142 0.025234 0.0242896 0.0233451 0.0224366 0.0215281 0.0206555 0.019783 0.0189467 0.0181103 0.0173103 0.0165102 0.0157465 0.0149829 0.0142557 0.0135286 0.0128381 0.0121476 0.0114938 0.01084 0.0102231 0.00960612 0.00902611 0.0084461 0.0079031 0.0073601 0.00685418 0.00634828 0.00587955; #A 1000 0.00541082 0.00497931 0.00454783 0.00415364 0.00375944 0.00340262 0.0030458 0.00272641 0.00240701 0.00212508 0.00184312 0.00159872 0.00135428 0.00114739 0.000940531 0.000771224 0.000601947 0.000470251 0.000338554 0.000244498 0.000150412 9.39965e-05 3.75509e-05 1.87755e-05; #X coords 0 1 1023 0 110 40 1; #X restore -269 169 graph; #X obj 1 318 expr~ if( $v1 <= $v2 * $f3 , 1 , 0) ; if( $v1 <= $v2 *$f3 , 0 , 1); #X obj 118 285 sig~; #X msg -251 286 ; pd dsp $1; #X text 11 360 dirty; #X text 150 356 clean; #X text -146 686 dirty; #X text -33 687 clean; #X connect 0 0 7 0; #X connect 1 0 5 0; #X connect 2 0 6 1; #X connect 3 0 1 0; #X connect 4 0 6 0; #X connect 5 0 4 0; #X connect 5 0 14 0; #X connect 5 0 18 0; #X connect 5 1 2 0; #X connect 5 1 13 0; #X connect 5 1 18 1; #X connect 6 0 24 0; #X connect 9 0 1 1; #X connect 10 0 0 1; #X connect 10 0 12 1; #X connect 12 0 16 0; #X connect 13 0 15 1; #X connect 14 0 15 0; #X connect 15 0 17 0; #X connect 17 0 12 0; #X connect 18 0 19 0; #X connect 18 0 26 0; #X connect 19 0 27 0; #X connect 19 0 23 0; #X connect 20 0 19 0; #X connect 21 0 28 0; #X connect 22 0 26 2; #X connect 24 0 0 0; #X connect 26 0 13 1; #X connect 26 0 14 1; #X connect 26 1 4 1; #X connect 26 1 2 1; #X connect 27 0 26 1; #X restore 52 228 pd noise-floor_filter; #X obj 52 312 *~; #X obj 124 313 *~; #X obj 196 201 nbx 5 14 1 100 0 1 empty empty empty 0 -8 0 10 -262144 -1 -1 1 256; #X connect 0 0 11 0; #X connect 0 1 2 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 0 0; #X connect 4 0 1 0; #X connect 5 0 21 1; #X connect 6 0 20 1; #X connect 7 0 8 0; #X connect 7 0 8 1; #X connect 9 0 16 0; #X connect 10 0 11 1; #X connect 11 0 19 0; #X connect 16 0 19 0; #X connect 19 0 20 0; #X connect 19 1 21 0; #X connect 19 2 13 0; #X connect 20 0 7 0; #X connect 21 0 7 1; #X connect 22 0 19 1;
2011/12/20 Alexandre Torres Porres porres@gmail.com
Hi there, this is a technique for calculating the noise floor of a spectrum, and extracting the peaks.
It'd be used pretty much like I04.Noie Gate Miller's example, that has the "mask" table with a constant multiplier. We'd have instead this "noise-floor" block of audio, also multiplied by a constant.
To get the noise floor, we take the magnitude (or power) spectrum and get the median of small bits of it, like every 32 samples. So the values of every 32 samples would be the median of that section...
this is where I got this from, check page 4 and 5 http://homepages.cae.wisc.edu/~sethares/software/SpectralTools.pdf
this would be kinda like using the [median] or [median_n] objects, but over audio blocks and not number lists.
Since there's the need of calculating this in and using the result back in the same block round into the audio chain, I can't put the spectrum into a table, and then calculate the median over bits of it.
But then, how to do it? Should I be able to pull this out only if I write a "median~" or [noise_floor~] external?
Or somehow there's another way to do this with some existing external, or a similar technique, or even some audio math trick using [fexpr~] or something?
This has to do with the other post I did about a project that attempts to isolate notes into a chord in a spectrum, something like melodyne is does.
thanks Alex
stupid bug; dsp $1 instead of dsp 1 on loadbang
now corrected:
======================== #N canvas 1374 303 359 446 12; #X obj 52 128 readsf~; #X obj 52 46 openpanel; #X obj 52 73 symbol; #X msg 52 101 open $1 , start; #X obj 52 26 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 142 288 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 70 286 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 86 347 +~; #X obj 78 387 dac~; #X obj 179 112 noise~; #X floatatom 117 142 5 0 0 0 - - -; #X obj 52 166 *~ 1; #X text 187 178 floor level; #X floatatom 196 262 5 0 0 0 - - -; #X text 239 264 floor (average); #X text 74 24 open sample; #X obj 179 142 *~ 0.01; #X text 60 264 dirty; #X text 133 263 clean; #N canvas 222 138 574 729 noise-floor_filter 0; #X obj -38 635 *~; #X obj -98 78 *~; #X obj 3 503 *~; #X obj -98 50 inlet~; #X obj -38 504 *~; #X obj -99 107 rfft~; #X obj -38 534 rifft~; #X obj -38 665 outlet~; #X obj -263 221 block~ 1024 4; #X obj -57 78 tabreceive~ $0-hann; #X obj -20 597 tabreceive~ $0-hann; #X text -42 104 real Fourier transform; #X obj -151 638 *~; #X obj -110 506 *~; #X obj -151 507 *~; #X obj -151 537 rifft~; #X obj -151 665 outlet~; #X obj -151 566 /~ 1536; #X obj 1 194 expr~ ($v1*$v1+$v2*$v2); #X obj 118 258 avg~; #X obj 118 226 bang~; #X obj -251 255 loadbang; #X obj 236 51 inlet; #X obj 165 286 outlet; #X obj -38 564 /~ 1536; #N canvas 0 22 450 300 (subpatch) 0; #X array $0-hann 1024 float 1; #A 0 0 1.88351e-05 3.76403e-05 9.41157e-05 0.000150591 0.000244677 0.000338793 0.000470519 0.000602275 0.000771582 0.000940919 0.00114784 0.00135475 0.00159922 0.00184369 0.00212565 0.00240761 0.00272706 0.00304651 0.00340337 0.00376022 0.00415444 0.00454867 0.00498021 0.00541171 0.00588048 0.00634927 0.00685519 0.00736114 0.00790417 0.00844723 0.0090273 0.00960734 0.0102243 0.0108413 0.0114951 0.0121489 0.0128394 0.01353 0.0142572 0.0149843 0.015748 0.0165117 0.0173118 0.0181119 0.0189483 0.0197847 0.0206572 0.0215298 0.0224383 0.0233469 0.0242914 0.0252359 0.0262161 0.0271963 0.0282121 0.0292279 0.0302792 0.0313304 0.032417 0.0335035 0.0346252 0.0357469 0.0369035 0.0380602 0.0392516 0.040443 0.041669 0.042895 0.0441555 0.0454159 0.0467106 0.0480052 0.0493339 0.0506626 0.0520252 0.0533877 0.0547839 0.05618 0.0576096 0.0590392 0.060502 0.0619648 0.0634606 0.0649563 0.0664849 0.0680134 0.0695744 0.0711355 0.0727288 0.0743222 0.0759476 0.077573 0.0792302 0.0808874 0.0825762 0.084265 0.085985 0.0877051 0.0894562 0.0912073 0.0929892 0.0947711 0.0965835 0.0983959 0.100239 0.102081 0.103954 0.105826 0.107729 0.109631 0.111563 0.113494 0.115455 0.117416 0.119406 0.121395 0.123413 0.125431 0.127478 0.129524 0.131598 0.133672 0.135774 0.137876 0.140005 0.142134 0.14429 0.146446 0.148629 0.150811 0.15302 0.155229 0.157464 0.159699 0.161959 0.16422 0.166506 0.168792 0.171102 0.173413 0.175748 0.178084 0.180443 0.182803 0.185186 0.18757 0.189977 0.192384 0.194814 0.197244 0.199697 0.20215 0.204625 0.2071 0.209598 0.212095 0.214614 0.217133 0.219674 0.222214 0.224775 0.227337 0.229919 0.2325 0.235102 0.237704 0.240326 0.242948 0.245589 0.24823 0.25089 0.25355 0.256229 0.258907 0.261604 0.264301 0.267015 0.26973 0.272462 0.275194 0.277942 0.280691 0.283457 0.286222 0.289003 0.291785 0.294582 0.297379 0.300191 0.303003 0.305831 0.308658 0.311499 0.314341 0.317196 0.320052 0.322921 0.32579 0.328672 0.331555 0.334449 0.337344 0.340252 0.343159 0.346078 0.348997 0.351927 0.354857 0.357798 0.36074 0.363691 0.366643 0.369605 0.372567 0.375538 0.37851 0.38149 0.384471 0.38746 0.390449 0.393447 0.396444 0.399449 0.402455 0.405467 0.40848 0.411499 0.414519 0.417545 0.420571 0.423603 0.426635 0.429672 0.432709 0.435752 0.438794 0.441842 0.444889 0.44794 0.450991 0.454046 0.457101 0.460159 0.463218 0.466279 0.46934 0.472403 0.475466 0.478531 0.481596 0.484663 0.487729 0.490797 0.493864 0.496932 0.5 0.503068 0.506136 0.509203 0.512271 0.515337 0.518404 0.521469 0.524534 0.527597 0.53066 0.533721 0.536782 0.539841 0.542899 0.545954 0.549009 0.55206 0.555111 0.558158 0.561205 0.564248 0.56729 0.570328 0.573365 0.576397 0.579429 0.582455 0.585481 0.588501 0.59152 0.594533 0.597545 0.600551 0.603556 0.606553 0.609551 0.61254 0.615529 0.61851 0.62149 0.624462 0.627433 0.630395 0.633357 0.636308 0.63926 0.642201 0.645143 0.648073 0.651003 0.653922 0.656841 0.659748 0.662656 0.66555 0.668445 0.671328 0.67421 0.677079 0.679948 0.682804 0.685659 0.688501 0.691342 0.694169 0.696997 0.699809 0.702621 0.705418 0.708215 0.710997 0.713778 0.716543 0.719309 0.722057 0.724806 0.727538 0.73027 0.732984 0.735699 0.738396 0.741093 0.743771 0.74645 0.74911 0.75177 0.754411 0.757052 0.759674 0.762295 0.764897 0.767499 0.770081 0.772663 0.775224 0.777786 0.780326 0.782867 0.785386 0.787905 0.790402 0.7929 0.795375 0.79785 0.800303 0.802756 0.805186 0.807616 0.810023 0.812431 0.814814 0.817197 0.819557 0.821916 0.824252 0.826587 0.828898 0.831209 0.833494 0.83578 0.838041 0.840301 0.842536 0.844771 0.84698 0.849189 0.851372 0.853554 0.85571 0.857866 0.859995 0.862124 0.864226 0.866328 0.868402 0.870476 0.872523 0.874569 0.876587 0.878605 0.880595 0.882584 0.884545 0.886506 0.888438 0.890369 0.892272 0.894174 0.896047 0.897919 0.899762 0.901605 0.903417 0.905229 0.907011 0.908793 0.910544 0.912295 0.914015 0.915736 0.917424 0.919113 0.92077 0.922428 0.924053 0.925678 0.927272 0.928865 0.930426 0.931987 0.933516 0.935044 0.93654 0.938036 0.939499 0.940961 0.942391 0.94382 0.945217 0.946613 0.947975 0.949338 0.950667 0.951995 0.95329 0.954585 0.955845 0.957106 0.958332 0.959558 0.960749 0.96194 0.963097 0.964254 0.965375 0.966497 0.967584 0.96867 0.969721 0.970773 0.971788 0.972804 0.973784 0.974765 0.975709 0.976654 0.977562 0.978471 0.979343 0.980216 0.981052 0.981889 0.982689 0.983489 0.984252 0.985016 0.985743 0.98647 0.987161 0.987852 0.988505 0.989159 0.989776 0.990393 0.990973 0.991553 0.992096 0.992639 0.993145 0.993651 0.99412 0.994589 0.99502 0.995452 0.995846 0.99624 0.996597 0.996954 0.997273 0.997593 0.997874 0.998156 0.998401 0.998645 0.998852 0.999059 0.999229 0.999398 0.99953 0.999661 0.999755 0.999849 0.999906 0.999962 0.999981 1 0.999981 0.999962 0.999906 0.999849 0.999755 0.999661 0.999529 0.999398 0.999228 0.999059 0.998852 0.998645 0.998401 0.998156 0.997874 0.997592 0.997273 0.996953 0.996596 0.996239 0.995845 0.995451 0.995019 0.994588 0.994119 0.99365 0.993144 0.992638 0.992095 0.991552 0.990972 0.990392 0.989775 0.989158 0.988504 0.987851 0.98716 0.986469 0.985742 0.985015 0.984251 0.983488 0.982687 0.981887 0.981051 0.980215 0.979342 0.978469 0.977561 0.976652 0.975708 0.974763 0.973783 0.972803 0.971787 0.970771 0.96972 0.968669 0.967582 0.966495 0.965374 0.964252 0.963095 0.961939 0.960747 0.959556 0.95833 0.957104 0.955843 0.954583 0.953288 0.951993 0.950665 0.949336 0.947973 0.946611 0.945215 0.943818 0.942389 0.940959 0.939496 0.938034 0.936538 0.935042 0.933514 0.931985 0.930424 0.928863 0.927269 0.925676 0.924051 0.922425 0.920768 0.919111 0.917422 0.915733 0.914013 0.912293 0.910542 0.908791 0.907009 0.905227 0.903414 0.901602 0.899759 0.897917 0.896044 0.894171 0.892269 0.890367 0.888435 0.886503 0.884542 0.882582 0.880592 0.878602 0.876584 0.874566 0.87252 0.870473 0.868399 0.866325 0.864223 0.862121 0.859992 0.857863 0.855707 0.853551 0.851368 0.849186 0.846977 0.844768 0.842533 0.840298 0.838037 0.835777 0.833491 0.831205 0.828895 0.826584 0.824249 0.821913 0.819554 0.817194 0.814811 0.812427 0.81002 0.807613 0.805183 0.802753 0.8003 0.797847 0.795372 0.792896 0.790399 0.787901 0.785382 0.782863 0.780323 0.777782 0.775221 0.77266 0.770078 0.767496 0.764894 0.762292 0.75967 0.757048 0.754407 0.751766 0.749106 0.746446 0.743767 0.741089 0.738392 0.735695 0.732981 0.730266 0.727534 0.724802 0.722054 0.719305 0.71654 0.713774 0.710993 0.708211 0.705414 0.702617 0.699805 0.696993 0.694165 0.691338 0.688497 0.685655 0.6828 0.679944 0.677075 0.674206 0.671324 0.668441 0.665546 0.662652 0.659744 0.656837 0.653918 0.650999 0.648069 0.645139 0.642197 0.639256 0.636304 0.633353 0.630391 0.627429 0.624458 0.621486 0.618506 0.615525 0.612536 0.609547 0.606549 0.603552 0.600546 0.597541 0.594529 0.591516 0.588496 0.585477 0.582451 0.579425 0.576393 0.573361 0.570324 0.567286 0.564244 0.561201 0.558154 0.555107 0.552056 0.549004 0.545949 0.542894 0.539836 0.536778 0.533717 0.530656 0.527593 0.52453 0.521464 0.518399 0.515333 0.512266 0.509199 0.506131 0.503064 0.499996 0.496928 0.49386 0.490792 0.487725 0.484659 0.481592 0.478527 0.475462 0.472399 0.469335 0.466274 0.463213 0.460155 0.457097 0.454042 0.450987 0.447936 0.444884 0.441837 0.43879 0.435748 0.432705 0.429668 0.42663 0.423598 0.420566 0.417541 0.414515 0.411495 0.408476 0.405463 0.40245 0.399445 0.39644 0.393442 0.390445 0.387456 0.384466 0.381486 0.378505 0.375534 0.372563 0.369601 0.366639 0.363687 0.360736 0.357794 0.354853 0.351923 0.348993 0.346074 0.343155 0.340247 0.33734 0.334445 0.331551 0.328668 0.325786 0.322917 0.320048 0.317192 0.314337 0.311495 0.308654 0.305827 0.302999 0.300187 0.297375 0.294578 0.291781 0.288999 0.286218 0.283453 0.280687 0.277939 0.27519 0.272458 0.269726 0.267012 0.264297 0.2616 0.258904 0.256225 0.253547 0.250886 0.248226 0.245585 0.242944 0.240323 0.237701 0.235099 0.232497 0.229915 0.227333 0.224772 0.222211 0.21967 0.21713 0.214611 0.212092 0.209594 0.207097 0.204622 0.202146 0.199693 0.19724 0.19481 0.19238 0.189973 0.187566 0.185183 0.182799 0.18044 0.17808 0.175745 0.17341 0.171099 0.168788 0.166502 0.164217 0.161956 0.159696 0.157461 0.155226 0.153017 0.150808 0.148625 0.146443 0.144287 0.142131 0.140002 0.137873 0.135771 0.133669 0.131595 0.129521 0.127474 0.125428 0.12341 0.121392 0.119402 0.117413 0.115452 0.113491 0.11156 0.109628 0.107726 0.105823 0.103951 0.102078 0.100236 0.0983929 0.0965805 0.0947681 0.0929862 0.0912043 0.0894533 0.0877022 0.0859821 0.084262 0.0825733 0.0808845 0.0792274 0.0775702 0.0759448 0.0743194 0.0727261 0.0711327 0.0695717 0.0680107 0.0664822 0.0649537 0.0634579 0.0619622 0.0604994 0.0590366 0.0576071 0.0561775 0.0547814 0.0533852 0.0520227 0.0506602 0.0493315 0.0480028 0.0467082 0.0454136 0.0441532 0.0428927 0.0416667 0.0404407 0.0392494 0.038058 0.0369014 0.0357448 0.0346231 0.0335014 0.0324149 0.0313284 0.0302772 0.0292259 0.0282102 0.0271944 0.0262142 0.025234 0.0242896 0.0233451 0.0224366 0.0215281 0.0206555 0.019783 0.0189467 0.0181103 0.0173103 0.0165102 0.0157465 0.0149829 0.0142557 0.0135286 0.0128381 0.0121476 0.0114938 0.01084 0.0102231 0.00960612 0.00902611 0.0084461 0.0079031 0.0073601 0.00685418 0.00634828 0.00587955; #A 1000 0.00541082 0.00497931 0.00454783 0.00415364 0.00375944 0.00340262 0.0030458 0.00272641 0.00240701 0.00212508 0.00184312 0.00159872 0.00135428 0.00114739 0.000940531 0.000771224 0.000601947 0.000470251 0.000338554 0.000244498 0.000150412 9.39965e-05 3.75509e-05 1.87755e-05; #X coords 0 1 1023 0 110 40 1; #X restore -269 169 graph; #X obj 1 318 expr~ if( $v1 <= $v2 * $f3 , 1 , 0) ; if( $v1 <= $v2 *$f3 , 0 , 1); #X obj 118 285 sig~; #X text 11 360 dirty; #X text 150 356 clean; #X text -146 686 dirty; #X text -33 687 clean; #X msg -251 286 ; pd dsp 1; #X connect 0 0 7 0; #X connect 1 0 5 0; #X connect 2 0 6 1; #X connect 3 0 1 0; #X connect 4 0 6 0; #X connect 5 0 4 0; #X connect 5 0 14 0; #X connect 5 0 18 0; #X connect 5 1 2 0; #X connect 5 1 13 0; #X connect 5 1 18 1; #X connect 6 0 24 0; #X connect 9 0 1 1; #X connect 10 0 0 1; #X connect 10 0 12 1; #X connect 12 0 16 0; #X connect 13 0 15 1; #X connect 14 0 15 0; #X connect 15 0 17 0; #X connect 17 0 12 0; #X connect 18 0 19 0; #X connect 18 0 26 0; #X connect 19 0 27 0; #X connect 19 0 23 0; #X connect 20 0 19 0; #X connect 21 0 32 0; #X connect 22 0 26 2; #X connect 24 0 0 0; #X connect 26 0 13 1; #X connect 26 0 14 1; #X connect 26 1 4 1; #X connect 26 1 2 1; #X connect 27 0 26 1; #X restore 52 228 pd noise-floor_filter; #X obj 52 312 *~; #X obj 124 313 *~; #X obj 196 201 nbx 5 14 1 100 0 1 empty empty empty 0 -8 0 10 -262144 -1 -1 1 256; #X connect 0 0 11 0; #X connect 0 1 2 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 0 0; #X connect 4 0 1 0; #X connect 5 0 21 1; #X connect 6 0 20 1; #X connect 7 0 8 0; #X connect 7 0 8 1; #X connect 9 0 16 0; #X connect 10 0 11 1; #X connect 11 0 19 0; #X connect 16 0 19 0; #X connect 19 0 20 0; #X connect 19 1 21 0; #X connect 19 2 13 0; #X connect 20 0 7 0; #X connect 21 0 7 1; #X connect 22 0 19 1;
2011/12/20 Alexandre Torres Porres porres@gmail.com
Hi there, this is a technique for calculating the noise floor of a spectrum, and extracting the peaks.
It'd be used pretty much like I04.Noie Gate Miller's example, that has the "mask" table with a constant multiplier. We'd have instead this "noise-floor" block of audio, also multiplied by a constant.
To get the noise floor, we take the magnitude (or power) spectrum and get the median of small bits of it, like every 32 samples. So the values of every 32 samples would be the median of that section...
this is where I got this from, check page 4 and 5 http://homepages.cae.wisc.edu/~sethares/software/SpectralTools.pdf
this would be kinda like using the [median] or [median_n] objects, but over audio blocks and not number lists.
Since there's the need of calculating this in and using the result back in the same block round into the audio chain, I can't put the spectrum into a table, and then calculate the median over bits of it.
But then, how to do it? Should I be able to pull this out only if I write a "median~" or [noise_floor~] external?
Or somehow there's another way to do this with some existing external, or a similar technique, or even some audio math trick using [fexpr~] or something?
This has to do with the other post I did about a project that attempts to isolate notes into a chord in a spectrum, something like melodyne is does.
thanks Alex
Hi Alex
I've been reading all your posts lately. Very interesting--I will look forward to your new phase vocorder stuff, when I get free time and enough rest.
Have you considered weighted median filtering? It's a non-linear filter structure that takes non-negative integers as arguments. At each sample, you create a list of samples, the adjacent values taken according to the filter arguments. Then, count through the list finding the lowest value each time, and add up the filter weights until you cross the median.
The purpose of weighting is to allow some more flexibility to shape the spectrum and prefer values that are closer to the original signal. It still has the same ability to reject outliers if you select good weights.
I had made a badly written external, and a cpu-hungry abstraction (with fexpr~ and a fixed number of weights) a while back. I'd be happy to dig up the code and algorithm after work today.
There's just two things that sound difficult in this application:
How to handle the endpoints of the signal blocks?
The statistical properties of median and weighted median filters
are tough to describe analytically. If you've got to justify your choice of this one component... it may take some research. Estimating threshold values with mean/variance calculations are much easier analytically.
Chuck
On Tue, Dec 20, 2011 at 5:29 PM, Alexandre Torres Porres porres@gmail.com wrote:
Hi there, this is a technique for calculating the noise floor of a spectrum, and extracting the peaks.
It'd be used pretty much like I04.Noie Gate Miller's example, that has the "mask" table with a constant multiplier. We'd have instead this "noise-floor" block of audio, also multiplied by a constant.
To get the noise floor, we take the magnitude (or power) spectrum and get the median of small bits of it, like every 32 samples. So the values of every 32 samples would be the median of that section...
this is where I got this from, check page 4 and 5 http://homepages.cae.wisc.edu/~sethares/software/SpectralTools.pdf
this would be kinda like using the [median] or [median_n] objects, but over audio blocks and not number lists.
Since there's the need of calculating this in and using the result back in the same block round into the audio chain, I can't put the spectrum into a table, and then calculate the median over bits of it.
But then, how to do it? Should I be able to pull this out only if I write a "median~" or [noise_floor~] external?
Or somehow there's another way to do this with some existing external, or a similar technique, or even some audio math trick using [fexpr~] or something?
This has to do with the other post I did about a project that attempts to isolate notes into a chord in a spectrum, something like melodyne is does.
thanks Alex
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On Wed, Dec 21, 2011 at 11:15 AM, Charles Henry czhenry@gmail.com wrote:
I had made a badly written external, and a cpu-hungry abstraction (with fexpr~ and a fixed number of weights) a while back. I'd be happy to dig up the code and algorithm after work today.
Here's the abstraction: wmed5~.pd Below is also a pasted test patch. How it works: it computes all branches! Just for fun, because it's not something that scales well with more taps, but works.
wmed5~.pd
#N canvas 0 0 765 642 10; #X obj 150 132 t b b; #X obj 189 132 loadbang; #X obj 452 188 expr $f1+$f2+$f3+$f4+$f5; #X obj 455 225 expr int(($f1+1)/2); #X text 591 227 median index; #X obj 11 33 inlet~; #X obj 62 230 fexpr~ $f3*($x1>$x1[-1]) + $f4*($x1>$x1[-2]) + $f5*($x1>$x1[-3])
$f5*($x1[-1]>$x1[-3]) + $f6*($x1[-1]>$x1[-4]) ; $f2*($x1<=$x1[-2])
; $f2*($x1<=$x1[-3]) + $f3*($x1[-1]<=$x1[-3]) + $f4*($x1[-2]<=$x1[-3])
#X obj 19 449 fexpr~ $x1*(($x2+$f3) >= $f4)*($x2 < $f4); #X obj 62 475 fexpr~ $x1[-1]*(($x2+$f3) >= $f4)*($x2 < $f4); #X obj 102 501 fexpr~ $x1[-2]*(($x2+$f3) >= $f4)*($x2 < $f4); #X obj 143 527 fexpr~ $x1[-3]*(($x2+$f3) >= $f4)*($x2 < $f4); #X obj 179 552 fexpr~ $x1[-4]*(($x2+$f3) >= $f4)*($x2 < $f4); #X obj 27 594 expr~ $v1+$v2+$v3+$v4+$v5; #X obj 27 625 outlet~; #X obj 78 31 inlet; #X obj 78 54 unpack f f f f f; #X obj 85 163 $2; #X obj 125 165 $3; #X obj 152 165 $4; #X obj 181 165 $5; #X obj 210 165 $6; #X text 253 44 1-D weighted median filter using expr , expr~ , fexpr~ ; #X text 351 88 uses 5 integer arguments , representing the weights of choosing a median from a weighted set of samples as x[0] , x[-1] , x[-2] , x[-3] , x[-4]; #X text 348 129 the weighted set includes a number of duplications of x , equal to the argument; #X connect 0 0 16 0; #X connect 0 1 17 0; #X connect 0 1 18 0; #X connect 0 1 19 0; #X connect 0 1 20 0; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 7 3; #X connect 3 0 8 3; #X connect 3 0 9 3; #X connect 3 0 10 3; #X connect 3 0 11 3; #X connect 5 0 6 0; #X connect 5 0 7 0; #X connect 5 0 8 0; #X connect 5 0 9 0; #X connect 5 0 10 0; #X connect 5 0 11 0; #X connect 6 0 7 1; #X connect 6 1 8 1; #X connect 6 2 9 1; #X connect 6 3 10 1; #X connect 6 4 11 1; #X connect 7 0 12 0; #X connect 8 0 12 1; #X connect 9 0 12 2; #X connect 10 0 12 3; #X connect 11 0 12 4; #X connect 12 0 13 0; #X connect 14 0 15 0; #X connect 15 0 16 0; #X connect 15 1 17 0; #X connect 15 2 18 0; #X connect 15 3 19 0; #X connect 15 4 20 0; #X connect 16 0 2 0; #X connect 16 0 6 1; #X connect 16 0 7 2; #X connect 17 0 2 1; #X connect 17 0 6 2; #X connect 17 0 8 2; #X connect 18 0 2 2; #X connect 18 0 6 3; #X connect 18 0 9 2; #X connect 19 0 2 3; #X connect 19 0 6 4; #X connect 19 0 10 2; #X connect 20 0 2 4; #X connect 20 0 6 5; #X connect 20 0 11 2;
wmed5-test.pd
#N canvas 0 0 724 559 10; #X obj 175 73 noise~; #X obj 44 180 +~; #N canvas 0 0 450 300 (subpatch) 0; #X array array1 64 float 1; #A 0 -0.989722 -0.998962 -0.998581 -0.988581 -0.969059 -0.940204 -0.902292 -0.85569 -0.800846 -0.738288 -0.668619 -0.59251 -0.510694 -0.423959 -0.33314 -0.239112 -0.142782 -0.0450761 0.0530638 0.150693 0.24687 0.34067 0.431188 0.517553 0.598933 0.674544 0.743658 0.805609 0.859801 0.905711 0.942897 0.971002 0.989753 0.998972 0.998569 0.988549 0.969007 0.940132 0.902201 0.855581 0.80072 0.738147 0.668464 0.592342 0.510515 0.42377 0.332944 0.238911 0.142576 0.0448686 -0.0532713 -0.150898 -0.247071 -0.340865 -0.431375 -0.517731 -0.599099 -0.674697 -0.743797 -0.805732 -0.859907 -0.905799 -0.942966 -0.971051; #X coords 0 1 63 -1 200 140 1; #X restore 364 56 graph; #N canvas 0 0 450 300 (subpatch) 0; #X array array2 64 float 1; #A 0 -0.970948 -0.989722 -0.998581 -0.998581 -0.988581 -0.969059 -0.940204 -0.902292 -0.85569 -0.800846 -0.738288 -0.668619 -0.59251 -0.510694 -0.423959 -0.33314 -0.239112 -0.142782 -0.0450761 0.0530638 0.150693 0.24687 0.34067 0.431188 0.517553 0.598933 0.674544 0.743658 0.805609 0.859801 0.905711 0.942897 0.971002 0.989753 0.998569 0.998569 0.988549 0.969007 0.940132 0.902201 0.855581 0.80072 0.738147 0.668464 0.592342 0.510515 0.42377 0.332944 0.238911 0.142576 0.0448686 -0.0532713 -0.150898 -0.247071 -0.340865 -0.431375 -0.517731 -0.599099 -0.674697 -0.743797 -0.805732 -0.859907 -0.905799 -0.942966; #X coords 0 1 63 -1 200 140 1; #X restore 366 218 graph; #X obj 135 214 tabwrite~ array1; #X obj 196 273 tabwrite~ array2; #X obj 224 147 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 46 30 5 0 0 0 - - -; #X obj 43 103 osc~ 689.11; #X obj 173 174 metro 166; #X obj 169 124 expr~ $v1*(abs($v1) > 0.99); #X obj 43 244 wmed5~ 2 3 4 3 2; #X obj 255 151 loadbang; #X connect 0 0 10 0; #X connect 1 0 4 0; #X connect 1 0 11 0; #X connect 6 0 9 0; #X connect 7 0 8 0; #X connect 8 0 1 0; #X connect 9 0 4 0; #X connect 9 0 5 0; #X connect 10 0 1 1; #X connect 11 0 5 0; #X connect 12 0 6 0;
On Wed, Dec 21, 2011 at 11:15 AM, Charles Henry czhenry@gmail.com wrote:
- How to handle the endpoints of the signal blocks?
I've thought this over, and concluded that it really doesn't matter, for the case of the magnitude of power spectral density.
Any high or low values of the spectrum at DC and at the Nyquist frequency will be rejected, because of the symmetry of the Fourier transform about these points.
You'd probably treat the blocks as circular buffers for the purpose of median filtering your spectrum. It stays a little neater that way anyhow, with no samples held over from the previous block.
- The statistical properties of median and weighted median filters
are tough to describe analytically. If you've got to justify your choice of this one component... it may take some research. Estimating threshold values with mean/variance calculations are much easier analytically.
I've also thought this over, and the median filter is the black magic of non-linear filtering. It rejects some bad points in the data no matter how bad they are which makes it robust and really practical, but quantifying the effects is some kind of arcane secret.
Another way to look at it is what it does for your spectrum's continuity--it might be good to rid of some of the variability in the noise floor estimation, just making the spectrum smoother, which the median filter certainly does. I wonder if there could be something analogous for smoothing out phase in a spectrum?
On Tue, Dec 20, 2011 at 5:29 PM, Alexandre Torres Porres porres@gmail.com wrote:
Hi there, this is a technique for calculating the noise floor of a spectrum, and extracting the peaks.
It'd be used pretty much like I04.Noie Gate Miller's example, that has the "mask" table with a constant multiplier. We'd have instead this "noise-floor" block of audio, also multiplied by a constant.
To get the noise floor, we take the magnitude (or power) spectrum and get the median of small bits of it, like every 32 samples. So the values of every 32 samples would be the median of that section...
this is where I got this from, check page 4 and 5 http://homepages.cae.wisc.edu/~sethares/software/SpectralTools.pdf
this would be kinda like using the [median] or [median_n] objects, but over audio blocks and not number lists.
Since there's the need of calculating this in and using the result back in the same block round into the audio chain, I can't put the spectrum into a table, and then calculate the median over bits of it.
But then, how to do it? Should I be able to pull this out only if I write a "median~" or [noise_floor~] external?
Or somehow there's another way to do this with some existing external, or a similar technique, or even some audio math trick using [fexpr~] or something?
This has to do with the other post I did about a project that attempts to isolate notes into a chord in a spectrum, something like melodyne is does.
thanks Alex
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Hi there, I had no idea there was such a thing as the [pack~] & [unpack~] objects. I was about to ask about something like this, or propose it, because it is very cool the idea of acting on audio blocks as if they were lists, and do all sorts of operations we cant with audio objects.
Anyway, now that I there is such a thing, and since I already had programmed the median filter I needed with control objetcs... voilá! I have the thing working well.
But then, I need to delay the signal, since [pack~]/[unpack~] delays a block of audio.
My question is, is it possible to have it done without the delays?
thanks a lot, here's my code for you people to check this out.
==============================================
#N canvas 733 146 357 400 12; #X obj 59 149 readsf~; #X obj 59 67 openpanel; #X obj 59 94 symbol; #X msg 59 122 open $1 , start; #X obj 59 47 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 193 259 *~ 1; #X obj 218 234 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X obj 129 232 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 148 308 +~; #X obj 136 348 dac~; #X obj 104 258 *~ 1; #N canvas 965 228 735 754 filter-noise-floor 1; #X obj 9 631 *~; #X obj -32 74 *~; #X obj 50 499 *~; #X obj -32 46 inlet~; #X obj 9 500 *~; #X obj -32 103 rfft~; #X obj 9 530 rifft~; #X obj 9 661 outlet~; #X obj 9 74 tabreceive~ $0-hann; #X obj 27 593 tabreceive~ $0-hann; #X text 25 100 real Fourier transform; #X obj 314 291 loadbang; #X obj -104 634 *~; #X obj -63 502 *~; #X obj -104 503 *~; #X obj -104 533 rifft~; #X obj -104 661 outlet~; #X obj -104 562 /~ 1536; #X obj 68 190 expr~ ($v1*$v1+$v2*$v2); #X obj 303 47 inlet; #X obj 9 560 /~ 1536; #N canvas 0 22 450 300 (subpatch) 0; #X array $0-hann 1024 float 1; #A 0 0 1.88351e-05 3.76403e-05 9.41157e-05 0.000150591 0.000244677 0.000338793 0.000470519 0.000602275 0.000771582 0.000940919 0.00114784 0.00135475 0.00159922 0.00184369 0.00212565 0.00240761 0.00272706 0.00304651 0.00340337 0.00376022 0.00415444 0.00454867 0.00498021 0.00541171 0.00588048 0.00634927 0.00685519 0.00736114 0.00790417 0.00844723 0.0090273 0.00960734 0.0102243 0.0108413 0.0114951 0.0121489 0.0128394 0.01353 0.0142572 0.0149843 0.015748 0.0165117 0.0173118 0.0181119 0.0189483 0.0197847 0.0206572 0.0215298 0.0224383 0.0233469 0.0242914 0.0252359 0.0262161 0.0271963 0.0282121 0.0292279 0.0302792 0.0313304 0.032417 0.0335035 0.0346252 0.0357469 0.0369035 0.0380602 0.0392516 0.040443 0.041669 0.042895 0.0441555 0.0454159 0.0467106 0.0480052 0.0493339 0.0506626 0.0520252 0.0533877 0.0547839 0.05618 0.0576096 0.0590392 0.060502 0.0619648 0.0634606 0.0649563 0.0664849 0.0680134 0.0695744 0.0711355 0.0727288 0.0743222 0.0759476 0.077573 0.0792302 0.0808874 0.0825762 0.084265 0.085985 0.0877051 0.0894562 0.0912073 0.0929892 0.0947711 0.0965835 0.0983959 0.100239 0.102081 0.103954 0.105826 0.107729 0.109631 0.111563 0.113494 0.115455 0.117416 0.119406 0.121395 0.123413 0.125431 0.127478 0.129524 0.131598 0.133672 0.135774 0.137876 0.140005 0.142134 0.14429 0.146446 0.148629 0.150811 0.15302 0.155229 0.157464 0.159699 0.161959 0.16422 0.166506 0.168792 0.171102 0.173413 0.175748 0.178084 0.180443 0.182803 0.185186 0.18757 0.189977 0.192384 0.194814 0.197244 0.199697 0.20215 0.204625 0.2071 0.209598 0.212095 0.214614 0.217133 0.219674 0.222214 0.224775 0.227337 0.229919 0.2325 0.235102 0.237704 0.240326 0.242948 0.245589 0.24823 0.25089 0.25355 0.256229 0.258907 0.261604 0.264301 0.267015 0.26973 0.272462 0.275194 0.277942 0.280691 0.283457 0.286222 0.289003 0.291785 0.294582 0.297379 0.300191 0.303003 0.305831 0.308658 0.311499 0.314341 0.317196 0.320052 0.322921 0.32579 0.328672 0.331555 0.334449 0.337344 0.340252 0.343159 0.346078 0.348997 0.351927 0.354857 0.357798 0.36074 0.363691 0.366643 0.369605 0.372567 0.375538 0.37851 0.38149 0.384471 0.38746 0.390449 0.393447 0.396444 0.399449 0.402455 0.405467 0.40848 0.411499 0.414519 0.417545 0.420571 0.423603 0.426635 0.429672 0.432709 0.435752 0.438794 0.441842 0.444889 0.44794 0.450991 0.454046 0.457101 0.460159 0.463218 0.466279 0.46934 0.472403 0.475466 0.478531 0.481596 0.484663 0.487729 0.490797 0.493864 0.496932 0.5 0.503068 0.506136 0.509203 0.512271 0.515337 0.518404 0.521469 0.524534 0.527597 0.53066 0.533721 0.536782 0.539841 0.542899 0.545954 0.549009 0.55206 0.555111 0.558158 0.561205 0.564248 0.56729 0.570328 0.573365 0.576397 0.579429 0.582455 0.585481 0.588501 0.59152 0.594533 0.597545 0.600551 0.603556 0.606553 0.609551 0.61254 0.615529 0.61851 0.62149 0.624462 0.627433 0.630395 0.633357 0.636308 0.63926 0.642201 0.645143 0.648073 0.651003 0.653922 0.656841 0.659748 0.662656 0.66555 0.668445 0.671328 0.67421 0.677079 0.679948 0.682804 0.685659 0.688501 0.691342 0.694169 0.696997 0.699809 0.702621 0.705418 0.708215 0.710997 0.713778 0.716543 0.719309 0.722057 0.724806 0.727538 0.73027 0.732984 0.735699 0.738396 0.741093 0.743771 0.74645 0.74911 0.75177 0.754411 0.757052 0.759674 0.762295 0.764897 0.767499 0.770081 0.772663 0.775224 0.777786 0.780326 0.782867 0.785386 0.787905 0.790402 0.7929 0.795375 0.79785 0.800303 0.802756 0.805186 0.807616 0.810023 0.812431 0.814814 0.817197 0.819557 0.821916 0.824252 0.826587 0.828898 0.831209 0.833494 0.83578 0.838041 0.840301 0.842536 0.844771 0.84698 0.849189 0.851372 0.853554 0.85571 0.857866 0.859995 0.862124 0.864226 0.866328 0.868402 0.870476 0.872523 0.874569 0.876587 0.878605 0.880595 0.882584 0.884545 0.886506 0.888438 0.890369 0.892272 0.894174 0.896047 0.897919 0.899762 0.901605 0.903417 0.905229 0.907011 0.908793 0.910544 0.912295 0.914015 0.915736 0.917424 0.919113 0.92077 0.922428 0.924053 0.925678 0.927272 0.928865 0.930426 0.931987 0.933516 0.935044 0.93654 0.938036 0.939499 0.940961 0.942391 0.94382 0.945217 0.946613 0.947975 0.949338 0.950667 0.951995 0.95329 0.954585 0.955845 0.957106 0.958332 0.959558 0.960749 0.96194 0.963097 0.964254 0.965375 0.966497 0.967584 0.96867 0.969721 0.970773 0.971788 0.972804 0.973784 0.974765 0.975709 0.976654 0.977562 0.978471 0.979343 0.980216 0.981052 0.981889 0.982689 0.983489 0.984252 0.985016 0.985743 0.98647 0.987161 0.987852 0.988505 0.989159 0.989776 0.990393 0.990973 0.991553 0.992096 0.992639 0.993145 0.993651 0.99412 0.994589 0.99502 0.995452 0.995846 0.99624 0.996597 0.996954 0.997273 0.997593 0.997874 0.998156 0.998401 0.998645 0.998852 0.999059 0.999229 0.999398 0.99953 0.999661 0.999755 0.999849 0.999906 0.999962 0.999981 1 0.999981 0.999962 0.999906 0.999849 0.999755 0.999661 0.999529 0.999398 0.999228 0.999059 0.998852 0.998645 0.998401 0.998156 0.997874 0.997592 0.997273 0.996953 0.996596 0.996239 0.995845 0.995451 0.995019 0.994588 0.994119 0.99365 0.993144 0.992638 0.992095 0.991552 0.990972 0.990392 0.989775 0.989158 0.988504 0.987851 0.98716 0.986469 0.985742 0.985015 0.984251 0.983488 0.982687 0.981887 0.981051 0.980215 0.979342 0.978469 0.977561 0.976652 0.975708 0.974763 0.973783 0.972803 0.971787 0.970771 0.96972 0.968669 0.967582 0.966495 0.965374 0.964252 0.963095 0.961939 0.960747 0.959556 0.95833 0.957104 0.955843 0.954583 0.953288 0.951993 0.950665 0.949336 0.947973 0.946611 0.945215 0.943818 0.942389 0.940959 0.939496 0.938034 0.936538 0.935042 0.933514 0.931985 0.930424 0.928863 0.927269 0.925676 0.924051 0.922425 0.920768 0.919111 0.917422 0.915733 0.914013 0.912293 0.910542 0.908791 0.907009 0.905227 0.903414 0.901602 0.899759 0.897917 0.896044 0.894171 0.892269 0.890367 0.888435 0.886503 0.884542 0.882582 0.880592 0.878602 0.876584 0.874566 0.87252 0.870473 0.868399 0.866325 0.864223 0.862121 0.859992 0.857863 0.855707 0.853551 0.851368 0.849186 0.846977 0.844768 0.842533 0.840298 0.838037 0.835777 0.833491 0.831205 0.828895 0.826584 0.824249 0.821913 0.819554 0.817194 0.814811 0.812427 0.81002 0.807613 0.805183 0.802753 0.8003 0.797847 0.795372 0.792896 0.790399 0.787901 0.785382 0.782863 0.780323 0.777782 0.775221 0.77266 0.770078 0.767496 0.764894 0.762292 0.75967 0.757048 0.754407 0.751766 0.749106 0.746446 0.743767 0.741089 0.738392 0.735695 0.732981 0.730266 0.727534 0.724802 0.722054 0.719305 0.71654 0.713774 0.710993 0.708211 0.705414 0.702617 0.699805 0.696993 0.694165 0.691338 0.688497 0.685655 0.6828 0.679944 0.677075 0.674206 0.671324 0.668441 0.665546 0.662652 0.659744 0.656837 0.653918 0.650999 0.648069 0.645139 0.642197 0.639256 0.636304 0.633353 0.630391 0.627429 0.624458 0.621486 0.618506 0.615525 0.612536 0.609547 0.606549 0.603552 0.600546 0.597541 0.594529 0.591516 0.588496 0.585477 0.582451 0.579425 0.576393 0.573361 0.570324 0.567286 0.564244 0.561201 0.558154 0.555107 0.552056 0.549004 0.545949 0.542894 0.539836 0.536778 0.533717 0.530656 0.527593 0.52453 0.521464 0.518399 0.515333 0.512266 0.509199 0.506131 0.503064 0.499996 0.496928 0.49386 0.490792 0.487725 0.484659 0.481592 0.478527 0.475462 0.472399 0.469335 0.466274 0.463213 0.460155 0.457097 0.454042 0.450987 0.447936 0.444884 0.441837 0.43879 0.435748 0.432705 0.429668 0.42663 0.423598 0.420566 0.417541 0.414515 0.411495 0.408476 0.405463 0.40245 0.399445 0.39644 0.393442 0.390445 0.387456 0.384466 0.381486 0.378505 0.375534 0.372563 0.369601 0.366639 0.363687 0.360736 0.357794 0.354853 0.351923 0.348993 0.346074 0.343155 0.340247 0.33734 0.334445 0.331551 0.328668 0.325786 0.322917 0.320048 0.317192 0.314337 0.311495 0.308654 0.305827 0.302999 0.300187 0.297375 0.294578 0.291781 0.288999 0.286218 0.283453 0.280687 0.277939 0.27519 0.272458 0.269726 0.267012 0.264297 0.2616 0.258904 0.256225 0.253547 0.250886 0.248226 0.245585 0.242944 0.240323 0.237701 0.235099 0.232497 0.229915 0.227333 0.224772 0.222211 0.21967 0.21713 0.214611 0.212092 0.209594 0.207097 0.204622 0.202146 0.199693 0.19724 0.19481 0.19238 0.189973 0.187566 0.185183 0.182799 0.18044 0.17808 0.175745 0.17341 0.171099 0.168788 0.166502 0.164217 0.161956 0.159696 0.157461 0.155226 0.153017 0.150808 0.148625 0.146443 0.144287 0.142131 0.140002 0.137873 0.135771 0.133669 0.131595 0.129521 0.127474 0.125428 0.12341 0.121392 0.119402 0.117413 0.115452 0.113491 0.11156 0.109628 0.107726 0.105823 0.103951 0.102078 0.100236 0.0983929 0.0965805 0.0947681 0.0929862 0.0912043 0.0894533 0.0877022 0.0859821 0.084262 0.0825733 0.0808845 0.0792274 0.0775702 0.0759448 0.0743194 0.0727261 0.0711327 0.0695717 0.0680107 0.0664822 0.0649537 0.0634579 0.0619622 0.0604994 0.0590366 0.0576071 0.0561775 0.0547814 0.0533852 0.0520227 0.0506602 0.0493315 0.0480028 0.0467082 0.0454136 0.0441532 0.0428927 0.0416667 0.0404407 0.0392494 0.038058 0.0369014 0.0357448 0.0346231 0.0335014 0.0324149 0.0313284 0.0302772 0.0292259 0.0282102 0.0271944 0.0262142 0.025234 0.0242896 0.0233451 0.0224366 0.0215281 0.0206555 0.019783 0.0189467 0.0181103 0.0173103 0.0165102 0.0157465 0.0149829 0.0142557 0.0135286 0.0128381 0.0121476 0.0114938 0.01084 0.0102231 0.00960612 0.00902611 0.0084461 0.0079031 0.0073601 0.00685418 0.00634828 0.00587955; #A 1000 0.00541082 0.00497931 0.00454783 0.00415364 0.00375944 0.00340262 0.0030458 0.00272641 0.00240701 0.00212508 0.00184312 0.00159872 0.00135428 0.00114739 0.000940531 0.000771224 0.000601947 0.000470251 0.000338554 0.000244498 0.000150412 9.39965e-05 3.75509e-05 1.87755e-05; #X coords 0 1 1023 0 300 100 1; #X restore 180 471 graph; #X obj 185 262 pack~; #X obj 185 309 unpack~; #N canvas 560 22 600 435 "median~" 0; #X msg 273 285 $16; #X msg 273 247 set , adddollar $1; #X obj 273 225 expr rint(($f1+1)/2); #X obj 178 165 t l l; #X obj 205 247 Uzi; #X obj 258 319 f; #X text 156 79 audio block; #X obj 178 106 inlet; #X obj 273 105 inlet; #X obj 258 345 repack; #X obj 354 104 inlet; #X obj 258 378 outlet; #X obj 232 247 sort; #X msg 273 167 32; #X obj 286 144 loadbang; #X obj 205 201 list split; #X obj 128 201 list split; #X obj 205 224 t b l; #X text 262 78 median size; #X text 364 82 block size; #X connect 0 0 5 1; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 16 0; #X connect 3 1 15 0; #X connect 4 0 5 0; #X connect 5 0 9 0; #X connect 7 0 3 0; #X connect 8 0 13 0; #X connect 9 0 11 0; #X connect 10 0 9 1; #X connect 12 0 0 0; #X connect 13 0 2 0; #X connect 13 0 15 1; #X connect 13 0 16 1; #X connect 13 0 4 1; #X connect 14 0 13 0; #X connect 15 0 17 0; #X connect 16 1 3 0; #X connect 17 0 4 0; #X connect 17 1 12 0; #X restore 185 285 pd "median~"; #X msg -218 254 set $1 4; #X obj -148 181 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10 -262144 -1 -1 1024 256; #X obj -218 280 block~; #X obj -126 353 delay~ 4096; #X obj 68 316 delay~ 4096; #X obj 68 344 expr~ if( $v1 <= $v2 * $f3 , 1 , 0) ; if( $v1 > $v2 *$f3 , 1 , 0); #X msg 314 315 1; #X msg 314 344 ; pd dsp $1; #X obj -28 353 delay~ 4096; #X connect 0 0 7 0; #X connect 1 0 5 0; #X connect 2 0 6 1; #X connect 3 0 1 0; #X connect 4 0 6 0; #X connect 5 0 18 0; #X connect 5 0 28 0; #X connect 5 1 18 1; #X connect 5 1 33 0; #X connect 6 0 20 0; #X connect 8 0 1 1; #X connect 9 0 0 1; #X connect 9 0 12 1; #X connect 11 0 31 0; #X connect 12 0 16 0; #X connect 13 0 15 1; #X connect 14 0 15 0; #X connect 15 0 17 0; #X connect 17 0 12 0; #X connect 18 0 22 0; #X connect 18 0 29 0; #X connect 19 0 30 2; #X connect 20 0 0 0; #X connect 22 0 24 0; #X connect 23 0 30 1; #X connect 24 0 23 0; #X connect 25 0 27 0; #X connect 26 0 25 0; #X connect 26 0 24 2; #X connect 26 0 28 1; #X connect 26 0 29 1; #X connect 26 0 33 1; #X connect 28 0 14 0; #X connect 28 0 4 0; #X connect 29 0 30 0; #X connect 30 0 13 1; #X connect 30 0 14 1; #X connect 30 1 4 1; #X connect 30 1 2 1; #X connect 31 0 30 2; #X connect 31 0 32 0; #X connect 33 0 13 0; #X connect 33 0 2 0; #X restore 59 179 pd filter-noise-floor; #X floatatom 203 148 5 1 100 0 - - -; #X text 242 147 floor level; #X text 117 212 noise; #X text 206 215 signal; #X connect 0 0 11 0; #X connect 0 1 2 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 0 0; #X connect 4 0 1 0; #X connect 5 0 8 1; #X connect 6 0 5 1; #X connect 7 0 10 1; #X connect 8 0 9 0; #X connect 8 0 9 1; #X connect 10 0 8 0; #X connect 11 0 10 0; #X connect 11 1 5 0; #X connect 12 0 11 1;
Le 2011-12-23 à 18:53:00, Alexandre Torres Porres a écrit :
Hi there, I had no idea there was such a thing as the [pack~] & [unpack~] objects. I was about to ask about something like this, or propose it, because it is very cool the idea of acting on audio blocks as if they were lists,
Also, [#from~] and [#to~] can take multiple signals and turn them into columns inside matrices, and back into multiple signals.
http://gridflow.ca/help/%23from~-help.html http://gridflow.ca/help/%23to~-help.html
| Mathieu BOUCHARD ----- téléphone : +1.514.383.3801 ----- Montréal, QC
Le 2011-12-20 à 21:29:00, Alexandre Torres Porres a écrit :
this would be kinda like using the [median] or [median_n] objects, but over audio blocks and not number lists.
Ok, lots of heavy details below...
The way [median] and [median_n] are built, they take a lot of time. Sorting each window of 32 elements is slow with any full sort. Even the usually slow process of putting elements one by one in a sorted array is faster than any full sort like qsort() or [sort], in this kind of situation, because you need to look at the result of the sort after each insertion/removal.
But a sort based on binary-trees will make your median filter able to compete with the speed of FFT, for example. You keep your sorted «array» as a sorted binary tree and this makes it fast to insert, delete, and find the middle. But you can't do that with C++'s std::map because it offers no way to find the middle quickly... you'd need something special.
There may be ways to bend quicksort so that it can do many similar sorts quickly, but you can't do that with qsort() nor anything based on it.
I don't know how zexy's [sort]. Apparently it doesn't use the quicksort method that I assumed it did, it uses the shellsort method instead, which is sometimes slower, sometimes faster. I wonder whether it could speed up your task if you made a kind of [median_n] that would reuse the already-sorted list to speed up the next sort. (This would not improve a quicksort, but I wonder whether it'd improve [sort]).
Generally, median-based methods are harder to work with, as they involve lots of comparisons and swaps and such, by sorting or by doing things that are like sorting ; whereas mean-based methods involve simple fast passes of addition and multiplication. But both give quite different results, in many situations.
Since there's the need of calculating this in and using the result back in the same block round into the audio chain, I can't put the spectrum into a table, and then calculate the median over bits of it.
with [tabsend~] and a [bang~], then you can send a whole block into the message domain, compute it, and get it back as a signal, one block later.
But then, how to do it? Should I be able to pull this out only if I write a "median~" or [noise_floor~] external?
Or somehow there's another way to do this with some existing external, or a similar technique, or even some audio math trick using [fexpr~] or something?
I don't think you can do any reasonable sort using [fexpr~]... except perhaps a strange undecipherable network of a hundred [fexpr~] or so. I think it's easier to write an external.
This has to do with the other post I did about a project that attempts to isolate notes into a chord in a spectrum, something like melodyne is does.
So, why is a mean (average) not good enough, while a median would be good enough ? It's possible, but I'd like to hear an explanation.
| Mathieu BOUCHARD ----- téléphone : +1.514.383.3801 ----- Montréal, QC
So, why is a mean (average) not good enough, while a median would be good
enough ?
It's possible, but I'd like to hear an explanation.
I'd need to test and compare, all I know is that I tested [avg~] and compared it to sethares' objects in MAX, that do this median filter, and they seem to sound better over there.
But these objects (GNU General Public License v2.0) are actually codes in java,
for(int i=0; i<framesize; i++) { // set the output magnitude by if(i % medlen == 0){ // taking moving median of input for(int ij=0; ij<medlen; ij++) { // this takes median thesevals[ij] = magformed[i+ij]; // of medlen elements } noisefloor[i] = (float)(Statistics.median(thesevals)); } else { // advance median by medlen steps noisefloor[i] = noisefloor[i-1]; // keeping same value
2011/12/22 Mathieu Bouchard matju@artengine.ca
Le 2011-12-20 à 21:29:00, Alexandre Torres Porres a écrit :
this would be kinda like using the [median] or [median_n] objects, but
over audio blocks and not number lists.
Ok, lots of heavy details below...
The way [median] and [median_n] are built, they take a lot of time. Sorting each window of 32 elements is slow with any full sort. Even the usually slow process of putting elements one by one in a sorted array is faster than any full sort like qsort() or [sort], in this kind of situation, because you need to look at the result of the sort after each insertion/removal.
But a sort based on binary-trees will make your median filter able to compete with the speed of FFT, for example. You keep your sorted «array» as a sorted binary tree and this makes it fast to insert, delete, and find the middle. But you can't do that with C++'s std::map because it offers no way to find the middle quickly... you'd need something special.
There may be ways to bend quicksort so that it can do many similar sorts quickly, but you can't do that with qsort() nor anything based on it.
I don't know how zexy's [sort]. Apparently it doesn't use the quicksort method that I assumed it did, it uses the shellsort method instead, which is sometimes slower, sometimes faster. I wonder whether it could speed up your task if you made a kind of [median_n] that would reuse the already-sorted list to speed up the next sort. (This would not improve a quicksort, but I wonder whether it'd improve [sort]).
Generally, median-based methods are harder to work with, as they involve lots of comparisons and swaps and such, by sorting or by doing things that are like sorting ; whereas mean-based methods involve simple fast passes of addition and multiplication. But both give quite different results, in many situations.
Since there's the need of calculating this in and using the result back
in the same block round into the audio chain, I can't put the spectrum into a table, and then calculate the median over bits of it.
with [tabsend~] and a [bang~], then you can send a whole block into the message domain, compute it, and get it back as a signal, one block later.
But then, how to do it? Should I be able to pull this out only if I write
a "median~" or [noise_floor~] external?
Or somehow there's another way to do this with some existing external, or a similar technique, or even some audio math trick using [fexpr~] or something?
I don't think you can do any reasonable sort using [fexpr~]... except perhaps a strange undecipherable network of a hundred [fexpr~] or so. I think it's easier to write an external.
This has to do with the other post I did about a project that attempts to
isolate notes into a chord in a spectrum, something like melodyne is does.
So, why is a mean (average) not good enough, while a median would be good enough ? It's possible, but I'd like to hear an explanation.
______________________________**______________________________** __________ | Mathieu BOUCHARD ----- téléphone : +1.514.383.3801 ----- Montréal, QC
Hi Alexandre, maybe the libsms integration into Pd is of use for you - it calculates a model of sinusoidals + residual noise, the latter representing a kind of "noise floor". Those components can then also be modified and resynthesized. http://mtg.upf.edu/static/libsms/
bests, gr~~~
2011/12/21 Alexandre Torres Porres porres@gmail.com:
Hi there, this is a technique for calculating the noise floor of a spectrum, and extracting the peaks.
It'd be used pretty much like I04.Noie Gate Miller's example, that has the "mask" table with a constant multiplier. We'd have instead this "noise-floor" block of audio, also multiplied by a constant.
To get the noise floor, we take the magnitude (or power) spectrum and get the median of small bits of it, like every 32 samples. So the values of every 32 samples would be the median of that section...
this is where I got this from, check page 4 and 5 http://homepages.cae.wisc.edu/~sethares/software/SpectralTools.pdf
this would be kinda like using the [median] or [median_n] objects, but over audio blocks and not number lists.
Since there's the need of calculating this in and using the result back in the same block round into the audio chain, I can't put the spectrum into a table, and then calculate the median over bits of it.
But then, how to do it? Should I be able to pull this out only if I write a "median~" or [noise_floor~] external?
Or somehow there's another way to do this with some existing external, or a similar technique, or even some audio math trick using [fexpr~] or something?
This has to do with the other post I did about a project that attempts to isolate notes into a chord in a spectrum, something like melodyne is does.
thanks Alex
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list