summaryrefslogtreecommitdiff
path: root/libs/ardour/session.cc
AgeCommit message (Collapse)Author
2018-09-18new transport slave/master implementation, libs/ editionPaul Davis
2018-08-02Add method to conveniently retrieve a sorted routelistRobin Gareus
2018-07-09Remove unused AutoLoopDeclick, PendingLoopDeclickRobin Gareus
The flags were set, but not used. They also won't be needed anymore.
2018-07-09Remove global declick APIRobin Gareus
De-click will be per disk-reader, latency compensated and buffer-size independent. Cue-monitoring should not be affected by de-click.
2018-06-28when creating a route from a template, use correct call to setup XML state ↵Paul Davis
so that name/ports are unique
2018-03-19Lua: Lock bindings into memory for rt-scriptsRobin Gareus
Empirically this decreases gc-spike duration (worst-case) by a factor of two and speeds up the average gc-run by a factor of over 4 (depending on the amount of memory used by the plugin).
2017-11-29Tweak Lua GCRobin Gareus
2017-11-04Optimize Delaylines: block-process (not one sample at a time)Robin Gareus
This also tweaks fade behavior when the latency changes to prefer a x-fade when possible. This new variant does not support concurrent re-allocation and execution. Hence the auto-connect thread needs to take a lock before updating latencies (actually there's no need for an explicit update with built-in backends, so this case remains to be updated further)
2017-10-30Parallel execution of cycle-start/endRobin Gareus
2017-10-29Move vari-speed into backend (resample ports)Robin Gareus
Previously Ardour used a /local/ per track vari-speed mechanism. Now that the disk-reader is a latency-compensated processor, the speed of each disk-reader would need to be maintained locally, offset by each disk-reader's output latency. Furthermore each disk-reader may produce a different number of samples, depending on its global alignment. This commit introduces port-data resampling directly at the engine-level: Up/down-sample all input ports at the beginning, and down/up-sample output port-data using the inverse ratio at the end of the session's process cycle. The session itself is unaware of the speed-change, and only needs to handle transport speeds {-1, 0, +1}. This also allows for aligned cue-monitoring and vari-speed recording, and also pitch-shifts synthesized MIDI along.
2017-09-30Align punch in/out recording with latency-compensationRobin Gareus
2017-09-29amend ccedb2d44Robin Gareus
2017-09-29Remove unused punch+preroll APIRobin Gareus
This API was not used, also superseded by record w/preroll.
2017-09-29Aux-Send Latency compensation, part 2 & code-consolidationRobin Gareus
2017-09-29Properly aligned export (Stem + Session)Robin Gareus
Delay ports being exported by their playback latency.
2017-09-29Ongoing work on latency compensationRobin Gareus
The general goal is to align transport-sample to be the audible frame and use that as "anchor" for all processing. transport_sample cannot become negative (00:00:00:00 is the first audible frame). Internally transport pre-rolls (read-ahead) before the transport starts to move. This allows inputs and disk to prefill the pipeline. When starting to roll, the session counts down a global "remaning preroll" counter, which is the worst-latency from in-to-out. Each route in turn will start processing at its own output-latency. Route::process_output_buffers() - which does the actual processing incl disk i/o - begins by offsetting the "current sample" by the route's process-latency and decrements the offset for each latent processor. At the end of the function the output will be aligned and match transport-sample - downstream-playback-latency (if any). PS. This commit is a first step only: transport looping & vari-speed have not yet been implemented/updated.
2017-09-29No more disk-reader roll-delayRobin Gareus
It was not working in sdio/6.0-pre anyway and with upcoming changes to latency compensation the concept of per disk[stream/reader] will go away.
2017-09-23Fix order of [initial] latency-computationRobin Gareus
Session::post_playback_latency() sets the actual route latency, so that playback latency notifications need to come after capture- latency (backends follow the same rule: capture first). NB. Session::initialize_latencies() was already using the correct order
2017-09-23NO-OP: whitespaceRobin Gareus
2017-09-21Fix crash when unloading a partially loaded session.Robin Gareus
2017-09-19Various updates and fixes for Latency CompensationRobin Gareus
* centralize signal_latency_at_***_position to processors * update initial-delay/roll-delay when processor order changes * consolidate signal-latency calculation: use the same method for processor-changes and session's post_playback_latency. * include relative output-delay in roll-delay * fix capture processor position & optimize stem-export latency (roll-delay fixes pending Route:roll() update)
2017-09-18globally change all use of "frame" to refer to audio into "sample".Paul Davis
Generated by tools/f2s. Some hand-editing will be required in a few places to fix up comments related to timecode and video in order to keep the legible
2017-09-18reinstate "restart seek" behaviour but use a new Session::_seek_counter ↵Paul Davis
member variable for this
2017-09-18delete slave during Session::destroyPaul Davis
2017-09-18remove Track::hidden(); replace with Stripable::is_private_route()Paul Davis
2017-09-18when DiskReader checks to see if a locate is in progress, it must be atomic ↵Paul Davis
with respect to all DiskReaders
2017-09-18remove InputConfigurationChange from session events, since it is a no-op in ↵Paul Davis
this development branch
2017-09-18update disk writer input latency at transport stopPaul Davis
2017-09-18force auditioner to emit GoingAway at the right time, so that its disk ↵Paul Davis
reader/writer objects drop their reference
2017-09-18nothing to do anymore at the Track level when input config changesPaul Davis
2017-09-18random changes required to get an audio track created and transport functionalPaul Davis
2017-09-18remove Session::track_by_diskstream_id()Paul Davis
2017-09-18mega-commit to save state of first "it compilesand links" state for ↵Paul Davis
separated disk i/o changes. THIS WILL NOT RUN. THIS REQUIRES MANY CHANGES
2017-09-07Fix bumping .mid file name (snapshots & playlist copy)Robin Gareus
When forking regions, copying playlists or saving snapshots we do not have a reference to the track and cannot use the track's name as basis for the new filename like Editor::fork_region() does. A cloned midi region's name is based on the original region name. This prevents endless addition "name-1-1-1-1-1-1-1-1.mid", adding to the region's basename.
2017-08-19Lua may call C++ functions with throw. Catch themRobin Gareus
2017-08-17Catch some exceptions during session loading.Robin Gareus
2017-08-16The Auditioner is not in the Session's RouteListRobin Gareus
Remove various checks, add assert() for now (perhaps some old sessions?) This fixes an off-by one issue when adding tracks (presentation info order in add_routes_inner)
2017-08-16Separate "add master bus" (and add Lua bindings)Robin Gareus
This is in preparation for "advanced session setup" allow a SessionSetup Lua script to create the master-bus.
2017-08-10Save sample-rate for sessions created from templatesRobin Gareus
2017-08-10Centralize Lua sandboxingRobin Gareus
2017-08-03improve 1a288ddd, destroy IO after disconnecting from signals.Robin Gareus
This does not completely fix the race-condition. The GUI (e.g. connection-manager) may still hold a shared-ptr reference.
2017-08-01Fix some more crashes at session-closeRobin Gareus
PortDrop unregisters backend ports, the backend will return a NULL buffer-pointer, but the I/O object still exists (Metronome, LTC) AudioBuffer::_data == 0 #0 msvcrt!memset () from C:\Windows\System32\msvcrt.dll #1 ARDOUR::AudioBuffer::silence (this=0x2c410710, len=256, offset=0) at ../libs/ardour/audio_buffer.cc:88 #2 ARDOUR::AudioPort::cycle_end (this=0x34918730, nframes=256) at ../libs/ardour/audio_port.cc:66 #3 ARDOUR::PortManager::cycle_end (this=this@entry=0x23342770, nframes=nframes@entry=256) [process callback w/o session]
2017-07-31Some session cleanup fixes (delete slave, take lock for lua)Robin Gareus
2017-07-28Delete CoreSelection at session closeRobin Gareus
2017-07-20Allow adding tracks w/o running backendRobin Gareus
2017-06-27Distinguish error-messages.Robin Gareus
The vast majority of errors reported by users as "Cannot configure audio/midi engine with session parameters" have nothing to do with engine-parameters.
2017-06-25Extend API to allow calling new_midi_source_path() with source_lock heldRobin Gareus
This is in preparation for cloning MIDI-sources during snapshot save.
2017-06-22Remove LocaleGuard from Session::immediately_post_engine methodTim Mayberry
I think this was only to protect the float <=> string conversion in Session::setup_click_state related to click gain which is now using PBD::to_string/string_to and so no longer necessary.
2017-06-17Add Lua bindings to query all stripablesRobin Gareus
2017-06-17Fix stripable order for new strips & master-orderRobin Gareus