annotate aux/loudness_match.m @ 9:ee22af6610a3
Sanitised user ID, end message, bug fixes.
author |
Brecht De Man <b.deman@qmul.ac.uk> |
date |
Sun, 30 Nov 2014 21:44:03 +0000 |
parents |
4fd284285159 |
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 |