gregoire@16: function [sceneSchedule,sceneObjects]=getEvent(sceneSchedule,sceneObjects,inputPath,score,timeMode,ebrMode,randomFlag,eventInfo,sr) 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: settings.randomFlag = randomFlag; mathieu@14: settings.schedPos = length(sceneSchedule)+1; mathieu@14: mathieu@14: for ii=1:length(score.events) mathieu@14: settings.classId =ii+length(score.backgrounds); mathieu@14: settings.ebrMode=ebrMode; mathieu@14: settings.timeMode=timeMode; mathieu@14: settings.label=score.events{ii}{1}; mathieu@14: mathieu@14: settings.ebr_mean = score.events{ii}{3}; mathieu@14: settings.ebr_std = score.events{ii}{4}; mathieu@14: gregoire@16: sceneObjects(settings.classId) = getSampleInfo(score.events{ii}{1}, score.events{ii}{2},'event',inputPath,score.events{ii}{8},eventInfo,sr); mathieu@14: settings.duration_mean = mean(sceneObjects(settings.classId).endTimes-sceneObjects(settings.classId).startTimes); mathieu@14: settings.duration_std = std(sceneObjects(settings.classId).endTimes-sceneObjects(settings.classId).startTimes); mathieu@14: settings.mean_time_between_instances = score.events{ii}{5}; mathieu@14: settings.time_between_instances_std = score.events{ii}{6}; mathieu@14: settings.start_time = score.events{ii}{7}; mathieu@14: settings.end_time = score.events{ii}{8}; mathieu@14: settings.fade_in_time = score.events{ii}{9}; mathieu@14: settings.fade_out_time = score.events{ii}{10}; mathieu@14: mathieu@14: if ~strcmp(settings.timeMode,'generate') || ~strcmp(settings.ebrMode,'generate') mathieu@14: settings.start_times = score.events{ii}{11}; mathieu@14: settings.end_times = score.events{ii}{12}; mathieu@14: settings.ebrs = score.events{ii}{13}; mathieu@14: settings.template_duration_mean=mean(settings.end_times-settings.start_times); mathieu@14: settings.template_duration_std=std(settings.end_times-settings.start_times); mathieu@14: end mathieu@14: mathieu@14: if (settings.start_time > score.sceneDuration) mathieu@14: settings.start_time = score.sceneDuration; mathieu@33: fprintf(2, ['Sart time of event class ' score.events{ii}{1} ' is superior to the scene Duration; start time has been set to the scene duration.\n']) mathieu@14: end mathieu@14: mathieu@14: if (settings.end_time > score.sceneDuration) mathieu@14: settings.end_time = score.sceneDuration; mathieu@33: fprintf(2, ['End time of event class ' score.events{ii}{1} ' is superior to the scene Duration; end time has been set to the scene duration.\n']) mathieu@14: end mathieu@14: mathieu@14: mathieu@14: mathieu@14: %% generate sceneSchedule mathieu@14: switch timeMode mathieu@14: mathieu@14: case {'generate','abstract'} mathieu@14: mathieu@14: if (settings.mean_time_between_instances == 0) % Looping: only for generate timeMode mathieu@14: if strcmp(timeMode,'abstract') mathieu@14: error('simScene cannot loop event in abstract time Mode') mathieu@14: end mathieu@14: time = settings.start_time; mathieu@14: while time settings.end_time mathieu@14: break; mathieu@14: end mathieu@14: [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,time); mathieu@14: time = time+sceneSchedule(settings.schedPos).duration; mathieu@14: settings.schedPos = settings.schedPos+1; mathieu@14: end mathieu@14: mathieu@14: elseif (settings.mean_time_between_instances < 0) % Just once: abstract and generate mathieu@14: [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,settings.start_time); mathieu@14: settings.schedPos = settings.schedPos+1; mathieu@14: mathieu@14: else % General case: abstract and generate mathieu@14: t = settings.start_time; mathieu@14: time = t; mathieu@14: while t settings.end_time mathieu@14: break; mathieu@14: end mathieu@14: [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,time); mathieu@14: t = t+settings.mean_time_between_instances; mathieu@14: time=t+settings.time_between_instances_std*randn; mathieu@14: settings.schedPos = settings.schedPos+1; mathieu@14: end mathieu@14: end mathieu@14: mathieu@14: case 'replicate' mathieu@14: mathieu@14: for jj=1:length(settings.start_times) mathieu@14: if settings.start_times(jj) <= settings.end_time && settings.start_times(jj) >= settings.start_time mathieu@14: [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,settings.start_times(jj),jj); mathieu@14: settings.schedPos = settings.schedPos+1; mathieu@14: end mathieu@14: end mathieu@14: end mathieu@14: end mathieu@14: end