comparison nonExposed/getEvent.m @ 14:b1901e8d8f5f

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