# HG changeset patch # User Brecht De Man # Date 1416785075 0 # Node ID 85bff3d1b6fe3b2c2ac44236d9768d7b89bebd3a # Parent b28ffd29e6e1b0335122fcd12997552cdc6b5471 Equalise loudness in prepare2listen.m diff -r b28ffd29e6e1 -r 85bff3d1b6fe aux/loudnesstest.m --- /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 diff -r b28ffd29e6e1 -r 85bff3d1b6fe aux/prepare2listen.m --- 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