string right = Config->get_auditioner_output_right();
if (left == "default") {
- left = _session.engine().get_nth_physical_output (0);
+ left = _session.engine().get_nth_physical_output (DataType::AUDIO, 0);
}
if (right == "default") {
- right = _session.engine().get_nth_physical_output (1);
+ right = _session.engine().get_nth_physical_output (DataType::AUDIO, 1);
}
if ((left.length() == 0) && (right.length() == 0)) {
allow_pan_reset ();
+ reset_panner ();
+
IO::output_changed.connect (mem_fun (*this, &Auditioner::output_changed));
the_region.reset ((AudioRegion*) 0);
/* force a panner reset now that we have all channels */
- _panner->reset (n_outputs(), _diskstream->n_channels());
+ _panner->reset (n_outputs().n_audio(), _diskstream->n_channels().n_audio());
g_atomic_int_set (&_active, 1);
}
boost::shared_ptr<AudioRegion> the_region (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
the_region->set_position (0, this);
- _diskstream->playlist()->clear ();
+ _diskstream->playlist()->drop_regions ();
_diskstream->playlist()->add_region (the_region, 0, 1);
- if (_diskstream->n_channels() < the_region->n_channels()) {
- audio_diskstream()->add_channel (the_region->n_channels() - _diskstream->n_channels());
- } else if (_diskstream->n_channels() > the_region->n_channels()) {
- audio_diskstream()->remove_channel (_diskstream->n_channels() - the_region->n_channels());
+ if (_diskstream->n_channels().n_audio() < the_region->n_channels()) {
+ audio_diskstream()->add_channel (the_region->n_channels() - _diskstream->n_channels().n_audio());
+ } else if (_diskstream->n_channels().n_audio() > the_region->n_channels()) {
+ audio_diskstream()->remove_channel (_diskstream->n_channels().n_audio() - the_region->n_channels());
}
/* force a panner reset now that we have all channels */
- _panner->reset (n_outputs(), _diskstream->n_channels());
+ reset_panner();
length = the_region->length();
- _diskstream->seek (0);
- current_frame = 0;
+
+ int dir;
+ nframes_t offset = the_region->sync_offset (dir);
+
+ /* can't audition from a negative sync point */
+
+ if (dir < 0) {
+ offset = 0;
+ }
+
+ _diskstream->seek (offset);
+ current_frame = offset;
+
g_atomic_int_set (&_active, 1);
}
string phys;
if (change & ConnectionsChanged) {
- const char ** connections;
- connections = output (0)->get_connections ();
- if (connections) {
- phys = _session.engine().get_nth_physical_output (0);
+ vector<string> connections;
+ if (output (0)->get_connections (connections)) {
+ phys = _session.engine().get_nth_physical_output (DataType::AUDIO, 0);
if (phys != connections[0]) {
Config->set_auditioner_output_left (connections[0]);
} else {
Config->set_auditioner_output_left ("default");
}
- free (connections);
} else {
Config->set_auditioner_output_left ("");
}
- connections = output (1)->get_connections ();
- if (connections) {
- phys = _session.engine().get_nth_physical_output (1);
+ connections.clear ();
+
+ if (output (1)->get_connections (connections)) {
+ phys = _session.engine().get_nth_physical_output (DataType::AUDIO, 1);
if (phys != connections[0]) {
Config->set_auditioner_output_right (connections[0]);
} else {
Config->set_auditioner_output_right ("default");
}
- free (connections);
} else {
Config->set_auditioner_output_right ("");
}