Mercurial > hg > audio-degradation-toolbox
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 +