Commit Graph

33753 Commits

Author SHA1 Message Date
Paul Davis 7edcda4fc1 temporal: logic fixes for several tempo map modification methods 2021-11-17 12:16:39 -07:00
Paul Davis fd5594f831 use Editor::reassociate_metric_markers() before performing edits on tempo map
The objects referenced by markers point to the copy of the map held by the per-thread ptr. But
the edits must be done on a writable copy of the map. ::reassociate_metric_markers() fixes
the references to use the writable copy, so that when we pass references to the objects in the map
to the writable copy, it will find them and modify them (rather then ones in the previous
generation of the tempo map)
2021-11-17 12:16:39 -07:00
Paul Davis d61fc1e871 triggerbox: add passthru property to control input passthrough (monitoring) 2021-11-17 12:16:39 -07:00
Paul Davis 1fb8779361 delete/cancel triggerbox worker thread at exit 2021-11-17 12:16:39 -07:00
Paul Davis 18e851cd73 catch too-early use of PublicEditor::instance() 2021-11-17 12:16:39 -07:00
Paul Davis 710c5b9b78 do not use PublicEditor::instance() in MainClock, since these obejcts can exist before the editor
The AudioEngine on the other hand is created in the global libardour init method, so use that instead
2021-11-17 12:16:39 -07:00
Paul Davis 1532ebb38f temporal: truncate ::to_string() method for timeline types to ::str() for easier use in debugger 2021-11-17 12:16:38 -07:00
Paul Davis 4fe1fec54e when setting a default audio region envelope, coerce the endpoint to AudioTime
Comment in code explains more
2021-11-17 12:16:38 -07:00
Paul Davis 7a12458244 temporal: improve implementation of TempoMap::meter_at() and more templating
Needed to move template defns around to ensure that required instances are defined
2021-11-17 12:16:38 -07:00
Paul Davis 4128088b70 temporal: TempoMap::tempo_at() ... templates FTW 2021-11-17 12:16:38 -07:00
Paul Davis fb2281129a temporal: add clarifying comments to TempoMap::remove_*()
These comments should correct an impression left in the commit message for
6e9e28343bc3695d that there may be some sort of problem with synchronization
of TempoMap changes. The actual problem is that TempoMap edits are done using
RCU, so the modifications are performaned using a copy of the map, but with
map elements taken from the pre-copy version.
2021-11-17 12:16:38 -07:00
Paul Davis b67965f499 temporal: add the entire _points list to output of TempoMap::dump() 2021-11-17 12:16:38 -07:00
Paul Davis f0cd3b5c0c editor: when the tempo map changes, update the per-thread pointer
TempoMap::use() merely returns the current per-thread tempo map
pointer; if a change is signalled, we should force an update
of the per-thread ptr via TempoMap::fetch()
2021-11-17 12:16:38 -07:00
Paul Davis 8a59f3fe8e temporal: fix issue with removal of tempo, meter and bartime points
The correct algorithm is to traverse the type-specific list of points,
find the point (if any) whose time matches that of the argument (because
we do not allow multiple points of the same type at the same time), and
then use that discovered point from the _points list.

This approach is required because the actual argument may no longer be
in the tempo map (due to a change made by another thread). The lack of
sync, however, needs investigation.
2021-11-17 12:16:38 -07:00
Paul Davis 4d5cf43789 triggerbox: use correct API to track tempo 2021-11-17 12:16:38 -07:00
Paul Davis dd4e495d90 audioclock: use correct call for "right now" tempo display 2021-11-17 12:16:38 -07:00
Paul Davis 2735022357 audio_clock: fix uninitalized variable 2021-11-17 12:16:38 -07:00
Paul Davis 5b5ca546e0 temporal: fix incorrect implementation of TempoMap::tempo_map()
std::lower_bound() is not appropriate here. We need to find the first
TempoPoint after the given time, then return the one before that.
2021-11-17 12:16:38 -07:00
Paul Davis e7e44351cc temporal: move implementation of quarters_per_minute_at() into .cc file 2021-11-17 12:16:38 -07:00
Paul Davis a0e134e1b3 temporal: update comment on a method that suggest not using it; provide TempoMap::quarters_per_minute_at () 2021-11-17 12:16:38 -07:00
Paul Davis 4f3bf37680 temporal: implement a faster method to lookup TempoPoint
There is no reason to build a TempoMetric if you only need the Tempo
2021-11-17 12:16:38 -07:00
Paul Davis 5105083394 triggerbox: first pass at using "realtime" rubberband rather than pre-stretch 2021-11-17 12:16:38 -07:00
Robin Gareus e1b2a24221
Fix error message (include plugin ID) 2021-11-17 18:46:29 +01:00
Robin Gareus 83225886a1
Fix gcc4 builds ('EEXIST' was not declared in this scope) 2021-11-15 19:12:00 +01:00
Paul Davis 8c632c8446 temporal: allow negative timecnt_t to be used when constructing a timepos_t
Negative positions are legal and should be handled by higher level logic
2021-11-14 15:22:53 -07:00
Robin Gareus d9b9f4f588
Waveform: work around empty peakfile edge-case
(gdb) p peak.max
$5 = -1
(gdb) p peak.min
$6 = 1
2021-11-14 23:11:19 +01:00
Robin Gareus 8e89325bee
Waveform: scope-like smooth waveform
* Draw antialised waveform if waveform is monotonic
* Fix center-line position (span at most height - 1),
* Remove invalid "side-lines" that were previously
  drawn around spikes.
