/* force a panner reset now that we have all channels */
- _panner->reset (n_outputs().get(DataType::AUDIO), _diskstream->n_channels().get(DataType::AUDIO));
+ _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().get(DataType::AUDIO) < the_region->n_channels()) {
- audio_diskstream()->add_channel (the_region->n_channels() - _diskstream->n_channels().get(DataType::AUDIO));
- } else if (_diskstream->n_channels().get(DataType::AUDIO) > the_region->n_channels()) {
- audio_diskstream()->remove_channel (_diskstream->n_channels().get(DataType::AUDIO) - 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 */
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) {
+ 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) {
+ 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 ("");
}