%%%%% beat_demo1.m %%%%%%%% % % The illusion of a quickening beat is created by superimposing beats % in geometric relation to each other (self-similar) and changing the % amplitude so the mind picks out the beat with the strongest amplitude. % % %% Initialization %fs = 44100; % sampling frequency %nu = 220; % tone %num_beats = 5; % number of "harmonics" %r = 1.25; % beats per second of first "harmonic" %len = 15; % number of beats of the sample (of the first "harmonic") beat_size = floor (fs/(2^(num_beats-1) * r)); %% beat_size is the size of the smallest drum beat (as defined by num_beats parameter) beat = zeros ((num_beats+1), (2^(num_beats-1) * beat_size * len)); env = beat (1:num_beats, :); t = (1:2^(num_beats-1)*beat_size)/fs; tone = sin (2 * pi * nu * t); for I = 1:num_beats a = beat_size * 2^(num_beats-I); b = floor (0.1 * a); perc_filter1 = t(1:b) * 1/t(b); perc_filter2 = exp ((t(b+1) - t(b+1:a)) *3*2^I); perc_filter = [perc_filter1 perc_filter2]; % The percussive filter (makes the tone sound like a drum) env (I, :) = 1 - abs ((I-1)/(num_beats-1)*2^(num_beats-1)*beat_size*len - (0:2^(num_beats-1)*beat_size*len-1)) / (2^(num_beats-1)*beat_size*len-1); beat(I, :) = repmat (perc_filter (1:a).*tone(1:a), 1, 2^(I-1) * len); beat(num_beats+1,:) = beat(num_beats+1,:) + beat(I, :).*env (I, :); end soundsc (beat(num_beats+1, :), fs) subplot (envs) plot ((0:2^(num_beats-1)*beat_size*len-1)/(2^(num_beats-1)*beat_size * len -1)*100, env) axis ([0.0 100 0.0 1]) xlabel ('Percentage of Time') ylabel ('Amplitude') title ('Envelopes') subplot (wav_form) plot ((0:2^(num_beats-1)*beat_size*len-1)/fs, beat (num_beats+1,:)) xlabel ('Percentage of Time') ylabel ('Amplitude') title ('Wave Form') % plot ((0:2^(num_beats-1)*beat_size*len-1)/(2^(num_beats-1)*beat_size * len -1)*100, env (1, :)) % xlabel ('Percentage of Time'); % ylabel ('Amplitude') % title ('Envelopes') % print -djpeg90 'diagram2.1.jpg' % plot ((0:2^(num_beats-1)*beat_size*len-1)/(2^(num_beats-1)*beat_size * len -1)*100, env (1:2, :)) % xlabel ('Percentage of Time'); % ylabel ('Amplitude') % title ('Envelopes') % print -djpeg90 'diagram2.2.jpg' % plot ((0:2^(num_beats-1)*beat_size*len-1)/(2^(num_beats-1)*beat_size * len -1)*100, env (1:3, :)) % xlabel ('Percentage of Time'); % ylabel ('Amplitude') % title ('Envelopes') % print -djpeg90 'diagram2.3.jpg' % plot ((0:2^(num_beats-1)*beat_size*len-1)/(2^(num_beats-1)*beat_size * len -1)*100, env (1:4, :)) % xlabel ('Percentage of Time'); % ylabel ('Amplitude') % title ('Envelopes') % print -djpeg90 'diagram2.4.jpg' % plot ((0:2^(num_beats-1)*beat_size*len-1)/(2^(num_beats-1)*beat_size * len -1)*100, env) % xlabel ('Percentage of Time'); % ylabel ('Amplitude') % title ('Envelopes') % axis ([0 100 0 1]) % print -djpeg90 'diagram2.5.jpg' %plot ((1:2^(num_beats-1)*beat_size*len), env(1:2, :)) %plot ((1:2^(num_beats-1)*beat_size*len), env(1:3, :)) %plot ((1:2^(num_beats-1)*beat_size*len), env(1:4, :) %plot ((1:2^(num_beats-1)*beat_size*len), env)