Mercurial > hg > simscene-py
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 |