Age | Commit message (Collapse) | Author | |
---|---|---|---|
2019-11-15 | move DiskReader::inc_no_disk_output() into .cc to allow for easier debugging | Paul Davis | |
2019-11-06 | fix 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-06 | fix 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-06 | resolved notes need to use cycle-relative time | Paul Davis | |
2019-11-06 | be sure to move effective_start while loop-reading MIDI | Paul Davis | |
2019-11-06 | fix DiskReader::get_midi_playback() when looping | Paul 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-04 | avoid 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-03 | another notable cleanup/simplification of DiskReader's MIDI handling | Paul 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-03 | comment fix | Paul Davis | |
2019-11-03 | immediate events time reference for zero is the start of the run() cycle, ↵ | Paul Davis | |
not absolute sample time | |||
2019-11-02 | for now, show how long MIDI rendering takes | Paul Davis | |
2019-11-02 | use playback filter when rendering MIDI; respond to changes in filter by ↵ | Paul Davis | |
re-rendering | |||
2019-11-02 | lovely 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-02 | remove unused (empty) API | Paul Davis | |
2019-11-02 | remove unused API | Paul Davis | |
2019-11-02 | add another conditional to decide if we should merge disk MIDI data into ↵ | Paul Davis | |
input MIDI data | |||
2019-11-02 | remove commented line | Paul Davis | |
2019-11-02 | helpful variable rename | Paul Davis | |
2019-11-02 | various 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-02 | fix thinko when dealing with non-MIDI tracks | Paul Davis | |
2019-11-02 | move ownership of an RT MIDI buffer from DiskIO to MidiPlaylist | Paul Davis | |
2019-11-02 | alter where note resolution happens when a re-rendering is scheduled for a ↵ | Paul Davis | |
MIDI track | |||
2019-11-02 | refactor 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-02 | change MidiPlaylist::dump() into ::render(); change type of initial argument | Paul Davis | |
2019-11-02 | remove unused member variable | Paul Davis | |
2019-11-02 | reimplement RTMidiBuffer using a highly optimized data structure | Paul 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-02 | add a MidiStateTracker to DiskReader and use to handle transport stop note ↵ | Paul Davis | |
resolving | |||
2019-11-02 | introduce new all-in-RAM MIDI datastructure and use it for MIDI playback | Paul Davis | |
2019-11-01 | if a complete refill is called for, DiskReader cannot internal seek | Paul Davis | |
2019-11-01 | if looping, squish DiskReader::playback_sample into loop range | Paul Davis | |
2019-09-22 | use 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-20 | do 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-18 | Consistent 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-17 | add finite state machine to control/manage transport state | Paul Davis | |
2019-09-17 | use const int rather than macro | Paul Davis | |
2019-08-03 | Update libardour GPL boilerplate and (C) from git log | Robin Gareus | |
2019-05-26 | Fix a -Wmaybe-uninitialized (disk-reader, no audio) | Robin Gareus | |
2019-03-19 | Fix Playlist refcount when deleting track | Robin 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-17 | Temporary change to make auto-return work with broken transport-logic | Robin 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-05 | Enable de-click in disk-reader | Robin Gareus | |
This breaks auto-return and other post-transport locates until such transport-states wait for de-click before seek(). | |||
2019-02-21 | Add API to check for ongoing de-click | Robin Gareus | |
2019-02-18 | Remain silent while a disk-buffer is overwritten | Robin 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-09 | Fix llabs() ambiguity | Robin 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-08 | Fix some disk-buffer threading issues | Robin 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-08 | NO-OP: clarify internal API, prepare for overwrite queue | Robin Gareus | |
2019-02-07 | Remove disk-reader local MIDI vari-speed | Robin Gareus | |
Vari-speed is now handled by the engine, on port-level | |||
2019-02-07 | Prefer AudioBuffer reference over raw buffer | Robin Gareus | |
This allows for consistent libardour API usage, in particular Amp. | |||
2019-02-07 | Prepare dedicated Disk-reader de-click gain-stage | Robin Gareus | |
This allows to specify a shorter fade-duration than default Amp::apply_gain(), also allows to unroll and vectorize the loop | |||
2019-02-06 | Implement backwards micro-locates | Robin Gareus | |
2019-02-06 | Prepare Disk-reader for bi-directional micro-locates | Robin Gareus | |