mathieu@14: function [scoreEvent] = addUserOffsets(template,scoreEvent,timeMode,ebrMode) mathieu@14: mathieu@14: % This program was written by Mathias Rossignol & Grégoire Lafay mathieu@14: % is Copyright (C) 2015 IRCAM mathieu@14: % mathieu@14: % This program is free software: you can redistribute it and/or modify it mathieu@14: % under the terms of the GNU General Public License as published by the Free mathieu@14: % Software Foundation, either version 3 of the License, or (at your option) mathieu@14: % any later version. mathieu@14: % mathieu@14: % This program is distributed in the hope that it will be useful, but mathieu@14: % WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY mathieu@14: % or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License mathieu@14: % for more details. mathieu@14: % mathieu@14: % You should have received a copy of the GNU General Public License along mathieu@14: % with this program. If not, see . mathieu@14: mathieu@14: %% Create userOffsets matrix mathieu@14: userOffset=zeros(length(template),4); mathieu@14: mathieu@14: if length(scoreEvent)==1 && strcmp('',scoreEvent{1}{1}) % add the same offset to all the classes mathieu@14: userOffset=[repmat(scoreEvent{1}{3},length(template),1) repmat(scoreEvent{1}{4},length(template),1) repmat(scoreEvent{1}{5},length(template),1) repmat(scoreEvent{1}{6},length(template),1)]; mathieu@33: fprintf(2, 'score.event if of length 1: classId will set to the class labels of the scene to replicate.\n') mathieu@14: else % add class wise offsets mathieu@14: for jj=1:length(scoreEvent) scoreEventClass{jj}=scoreEvent{jj}{1}; end; mathieu@14: for ii=1:length(template) mathieu@14: indClass=find(strcmp(template{ii}{1},scoreEventClass)); mathieu@14: if ~isempty(indClass) mathieu@14: userOffset(ii,1:4)=[scoreEvent{indClass}{3} scoreEvent{indClass}{4} scoreEvent{indClass}{5} scoreEvent{indClass}{6}]; mathieu@14: if ~strcmp('',scoreEvent{indClass}{2}) mathieu@14: template{ii}{2}=scoreEvent{indClass}{2}; mathieu@14: end mathieu@14: if scoreEvent{indClass}{7} ~= 0 % change class start time mathieu@14: template{ii}{7}= scoreEvent{indClass}{7}; mathieu@14: end mathieu@14: if scoreEvent{indClass}{8} ~= 0 % change class end time mathieu@14: template{ii}{8}= scoreEvent{indClass}{8}; mathieu@14: end mathieu@14: if scoreEvent{indClass}{9} ~= 0 % change fade in time mathieu@14: template{ii}{9}= scoreEvent{indClass}{9}; mathieu@14: end mathieu@14: if scoreEvent{indClass}{10} ~= 0 % change fade out time mathieu@14: template{ii}{10}= scoreEvent{indClass}{10}; mathieu@14: end mathieu@14: else mathieu@14: userOffset(ii,1:4)=zeros(1,4); mathieu@14: end mathieu@14: end mathieu@14: end mathieu@14: mathieu@14: %% add user offsets to time mathieu@14: switch timeMode mathieu@14: case 'abstract' mathieu@14: for ii=1:length(template) mathieu@14: template{ii}{5}=template{ii}{5}+userOffset(ii,3); mathieu@14: template{ii}{6}=template{ii}{6}+userOffset(ii,4); mathieu@14: end mathieu@14: end mathieu@14: mathieu@14: %% add user offsets to ebr mathieu@14: switch ebrMode mathieu@14: case 'generate' mathieu@14: for ii=1:length(template) mathieu@14: template{ii}{3}=userOffset(ii,1); mathieu@14: template{ii}{4}=userOffset(ii,2); mathieu@14: end mathieu@14: case 'abstract' mathieu@14: for ii=1:length(template) mathieu@14: template{ii}{3}=template{ii}{3}+userOffset(ii,1); mathieu@14: template{ii}{4}=template{ii}{4}+userOffset(ii,2); mathieu@14: end mathieu@14: case 'replicate' mathieu@14: for ii=1:length(template) mathieu@14: template{ii}{13}=template{ii}{13}+userOffset(ii,1)+randn(length(template{ii}{13}),1)*userOffset(ii,2); mathieu@14: template{ii}{3}=mean(template{ii}{13}); mathieu@14: template{ii}{4}=std(template{ii}{13}); mathieu@14: end mathieu@14: end mathieu@14: mathieu@14: scoreEvent=template; mathieu@14: