Mercurial > hg > ape
annotate aux/loudness_match.m @ 0:4fd284285159
Adding listening test plus some helpful functions and scripts.
author | Brecht <b.deman@qmul.ac.uk> |
---|---|
date | Thu, 24 Apr 2014 23:53:31 +0100 |
parents | |
children |
rev | line source |
---|---|
b@0 | 1 function factor = loudness_match (X, fs, lkfs) |
b@0 | 2 %LOUDNESS_MATCH |
b@0 | 3 % LOUDNESS_MATCH (X, fs, lkfs) calculates an amplitude multiplication factor |
b@0 | 4 % which equalizes a sound to match the specified loudness (in LKFS). |
b@0 | 5 % |
b@0 | 6 % 2010-02-23 by MARUI Atsushi |
b@0 | 7 |
b@0 | 8 factor = 1.0; |
b@0 | 9 factorHigh = 10^(+60/20); |
b@0 | 10 factorLow = 10^(-60/20); |
b@0 | 11 i = 1; |
b@0 | 12 |
b@0 | 13 while i |
b@0 | 14 s = loudness_itu(factor * X, fs); |
b@0 | 15 k = (s - lkfs) / lkfs; |
b@0 | 16 |
b@0 | 17 fprintf('%3d: Factor %7.5f LKFS %7.3f (%6.2f%% difference)\n', i, factor, s, k*100); |
b@0 | 18 i = i + 1; |
b@0 | 19 |
b@0 | 20 if abs(k) < 0.001 |
b@0 | 21 return; |
b@0 | 22 end |
b@0 | 23 |
b@0 | 24 if k < 0.0 |
b@0 | 25 factorOld = factor; |
b@0 | 26 factor = (factorLow + factor) / 2.0; |
b@0 | 27 factorHigh = factorOld; |
b@0 | 28 elseif k > 0.0 |
b@0 | 29 factorOld = factor; |
b@0 | 30 factor = (factorHigh + factor) / 2.0; |
b@0 | 31 factorLow = factorOld; |
b@0 | 32 end |
b@0 | 33 end |