summaryrefslogtreecommitdiff
path: root/libs/ardour/disk_reader.cc
AgeCommit message (Collapse)Author
2019-11-15move DiskReader::inc_no_disk_output() into .cc to allow for easier debuggingPaul Davis
2019-11-06fix unconditional note resolution during DiskReader::realtime_locate()Paul Davis
When looping, we do not want to resolve notes at the end of the loop via ::realtime_locate() - ::get_midi_playback() has already taken care of this. But when not looping, we need this. So, add an argument to tell all interested parties whether the locate is for a loop end or not
2019-11-06fix unconditional note resolution during DiskReader::realtime_locate()Paul Davis
When looping, we do not want to resolve notes at the end of the loop via ::realtime_locate() - ::get_midi_playback() has already taken care of this. But when not looping, we need this. So, add an argument to tell all interested parties whether the locate is for a loop end or not
2019-11-06resolved notes need to use cycle-relative timePaul Davis
2019-11-06be sure to move effective_start while loop-reading MIDIPaul Davis
2019-11-06fix DiskReader::get_midi_playback() when loopingPaul Davis
Although at the Session level we never run "through" the loop end, latency compensation means that that start/end sample values passed to Processor::run() may cross the loop end. Fix how we handle this so that we do not read data from after the end of the loop
2019-11-04avoid use of Port::port_offset() everywhere except Port::flush_buffers() and ↵Paul Davis
Port::get_buffer() Split cycles are run as if they are an entire self-contained cycle, starting at zero and running for "nframes". We adjust the timing and position of data only when retrieving and writing it to Port buffers.
2019-11-03another notable cleanup/simplification of DiskReader's MIDI handlingPaul Davis
Note that we resolve notes from the tracker directly into the output buffer. This happens after an edit causes a buffer overwrite
2019-11-03comment fixPaul Davis
2019-11-03immediate events time reference for zero is the start of the run() cycle, ↵Paul Davis
not absolute sample time
2019-11-02for now, show how long MIDI rendering takesPaul Davis
2019-11-02use playback filter when rendering MIDI; respond to changes in filter by ↵Paul Davis
re-rendering
2019-11-02lovely simplification of DiskReader::get_midi_playback()Paul Davis
This is made possible by knowing that it is never called upon to read across loop boundaries. The session splits the process cycle for the end of the loop
2019-11-02remove unused (empty) APIPaul Davis
2019-11-02remove unused APIPaul Davis
2019-11-02add another conditional to decide if we should merge disk MIDI data into ↵Paul Davis
input MIDI data
2019-11-02remove commented linePaul Davis
2019-11-02helpful variable renamePaul Davis
2019-11-02various adjustments so that a MidiPlaylist gets re-rendered whenever it changes.Paul Davis
This may still be missing a few changes (i.e. they do not cause re-rendering)
2019-11-02fix thinko when dealing with non-MIDI tracksPaul Davis
2019-11-02move ownership of an RT MIDI buffer from DiskIO to MidiPlaylistPaul Davis
2019-11-02alter where note resolution happens when a re-rendering is scheduled for a ↵Paul Davis
MIDI track
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-11-02change MidiPlaylist::dump() into ::render(); change type of initial argumentPaul Davis
2019-11-02remove unused member variablePaul Davis
2019-11-02reimplement RTMidiBuffer using a highly optimized data structurePaul Davis
Reduces load time of Glass MIDI piece with 48k note events by about 35%. Improves data locality. Omits size for all 3 byte or less MIDI events, uses implicit size. No limit on size of sysex. Relies on the fact that the data structure is always filled linearly in time, and never modified.
2019-11-02add a MidiStateTracker to DiskReader and use to handle transport stop note ↵Paul Davis
resolving
2019-11-02introduce new all-in-RAM MIDI datastructure and use it for MIDI playbackPaul Davis
2019-11-01if a complete refill is called for, DiskReader cannot internal seekPaul Davis
2019-11-01if looping, squish DiskReader::playback_sample into loop rangePaul Davis
2019-09-22use internal seek to implement DiskReader::seek() when possible.Paul Davis
This still needs a check that the amount of readable data left in the buffe is adequate.
2019-09-20do not abort in the event that we cannot internal-seek to align with the ↵Paul Davis
playhead. There are no good options here, but treating it like a regular underrun seems as good as anything
2019-09-18Consistent use of abort() /* NOTREACHED */Robin Gareus
This fixes some static analysis warnings: PBD::fatal transmitter needs to be connected to a function that aborts. This is usually the case with GUI
2019-09-17add finite state machine to control/manage transport statePaul Davis
2019-09-17use const int rather than macroPaul Davis
2019-08-03Update libardour GPL boilerplate and (C) from git logRobin Gareus
2019-05-26Fix a -Wmaybe-uninitialized (disk-reader, no audio)Robin Gareus
2019-03-19Fix Playlist refcount when deleting trackRobin Gareus
Both Disk-reader and Disk-writer use the same playlist. ARDOUR::Track::use_playlist() sets it for both Disk-IO processors, so it needs to be released by both on destruction.
2019-03-17Temporary change to make auto-return work with broken transport-logicRobin Gareus
Revert this once transport state machine waits for de-click! This causes audible-clicks on stop, but prevents audible artifacts on LocateRoll with the current transport-control-logic.
2019-03-05Enable de-click in disk-readerRobin Gareus
This breaks auto-return and other post-transport locates until such transport-states wait for de-click before seek().
2019-02-21Add API to check for ongoing de-clickRobin Gareus
2019-02-18Remain silent while a disk-buffer is overwrittenRobin Gareus
This catches a case where a user-operation results in a complete buffer re-fill during playback (e.g. split or move regions while playing)
2019-02-09Fix llabs() ambiguityRobin Gareus
some older systems (e.g. OSX/PPC) fail to compile with error: call of overloaded 'llabs(long long int)' is ambiguous candidates are: long long int llabs(long long int) long long int __gnu_cxx::llabs(long long int)
2019-02-08Fix some disk-buffer threading issuesRobin Gareus
Make _pending_overwrite atomic (butler + process thread). This also addresses a potential seek before override race. Seeking will fill the buffers and by the time overwrite_existing_buffers() is called from there is no space to overwrite anymore.
2019-02-08NO-OP: clarify internal API, prepare for overwrite queueRobin Gareus
2019-02-07Remove disk-reader local MIDI vari-speedRobin Gareus
Vari-speed is now handled by the engine, on port-level
2019-02-07Prefer AudioBuffer reference over raw bufferRobin Gareus
This allows for consistent libardour API usage, in particular Amp.
2019-02-07Prepare dedicated Disk-reader de-click gain-stageRobin Gareus
This allows to specify a shorter fade-duration than default Amp::apply_gain(), also allows to unroll and vectorize the loop
2019-02-06Implement backwards micro-locatesRobin Gareus
2019-02-06Prepare Disk-reader for bi-directional micro-locatesRobin Gareus