annotate arrows/audio_norm.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents beb8a3f4a345
children
rev   line source
samer@0 1 % audio_norm - Arrow to do audio loudness normalisation using arbitrary estimator
samer@0 2 function o= audio_norm(src,fs,N,M,W,Lag,dynorm,varargin)
samer@37 3 opts=options('spectra',1,'lim',[-6,-1],'play',0,varargin{:});
samer@0 4
samer@0 5 if opts.spectra,
samer@0 6 spectra=@(f,clim)obs_with(aspectrum(N)*arr(@log10)*imager('clim',clim,'fig',f));
samer@0 7 else
samer@0 8 spectra=@(f,clim)aid;
samer@0 9 end
samer@0 10
samer@0 11 if opts.play
samer@0 12 player = arr(@(x)flatten(x(1:M,:))) * audioout(linesink(1,fs));
samer@0 13 else
samer@0 14 player = aid;
samer@0 15 end
samer@0 16
samer@0 17 o = audioin(src,N,M,W) ...
samer@0 18 * spectra(13,[-11,1]) ...
samer@0 19 * dup * ( ...
samer@0 20 arr(@flatten)*dup*( ...
samer@0 21 arr(@(t)log(mean(abs(t))))*delay(Lag-1,nan) ... % instantaneous log scale
samer@0 22 + dynorm(Lag) ... % estimated log scale
samer@0 23 ) ...
samer@0 24 * arr(@(a,b)[a;b]) ... % combine
samer@0 25 * obs_with(scope(128,'fig',11,'ylim',opts.lim)) ... % plot both on top of each other
samer@0 26 * arr(@(t)t(2)) ... % pick out dynorm_lap value
samer@0 27 + delay(Lag-1,0) ... % delay audio same amount as scale signal
samer@0 28 ) ...
samer@0 29 * arr(@(ls,x)0.03*x*exp(-ls)) ... % divide audio buffer by scale
samer@0 30 * spectra(15,[-6,6]) ...
samer@0 31 * player;