int Track::paste_silence(double start, double end, int edit_plugins, int edit_autos) { int64_t start_i = to_units(start, 0); int64_t end_i = to_units(end, 1); edits->paste_silence(start_i, end_i); if(edit_autos) shift_keyframes(start_i, end_i - start_i); if(edit_plugins) shift_effects(start_i, end_i - start_i, edit_autos); edits->optimize(); return 0; }
void Track::align_edits(double start, double end, ArrayList<double> *times) { int64_t start_units = to_units(start, 0); int64_t end_units = to_units(end, 0); // If 1st track with data, times is empty & we need to collect the edit times. if(!times->size()) { for(Edit *current = edits->first; current; current = NEXT) { if(current->startproject >= start_units && current->startproject + current->length <= end_units) { times->append(from_units(current->startproject)); } } } else // All other tracks get silence or cut to align the edits on the times. { int current_time = 0; for(Edit *current = edits->first; current && current_time < times->size(); ) { if(current->startproject >= start_units && current->startproject + current->length <= end_units) { int64_t desired_startunits = to_units(times->get(current_time), 0); int64_t current_startunits = current->startproject; current = NEXT; if(current_startunits < desired_startunits) { //printf("Track::align_edits %d\n", __LINE__); edits->paste_silence(current_startunits, desired_startunits); shift_keyframes(current_startunits, desired_startunits - current_startunits); } else if(current_startunits > desired_startunits) { edits->clear(desired_startunits, current_startunits); if(edl->session->autos_follow_edits) shift_keyframes(desired_startunits, current_startunits - desired_startunits); } current_time++; } else { current = NEXT; } } } optimize(); }
void Plugin::shift(int64_t difference) { Edit::shift(difference); shift_keyframes(difference); }