* Do not linearly center min/max when drawing log-scale
* Fix offset of lower outline and clip indicators
2021-11-14 22:28:55 +01:00
Robin Gareus 70a07eec48
Waveview: properly draw 1px outline 2021-11-14 22:28:55 +01:00
Ben Loftis 3f69e8e329 MIDI Import: implement missing SMFSource::update_length
Provides intended behavior: imported midi region length should be rounded to the nearest beat

ToDo: add options to round to Bar/Beat/None ?
2021-11-14 14:25:31 -06:00
Ben Loftis f6adf9c897 MIDI Import: gtk part 2021-11-14 08:21:00 -06:00
Ben Loftis 58033262ae MIDI Import: Support for separating the channels of a Type1 midifile track(s) 2021-11-13 16:23:15 -06:00
Ben Loftis 0733b2d9e2 SMF: Often files don't have Track+Instr names. Make something up to avoid file collisions. 2021-11-13 15:54:11 -06:00
Ben Loftis 35312dc85c SMF: API change: report format (0,1 or2) and total channels used 2021-11-13 15:54:11 -06:00
Ben Loftis 4c472ca1c5 TriggerSlot: Remove Queued menu-item (for now) 2021-11-13 15:54:11 -06:00
Robin Gareus 4eeb5afa92
Fix false positive "missing AU Blacklist" message
See d6e4e0fb35 for an explanation
2021-11-12 23:34:07 +01:00
Paul Davis 85fc3d5629 add missing file 2021-11-10 21:16:27 -07:00
Paul Davis 4f58a92c6d show trigger/slot selection 2021-11-10 17:51:04 -07:00
Paul Davis a9949f20e6 basic architecture for Trigger selection
This is all done in the GUI, using GUI objects. THe primary goal
here is to allow actions to be applied to selected triggers, so
there's no real need for a trigger aspect to libardour (core)
selection.
2021-11-10 16:37:15 -07:00
Paul Davis 91a28b78c4 modify and extend both Session and TriggerBox API to allow better transport control
This allows a stop transport request to first stop all active triggers and then stop the transport
2021-11-10 15:55:58 -07:00
Paul Davis 4b5fbeb455 remove unused variable 2021-11-10 11:55:32 -07:00
Paul Davis 0d96753364 remove unused variable 2021-11-10 11:55:20 -07:00
Paul Davis c4b189336e triggerbox: threaded ::set_region() implementation 2021-11-10 08:45:38 -07:00
Paul Davis 431b7c0d4e triggerbox: more work on ringbuffer request queue for trigger thread 2021-11-09 22:36:51 -07:00
Paul Davis 38bf55a1fd triggerbox: basic skeleton for an i/o and stretch thread 2021-11-09 21:47:15 -07:00
Paul Davis 7e80111d92 Canvas: Fix notification to parent of show/hide status
This was changed in fc9840f2a9 to hard code a "false" argument describing
whether or not the child bbox had changed. This causes the parent to not
recompute its own bounding box when a child is shown/hidden, which is
incorrect. We now force it to true, which may be overkill for some purposes,
but at worst will just force an unnecessary bbox re-computation and nothing
more.
2021-11-09 08:49:21 -07:00
Paul Davis 605daf23f2 add default bindings for note shortening 2021-11-06 10:21:31 -06:00
Paul Davis 8cfdd0ca5b add actions to provide access to note-shortening 2021-11-06 09:49:39 -06:00
Paul Davis 7fca55eeb5 Fix placement of drawn MIDI notes.
Important logic from 6.9 was either missing or incorrectly implemented. New
version is much simpler - we just use the RoundDownMaybe mode of round_to_bbt()
to ensure that the note start is always within the current grid even if the
mouse is more than halfway "through" it.
2021-11-04 18:27:02 -06:00
Paul Davis 2d9eb6ec81 Fix error in drawing length of ghost MIDI notes in note drawing mode 2021-11-04 18:25:45 -06:00
Paul Davis 859d43855e triggerbox: functional handling of MIDI region editing -> trigger re-render/reload 2021-11-04 14:00:16 -06:00