%% Speed4PiV_03.m
% Simple variable speed playback using running pointers
% matching window length to signal period

%% init
speedcoef=0.7;
%N=1152;             % window length
N=2560;             % window length
% N=1200;             % window length

% N=round(N-mod(N,2*44100/900));

window=0:1/(N/2-1):1; window=[window fliplr(window)]; window=[0 window 0];
% window=KaiserBesselWin(N/2).^2; window=[window fliplr(window)]; window=[0 window 0];

%% read audio file

% s = wavread('test.wav');
% Fs=44100;
% s=sin(2*pi/Fs*[0:Fs*2-1]*1000)';
% s=s1';

% [s,Fs]=wavread('D:\TestSignals\MatLabSamples\Samples\corean_course_06.wav'); s=s(1:Fs*20,:);
%[s,Fs]=audioread('G:\TestSignals\MatLabSamples\Samples\svejk.wav'); s=s(1:Fs*5,:);
[s,Fs]=audioread('D:\MATLAB_Workspace\VSP\original_decoding\breath_192k_change_dec.wav'); s=s(1:Fs*5,:);
% [s,Fs]=wavread('D:\TestSignals\MatLabSamples\Samples\ET.wav');  %s=s(1:Fs*10,:);
% [s,Fs]=wavread('D:\TestSignals\MatLabSamples\Samples\Put_it.wav'); %s=s(1:Fs*6,:);
% [s,Fs]=wavread('D:\TestSignals\MatLabSamples\Samples\KJ.wav'); %s=s(1:Fs*10,:); %s=s(0.75*Fs+(1:Fs*5),:);
% [s,Fs]=wavread('D:\TestSignals\MatLabSamples\Samples\China In Her Eyes.wav'); %s=s(Fs*7:end,:);
% [s,Fs]=wavread('D:\TestSignals\MatLabSamples\Samples\odejoy.wav'); s=s(1:Fs*10,:);
% [s,Fs]=wavread('D:\TestSignals\BabyTalk_44kHz.wav');

% s=wavread('D:\TestSignals\MatLabSamples\Samples\mus.wav');

% [s,Fs]=wavread('D:\TestSignals\MatLabSamples\Samples\WildwoodFlower.wav');
% [s,Fs]=wavread('D:\TestSignals\MatLabSamples\Samples\BW_KissingMyLove.wav');
% [s,Fs]=wavread('D:\TestSignals\MatLabSamples\Samples\BW_UseMe.wav');
% [s,Fs]=wavread('D:\TestSignals\MatLabSamples\Samples\NJ_dont_know.wav');

% DM AudioLab samples
% [s,Fs]=wavread('d:\shared\AudioLab Demo\Variable Speed Playback Demo\KP01s_000.wav');        % s=s(1:Fs*2,:);        % 0.5, 2.0
% [s,Fs]=mp3read('D:\TestSignals\TestSamples\VSP_samples\music1_original.mp3');  s=s(1:Fs*5,:);       % 1/1.5, 1/0.74, 
% [s,Fs]=wavread('d:\shared\AudioLab Demo\Variable Speed PlaybackDemo\music2_original.wav');   % s=s(1:Fs*5,:);        % 0.5, 2.0

% [s,Fs]=wavread('D:\Work\2011_03_07\VC_130726_073649.WAV');      % constant pitch
% [s,Fs]=wavread('D:\Work\2011_03_07\VC_130726_120011.WAV');      % sweep pitch

% make mono
if min(size(s))>1,
    s=mean(s');
else
    s=s';
end

%% perform speed change

winleftbdr=1:speedcoef:length(s)-N;
idx1=1:length(winleftbdr);
tmp=mod(idx1-winleftbdr,N);
wnd1=(window(floor(tmp)+2)-window(floor(tmp)+1)).*(tmp-floor(tmp))+window(floor(tmp)+1);
idx1=ceil(winleftbdr)+floor(tmp);
idx2=(1:length(winleftbdr))+N/2;
tmp=mod(idx2-winleftbdr,N);
wnd2=(window(floor(tmp)+2)-window(floor(tmp)+1)).*(tmp-floor(tmp))+window(floor(tmp)+1);
idx2=ceil(winleftbdr+floor(tmp));

y=s(idx1).*wnd1+s(idx2).*wnd2;

%% plot output
figure(1)
plot(y)

%% write
%OutFileName='Out__WinSize_'+num2str(N)+'__Speed_'+num2str(speedcoef)+'_.wav';
s1 = strcat('Out__WinSize_',num2str(N));
s2 = strcat('__Speed_',num2str(speedcoef));
OutFileName = strcat(s1,s2);
OutFileName = strcat(OutFileName,'_.wav');
audiowrite(OutFileName,y,Fs)
%audiowrite('y.wav',y,Fs)