Mercurial > hg > ape
view aux/prepare2listen.m @ 15:24be5e9ce25b tip
Update README
author | Brecht De Man <brecht.deman@bcu.ac.uk> |
---|---|
date | Thu, 20 Sep 2018 12:23:20 +0200 |
parents | 866c5da4d357 |
children |
line wrap: on
line source
function prepare2listen(foldername) % PREPARE2LISTEN batch processes all audio files in a folder to prepare for % a listening test, by % - making sure everything is at the same sampling rate and bit depth; % - removing subsequent zeros at the start and the end; % - ensuring none of the files are equal to each other; % - clipping the desired region from the file; % - adding a fade in and fade out; and % - setting the loudness at a predefined value. % It then saves the result in a folder within the audio folder. % % by Brecht De Man at Centre for Digital Music, 5 June 2013 % PARAMETERS newfolder = 'fragments'; fs = 96000; % Hz bitdepth = 24; starttime = 76; % SR1 88; SR2 76 % seconds endtime = 152; % SR1 142; SR2 152 % seconds fadetime = 1; % seconds format = 'wav'; slash = '/'; target_loudness = -23; % dBLU (https://tech.ebu.ch/loudness) tic; % measure time list = dir([foldername '/*.' format]); % get files % remove hidden files from list, and copy to new folder % see http://www.mathworks.co.uk/matlabcentral/newsreader/view_thread/258220 newfoldername = [foldername slash newfolder]; % within original folder if ~exist(newfoldername, 'dir') % if it doesn't exist yet mkdir(foldername, newfolder); % make newfolder within folder end for k = length(list):-1:1 fname = list(k).name; if fname(1) == '.' list(k) = []; else copyfile([foldername slash list(k).name], ... [newfoldername slash list(k).name]); end end % set at same sampling rate and bit depth %disp(['-- Ensuring audio is at ' num2str(fs) 'Hz / ' ... num2str(bitdepth) ' bit...']); %batchresample(newfoldername, fs, bitdepth); % NOTE: clipfade(...) also tests sampling rate, but does not resample % find doubles disp('-- Checking for doubles...'); finddouble(newfoldername); % strip zeros off beginning and end disp('-- Stripping off leading and trailing zeros...'); stripzeros(newfoldername); % align all audio files disp('-- Aligning audio files...'); autoalign(newfoldername); % clip and fade desired fragments startmin = floor(starttime/60); startsec = mod(starttime, 60); endmin = floor(endtime/60); endsec = mod(endtime, 60); disp(['-- Fading in (' num2str(fadetime) 's) at ' num2str(startmin) ... ':' num2str(startsec) ', fading out (' num2str(fadetime) 's) at '... num2str(endmin) ':' num2str(endsec) '...']); clipfade(newfoldername, starttime, endtime, fadetime, fs, bitdepth); % open files and calculate their loudness, then adjust disp(['-- Setting each file at ' num2str(target_loudness) 'dBLU ...']); for i = 1:length(list) disp([newfoldername slash list(i).name]); % DEBUG audio = audioread([newfoldername slash 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 newaudio = 10^(difference_loudness/20) .* audio; audiowrite([newfoldername slash list(i).name],... newaudio, fs, 'BitsPerSample', bitdepth); end elapsed_time = toc; disp(['prepare2listen took ' num2str(elapsed_time) ... ' seconds on folder ' foldername]); end