PV_PhaseShift shift phase of all bins


Inherits from: Object : AbstractFunction : UGen : PV_ChainUGen


PV_PhaseShift(buffer, shift)


buffer - fft buffer.

shift - phase shift in radians.


See also FFT Overview.


// internal server for scoping

Server.default = s = Server.internal; s.boot;




(

{

var in, chain;

in = SinOsc.ar(500);

chain = FFT(LocalBuf(2048), in);

chain = PV_PhaseShift(chain, LFNoise2.kr(1, pi, pi)); 

0.2 * [in, IFFT(chain)];  

}.scope;

)


(

{

var in, chain;

in = Impulse.ar(130);

chain = FFT(LocalBuf(2048), in);

chain = PV_PhaseShift(chain, LFNoise2.kr(1, pi, pi)); 

0.2 * [in, IFFT(chain)];  

}.scope(zoom: 9);

)



b = Buffer.alloc(s, 2048);

c = Buffer.alloc(s, 2048);


(

{

var in, chainA, chainB;

in = SinOsc.ar(500);

chainA = FFT(b, in);

chainB = PV_Copy(chainA, c);

chainB = PV_PhaseShift(chainB, pi); // shifted by 180 degrees

0.2 * IFFT([chainA, chainB]);  // normal, shifted

}.scope;

)


(

{ var in, chain, chainB, pan;

in = PlayBuf.ar(1, d, BufRateScale.kr(d), loop: 1) * 2;

chain = FFT(b, in);

chainB = PV_Copy(chain, c);

pan = MouseX.kr(0.001, 1.001, 'exponential') - 0.001;

chain = PV_BrickWall(chain, pan); 

chainB = PV_BrickWall(chainB, -1 + pan);  

0.5 * IFFT([chain, chainB]);

}.scope;

)





// LocalBuf does not work for PV_PhaseShift and PV_Copy yet. Reason still unclear.



(

{

var in, chainA, chainB;

in = SinOsc.ar(500);

chainA = FFT(LocalBuf(2048), in);

chainB = PV_Copy(chainA, LocalBuf(2048));

0.2 * IFFT([chainA, chainB]);  // normal, shifted

}.scope;

)




(

{

var in, chainA, chainB;

in = SinOsc.ar(500);

chainA = FFT(LocalBuf(2048), in);

chainB = PV_Copy(chainA, LocalBuf(2048));

chainB = PV_PhaseShift(chainB, pi); // shifted by 180 degrees

0.2 * IFFT([chainA, chainB]);  // normal, shifted

}.scope;

)


d = Buffer.read(s,"sounds/a11wlk01.wav");


(

{ var in, chain, chainB, pan;

in = PlayBuf.ar(1, d, BufRateScale.kr(d), loop: 1) * 2;

chain = FFT(LocalBuf(2048), in);

//chainB = PV_Copy(chain, LocalBuf(2048));

pan = MouseX.kr(0.001, 1.001, 'exponential') - 0.001;

chain = PV_BrickWall(chain, pan); 

//chainB = PV_BrickWall(chainB, -1 + pan);  

//0.5 * IFFT([chain, chainB]);

0.5 * IFFT(chain)

}.scope;

)