diff options
Diffstat (limited to 'libs/ardour/route.cc')
-rw-r--r-- | libs/ardour/route.cc | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 54bb140c98..7ff4af8ac7 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -2315,11 +2315,25 @@ Route::no_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, return 0; } - if (session_state_changing || !_active) { + if (!_active) { silence (nframes); return 0; } + if (session_state_changing) { + if (_session.transport_speed() != 0.0f) { + /* we're rolling but some state is changing (e.g. our diskstream contents) + so we cannot use them. Be silent till this is over. + + XXX note the absurdity of ::no_roll() being called when we ARE rolling! + */ + silence (nframes); + } + /* we're really not rolling, so we're either delivery silence or actually + monitoring, both of which are safe to do while session_state_changing is true. + */ + } + apply_gain_automation = false; if (n_inputs()) { |