Mercurial > hg > simscene-py
view nonExposed/getEvent.m @ 44:b7b1672b3c3b
Reading and writing of files now is done by soundfile since there seems to be a bug with writing .wav files with librosa (mplayer would play them as rubbish). Added soundfile as a requirement.
author | Emmanouil Theofanis Chourdakis <e.t.chourdakis@qmul.ac.uk> |
---|---|
date | Mon, 09 Oct 2017 11:55:03 +0100 |
parents | d0ceb549f734 |
children |
line wrap: on
line source
function [sceneSchedule,sceneObjects]=getEvent(sceneSchedule,sceneObjects,inputPath,score,timeMode,ebrMode,randomFlag,eventInfo,sr) % This program was written by Mathias Rossignol & Grégoire Lafay % is Copyright (C) 2015 IRCAM <http://www.ircam.fr> % % This program is free software: you can redistribute it and/or modify it % under the terms of the GNU General Public License as published by the Free % Software Foundation, either version 3 of the License, or (at your option) % any later version. % % This program is distributed in the hope that it will be useful, but % WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY % or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License % for more details. % % You should have received a copy of the GNU General Public License along % with this program. If not, see <http://www.gnu.org/licenses/>. settings.randomFlag = randomFlag; settings.schedPos = length(sceneSchedule)+1; for ii=1:length(score.events) settings.classId =ii+length(score.backgrounds); settings.ebrMode=ebrMode; settings.timeMode=timeMode; settings.label=score.events{ii}{1}; settings.ebr_mean = score.events{ii}{3}; settings.ebr_std = score.events{ii}{4}; sceneObjects(settings.classId) = getSampleInfo(score.events{ii}{1}, score.events{ii}{2},'event',inputPath,score.events{ii}{8},eventInfo,sr); settings.duration_mean = mean(sceneObjects(settings.classId).endTimes-sceneObjects(settings.classId).startTimes); settings.duration_std = std(sceneObjects(settings.classId).endTimes-sceneObjects(settings.classId).startTimes); settings.mean_time_between_instances = score.events{ii}{5}; settings.time_between_instances_std = score.events{ii}{6}; settings.start_time = score.events{ii}{7}; settings.end_time = score.events{ii}{8}; settings.fade_in_time = score.events{ii}{9}; settings.fade_out_time = score.events{ii}{10}; if ~strcmp(settings.timeMode,'generate') || ~strcmp(settings.ebrMode,'generate') settings.start_times = score.events{ii}{11}; settings.end_times = score.events{ii}{12}; settings.ebrs = score.events{ii}{13}; settings.template_duration_mean=mean(settings.end_times-settings.start_times); settings.template_duration_std=std(settings.end_times-settings.start_times); end if (settings.start_time > score.sceneDuration) settings.start_time = score.sceneDuration; 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']) end if (settings.end_time > score.sceneDuration) settings.end_time = score.sceneDuration; 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']) end %% generate sceneSchedule switch timeMode case {'generate','abstract'} if (settings.mean_time_between_instances == 0) % Looping: only for generate timeMode if strcmp(timeMode,'abstract') error('simScene cannot loop event in abstract time Mode') end time = settings.start_time; while time<settings.end_time if time+sceneSchedule(settings.schedPos).duration > settings.end_time break; end [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,time); time = time+sceneSchedule(settings.schedPos).duration; settings.schedPos = settings.schedPos+1; end elseif (settings.mean_time_between_instances < 0) % Just once: abstract and generate [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,settings.start_time); settings.schedPos = settings.schedPos+1; else % General case: abstract and generate t = settings.start_time; time = t; while t<settings.end_time if (time<0) time=0; end if time > settings.end_time break; end [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,time); t = t+settings.mean_time_between_instances; time=t+settings.time_between_instances_std*randn; settings.schedPos = settings.schedPos+1; end end case 'replicate' for jj=1:length(settings.start_times) if settings.start_times(jj) <= settings.end_time && settings.start_times(jj) >= settings.start_time [sceneSchedule] = getSceneSchedule(sceneSchedule,sceneObjects,settings,settings.start_times(jj),jj); settings.schedPos = settings.schedPos+1; end end end end end