#include "ardour/audiosource.h"
#include "ardour/region_factory.h"
#include "ardour/profile.h"
+#include "ardour/crossfade_binder.h"
#include <gtkmm2ext/gtk_ui.h>
select_out_button (_("Fade Out")),
_peaks_ready_connection (0)
-
+
{
set_session (s);
} else if ( xfract > 1.0 ) {
xfract = 1.0;
}
-
+
if ( yfract < 0.0 ) {
yfract = 0.0;
} else if ( yfract > 1.0 ) {
_session->begin_reversible_command (_("Edit crossfade"));
XMLNode& before = xfade->get_state ();
-
+
_apply_to (xfade);
- _session->add_command (new MementoCommand<Crossfade> (*xfade.get(), &before, &xfade->get_state ()));
+ _session->add_command (
+ new MementoCommand<Crossfade> (
+ new ARDOUR::CrossfadeBinder (_session->playlists, xfade->id ()),
+ &before, &xfade->get_state ()
+ )
+ );
+
_session->commit_reversible_command ();
}
double firstx = (*in.begin())->when;
double endx = (*the_end)->when;
- double miny = in.get_min_y ();
- double maxy = in.get_max_y ();
in.freeze ();
in.clear ();
for (list<Point*>::iterator i = fade[In].points.begin(); i != fade[In].points.end(); ++i) {
double when = firstx + ((*i)->x * (endx - firstx));
- double value = (*i)->y; // miny + ((*i)->y * (maxy - miny));
+ double value = (*i)->y;
in.add (when, value);
}
firstx = (*out.begin())->when;
endx = (*the_end)->when;
- miny = out.get_min_y ();
- maxy = out.get_max_y ();
out.freeze ();
out.clear ();
for (list<Point*>::iterator i = fade[Out].points.begin(); i != fade[Out].points.end(); ++i) {
double when = firstx + ((*i)->x * (endx - firstx));
- double value = (*i)->y; // miny + ((*i)->y * (maxy - miny));
+ double value = (*i)->y;
out.add (when, value);
}
delete _peaks_ready_connection;
_peaks_ready_connection = 0;
-
+
for (uint32_t n = 0; n < nchans; ++n) {
gdouble yoff = n * ht;
*/
delete _peaks_ready_connection;
_peaks_ready_connection = 0;
-
+
make_waves (r, which);
}
right_length = xfade->in()->length();
}
- PropertyList left_plist;
- PropertyList right_plist;
+ PropertyList left_plist;
+ PropertyList right_plist;
+
-
left_plist.add (ARDOUR::Properties::start, left_start_offset);
left_plist.add (ARDOUR::Properties::length, left_length);
left_plist.add (ARDOUR::Properties::name, string ("xfade out"));
left_plist.add (ARDOUR::Properties::layer, 0);
left_plist.add (ARDOUR::Properties::fade_in_active, true);
-
+
right_plist.add (ARDOUR::Properties::start, 0);
right_plist.add (ARDOUR::Properties::length, right_length);
right_plist.add (ARDOUR::Properties::name, string("xfade in"));
left_plist.add (ARDOUR::Properties::scale_amplitude, 0.0f);
}
- boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion>
+ boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion>
(RegionFactory::create (xfade->out(), left_plist, false)));
- boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion>
+ boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion>
(RegionFactory::create (xfade->in(), right_plist, false)));
// apply a 20ms declicking fade at the start and end of auditioning
void
CrossfadeEditor::audition_left_dry ()
{
- PropertyList plist;
+ PropertyList plist;
plist.add (ARDOUR::Properties::start, xfade->out()->length() - xfade->length());
plist.add (ARDOUR::Properties::length, xfade->length());
plist.add (ARDOUR::Properties::name, string("xfade left"));
plist.add (ARDOUR::Properties::layer, 0);
-
- boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion>
+
+ boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion>
(RegionFactory::create (xfade->out(), plist, false)));
_session->audition_region (left);
void
CrossfadeEditor::audition_right_dry ()
{
- PropertyList plist;
+ PropertyList plist;
plist.add (ARDOUR::Properties::start, 0);
plist.add (ARDOUR::Properties::length, xfade->length());
plist.add (ARDOUR::Properties::name, string ("xfade right"));
plist.add (ARDOUR::Properties::layer, 0);
- boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion>
+ boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion>
(RegionFactory::create (xfade->in(), plist, false)));
_session->audition_region (right);