function tone = note(keynum, dur) %tone = note(keynum, dur) % %note Produces sinusoidal signal corresponding to a % piano key. % %usage: % tone = output signal % keynum = the piano key number of the desired note % (C_4, "middle C" = #40) % dur = time duration of the signal % (1st, 2nd and 3rd octave harmonics added for extra % brightness of tone). fs=11025; % Sample rate tt=[0:1/fs:dur]; freq = 440*2^( (keynum-49)/12); % calulating frequency. tone = sumcos([freq 2*freq 3*freq 4*freq 5*freq],[1 .5 .5 -.3 .2],fs,dur); % This block provides linear attenuation to the signal at the beginning of % the signal and at the end to minimize the discontinuity noise. step_size=0.03; % The step_size variable controls the ramp up rate of the attenuation: % "1" is for no attuation. % "0.03" is near optimal. % "0.005" clearly audible ramping. a=[ 0 : step_size : (1-step_size) ]; att=[a ones(1, length(tone)-2*length(a)) fliplr(a)]; tone=att.*tone; if (keynum==0) tone = zeros(1,length(tone)); end %----------- END note.m -------------