% Ronan O'Malley
% September 19th 2005
% upgraded October 4th
% tri_tremolo.m
% M Script that multiplies a low frequency oscillator (LFO) by the sample wave to provide a tremolo effect
% Possibility for extension:
%       -different LFO shapes (triangle, square, combination

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% parameters to vary the effect %
%rate=3;             % freqency in Hz of tremolo wave, generally 3 - 10 Hz (verify this)
%depth=0.5;          % max amplitude of tremelo wave 0-1, is this actually the depth??
%barrier=0.3;        % min level for multiplication by LFO
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

filename='delay.wav';


% read the sample waveform
[wave,Fs,bits] = wavread(filename);



% using a sin wave at the moment, in practice is usually a 
% triangle wave or a square wave or a cross between the two
%trem=(depth*sin(2*pi*index*(rate/Fs)))';    % sin(2pi*fa/fs)


% 1e-4 to 1e-3
delta=5e-4;
min=-0.5;
max=0.5;
% create triangle wave LFO
trem=min:delta:max;
while(length(trem) < length(wave) )
    trem=[trem (max:-delta:min)];
    trem=[trem (min:delta:max)];
end

trem = trem(1:length(wave));
plot(trem);

% for each sample
for n=1:length(wave),
    
    % multiply the sample by the current LFO coefficient
    % but only if the LFO is  at a significant level, otherwise it would mute the signal
    %if ((trem(i) > barrier) | (trem(i) < -barrier)) 
    
    
    wave(n)= wave(n).*trem(n);
    
    
    %end
end


% write output
wavwrite(wave,Fs,bits,'out.wav');