diff AudioDegradationToolbox/support/computeMeanSpectralEnvelope.m @ 28:76f45f5c9afd DoP tip

- added units * adaptiveEqualizer * applyMfccMeanAdaption - added corresponding data files for presets - modified applyImpulseReponse to use the estimated average group delay to adjust the output audio and keep the timestamps as is (was vice versa before) - added new units demos, incl one for applyLowpass
author SebastianEwert
date Tue, 21 Jan 2014 18:08:28 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AudioDegradationToolbox/support/computeMeanSpectralEnvelope.m	Tue Jan 21 18:08:28 2014 +0000
@@ -0,0 +1,52 @@
+function computeMeanSpectralEnvelope(audiofile, fftLength)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Audio Degradation Toolbox
+%
+% Centre for Digital Music, Queen Mary University of London.
+% This file copyright 2013 Sebastian Ewert, Matthias Mauch and QMUL.
+%    
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2 of the
+% License, or (at your option) any later version.  See the file
+% COPYING included with this distribution for more information.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+[f_audio,samplingFreq]=wavread(audiofile);
+
+% compute mean spectral vector for f_audio
+[destMagFreqResp, destMagFreqResp_freqs] = internal_computeMeanSpectralVector(f_audio,samplingFreq,fftLength);
+destMagFreqResp = internal_standardizeMagFreqResp(destMagFreqResp);
+
+outputFilename = [audiofile(1:end-4),'_specEnv'];
+save(outputFilename,'destMagFreqResp','destMagFreqResp_freqs')
+
+end
+
+
+function [f_meanmagspec_db,freqs] = internal_computeMeanSpectralVector(f_audio,fs,fftLength)
+
+f_audio = mean(f_audio,2);
+
+[f_spec,freqs,time] = spectrogram(f_audio,hanning(fftLength),fftLength/2,fftLength,fs);
+
+f_magspec_db = 20 * log10(abs(f_spec));
+
+f_magspec_db(:,isinf(sum(abs(f_magspec_db),1))) = []; % ignore rows with -inf/inf entries
+
+f_meanmagspec_db = mean(f_magspec_db,2);
+
+end
+
+function magFreqResp = internal_standardizeMagFreqResp(magFreqResp)
+
+maxRobust = max(magFreqResp(~isinf(magFreqResp)));
+
+magFreqResp = magFreqResp - maxRobust;
+
+magFreqResp(magFreqResp > 0) = 0;  % remaining positive inf
+magFreqResp(magFreqResp < -80) = -80;  % remaining positive inf
+
+end
+