summaryrefslogtreecommitdiff
path: root/libs/ardour/track.cc
AgeCommit message (Collapse)Author
2020-04-12Forward disk-reader ConfigurationChanged signalRobin Gareus
2020-03-17remove destructive/tape mode tracksPaul Davis
2020-03-15Fix loading playlists of old sessionsRobin Gareus
Previously when loading Ardour v2, v3-5 sessions, tracks were created with a dummy name "toBeResetFroXML". In v6, Track::init() creates a playlist when the track name is not empty. Later Track::set_state() calls set_name(). When a playlist exists, the playlist's name is set to match the track's name. When loading v6 sessions none of this happens. A previously loaded playlist will be assigned by ID. Older versions identified Playlists by name and by the time the playlist is assigned, there may be ambiguities. With the default (track-name = playlist-name) two playlists with the same name exist: (1) the playlist loaded from the session file (2) the playlist created by Track::init() Playlists are stored in an ordered std::set<shared_ptr<Playlist>>, and name-lookup iterates over the set. When loading an old session after starting Ardour, it is very likely to always lookup the playlist (1), because new, later allocations from (2) are on top of the heap and ordered last. The session seemingly loads correctly, except for lingering, unused empty playlists "toBeResetFroXML" renamed to "Track name" that were never deleted. However when loading an old session from a running instance, ordering is mostly random, and many tracks end up with using the empty playlist (2) instead of the correct playlist (1).
2020-02-19when inside Route::set_state() and calling set_name(), call the virtual ↵Paul Davis
method, rather than Route::set_name() Without this, nothing in Track::set_name() is called, which means that tracks created from templates do not get their name set appropriately
2020-01-30Cont'd work on loading old route templatesRobin Gareus
This builds on top of 51d2bb: * v6 routes templates/states have a version per <Route> * older route-states are assumed to be from ardour-5 Stateful::loading_state_version 3002, unless specified otherwise
2020-01-29Save/Use state-version with route templatesRobin Gareus
Currently using Ardour-5 route templates (state version "3002") with Ardour6 fails. As opposed to session-templates, Route templates were not versioned. This ensures future compatibility (and may allow to interpret unversioned templates as "3002")
2020-01-29Fix MIDI loop capture alignmentRobin Gareus
Loop recording creates a single long source, regions have to be "split" from this source, using "start" as offset. Since MIDI uses absolute timestamps, offsetting this by accumulating buffer_position += (*ci)->samples; like Track::use_captured_audio_sources() does, is not correct. Furthermore, record_enabled() may be off when stopping recording, MIDI needs to be flushed regardless.
2019-12-11Fix loading plugin state from sessionsRobin Gareus
While loading a session XML state, set_state must use `Stateful::loading_state_version`. When later copying processor state, `Stateful::current_state_version` is correct.
2019-12-10revert to single buffer for disk playback, and 5.x-style overwritePaul Davis
Also address issues with MIDI and also atomicity of _pending_overwrite
2019-11-22redesign of declicking and fades around loop boundariesPaul Davis
2019-11-02refactor SessionEvent and DiskIO so that we pass around ↵Paul Davis
boost::shared_ptr<Track> rather than Route (this the raw pointers used inside SessionEvent)
2019-09-25goodbye Profile->...trxPaul Davis
2019-09-17add finite state machine to control/manage transport statePaul Davis
2019-08-11Fix auto capture alignment when bouncing metronomeRobin Gareus
2019-08-03Update libardour GPL boilerplate and (C) from git logRobin Gareus
2019-08-01(Source List) Region List rewrite (libardour part)Ben Loftis
2019-03-19do not create a (throwaway) playlist during track creationPaul Davis
2019-03-19Remove global Session::playlists variable, use getter method (1/2)Robin Gareus
Global variables that can written by anyone are to be avoided. This also simplifies exposing SessionPlaylists as Lua bindings.
2019-02-08NO-OP: clarify internal API, prepare for overwrite queueRobin Gareus
2019-02-06Prepare Disk-reader for bi-directional micro-locatesRobin Gareus
2019-01-19Use correct playlist when loading Ardour5 sessionRobin Gareus
Ardour5 identifies playlists by playlist-name, not by diskstream name.
2018-09-18new transport slave/master implementation, libs/ editionPaul Davis
2018-07-09Prepare API for per disk-reader de-clickRobin Gareus
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.
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-26remove unnecessary callsPaul Davis
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-10-02tracks no longer need to be notified about speed changesPaul Davis
2017-10-01set owner or disk-i/o processorsRobin Gareus
This fixes a race-condition. These plugins may be run w/o being re-configured which sets the ownershi. currently debug msgs use owner()->name()
2017-10-01Fix recording MIDIRobin Gareus
- Fix API call to add region(midi_region) -- set count to "1" - Forward DataRecorded() signal - remove botched merge/rebase" a4a87f56 accidentally brought back code from old-destructive API which was removed in af103cf3 and 08c13007 There is no per track NonLayered record mode anymore, it's session global. - set can_record correctly to not accidentally clear last capture sources for cont'd recording (toggle track's rec-arm)
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 Input-meter special-caseRobin Gareus
Now that disk is no longer topper-most but a processor, the special case is no longer needed.
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-29Convert Diskstream/Playlist from A5 session formatRobin Gareus
2017-09-29Remove unused mechanismRobin Gareus
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-29Remove code related to capture-offset.Robin Gareus
2017-09-23Fix changing playlist (Track is responsible for signal emission)Robin Gareus
2017-09-22NO-OP: whitespaceRobin Gareus
2017-09-22AlignmentChoise is a Track PropertyRobin Gareus
The DiskWriter uses AlignStyle which is set dynamically by the Track and may depend on I/O connections.
2017-09-19attempt to fix roll delay logic by moving it into DiskReader (the only place ↵Paul Davis
it matters)
2017-09-18remove getter for Amp::_apply_automation_gain; reset member to false after ↵Paul Davis
use, and true after ::setup_automation_gain runs successfully
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-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-18Non-layered MIDI recordingPaul Davis
hand-adapted version of d977cc323852c from master This does not merge MIDI data, but trims MIDI regions at rec-stop like non-layered audio-recording does.
2017-09-18remove all code related to "silent roll" concept. some debug output addedPaul Davis
2017-09-18move disk_{writer,reader} into Route to allow for simple, sensible ↵Paul Davis
implementation of DiskIOPoint
2017-09-18don't (re)create disk reader/writer if they already existPaul Davis
2017-09-18change callers of changed Track::use_new_playlist() API and its implementationPaul Davis