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 |