*/
#include "mixersalign.h"
+#include "auto.h"
+#include "autos.h"
#include "arender.h"
#include "clip.h"
#include "edit.h"
#include "edits.h"
#include "edl.h"
+#include "edlsession.h"
#include "localsession.h"
#include "mainerror.h"
#include "mainprogress.h"
#include "mwindow.h"
#include "mwindowgui.h"
+#include "panauto.h"
+#include "panautos.h"
#include "preferences.h"
#include "track.h"
#include "tracks.h"
{
int idx = ma_gui->mtrack_list->get_selection_number(0, 0);
int midx = -1, mid = mixer_of(mtracks[idx]->track, midx);
+ EDL *edl = mwindow->edl;
for( int m, i=0; (m=ma_gui->mixer_list->get_selection_number(0,i))>=0; ++i ) {
if( m == mid ) continue; // master does not move
Mixer *mixer = mix->mixer;
for( int i=0; i<mixer->mixer_ids.size(); ++i ) {
int id = mixer->mixer_ids[i];
- Track *track = mwindow->edl->tracks->first;
+ Track *track = edl->tracks->first;
while( track && track->mixer_id != id ) track = track->next;
if( !track ) continue;
- int64_t dt = track->to_units(mix->nudge, 0);
- for( Edit *edit=track->edits->first; edit; edit=edit->next )
- edit->startproject += dt;
- track->optimize();
+ double nudge = mix->nudge;
+ int record = track->record; track->record = 1;
+ if( nudge < 0 ) {
+ edl->clear(0, -nudge,
+ edl->session->labels_follow_edits,
+ edl->session->plugins_follow_edits,
+ edl->session->autos_follow_edits);
+ }
+ else if( nudge > 0 ) {
+ edl->paste_silence(0, nudge,
+ edl->session->labels_follow_edits,
+ edl->session->plugins_follow_edits,
+ edl->session->autos_follow_edits);
+ }
+ track->record = record;
}
}
+ edl->optimize();
mwindow->gui->lock_window("MixersAlign::handle_done_event");
mwindow->update_gui(1);
void MixersAlign::handle_done_event(int result)
{
+ if( thread->running() ) {
+ failed = -1;
+ thread->join();
+ return;
+ }
if( !result ) {
EDL *edl = mwindow->edl;
mwindow->edl = undo_edl;
mwindow->edl = edl;
mwindow->undo_after(_("align mixers"), LOAD_ALL);
}
- else if( thread->running() ) {
- failed = -1;
- thread->join();
- }
}
void MixersAlign::handle_close_event(int result)
EDL *edl = new EDL(mwindow->edl);
edl->create_objects();
Track *track = mwindow->edl->tracks->first;
- for( ; track; track=track->next ) {
+ for( int ch=0; track && ch<MAX_CHANNELS; track=track->next ) {
int id = track->mixer_id;
if( track->data_type != TRACK_AUDIO ) continue;
if( mixer->mixer_ids.number_of(id) < 0 ) continue;
Track *mixer_audio = edl->tracks->add_audio_track(0, 0);
- mixer_audio->copy_from(track);
+ mixer_audio->copy_settings(track);
mixer_audio->play = 1;
+ mixer_audio->edits->copy_from(track->edits);
+ PanAuto* pan_auto = (PanAuto*)mixer_audio->automation->
+ autos[AUTOMATION_PAN]->default_auto;
+ pan_auto->values[ch++] = 1.0;
}
return edl;
}
EDL *edl = new EDL(mwindow->edl);
edl->create_objects();
Track *master_audio = edl->tracks->add_audio_track(0, 0);
- master_audio->copy_from(track);
+ master_audio->copy_settings(track);
master_audio->play = 1;
+ master_audio->edits->copy_from(track->edits);
+ PanAuto* pan_auto = (PanAuto*)master_audio->automation->
+ autos[AUTOMATION_PAN]->default_auto;
+ pan_auto->values[0] = 1.0;
return edl;
}