#include <ardour/session.h>
#include <ardour/auditioner.h>
#include <ardour/audioplaylist.h>
+#include <ardour/audiosource.h>
#include <ardour/playlist_templates.h>
+#include <ardour/region_factory.h>
#include <gtkmm2ext/gtk_ui.h>
using namespace std;
using namespace ARDOUR;
+using namespace PBD;
using namespace Gtk;
using namespace sigc;
using namespace Editing;
CrossfadeEditor::Presets* CrossfadeEditor::fade_in_presets = 0;
CrossfadeEditor::Presets* CrossfadeEditor::fade_out_presets = 0;
-#include "crossfade_xpms.h"
-
CrossfadeEditor::Half::Half ()
: line (0),
normative_curve (0.0, 1.0, 1.0, true),
for (list<Preset*>::iterator i = fade_in_presets->begin(); i != fade_in_presets->end(); ++i) {
- pxmap = manage (new Image (Gdk::Pixbuf::create_from_xpm_data((*i)->xpm)));
+ pxmap = manage (new Image (get_xpm((*i)->xpm)));
pbutton = manage (new Button);
pbutton->add (*pxmap);
pbutton->set_name ("CrossfadeEditButton");
for (list<Preset*>::iterator i = fade_out_presets->begin(); i != fade_out_presets->end(); ++i) {
- pxmap = manage (new Image (Gdk::Pixbuf::create_from_xpm_data((*i)->xpm)));
+ pxmap = manage (new Image (get_xpm((*i)->xpm)));
pbutton = manage (new Button);
pbutton->add (*pxmap);
pbutton->set_name ("CrossfadeEditButton");
vector<ArdourCanvas::WaveView*>::iterator i;
uint32_t n;
- ht = canvas->get_allocation().get_height() / xfade.in().n_channels();
+ ht = canvas->get_allocation().get_height() / xfade.in()->n_channels();
for (n = 0, i = fade[In].waves.begin(); i != fade[In].waves.end(); ++i, ++n) {
double yoff;
(*i)->property_samples_per_unit() = spu;
}
- ht = canvas->get_allocation().get_height() / xfade.out().n_channels();
+ ht = canvas->get_allocation().get_height() / xfade.out()->n_channels();
for (n = 0, i = fade[Out].waves.begin(); i != fade[Out].waves.end(); ++i, ++n) {
double yoff;
return;
}
- jack_nframes_t len = xfade.length ();
+ nframes_t len = xfade.length ();
fade[current].normative_curve.clear ();
fade[current].gain_curve.clear ();
}
- // GTK2FIX some odd math to fix up here
-
size_t last_spt = (npoints + 3) - 1;
for (size_t i = 0; i < npoints; ++i) {
fade_out_presets = new Presets;
/* FADE OUT */
-
- p = new Preset (hiin_xpm);
+ p = new Preset ("hiin.xpm");
p->push_back (PresetPoint (0, 0));
p->push_back (PresetPoint (0.0207373, 0.197222));
p->push_back (PresetPoint (0.0645161, 0.525));
p->push_back (PresetPoint (1, 1));
fade_in_presets->push_back (p);
- p = new Preset (loin_xpm);
+ p = new Preset ("loin.xpm");
p->push_back (PresetPoint (0, 0));
p->push_back (PresetPoint (0.389401, 0.0333333));
p->push_back (PresetPoint (0.629032, 0.0861111));
p->push_back (PresetPoint (1, 1));
fade_in_presets->push_back (p);
- p = new Preset (regin_xpm);
+ p = new Preset ("regin.xpm");
p->push_back (PresetPoint (0, 0));
p->push_back (PresetPoint (0.0737327, 0.308333));
p->push_back (PresetPoint (0.246544, 0.658333));
p->push_back (PresetPoint (1, 1));
fade_in_presets->push_back (p);
- p = new Preset (regin2_xpm);
+ p = new Preset ("regin2.xpm");
p->push_back (PresetPoint (0, 0));
p->push_back (PresetPoint (0.304147, 0.0694444));
p->push_back (PresetPoint (0.529954, 0.152778));
p->push_back (PresetPoint (1, 1));
fade_in_presets->push_back (p);
- p = new Preset (linin_xpm);
+ p = new Preset ("linin.xpm");
p->push_back (PresetPoint (0, 0));
p->push_back (PresetPoint (1, 1));
fade_in_presets->push_back (p);
/* FADE OUT */
- p = new Preset (hiout_xpm);
+ p = new Preset ("hiout.xpm");
p->push_back (PresetPoint (0, 1));
p->push_back (PresetPoint (0.305556, 1));
p->push_back (PresetPoint (0.548611, 0.991736));
p->push_back (PresetPoint (1, 0));
fade_out_presets->push_back (p);
- p = new Preset (regout_xpm);
+ p = new Preset ("regout.xpm");
p->push_back (PresetPoint (0, 1));
p->push_back (PresetPoint (0.228111, 0.988889));
p->push_back (PresetPoint (0.347926, 0.972222));
p->push_back (PresetPoint (1, 0));
fade_out_presets->push_back (p);
- p = new Preset (loout_xpm);
+ p = new Preset ("loout.xpm");
p->push_back (PresetPoint (0, 1));
p->push_back (PresetPoint (0.023041, 0.697222));
p->push_back (PresetPoint (0.0553, 0.483333));
p->push_back (PresetPoint (1, 0));
fade_out_presets->push_back (p);
- p = new Preset (regout2_xpm);
+ p = new Preset ("regout2.xpm");
p->push_back (PresetPoint (0, 1));
p->push_back (PresetPoint (0.080645, 0.730556));
p->push_back (PresetPoint (0.277778, 0.289256));
p->push_back (PresetPoint (1, 0));
fade_out_presets->push_back (p);
- p = new Preset (linout_xpm);
+ p = new Preset ("linout.xpm");
p->push_back (PresetPoint (0, 1));
p->push_back (PresetPoint (1, 0));
fade_out_presets->push_back (p);
}
for (list<Point*>::iterator i = fade[Out].points.begin(); i != fade[Out].points.end(); ++i) {
- (*i)->box->hide();
+ (*i)->box->show();
}
for (vector<Button*>::iterator i = fade_out_buttons.begin(); i != fade_out_buttons.end(); ++i) {
}
void
-CrossfadeEditor::make_waves (AudioRegion& region, WhichFade which)
+CrossfadeEditor::make_waves (boost::shared_ptr<AudioRegion> region, WhichFade which)
{
gdouble ht;
- uint32_t nchans = region.n_channels();
+ uint32_t nchans = region->n_channels();
guint32 color;
double spu;
gdouble yoff = n * ht;
- if (region.source(n).peaks_ready (bind (mem_fun(*this, &CrossfadeEditor::peaks_ready), ®ion, which))) {
+ if (region->source(n)->peaks_ready (bind (mem_fun(*this, &CrossfadeEditor::peaks_ready), region, which), peaks_ready_connection)) {
WaveView* waveview = new WaveView (*(canvas->root()));
- waveview->property_data_src() = ®ion;
+ waveview->property_data_src() = region.get();
waveview->property_cache_updater() = true;
waveview->property_cache() = WaveView::create_cache();
waveview->property_channel() = n;
}
void
-CrossfadeEditor::peaks_ready (AudioRegion* r, WhichFade which)
+CrossfadeEditor::peaks_ready (boost::shared_ptr<AudioRegion> r, WhichFade which)
{
/* this should never be called, because the peak files for an xfade
will be ready by the time we want them. but our API forces us
to provide this, so ..
*/
-
- make_waves (*r, which);
+ peaks_ready_connection.disconnect ();
+ make_waves (r, which);
}
void
CrossfadeEditor::audition_both ()
{
- AudioPlaylist& pl (session.the_auditioner().prepare_playlist());
- jack_nframes_t preroll;
- jack_nframes_t postroll;
- jack_nframes_t length;
- jack_nframes_t left_start_offset;
- jack_nframes_t right_length;
- jack_nframes_t left_length;
+ AudioPlaylist& pl (session.the_auditioner()->prepare_playlist());
+ nframes_t preroll;
+ nframes_t postroll;
+ nframes_t length;
+ nframes_t left_start_offset;
+ nframes_t right_length;
+ nframes_t left_length;
if (preroll_button.get_active()) {
preroll = ARDOUR_UI::instance()->preroll_clock.current_duration ();
postroll = 0;
}
- if ((left_start_offset = xfade.out().length() - xfade.length()) >= preroll) {
+ if ((left_start_offset = xfade.out()->length() - xfade.length()) >= preroll) {
left_start_offset -= preroll;
}
length = 0;
- if ((left_length = xfade.length()) < xfade.out().length() - left_start_offset) {
+ if ((left_length = xfade.length()) < xfade.out()->length() - left_start_offset) {
length += postroll;
}
right_length = xfade.length();
- if (xfade.in().length() - right_length < postroll) {
+ if (xfade.in()->length() - right_length < postroll) {
right_length += postroll;
}
- AudioRegion* left = new AudioRegion (xfade.out(), left_start_offset, left_length, "xfade out",
- 0, Region::DefaultFlags, false);
- AudioRegion* right = new AudioRegion (xfade.in(), 0, right_length, "xfade in",
- 0, Region::DefaultFlags, false);
+ boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.out(), left_start_offset, left_length, "xfade out",
+ 0, Region::DefaultFlags, false)));
+ boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.in(), 0, right_length, "xfade in",
+ 0, Region::DefaultFlags, false)));
- pl.add_region (*left, 0);
- pl.add_region (*right, 1+preroll);
+ pl.add_region (left, 0);
+ pl.add_region (right, 1+preroll);
/* there is only one ... */
void
CrossfadeEditor::audition_left_dry ()
{
- AudioRegion* left = new AudioRegion (xfade.out(), xfade.out().length() - xfade.length(), xfade.length(), "xfade left",
- 0, Region::DefaultFlags, false);
+ boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.out(), xfade.out()->length() - xfade.length(), xfade.length(), "xfade left",
+ 0, Region::DefaultFlags, false)));
- session.audition_region (*left);
+ session.audition_region (left);
}
void
CrossfadeEditor::audition_left ()
{
- AudioPlaylist& pl (session.the_auditioner().prepare_playlist());
+ AudioPlaylist& pl (session.the_auditioner()->prepare_playlist());
- AudioRegion* left = new AudioRegion (xfade.out(), xfade.out().length() - xfade.length(), xfade.length(), "xfade left",
- 0, Region::DefaultFlags, false);
- AudioRegion* right = new AudioRegion (xfade.in(), 0, xfade.length(), "xfade in",
- 0, Region::DefaultFlags, false);
+ boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.out(), xfade.out()->length() - xfade.length(), xfade.length(), "xfade left",
+ 0, Region::DefaultFlags, false)));
+ boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.in(), 0, xfade.length(), "xfade in",
+ 0, Region::DefaultFlags, false)));
- pl.add_region (*left, 0);
- pl.add_region (*right, 1);
+ pl.add_region (left, 0);
+ pl.add_region (right, 1);
right->set_muted (true);
void
CrossfadeEditor::audition_right_dry ()
{
- AudioRegion* right = new AudioRegion (xfade.in(), 0, xfade.length(), "xfade in",
- 0, Region::DefaultFlags, false);
- session.audition_region (*right);
+ boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.in(), 0, xfade.length(), "xfade in",
+ 0, Region::DefaultFlags, false)));
+ session.audition_region (right);
}
void
CrossfadeEditor::audition_right ()
{
- AudioPlaylist& pl (session.the_auditioner().prepare_playlist());
+ AudioPlaylist& pl (session.the_auditioner()->prepare_playlist());
- AudioRegion* left = new AudioRegion (xfade.out(), xfade.out().length() - xfade.length(), xfade.length(), "xfade out",
- 0, Region::DefaultFlags, false);
- AudioRegion* right = new AudioRegion (xfade.out(), 0, xfade.length(), "xfade out",
- 0, Region::DefaultFlags, false);
+ boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.out(), xfade.out()->length() - xfade.length(), xfade.length(), "xfade out",
+ 0, Region::DefaultFlags, false)));
+ boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.out(), 0, xfade.length(), "xfade out",
+ 0, Region::DefaultFlags, false)));
- pl.add_region (*left, 0);
- pl.add_region (*right, 1);
+ pl.add_region (left, 0);
+ pl.add_region (right, 1);
left->set_muted (true);