📄 delayline.m
字号:
% Delayline.m (based on vibrato.m)
function y=Delayline(x,SAMPLERATE,Modfreq,Width,BLen)
ya_alt=0;
Delay=Width; % basic delay of input sample in sec
DELAY=round(Delay*SAMPLERATE); % basic delay in # samples
WIDTH=round(Width*SAMPLERATE); % modulation width in # samples
if WIDTH>DELAY
error('delay greater than basic delay !!!');
end
MODFREQ=Modfreq/SAMPLERATE; % modulation frequency in # samples
LEN=length(x); % # of samples in WAV-file
L=2+DELAY+WIDTH*2; % length of the entire delay
Delayline=zeros(L,1); % memory allocation for delay
y=zeros(size(x)); % memory allocation for output vector
j=1;
for n=1:(LEN-1)
%M=MODFREQ;
if j>BLen
j=1;
end
MOD=j*Modfreq/SAMPLERATE;
ZEIGER=1+DELAY+WIDTH*MOD;
i=floor(ZEIGER);
frac=ZEIGER-i;
Delayline=[x(n);Delayline(1:L-1)];
%---Linear Interpolation-----------------------------
y(n,1)=Delayline(i)*frac+Delayline(i-1)*(1-frac);
%---Allpass Interpolation------------------------------
%y(n,1)=(Delayline(i+1)+(1-frac)*Delayline(i)-(1-frac)*ya_alt);
%ya_alt=y(n,1);
%---Spline Interpolation-------------------------------
%y(n,1)=Delayline(i+1)*frac^3/6
%....+Delayline(i)*((1+frac)^3-4*frac^3)/6
%....+Delayline(i-1)*((2-frac)^3-4*(1-frac)^3)/6
%....+Delayline(i-2)*(1-frac)^3/6;
%3rd-order Spline Interpolation
j=j+1;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -