[sharing] that phase vocoder

Mar 5, 2008 at 9:54pm

[sharing] that phase vocoder

This patch reflects the conclusions of a search for a proper sounding phase vocoder. It’s built using standard max objects and includes convolution and a spectral filter a la forbidden planet. Therefor the thing is called pv-c-fp and can be found at the bottom of the page:
http://www.jvkr.nl/shelves

It has some great features that make it fun to play with. Enjoy it. If the patch don’t work, there’s a collective too.

_
johan

#36206
Mar 6, 2008 at 2:53am

Looks like you have some other useful tools there too. Index is gonna come in handy for me. Thanks for sharing.

#124124
Mar 6, 2008 at 5:51am

Quote: jvkr wrote on Wed, 05 March 2008 13:54
—————————————————-
> It has some great features that make it fun to play with. Enjoy it.

I’m enjoying it. It’s great, thank you! I’ve been meaning to learn more about phase vocoding. This will help.

#124125
Mar 6, 2008 at 9:44pm

> I’m enjoying it. It’s great, thank you! I’ve been meaning to learn more about phase vocoding. This will help.

From here it’s possible to do some useful additions, like cepstrum analysis in order to acquire more insight into e.g. noisyness of the signal. That would lead to more meaningfull ways of resynthesis. I’m attempting such things right now.

Good to hear it’s working.

_
johan

#124126
Mar 8, 2008 at 11:02am

This is a nice patch. Open some doors for experimentation. I’m looking forward to see the new additions.
Thanks for sharing.

#124127
Mar 13, 2008 at 5:54pm

Concerning the filer. Today I tried to make it “usable”.

I mean, it would be great to have it in log mode (like the spectrogram in log mode).

Here we only have 20 sliders to cover 1000 Hz, and 200+ sliders to cover the rest. The problem is that I’m more interested in the first sliders than the others…

I first thought I would make an interface for it.
A multislider with bigger sliders than others…
But I think it’s more an internal problem.

Maybe there’s no way to change it, I don’t know.

#124128
Mar 13, 2008 at 10:23pm

Quote: Bertrand Fraysse wrote on Thu, 13 March 2008 18:54
—————————————————-
> Concerning the filer. Today I tried to make it “usable”.
>
> I mean, it would be great to have it in log mode (like the spectrogram in log mode).
>
> Here we only have 20 sliders to cover 1000 Hz, and 200+ sliders to cover the rest. The problem is that I’m more interested in the first sliders than the others…
>
> I first thought I would make an interface for it.
> A multislider with bigger sliders than others…
> But I think it’s more an internal problem.
>
> Maybe there’s no way to change it, I don’t know.
—————————————————-

This is an interesting problem. One approach I tried is to use a filtergraph. In log display on the horizontal axis, it is possible to define a evenly spaced curve that can be queried in terms of bins. This approach doesn’t allow though to select single bins on the lower bin side, although it works on the higher bin side. Maybe a combination of the two would be something.

It is a problem inherent to Fourier analysis: lots of definition where you don’t hear it (in terms of individual bins) and a few where they matter most. To my understanding, the wavelet transform fixes this to some degree.

_
johan

#124129
Mar 14, 2008 at 1:31pm

I tried to put a [log~] between the FFT Bin Index and the sample index of [index~].
And it works very well !

————————– PFFT Patch ————————–
SAVE AS “log_fft_filter.pat”

#P window setfont “Sans Serif” 9.;
#P window linecount 1;
#P newex 165 93 50 9109513 *~ 0.0625;
#N in 2;
#P newobj 205 48 50 9109513 in 2;
#P newex 165 73 50 9109513 log~;
#P newex 13 159 27 9109513 *~;
#P newex 89 161 86 9109513 *~;
#P newex 165 113 72 9109513 index~ EqFun~;
#P newex 13 232 86 9109513 fftout~ 1;
#P newex 13 27 162 9109513 fftin~ 1;
#P connect 6 0 5 1;
#P fasten 2 0 4 1 170 137 35 137;
#P connect 2 0 3 1;
#P connect 7 0 2 0;
#P connect 5 0 7 0;
#P connect 0 2 5 0;
#P connect 3 0 1 1;
#P connect 0 1 3 0;
#P connect 4 0 1 0;
#P connect 0 0 4 0;
#P window clipboard copycount 8;

