changeset 5:85bff3d1b6fe

Equalise loudness in prepare2listen.m
author Brecht De Man <b.deman@qmul.ac.uk>
date Sun, 23 Nov 2014 23:24:35 +0000
parents b28ffd29e6e1
children ed0a8621b96a
files aux/loudnesstest.m aux/prepare2listen.m
diffstat 2 files changed, 37 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/aux/loudnesstest.m	Sun Nov 23 23:24:35 2014 +0000
@@ -0,0 +1,22 @@
+% test loudness mod
+
+% target loudness and test file
+target_loudness = -18;  % dBLU
+filename = '';
+
+% import sound file
+[audio, fs] = audioread(filename); 
+
+% measure and display loudness
+initial_loudness = getloudness(audio, fs, 'ITU', 0);
+disp(['Initial loudness: ' num2str(initial_loudness)]);
+
+% apply gain
+difference_loudness = target_loudness - initial_loudness;
+disp(['Difference in loudness: ' num2str(difference_loudness)]);
+audio = 10^(difference_loudness/10) .* audio;
+disp(['Gain: ' num2str(10^(difference_loudness/10))]);
+
+% measure and display loudness (should be equal to target loudness)
+resulting_loudness = getloudness(audio, fs, 'ITU', 0);
+disp(['Resulting loudness: ' num2str(resulting_loudness)]);
\ No newline at end of file
--- a/aux/prepare2listen.m	Wed Nov 19 18:59:51 2014 +0000
+++ b/aux/prepare2listen.m	Sun Nov 23 23:24:35 2014 +0000
@@ -18,10 +18,11 @@
     starttime   = 0;        % seconds
     endtime     = 10;       % seconds
     fadetime    = 1;        % seconds
-    loudness    = -18;      % dBLU
     format      = '.wav';
     slash       = '/';
     
+    target_loudness    = -18;      % dBLU
+    
     % get files
     list = dir([foldername '/*.' format]);
     
@@ -48,34 +49,21 @@
     finddouble(newfoldername); 
     
     % clip and fade desired fragments
-    clipfade(folder, starttime, endtime, fadetime, fs, bitdepth); 
+    clipfade(newfoldername, starttime, endtime, fadetime, fs, bitdepth); 
 
-    % open files and calculate minimum loudness
-    MIN = 0;
-    x = struct([]);
+    % open files and calculate their loudness, then adjust
     for i = 1:length(list)
-        disp([foldername newfolder slash list(i).name]); % DEBUG
-        [x{i}.audio,fs] = audioread([foldername list(i).name]);
-        x{i}.loudness   = loudness_itu(x{i}.audio, fs);
-        MIN = min(MIN, floor(x{i}.loudness)); % compute minimum loudness
-    end
-
-    % make folder inside audio file folder
-    if ~exist([foldername newfolder], 'dir') % make new folder if not there
-        mkdir(foldername, newfolder);
-    end
-
-    % equalise loudness
-    MAX = 0;
-    for i = 1:length(list)
-        x{i}.equalised = loudness_match(x{i}.audio, fs, MIN)*x{i}.audio;
-        MAX = max(MAX, max(max(abs(x{i}.equalised))));
-    end
-
-    % normalise (keeping relative loudness) and save
-    for i = 1:length(list)
-        audiowrite([foldername newfolder slash list(i).name], x{i}.equalised/MAX, ...
-            fs, 'BitsPerSample', 24);
+        disp([newfoldername slash list(i).name]); % DEBUG
+        audio = audioread([newfoldername list(i).name]);
+        initial_loudness   = getloudness( audio, fs, 'ITU', 0); 
+        
+        % calculate difference in loudness
+        difference_loudness = target_loudness - initial_loudness; 
+        
+        % write back with adjusted loudness
+        audiowrite([newfoldername slash list(i).name],...
+            10^(difference_loudness/10) .* audio, ...
+            fs, 'BitsPerSample', bitdepth);
     end
 
 end
\ No newline at end of file