Transcript of Phase Vocoder Colter McQuay Phase Vocoder Structure Input x[nTs] Effect Specific Code Synthesize...
- Slide 1
- Slide 2
- Phase Vocoder Colter McQuay
- Slide 3
- Phase Vocoder Structure Input x[nTs] Effect Specific Code
Synthesize Output y[nTs] Analyze
- Slide 4
- Time Stretch Effect % Load Signal From File [x
Fs]=wavread('../x1.wav'); x=x(:,1)';% Convert to mono
windowSize=2048;% Set up window Size stretchRatio=2.5;% Our time
Stretch Ratio anHop=128;% Analysis Hop Size % Calculate Synthesis
Hop Size based on ratio synthHop=round(anHop*stretchRatio); %
Analyze input signal [mag phase]=pvAnalyze(x,windowSize,anHop); %
Generate output (dont modify phase or % magnitudes)
y=pvSynthesize(mag,phase,synthHop,anHop,1); Toms Diner Original
Stretched by 2.5 Compressed by 0.5 Audacity Time Stretch
- Slide 5
- Pitch Shift Effect % Load Signal From File [x
Fs]=wavread('../x1.wav'); x=x(:,1)';% Convert to mono
windowSize=2048;% Set up window Size pitchRatio=0.7;% Our pitch
shift Ratio anHop=256;% Analysis Hop Size % Calculate Synthesis Hop
Size based on ratio synthHop=round(anHop*pitchRatio); % Analyze
input signal [mag phase]=pvAnalyze(x,windowSize,anHop); % Generate
output (dont modify phase or % magnitudes)
y=pvSynthesize(mag,phase,synthHop,anHop,1); % Resample output to
make pitch shifted % version of input y=resample(y,anHop,synthHop);
Pitch Shifted by 1.4 Pitch Shifted by 0.7
- Slide 6
- Robotization % Load Signal From File [x
Fs]=wavread('../x1.wav'); x=x(:,1)';% Convert to mono
windowSize=512;% Set up window Size anHop=128;% Analysis Hop Size
synthHop=anHop;% Synthesis Hop Size % Analyze input signal [mag
phase]=pvAnalyze(x,windowSize,anHop); % Get size of phase array
[pRows pCols]=size(phase); % Set new phases to zero
phase=zeros(pRows,pCols); % Reconstruct Output Signal
y=pvSynthesize(mag,phase,synthHop,anHop,1); Window = 512 Hop=128
Window = 1024 Hop=512
- Slide 7
- Whisperization % Load Signal From File [x
Fs]=wavread('../x1.wav'); x=x(:,1)';% Convert to mono
windowSize=512;% Set up window Size anHop=128;% Analysis Hop Size
synthHop=anHop;% Synthesis Hop Size % Analyze input signal [mag
phase]=pvAnalyze(x,windowSize,anHop); % Get size of phase array
[pRows pCols]=size(phase); % De-Correlate phases by randomizing
phase=2*pi*rand(pRows,pCols); % Reconstruct Output Signal
y=pvSynthesize(mag,phase,synthHop,anHop,1); Whisperization
- Slide 8
- Isolation of Stable & Transient Components % SOUND FILE [x
Fs]=wavread('../stableTest.wav'); x=x(:,1)'; windowSize=1024;
anHop=512; synthHop=anHop; %Analyze Input Signal [mag
phase]=pvAnalyze(x,windowSize,anHop); [pRows pCols]=size(phase); %
Set Threshold thresh=.5; % Pre-allocate new phase and magnitude
arrays newPhase=zeros(pRows,pCols); newMag=zeros(pRows,pCols); %
make first window of new phase array equal to original phase
newPhase(1,:)=phase(1,:); % nominal phase increment for each bin
omega_k=2*pi*[0:pCols-1]./pCols; % Iterate through all windows for
i = 2:pRows % Calculate the target phase for each bin based on
previous phase target_phase=phase(i-1,:)+omega_k*anHop; % Calculate
deviation from the target phase
deviation_phase=princarg(phase(i,:)-target_phase); % Set all bins
either outside or inside the threshold to zero % NOTE: if
abs(deviation_phase)thresh the transient % components will be kept
newPhase(i,:)=phase(i,:).*(abs(deviation_phase)