mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-24 06:07:29 +01:00
clean up that godawful programming style in the last transport commit, and fix dynamic range playback
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6031 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
c033e6f875
commit
5574b46de4
7 changed files with 58 additions and 60 deletions
|
|
@ -1484,8 +1484,7 @@ ARDOUR_UI::transport_roll ()
|
|||
return;
|
||||
}
|
||||
} else if (session->get_play_range ()) {
|
||||
list<AudioRange> empty;
|
||||
session->request_play_range (empty, false, true);
|
||||
session->request_play_range (0, true);
|
||||
}
|
||||
|
||||
if (!rolling) {
|
||||
|
|
@ -1536,8 +1535,7 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
|
|||
session->request_play_loop (false, true);
|
||||
} else if (session->get_play_range ()) {
|
||||
affect_transport = false;
|
||||
list<AudioRange> empty;
|
||||
session->request_play_range (empty, false, true);
|
||||
session->request_play_range (0, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4657,6 +4657,11 @@ Editor::end_selection_op (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
}
|
||||
}
|
||||
|
||||
/* XXX what if its a music time selection? */
|
||||
if (session->get_play_range() && session->transport_rolling()) {
|
||||
session->request_play_range (&selection->time, true);
|
||||
}
|
||||
|
||||
stop_canvas_autoscroll ();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2428,7 +2428,7 @@ Editor::play_selection ()
|
|||
return;
|
||||
}
|
||||
|
||||
session->request_play_range (selection->time, true);
|
||||
session->request_play_range (&selection->time, true);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -926,14 +926,13 @@ class Session : public PBD::StatefulDestructible
|
|||
|
||||
/* ranges */
|
||||
|
||||
void request_play_range (list<AudioRange>&, bool yn, bool leave_rolling = false);
|
||||
void request_play_range (list<AudioRange>*, bool leave_rolling = false);
|
||||
bool get_play_range () const { return _play_range; }
|
||||
|
||||
/* favorite dirs */
|
||||
typedef vector<string> FavoriteDirs;
|
||||
|
||||
static int read_favorite_dirs (FavoriteDirs&);
|
||||
|
||||
static int write_favorite_dirs (FavoriteDirs&);
|
||||
|
||||
/* file suffixes */
|
||||
|
|
@ -1734,8 +1733,8 @@ class Session : public PBD::StatefulDestructible
|
|||
|
||||
list<AudioRange> current_audio_range;
|
||||
bool _play_range;
|
||||
void set_play_range (list<AudioRange>&, bool yn, bool leave_rolling);
|
||||
void setup_auto_play (list<AudioRange>&);
|
||||
void set_play_range (list<AudioRange>&, bool leave_rolling);
|
||||
void unset_play_range ();
|
||||
|
||||
/* main outs */
|
||||
uint32_t main_outs;
|
||||
|
|
|
|||
|
|
@ -427,7 +427,7 @@ Session::process_event (Event* ev)
|
|||
break;
|
||||
|
||||
case Event::SetPlayAudioRange:
|
||||
set_play_range (ev->audio_range, ev->yes_or_no, (ev->speed == 1.0f));
|
||||
set_play_range (ev->audio_range, (ev->speed == 1.0f));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -140,10 +140,14 @@ Session::request_play_loop (bool yn, bool leave_rolling)
|
|||
}
|
||||
|
||||
void
|
||||
Session::request_play_range (list<AudioRange>& range, bool yn, bool leave_rolling)
|
||||
Session::request_play_range (list<AudioRange>* range, bool leave_rolling)
|
||||
{
|
||||
Event* ev = new Event (Event::SetPlayAudioRange, Event::Add, Event::Immediate, 0, (leave_rolling ? 1.0 : 0.0), yn);
|
||||
ev->audio_range = range;
|
||||
Event* ev = new Event (Event::SetPlayAudioRange, Event::Add, Event::Immediate, 0, (leave_rolling ? 1.0 : 0.0));
|
||||
if (range) {
|
||||
ev->audio_range = *range;
|
||||
} else {
|
||||
ev->audio_range.clear ();
|
||||
}
|
||||
queue_event (ev);
|
||||
}
|
||||
|
||||
|
|
@ -617,8 +621,7 @@ Session::set_play_loop (bool yn)
|
|||
|
||||
if (loc) {
|
||||
|
||||
list<AudioRange> empty;
|
||||
set_play_range (empty, false, true);
|
||||
unset_play_range ();
|
||||
|
||||
if (Config->get_seamless_loop()) {
|
||||
// set all diskstreams to use internal looping
|
||||
|
|
@ -1186,56 +1189,38 @@ Session::set_diskstream_speed (Diskstream* stream, float speed)
|
|||
}
|
||||
|
||||
void
|
||||
Session::set_play_range (list<AudioRange>& range, bool yn, bool leave_rolling)
|
||||
Session::unset_play_range ()
|
||||
{
|
||||
/* Called from event-processing context */
|
||||
|
||||
if (yn) {
|
||||
if (range.empty()) {
|
||||
/* make it a no-op */
|
||||
return;
|
||||
}
|
||||
/* cancel loop play */
|
||||
unset_play_loop ();
|
||||
}
|
||||
|
||||
_play_range = yn;
|
||||
|
||||
setup_auto_play (range);
|
||||
|
||||
if (!_play_range && !leave_rolling) {
|
||||
/* stop transport */
|
||||
Event* ev = new Event (Event::SetTransportSpeed, Event::Add, Event::Immediate, 0, 0.0f, false);
|
||||
merge_event (ev);
|
||||
}
|
||||
|
||||
TransportStateChange ();
|
||||
}
|
||||
|
||||
void
|
||||
Session::request_bounded_roll (nframes_t start, nframes_t end)
|
||||
{
|
||||
AudioRange ar (start, end, 0);
|
||||
list<AudioRange> lar;
|
||||
|
||||
lar.push_back (ar);
|
||||
request_play_range (lar, true, true);
|
||||
}
|
||||
|
||||
void
|
||||
Session::setup_auto_play (list<AudioRange>& range)
|
||||
{
|
||||
/* Called from event-processing context */
|
||||
|
||||
Event* ev;
|
||||
|
||||
_play_range = false;
|
||||
_clear_event_type (Event::RangeStop);
|
||||
_clear_event_type (Event::RangeLocate);
|
||||
}
|
||||
|
||||
if (!_play_range) {
|
||||
void
|
||||
Session::set_play_range (list<AudioRange>& range, bool leave_rolling)
|
||||
{
|
||||
Event* ev;
|
||||
|
||||
/* Called from event-processing context */
|
||||
|
||||
unset_play_range ();
|
||||
|
||||
if (range.empty()) {
|
||||
/* _play_range set to false in unset_play_range()
|
||||
*/
|
||||
if (!leave_rolling) {
|
||||
/* stop transport */
|
||||
Event* ev = new Event (Event::SetTransportSpeed, Event::Add, Event::Immediate, 0, 0.0f, false);
|
||||
merge_event (ev);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
_play_range = true;
|
||||
|
||||
/* cancel loop play */
|
||||
unset_play_loop ();
|
||||
|
||||
list<AudioRange>::size_type sz = range.size();
|
||||
|
||||
if (sz > 1) {
|
||||
|
|
@ -1285,6 +1270,18 @@ Session::setup_auto_play (list<AudioRange>& range)
|
|||
|
||||
ev = new Event (Event::LocateRoll, Event::Add, Event::Immediate, range.front().start, 0.0f, false);
|
||||
merge_event (ev);
|
||||
|
||||
TransportStateChange ();
|
||||
}
|
||||
|
||||
void
|
||||
Session::request_bounded_roll (nframes_t start, nframes_t end)
|
||||
{
|
||||
AudioRange ar (start, end, 0);
|
||||
list<AudioRange> lar;
|
||||
|
||||
lar.push_back (ar);
|
||||
request_play_range (&lar, true);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -122,8 +122,7 @@ BasicUI::transport_play (bool from_last_start)
|
|||
}
|
||||
|
||||
if (session->get_play_range ()) {
|
||||
list<AudioRange> empty;
|
||||
session->request_play_range (empty, false);
|
||||
session->request_play_range (0);
|
||||
}
|
||||
|
||||
if (from_last_start && rolling) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue