summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/route.h
AgeCommit message (Collapse)Author
2018-08-06Fix track rename oddity, don't skip over current name.Robin Gareus
ensure_track_or_route_name() can produce the current name. This fixes the following issue: Create a two audio tracks. Their names are "Audio" and "Audio 1". Try to rename "Audio 1" to "Audio", its name becomes "Audio 2".
2018-07-09move rt-stop to routeRobin Gareus
currently this is only used to resolve midi events for plugins (this is conceptually not correct, note offs should be resolved by the disk-reader only), but it calls into all processors now (incl disk-reader if present), which is handy (e.g. flush delaylins)
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-02-14Auto-monitor == Cue for MIDI tracks.Ben Loftis
2018-02-11SoloSelection: libardour part.Ben Loftis
2017-10-31Fix set_loop() return value (amend 00a4ad)Robin Gareus
2017-10-31Move Loop Location to ProcessorsRobin Gareus
The processors will becomes responsible to know about loop-positions and map latency-compensated start_sample, end_sample into the loop-range as needed.
2017-10-31Migrate to Polarity-inversion processor & fix proc positionsRobin Gareus
* invert polarity after disk i/o proc or return * fix position of export-proc (after polarity) * fix input-meter (before disk-writer or after return)
2017-10-19US2400: map knobs for mixbus strips, when selected.Ben Loftis
2017-10-05US2400: send_pan_azimuth lookup function (currently mb-only)Ben Loftis
2017-10-04Clean up State API:Robin Gareus
* Processor implement get_state(), classes derived from Processor implement protected ::state() -- as documented in processor.h * likewise for Route, Track: make ::state() a protected interface * removal of "full_state", use explicit "template_save" * use RAII/Unwind to skip saving automation-state
2017-09-30Immediate-event/out-of-band injection update & tweak clearing buffersRobin Gareus
Immediate events are used for MIDI-Panic and to inject GUI generated events e.g. patch-changes, note-events from the track-header (scroomer-keyboard) and patch-change audition. Current behavior: - snapshot copy immediate events from ringbuffer into a buffer at the beginning of each the cycle. - Inject immediate events into input-buffer directly after reading the input - process "normally" - pass immediate event-buffer to disk-writer, so it can skip them (don't write immediate events to disk) - if the Route is not monitoring input: clear buffer before disk-reader and re-inject (original) immediate events after the disk-reader - immediate events process normally and are also sent to outputs.
2017-09-30First part of consolidating ::roll(), ::no_roll()Robin Gareus
This moves common code (get and fill buffers) into ::passthru() and renames ::passthru() to ::run_route(). passthru_silence() is no longer used (it was only needed A5 style Track::no_roll_unlocked for no-roll + disk-monitoring)
2017-09-30remove unused Route::_silentRobin Gareus
2017-09-30Towards fixing no_roll()Robin Gareus
Currently ::roll() may actually be a ::no_roll() under some circumstances. This can also happen during count-in: transport_stopped () == transport_rolling() and during latency-preroll: Global session-transport speed != 0, some tracks already roll, read data from disk and feed latent plugins. but other non-latent tracks or busses don't roll and still have to behave like the switch from no_roll() to roll() has not yet happened. This changes the game WRT to monitoring as well, previously, Route:roll() called Route::no_roll_unlocked () for conditions outlined above. Now Track::no_roll_unlocked is called and in some cases wrongly clears the buffers before the signal hits the disk-writer. (more work is needed related to 61f8e53b) On the upside this also fixes an issue with MidiTrack::no_roll not keeping a lock while pushing data into the step-edit-ringbuffer. This is also a step towards consolidating all entry points: ::roll(), ::no_roll(), ::silent_roll() in the Route class.
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-29Prepare removal of initial_delayRobin Gareus
2017-09-29clean up route header, NO-OP (except variable re-order)Robin Gareus
2017-09-29NO-OP: WhitespaceRobin Gareus
2017-09-23Consolidate check for internal/non-removable processorsRobin Gareus
2017-09-19attempt to fix roll delay logic by moving it into DiskReader (the only place ↵Paul Davis
it matters)
2017-09-18consolidate roll methods into Route::roll()Paul Davis
We want Track to shrink, and logic consolidation is always good. Route already knew about disk_reader and disk_writer, now it knows about _monitoring_control too
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-18move disk_{writer,reader} into Route to allow for simple, sensible ↵Paul Davis
implementation of DiskIOPoint
2017-09-18mechanism to allow Track (or other Route-derived type) to add its own ↵Paul Davis
processors at the right time
2017-09-18initial (incomplete) framework for DiskIOPoint manipulationPaul Davis
2017-09-18fix up error in manual rebase correctionPaul Davis
2017-09-18the return of MIDI recording, plus refactor to move post-capture playlist ↵Paul Davis
manipulations into Track
2017-09-18get diskreader working, and remove per-track varispeed API and mechanismPaul 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-09Prepare for singleton patch-selector per midi-track UI (mixer, editor,..)Robin Gareus
2017-08-20Let user add a route template description on saving route templatesJohannes Mueller
2017-07-22NO-OP: consistent [internal] API name for AutomatablesRobin Gareus
2017-06-22Update Slavable APIRobin Gareus
Do not use AutomationType to identify parameters, use complete Evoral::Parameter and Automatable. For "batch connections", a Slavables needs to implement an API to return the relevant controls. This is only a first step towards a more generic Master/Slave framework.
2017-06-22NO-OP: whitespaceRobin Gareus
2017-05-14Sanitize "well-known" ctrl APIRobin Gareus
2017-05-12MCP: Mixbus32C: Restore missing filter controls to the Dyn page.Ben Loftis
2017-05-10Selection::get_stripables() needs to recurse into an Automatable's child ↵Paul Davis
Automatables when looking for for an Automation Control It also needs renaming (to come)
2017-05-05libardour now has CoreSelection object to manage selection status of ↵Paul Davis
Stripables and AutomationControls
2017-04-12Properly expose "well known" comp_redux output.Robin Gareus
2017-01-21Instrument insert options:Robin Gareus
* allow to directly fan-out when adding a multi-channel instrument * Mixbus: move multi-channel instruments after Comp & EQ.
2016-10-10Allow to get a route reference from SessionObject*Robin Gareus
The motivation is to allow a Processor (here Lua) to get a pointer to the owning Route without resorting to iterative lookup.
2016-07-21fix issue with solo-in-placePaul Davis
Monitor outs cannot be muted by other soloing. Duh.
2016-07-14Consolidate delivery buffer flushing of all route typesJulien "_FrnchFrgg_" RIVAUD
Route::no_roll(), Route::roll(), Track::no_roll(), AudioTrack::roll() and MidiTrack::roll() all had the exact same loop for flushing buffers of their Delivery processors. That was a lot of replicated code that had to be kept synchronised by hand. Put that code into a protected method Route::flush_processor_buffers_locked() which is called instead.
2016-07-09move latency-recompute into dedicated thread.Robin Gareus
this fixes an issue with jack1 and jack_latency_recompute() since must not send a server request from inside the server callback.
2016-06-08move gui_changed() signal from Route to StripablePaul Davis
2016-05-31update lua bindings for API changesRobin Gareus
luaBridge implicit inheritance uses a single direct parent (other parents object need casts). This motivates Route -> Stripable -> SessionObject
2016-05-31add generic ::slaved() method to RoutePaul Davis
2016-05-31first vaguely working version using PresentationInfoPaul Davis
remote control ID and "order keys" have been removed.