close all;
clear;
clc;


%% Speed4PiV_03.m
% Simple variable speed playback using running pointers
% matching window length to signal period

%% init
speedcoef=0.9;
%N=1152;             % window length
N=4096;             % 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

Time = 60 ; % sec


% s = wavread('test.wav');
% Fs=44100;
% s=sin(2*pi/Fs*[0:Fs*2-1]*1000)';
% s=s1';

[s,Fs]=audioread('D:\MATLAB_Workspace\VSP\original_decoding\breath_192k_change_dec.wav'); s=s(1:Fs*Time,:);
%[s,Fs]=audioread('D:\MATLAB_Workspace\VSP\original_decoding\epilog_192k_change_dec.wav'); s=s(1:Fs*Time,:);
%[s,Fs]=audioread('D:\MATLAB_Workspace\VSP\original_decoding\Night_letter_192k_change_dec.wav'); s=s(1:Fs*Time,:);
%[s,Fs]=audioread('D:\MATLAB_Workspace\VSP\original_decoding\red_taste_192k_change_dec.wav'); s=s(1:Fs*Time,:);

% [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

%
Left=s(1:length(s),1);
Left=Left';
Right=s(1:length(s),2);
Right=Right';
%% perform speed change for Left

winleftbdr=1:speedcoef:length(Left)-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_Left=Left(idx1).*wnd1+Left(idx2).*wnd2;


%% perform speed change for Right

winleftbdr=1:speedcoef:length(Right)-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_Right=Right(idx1).*wnd1+Right(idx2).*wnd2;

%% plot output
figure
subplot(2,1,1);
plot(Y_Left);

subplot(2,1,2);
plot(Y_Right);

y=[Y_Left',Y_Right'];

%% write
%OutFileName='Out__WinSize_'+num2str(N)+'__Speed_'+num2str(speedcoef)+'_.wav';
string1 = strcat('Out__WinSize_',num2str(N));
string2 = strcat('__Speed_',num2str(speedcoef));
OutFileName = strcat(string1,string2);
OutFileName = strcat(OutFileName,'_.wav');
audiowrite(OutFileName,y,Fs)
%audiowrite('y.wav',y,Fs)