————————– Main Patch ————————–
#P button 636 40 15 0;
#P window setfont “Sans Serif” 9.;
#P flonum 549 128 35 9 0 0 0 139 0 0 0 221 221 221 222 222 222 0 0 0;
#P window linecount 1;
#P newex 509 149 50 9109513 *~;
#P newex 636 66 69 9109513 loadmess 0.21;
#P comment 302 378 107 9109513 log Spectrogram After;
#P user spectroscope~ 35 76 266 124 20 1 1 2 0 1 0 1 0 0 0 0;
#X frgb 224 224 224;
#X brgb 255 255 255;
#X rgb2 0 0 0;
#X rgb3 243 204 204;
#X rgb4 255 0 0;
#X rgb5 184 184 184;
#X rgb6 0 0 0;
#X rgb7 0 0 0;
#X rgb8 255 255 255;
#X rgb9 255 0 0;
#X rgb10 255 191 0;
#X rgb11 0 191 127;
#X rgb12 127 0 127;
#X rgb13 255 255 255;
#X range 0. 1.2;
#X domain 100. 20000.;
#X done;
#P flonum 636 92 35 9 0 0 0 139 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 635 137 50 9109513 + 1.;
#P newex 636 116 50 9109513 pow 4.;
#P flonum 635 157 98 9 0 0 0 139 0 0 0 221 221 221 222 222 222 0 0 0;
#P user ezdac~ 509 297 553 330 0;
#P newex 359 324 110 9109513 buffer~ EqFun~ 2000;
#P newex 359 304 110 9109513 peek~ EqFun~;
#P newex 359 284 110 9109513 listfunnel 0;
#P user spectroscope~ 35 270 266 124 20 1 1 2 0 1 0 1 0 0 0 0;
#X frgb 224 224 224;
#X brgb 255 255 255;
#X rgb2 0 0 0;
#X rgb3 243 204 204;
#X rgb4 255 0 0;
#X rgb5 184 184 184;
#X rgb6 0 0 0;
#X rgb7 0 0 0;
#X rgb8 255 255 255;
#X rgb9 255 0 0;
#X rgb10 255 191 0;
#X rgb11 0 191 127;
#X rgb12 127 0 127;
#X rgb13 255 255 255;
#X range 0. 1.2;
#X domain 100. 20000.;
#X done;
#P newex 509 198 136 9109513 pfft~ log_fft_filter 2048 4;
#P newex 510 70 49 9109513 noise~;
#P user multiSlider 35 201 266 68 0. 1. 3500 2681 47 0 0 2 0 0 1;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#P comment 734 157 43 9109513 log base;
#P comment 302 185 107 9109513 log Spectrogram Before;
#P comment 554 297 108 9109513 WARNING : It’s NOISE;
#P comment 652 40 243 9109513 Click here when you change something in the pfft patch;
#P hidden connect 19 0 16 0;
#P hidden connect 6 0 7 0;
#P connect 4 0 8 0;
#P connect 8 0 9 0;
#P connect 5 0 19 0;
#P connect 19 0 6 0;
#P connect 6 0 11 0;
#P connect 6 0 11 1;
#P connect 20 0 19 1;
#P connect 13 0 14 0;
#P connect 14 0 12 0;
#P connect 12 0 6 1;
#P connect 21 0 18 0;
#P connect 18 0 15 0;
#P connect 15 0 13 0;
#P window clipboard copycount 22;

—————————————————————–

[*~ 0.0625] in the PFFT patch is here to reduce the number of sliders (but the precision too).

The log factor can be tweaked to best feat the spectrogram but I don’t know the spectrogram log coefficient.
If you have any idea…

Have fun.

#124130
Mar 14, 2008 at 10:10pm

> And it works very well !

Good idea. I modified it slightly, choosing a pow function (output values are easier to control) and incorporated it into the pv-c-fp patch: jvkr.nl/shelves.

_
johan

#124131

You must be logged in to reply to this topic.