Age | Commit message (Collapse) | Author |
|
Calling Session::set_play_loop repeatedly (e.g. LLL) should toggle in and out
of loop play. Previously transport needed to be stopped before loop play could
be started for a second or subsequent time. This uses the loop_changing boolean
to flag that Session::non_realtime_stop should not unset the loop.
Also, Session::non_realtime_stop must reset loop_changing to false after use so
it does not affect the next transport action.
|
|
|
|
loop for loop play
|
|
|
|
|
|
Since we now (correctly) do not locate for loop changes, this member
is unnecessary
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
external sync if command is allowed
The semantics are that if the user configures things to allow transport commands while
using a transport master, issuing such commands first stops using the master
|
|
|
|
Auditioner seek calls are explicitly handled by the butler,
and DR:overwrite_existing_buffers() is called explicitly
to read MIDI data for audition.
Session::non_realtime_overwrite is no longer required.
This reverts commit 6fbcf837793ec9a8347fd2d12823b9e56587ffc0
and parts of 2d11667ce3d2ada93c0fb90978bdcc054413c2bb.
|
|
The Auditioner is not part of the session route-list and the
auditioner route's I/O latency is never updated.
Session::process_audition() does not handle pre-roll either,
so it need to be zeroed, otherwise Route::roll skips samples.
This has lead to initial samples being skipped, IFF the
auditioner's output-port had non-zero latency.
Since private port-latencies are usually only set for routes
in the route-list, and _remaining_latency_preroll is reset
at transport-stop, this *usually* worked...
Last but not least, MIDI notes need to be resolved when seeking.
|
|
This fixes a bug introduce in 2d11667ce3. The Auditoner
was accidentally added to the shared_ptr<> referenced RouteList.
|
|
DiskReader::seek() no longer fills MIDI buffers.
MIDI is now read into memory via DR:overwrite_existing_buffers()
There is still some edge-case remaining to be fixed. For
some reasons the synth does not receive initial patch/program
changes when starting auditioning.
|
|
|
|
This reverts commit c5332ddd0092c3a73315923a90c41024c0ad7758.
Apparently this is not needed 4f3a95a1da is sufficient.
|
|
See also
* 4f3a95a1da9
* cfd95340b18
* 61e7f3176bf
|
|
This picks up where cfd95340b1 left off.
The goal is to ensure that the butler has completed all
PostTransportStop related tasks and won't meddle with transport
after exporting has started.
Previously this could happen, because realtime_stop() queues
PostTransportStop and the butler is sommoned after every
export process cycle.
Since 61e7f3176bf the butler keeps calling non_realtime_stop()
every time it is woken up, until TFSM comes around and unsets the
flag in the process callback.
|
|
This reverts 05c77db7739c (revert necessary due to 4637c49838a8)
Since 4637c49838a8 we no longer emit Located() in ::backend_sync_callback().
Therefore we must emit Located() in ::locate() even if we are
synced_to_engine().
Otherwise the playhead is not updated when synced_to_engine() in some
circumstances.
|
|
|
|
|
|
|
|
0.05 seconds per track
Leave debug output in place for now to get some numbers from any testers
|
|
DiskReader::{inc,dec}_no_disk_output()
|
|
"ignore/accept commands" concept
|
|
|
|
loop end
Locating the start of the loop range at transport start does not count as "have looped". This was preventing
pre-roll when starting to loop, which in turn caused data/event loss because the start/end sample ranges
would be incorrect inside process
|
|
|
|
Ardour's playback is aligned to master-out:
"When the playback clock reads 01:00:00:00, the sample corresponding
to 01:00:00:00 is audible at the speaker(s)"
When exporting, and grabbing data from output ports, the signal
is offset by the master-bus physical playback latency. This was
compensated for, but lead to initial silence in the exported file.
New approach is to start capturing export data during pre-roll,
at the time when playback is written to the output buffers.
To also shaves off a common offset to make this work with
realtime export. Effectively this emulates processing with
disconnected master-output port, while still keeping any
latency of effects on the master-bus itself.
Last but not least: jack updates latencies when freewheeling,
(setting HW latency to zero). The callback arrives asynchronously
some time after enabling freewheeling, but after Export
Ports have been configured. Those callbacks are ignored.
|
|
|
|
This means that using the wheel in the GUI (or equivalent) ends its effect at transport stop
|
|
This is in preparation for GUI sensitivity of Loop and Punch actions.
|
|
This also prevents switching between punch-in/out record
and looping without transport-stop.
|
|
|
|
|
|
Session::locate() used TransportFSM::stopped() to determine if realtime stop was required. But this would
return false, since the motion state at that time is WaitingForLocate. So invert the test and use
!TransportFSM::rolling
|
|
management and motion state (partially) into TFSM
|
|
This was a leftover from changes made for Tracks Live, related to
the concept of an auto-return preference. We don't use this anywhere in Ardour
or Mixbus, and the concept should eventually be removed entirely.
|
|
constructor) issue
|
|
|
|
Ardour 5.x slave check was incorrectly ported to A6's TMM:
In Ardour 5 the comparison tested for *not* MTC:
```
if (!dynamic_cast<MTC_Slave*>(_slave)) { ..send MMC.. }
```
Other MMC messages (Record, Locate) are sent unconditionally.
|
|
|
|
|
|
|
|
|