annotate nonExposed/getEvent.m @ 51:ebf92ed7d680 tip master

Added -fd (--full-duration) argument.
author Emmanouil Theofanis Chourdakis <e.t.chourdakis@qmul.ac.uk>
date Sun, 30 Sep 2018 13:21:49 +0100
parents d0ceb549f734
children
rev   line source
gregoire@16 1 function [sceneSchedule,sceneObjects]=getEvent(sceneSchedule,sceneObjects,inputPath,score,timeMode,ebrMode,randomFlag,eventInfo,sr)
mathieu@14 2
mathieu@14 3 % This program was written by Mathias Rossignol & Grégoire Lafay
mathieu@14 4 % is Copyright (C) 2015 IRCAM <http://www.ircam.fr>
mathieu@14 5 %
mathieu@14 6 % This program is free software: you can redistribute it and/or modify it
mathieu@14 7 % under the terms of the GNU General Public License as published by the Free
mathieu@14 8 % Software Foundation, either version 3 of the License, or (at your option)
mathieu@14 9 % any later version.
mathieu@14 10 %
mathieu@14 11 % This program is distributed in the hope that it will be useful, but
mathieu@14 12 % WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
mathieu@14 13 % or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
mathieu@14 14 % for more details.
mathieu@14 15 %
mathieu@14 16 % You should have received a copy of the GNU General Public License along
mathieu@14 17 % with this program. If not, see <http://www.gnu.org/licenses/>.
mathieu@14 18
mathieu@14 19 settings.randomFlag = randomFlag;
mathieu@14 20 settings.schedPos = length(sceneSchedule)+1;
mathieu@14 21
mathieu@14 22 for ii=1:length(score.events)
mathieu@14 23 settings.classId =ii+length(score.backgrounds);
mathieu@14 24 settings.ebrMode=ebrMode;
mathieu@14 25 settings.timeMode=timeMode;
mathieu@14 26 settings.label=score.events{ii}{1};
mathieu@14 27
mathieu@14 28 settings.ebr_mean = score.events{ii}{3};
mathieu@14 29 settings.ebr_std = score.events{ii}{4};
mathieu@14 30
gregoire@16 31 sceneObjects(settings.classId) = getSampleInfo(score.events{ii}{1}, score.events{ii}{2},'event',inputPath,score.events{ii}{8},eventInfo,sr);
mathieu@14 32 settings.duration_mean = mean(sceneObjects(settings.classId).endTimes-sceneObjects(settings.classId).startTimes);
mathieu@14 33 settings.duration_std = std(sceneObjects(settings.classId).endTimes-sceneObjects(settings.classId).startTimes);
mathieu@14 34 settings.mean_time_between_instances = score.events{ii}{5};
mathieu@14 35 settings.time_between_instances_std = score.events{ii}{6};
mathieu@14 36 settings.start_time = score.events{ii}{7};
mathieu@14 37 settings.end_time = score.events{ii}{8};
mathieu@14 38 settings.fade_in_time = score.events{ii}{9};
mathieu@14 39 settings.fade_out_time = score.events{ii}{10};
mathieu@14 40
mathieu@14 41 if ~strcmp(settings.timeMode,'generate') || ~strcmp(settings.ebrMode,'generate')
mathieu@14 42 settings.start_times = score.events{ii}{11};
mathieu@14 43 settings.end_times = score.events{ii}{12};
mathieu@14 44 settings.ebrs = score.events{ii}{13};
mathieu@14 45 settings.template_duration_mean=mean(settings.end_times-settings.start_times);
mathieu@14 46 settings.template_duration_std=std(settings.end_times-settings.start_times);
mathieu@14 47 end
mathieu@14 48
mathieu@14 49 if (settings.start_time > score.sceneDuration)
mathieu@14 50 settings.start_time = score.sceneDuration;
mathieu@33 51 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 52 end
mathieu@14 53
mathieu@14 54 if (settings.end_time > score.sceneDuration)
mathieu@14 55 settings.end_time = score.sceneDuration;
mathieu@33 56 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 57 end
mathieu@14 58
mathieu@14 59
mathieu@14 60
mathieu@14 61 %% generate sceneSchedule
mathieu@14 62 switch timeMode
mathieu@14 63
mathieu@14 64 case {'generate','abstract'}
mathieu@14 65
mathieu@14 66 if (settings.mean_time_between_instances == 0) % Looping: only for generate timeMode
mathieu@14 67 if strcmp(timeMode,'abstract')
mathieu@14 68 error('simScene cannot loop event in abstract time Mode')
mathieu@14 69 end
mathieu@14 70 time = settings.start_time;
mathieu@14 71 while time<settings.end_time
mathieu@14 72 if time+sceneSchedule(settings.schedPos).duration > settings.end_time
mathieu@14 73 break;
mathieu@14 74 end
mathieu@14 75 [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,time);
mathieu@14 76 time = time+sceneSchedule(settings.schedPos).duration;
mathieu@14 77 settings.schedPos = settings.schedPos+1;
mathieu@14 78 end
mathieu@14 79
mathieu@14 80 elseif (settings.mean_time_between_instances < 0) % Just once: abstract and generate
mathieu@14 81 [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,settings.start_time);
mathieu@14 82 settings.schedPos = settings.schedPos+1;
mathieu@14 83
mathieu@14 84 else % General case: abstract and generate
mathieu@14 85 t = settings.start_time;
mathieu@14 86 time = t;
mathieu@14 87 while t<settings.end_time
mathieu@14 88 if (time<0)
mathieu@14 89 time=0;
mathieu@14 90 end
mathieu@14 91 if time > settings.end_time
mathieu@14 92 break;
mathieu@14 93 end
mathieu@14 94 [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,time);
mathieu@14 95 t = t+settings.mean_time_between_instances;
mathieu@14 96 time=t+settings.time_between_instances_std*randn;
mathieu@14 97 settings.schedPos = settings.schedPos+1;
mathieu@14 98 end
mathieu@14 99 end
mathieu@14 100
mathieu@14 101 case 'replicate'
mathieu@14 102
mathieu@14 103 for jj=1:length(settings.start_times)
mathieu@14 104 if settings.start_times(jj) <= settings.end_time && settings.start_times(jj) >= settings.start_time
mathieu@14 105 [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,settings.start_times(jj),jj);
mathieu@14 106 settings.schedPos = settings.schedPos+1;
mathieu@14 107 end
mathieu@14 108 end
mathieu@14 109 end
mathieu@14 110 end
mathieu@14 111 end