b@0: function factor = loudness_match (X, fs, lkfs) b@0: %LOUDNESS_MATCH b@0: % LOUDNESS_MATCH (X, fs, lkfs) calculates an amplitude multiplication factor b@0: % which equalizes a sound to match the specified loudness (in LKFS). b@0: % b@0: % 2010-02-23 by MARUI Atsushi b@0: b@0: factor = 1.0; b@0: factorHigh = 10^(+60/20); b@0: factorLow = 10^(-60/20); b@0: i = 1; b@0: b@0: while i b@0: s = loudness_itu(factor * X, fs); b@0: k = (s - lkfs) / lkfs; b@0: b@0: fprintf('%3d: Factor %7.5f LKFS %7.3f (%6.2f%% difference)\n', i, factor, s, k*100); b@0: i = i + 1; b@0: b@0: if abs(k) < 0.001 b@0: return; b@0: end b@0: b@0: if k < 0.0 b@0: factorOld = factor; b@0: factor = (factorLow + factor) / 2.0; b@0: factorHigh = factorOld; b@0: elseif k > 0.0 b@0: factorOld = factor; b@0: factor = (factorHigh + factor) / 2.0; b@0: factorLow = factorOld; b@0: end b@0: end