view nonExposed/getTemplate.m @ 44:b7b1672b3c3b

Reading and writing of files now is done by soundfile since there seems to be a bug with writing .wav files with librosa (mplayer would play them as rubbish). Added soundfile as a requirement.
author Emmanouil Theofanis Chourdakis <e.t.chourdakis@qmul.ac.uk>
date Mon, 09 Oct 2017 11:55:03 +0100
parents 58ad632e9c12
children
line wrap: on
line source
function [template] = getTemplate(instanceAnnotFile,instanceAudioFile)

% This program was written by Mathias Rossignol & Grégoire Lafay
% is Copyright (C) 2015 IRCAM <http://www.ircam.fr>
%
% This program is free software: you can redistribute it and/or modify it
% under the terms of the GNU General Public License as published by the Free
% Software Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This program is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
% or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
% for more details.
%
% You should have received a copy of the GNU General Public License along
% with this program.  If not, see <http://www.gnu.org/licenses/>.

%% get audioFile
[signal,sr] = audioread(instanceAudioFile);
if(size(signal,2)==2)
    signal=mean(signal,2);
end
signal=0.99*signal/(max(abs(signal)));
template.sceneDuration=length(signal)/sr;

%% get onset/offset times and background Location
[onset,offset,classNames]=loadEventsList(instanceAnnotFile);
bgLocation=(~getEventsLocation(length(signal),sr,onset,offset));

%% Get Template
[uniqueClassNames,~,ib]=unique(classNames);
template.class=cell(1,length(uniqueClassNames));

for ii=1:length(uniqueClassNames)
    template.class{ii}=cell(1,13);
    
    onsetTmp=onset(ib==ii);
    offsetTmp=offset(ib==ii);
    
    if(length(onsetTmp)>1)
        meanSpacingTime = mean(onsetTmp(2:end)-onsetTmp(1:end-1));
        stdSpacingTime = std(onsetTmp(2:end)-onsetTmp(1:end-1));
    else
        meanSpacingTime = -1;
        stdSpacingTime = 0;
    end
    
    [ebr]=getEbrs(bgLocation,signal,sr,onsetTmp,offsetTmp);
    
    template.class{ii}={uniqueClassNames{ii},uniqueClassNames{ii},mean(ebr),std(ebr),meanSpacingTime,stdSpacingTime,...
        onsetTmp(1),offsetTmp(end),0,0,onsetTmp,offsetTmp,ebr};
end