13
0
Commit Graph

379 Commits

Author SHA1 Message Date
1035f9bd62 libtemporal: fix crash caused by thinko 2021-08-13 12:51:34 -06:00
388fa1b894 libtemporal: when removing tempos/meters/musictime points, remove them from TempoMap::_points also 2021-08-13 12:51:34 -06:00
982ccec7ab libtemporal: when adding tempos/meters/musictime points, add them to TempoMap::_points also 2021-08-13 12:51:34 -06:00
b43eca15b0 Revert "libtemporal: the TempoMap::_points list serves no purpose, so remove it"
This reverts commit edc93fc62b6a36949b3cc37aee333904bc6b97f0.
2021-08-13 12:51:34 -06:00
d6d0eb0d9e libtemporal: MusicTimePoint now IS-A Point,Tempo and Meter, all at once 2021-08-13 12:51:34 -06:00
cc0d065443 libtemporal: preparations to solve upcoming diamond inheritance problem 2021-08-13 12:51:34 -06:00
4e6c06bc95 libtemporal: add maybe-not-required operator>> for timeline types 2021-08-13 12:51:34 -06:00
ce82efafcf libtemporal: slightly improve output from conversion statistics 2021-08-13 12:51:34 -06:00
ffc9ab66b5 libtemporal: remove TempoMap::metric_at_locked() methods
There is no lock anymore, all modifications are done via RCU
2021-08-13 12:51:33 -06:00
c9d3381935 libtemporal: increase DEBUG_TRACE utility for ::get_grid() and related matters 2021-08-13 12:51:33 -06:00
bd1b6dcda3 libtemporal: start making tempo map work with non-monotonic BBT "bar times" present 2021-08-13 12:51:33 -06:00
c8175b7c49 libtemporal: add new constructors for MusicTimePoint and MeterPoint 2021-08-13 12:51:33 -06:00
f86395688e libtemporal: Beats::round_to_subdivision() was incorectly folding the "beats" part of the value back into the answer.
The "beats" value is already implicit in the "ticks" we actually do the math with
2021-08-13 12:51:33 -06:00
97a3469972 use new Tempo API in two places where Tempo is explicitly constructed 2021-08-13 12:51:33 -06:00
b8a7de43b6 libtemporal: change Tempo API to ensure that the correct construtor is called
This could be probably be improved with an even more distinct ramped/non-ramped API
2021-08-13 12:51:33 -06:00
c32de2355e extra DEBUG_TRACE statement in tempo map grid computation 2021-08-13 12:51:33 -06:00
25375ee6f4 add timepos_t::set_time_domain() to potentially change time domains 2021-08-13 12:51:33 -06:00
eccfc1db10 libtemporal: fix grid generation if we pass additional markers before reaching the end 2021-08-13 12:51:32 -06:00
3017cd0c1f libtemporal: remove unnecessary debug output 2021-08-13 12:51:32 -06:00
a9bf1cff81 libtemporal: add and use TempoMap::superclocks_per_grid_at() to return superclock duration of a measure/bar division. This corrects the results of ::get_grid() 2021-08-13 12:51:32 -06:00
7f19f13ea9 libtemporal: superclocks_per_bar/grid() do not need a sample rate argument, so remove it 2021-08-13 12:51:32 -06:00
e187752771 libtemporal: use DEBUG::Grid inside TempoMap::get_grid() for slightly easier debugging 2021-08-13 12:51:32 -06:00
8f147f273a add new debug bit for Temporal grid stuff 2021-08-13 12:51:32 -06:00
7ec5af0b60 libtemporal: fix/improve TempoMap::move_meter() for audio-time case 2021-08-13 12:51:32 -06:00
84f53e3dc9 libtemporal: return value from function 2021-08-13 12:51:32 -06:00
fbb8a562fd libtemporal: fix implementation of TempoMetric::bbt_at() to deal with cases where the beats value is not in quarter notes e.g. 7/8 time 2021-08-13 12:51:32 -06:00
68f6bff258 libtemporal: improve implementation/accuracy of Meter::round_to_bar() 2021-08-13 12:51:32 -06:00
be0a68c610 libtemporal: the TempoMap::_points list serves no purpose, so remove it 2021-08-13 12:51:32 -06:00
261c46e0f7 libtemporal: fix meter/tempo API so that we always put a heap-allocated object in the tempos/meters lists 2021-08-13 12:51:32 -06:00
9a2ec93a74 libtemporal: fix bug with placement of new MeterPoint 2021-08-13 12:51:32 -06:00
8737603d93 libtemporal: add abort_update() API to header 2021-08-13 12:51:32 -06:00
d5bfbe1cf4 libtemporal: provide API to abort TempoMap RCU update step 2021-08-13 12:51:32 -06:00
2c80aab912 libtemporal: do not emit MapChanged from methods that change TempoMap, only when we use RCU to switch ptrs 2021-08-13 12:51:32 -06:00
37399f7d50 libtemporal: move TempoMap::update() into .cc, add debug output and emit relevant signal at end 2021-08-13 12:51:32 -06:00
6a9330b2b0 libtemporal: fix TempoMap::fetch_writable() so that it actually does what its name describes 2021-08-13 12:51:32 -06:00
364fffd458 temporal: TempoMap::Changed is now a static member named TempoMap::MapChanged 2021-08-13 12:51:32 -06:00
657350455e temporal: implement copy operator and operator= for TempoMap 2021-08-13 12:51:32 -06:00
146b432c51 temporal: extend debug output 2021-08-13 12:51:32 -06:00
4b52e1bf23 temporal: slightly reduce overflow risk (see comment) 2021-08-13 12:51:32 -06:00
279d1aa5dc temporal: catch a special case when converting between superclock and beats 2021-08-13 12:51:32 -06:00
016aada4df libtemporal: fix/improve/correct parsing of timecnt_t from string 2021-08-13 12:51:32 -06:00
d165c492af temporal: fix/simplify/improve parsing of time values from strings 2021-08-13 12:51:32 -06:00
e590598dcf libtemporal: move DEBUG::Beats into correct location 2021-08-13 12:51:32 -06:00
f015c08dd9 libtemporal: move Beats operator<< and operator>> to .cc and add exceptions for input 2021-08-13 12:51:32 -06:00
78233b343f libtemporal: add operator<<() for ratio_t 2021-08-13 12:51:32 -06:00
209908f700 libtemporal: improve/fix implementation of timepos_t::operator+=(timepos_t) 2021-08-13 12:51:32 -06:00
9438295607 libtemporal: fix implementation of timecnt_t::operator+ (timecnt_t) 2021-08-13 12:51:32 -06:00
13f4ee2c1e temporal: remove unnecessary TempoMap::dump_locked() method 2021-08-13 12:51:32 -06:00
47aa232f60 temporal: fix up creating/resetting tempo map state via XML 2021-08-13 12:51:32 -06:00
fa67e07d87 temporal: remove debug output 2021-08-13 12:51:32 -06:00
1e9e02e42f temporal: fix setting tempos and meters from XML state 2021-08-13 12:51:32 -06:00
3eac6ac7dc Temporal: remove last (?) double-based method 2021-08-13 12:51:32 -06:00
3e8f4d80fb remove (almost) all floating point operations from Beats, add DoubleableBeats
The latter is a "wrapper" around Beats that provides ::to_double() for those times when we
absolutely need a floating point representation
2021-08-13 12:51:32 -06:00
80986b9445 libtemporal: add (commented) debug output for timepos_t::distance() methods 2021-08-13 12:51:31 -06:00
6fe4394c54 fix parameter name in comment 2021-08-13 12:51:31 -06:00
8c22ade428 libtemporal: fix Beats::round_to_subdivision() 2021-08-13 12:51:31 -06:00
0fa56402be move DEBUG::SnapBBT into libtemporal 2021-08-13 12:51:31 -06:00
df0ac42f54 Temporal: cleanup for explicit Beats::operator bool() 2021-08-13 12:51:31 -06:00
05740e7069 Temporal: mark Beats::operator bool() as explicit, to avoid unintended/accidental use when implicitly casting to int/float types 2021-08-13 12:51:31 -06:00
5e0cf747bb Temporal: removed unused std::numeric_limits<> definitions for timeline types
There can be no single ::max() or ::min() value for these types because the time domain matters. With a given
tempo map, a certain beat value represent a time before or after the maximum possible audio domain value
2021-08-13 12:51:31 -06:00
de3eb54958 Temporal: in an update to the previous commit, actually remove timepos_t::compute_ticks() rather than claim to implement it 2021-08-13 12:51:31 -06:00
400018e121 Temporal: implement timepos_t::compute_ticks() 2021-08-13 12:51:31 -06:00
0ce40fc648 Temporal: fix timepos_t (Beats) constructor
flag bit was set incorrectly
2021-08-13 12:51:31 -06:00
747281a244 Temporal: fix implementation of timecnt_t::operator= (timecnt_t const &)
It is OK now to have inconsistent time domains inside a timecnt_t
2021-08-13 12:51:31 -06:00
3900537fcf split Beats::round_to_subdivision() into source module
Rounding to bar requires access to the tempo map, and we don't want this in
the beats.h header
2021-08-13 12:51:31 -06:00
5bef968069 Temporal: replace thread_local sample rate with callback to get sample rate 2021-08-13 12:51:31 -06:00
6e9f57d2ad Temporal: remove scope braces left over from when we used a lock to protect the tempo map 2021-08-13 12:51:31 -06:00
b6f2e39ed4 Temporal: remove BarTime 2021-08-13 12:51:31 -06:00
5987376afc Temporal: avoid recursive descent in TempoMap::quarters_at (timepos_t) 2021-08-13 12:51:31 -06:00
43d84620e0 Temporal: clean up API to remove ambiguity about ::quarter*_at_*
superclock_t and samplepos_t have the same underlying C++ type, so methods that accept one or the
other as an argument need to be named to make it clear which type they accept. We do not need
the superclock_t variant publically, but it turns out to be useful within TempoMap.
2021-08-13 12:51:31 -06:00
bed76798f3 manual fixups after rebase against master (general libs edition) 2021-08-13 12:51:31 -06:00
afea443419 remove API from Temporal:timecnt_t that used superclock_t
Not possible for a compiler to differentiate superclock_t and sample(pos|cnt)_t, which can lead to
subtle but major errors
2021-08-13 12:51:31 -06:00
9402548677 Temporal: add lots more DEBUG::TemporalMap output to tempo.cc 2021-08-13 12:51:31 -06:00
793579cf3f Temporal: expand displayed info for Tempo's operator<< 2021-08-13 12:51:31 -06:00
a0b9030e3c Temporal: fix logic during ::get_grid that ignored if rounding did nothing 2021-08-13 12:51:31 -06:00
f1bb135013 Temporal: fix computation of ::quarters_at() 2021-08-13 12:51:31 -06:00
7085dccebc Temporal: make Tempo:: super_note_type_per_second publically accessible 2021-08-13 12:51:31 -06:00
c3d325b56a Temporal: clean up API for timepos_t to remove unneeded duplicates and remove ambiguity 2021-08-13 12:51:31 -06:00
52ddf91e5b Temporal: explain with timepos_t::_{ticks,beats} are for 2021-08-13 12:51:31 -06:00
5887ee524e Temporal: further improvements to a timepos_t::distance() method 2021-08-13 12:51:31 -06:00
7c56b9b2fc Temporal: fix insanely incorrect implementation of timepos_t::distance() 2021-08-13 12:51:30 -06:00
def35cf043 mark BBT_Offset (double) constructor explicit to avoid implicit conversion in timeline expressions.
Also clean up the mess this had caused.
2021-08-13 12:51:30 -06:00
b01b6929fb fix potential for overflow when converting larger sample counts to superclock.
int_div_rount<T> was using int (32 bits) which could overflow.
2021-08-13 12:51:30 -06:00
15b28b103a NOOP: whitespace changes 2021-08-13 12:51:30 -06:00
f8a0ba246c move superclock_ticks_per_second declaration 2021-08-13 12:51:30 -06:00
f0008898af add operator<<() for timecnt_t() 2021-08-13 12:51:30 -06:00
b876baa757 Temporal: various changes to arithmetic/logic methods to avoid assert() on domain mismatches where none is really needed 2021-08-13 12:51:30 -06:00
baaa8f36ca fix timepos_t::max and timecnt_t::max to avoid int62_t flag bit
Both should likely just re-use int62_t::max
2021-08-13 12:51:30 -06:00
02b98290c5 set uninitialized _time_domain member of TempoMap in constructor 2021-08-13 12:51:30 -06:00
8bd465fc61 Add method to set thread_local _thread_sample_rate complete with debugging output 2021-08-13 12:51:30 -06:00
b06b856934 tweak test code to check int62_t::min and flag bit 2021-08-13 12:51:30 -06:00
5772dcc72b include temporal/range.cc as source module 2021-08-13 12:51:30 -06:00
8dbbc1df54 library changes to get libtemporal setup at application startup 2021-08-13 12:51:30 -06:00
adacaf3837 extend TempoMap API to assist with drag-RCU 2021-08-13 12:51:30 -06:00
49781e3b80 nominally fix up TempoMarkerDrag implementation for new TempoMap 2021-08-13 12:51:30 -06:00
cfac6ad254 comment code added in previous commit 2021-08-13 12:51:30 -06:00
44ff395ec8 move tempo map memento binder into .cc and actuall implement the RCU version 2021-08-13 12:51:30 -06:00
ed016dd4e6 fix TempoMap memento command binder 2021-08-13 12:51:30 -06:00
09d877004d add a MementoCommand binder for TempoMap 2021-08-13 12:51:30 -06:00
79763893b3 remove/hide Session::tempo_map() and use TempoMap::use() instead (thread local shared ptr) 2021-08-13 12:51:30 -06:00
60d1c5f722 remove tempo map from Session 2021-08-13 12:51:30 -06:00
9f866a6bbe consolidate some TempoMap modifier methods 2021-08-13 12:51:30 -06:00
dade9994d8 collect together modifying TempoMap methods, and make ::apply_with_metrics() more clearly const 2021-08-13 12:51:30 -06:00
c434289973 remove lock, _dirty and _generation nonsense from TempoMap (pre-RCU management) 2021-08-13 12:51:30 -06:00
1098b27b35 new tempo map API for almost all of the GUI now 2021-08-13 12:51:30 -06:00
f7ff656619 add convenience methods to access tempo & meter 2021-08-13 12:51:30 -06:00
5150e856b0 add to enums list for libtemporal 2021-08-13 12:51:29 -06:00
bf318aacb5 add missing file 2021-08-13 12:51:29 -06:00
e7d84a7c47 get further at runtime 2021-08-13 12:51:29 -06:00
534c08074d changes to get program to actually run (missing symbols)
Still crashes at startup due to static initialization of initial tempo map.
2021-08-13 12:51:29 -06:00
cdab3a5e8f fix a bunch of missing symbols related to temporal 2021-08-13 12:51:29 -06:00
749a49c278 incorporating new tempo map API 2021-08-13 12:51:29 -06:00
f67029bd02 random commit to facilitate trivial move of work from laptop back to main system 2021-08-13 12:51:29 -06:00
768ce21d9f Temporal: new files, likely to be removed in the final version 2021-08-13 12:51:29 -06:00
b5c945e211 Temporal: another useful static method 2021-08-13 12:51:29 -06:00
8fb70885ec changes needed to get audio_clock.cc to work 2021-08-13 12:51:29 -06:00
169bbf3b08 temporal: more API tweaks as conversions continue in libardour 2021-08-13 12:51:29 -06:00
bca8e2e8cc libtemporal: changes derived from converting libardour 2021-08-13 12:51:28 -06:00
e111123b54 Temporal: fix test2.cc now that operator int64_t is private 2021-08-13 12:51:28 -06:00
ddac0f7651 Temporal: what was that comment about not being able to disambiguate samples and superclocks? 2021-08-13 12:51:28 -06:00
f06e2dd6d1 Temporal: remove constructors accepting scalar values from timepos_t/timecnt_t and force use of factory methods
This allows us to differentiate between superclock_t and samplepos_t (and related types) which are all typedef'ed to the
same underlying primitive C++ type. Without this, it would be impossible for the compiler or someone reading the code
to know whether a scalar passed to a constructor for a timeline type is in units of samples or superclocks
2021-08-13 12:51:28 -06:00
c75fc64306 Temporal: various changes to int62_t and timeline types based on code review 2021-08-13 12:51:28 -06:00
c192c49b65 Temporal: add std::numeric_limits<> for timecnt_t and comment on these in general 2021-08-13 12:51:28 -06:00
c04b9c2429 Temporal: add Range class from nutempo v1
This will replace Evoral::Range which unfathomably was implemented with inclusive bounds
2021-08-13 12:51:28 -06:00
b5bf518a0a Temporal: fixes, changes, redesigns, extensions to be able to compile ARDOUR::Region with timepos_t/timecnt_t members 2021-08-13 12:51:28 -06:00
5285151d08 Temporal: alter which tests are run by test2 2021-08-13 12:51:28 -06:00
88cf07daa6 Temporal: add standalone compile instruction for test2.cc 2021-08-13 12:51:28 -06:00
3beffbd3ee Temporal: add test program to evaluate performance of various ways of using int64_t atomically 2021-08-13 12:51:28 -06:00
56795a97a3 changes required to get ardour to start up (missing vars, incorrect values) 2021-08-13 12:51:28 -06:00
f5fad809fb Temporal: add decl for thread-local tempo map pointer 2021-08-13 12:51:28 -06:00
d47d462182 Temporal: add debug bits declaration 2021-08-13 12:51:28 -06:00
b0a732e636 Temporal: extend timecnt_t API to provide samples() method, using thread-local sample rate 2021-08-13 12:51:28 -06:00
791e76290d Temporal: extend timepos_t API to provide samples() method, using thread-local sample rate 2021-08-13 12:51:28 -06:00
4c6d6b14e5 Temporal: add new TempoMap implementation source 2021-08-13 12:51:28 -06:00
f42bd3fe47 add per-thread sample rate variable and libardour method to update it 2021-08-13 12:51:28 -06:00
1f0d9159a7 Temporal: use, don't fetch tempo map pointer 2021-08-13 12:51:28 -06:00
8ec81c2308 Temporal: correctly construct return timepos_t for * and / 2021-08-13 12:51:28 -06:00
e89d727939 Temporal: remove the final #warning from timeline.cc 2021-08-13 12:51:28 -06:00
b87c855240 Temporal: add string_to/to_string methods for timecnt_t 2021-08-13 12:51:28 -06:00
974196b7d2 Temporal: add timeline.cc 2021-08-13 12:51:28 -06:00
5a0969a5c2 Temporal: remove last bit of floating point API from timepos_t 2021-08-13 12:51:28 -06:00
9fe9658e8a Temporal: add clarifying comment 2021-08-13 12:51:28 -06:00
ead17ed35c Temporal: add ratio_t type (currently boost::rational<int64_T> 2021-08-13 12:51:28 -06:00
b1271a491e Temporal: add TempoMap::use() which returns the per-thread ptr-to-tempo-map without updating the pointer 2021-08-13 12:51:28 -06:00
7446de72b1 Temporal: improve timepos_t::distance() implementations 2021-08-13 12:51:28 -06:00
2c69a1425f Temporal: fundamental changes to get timeline.cc to compile 2021-08-13 12:51:28 -06:00
35d0519109 make superclock_t signed, to match signedness of int62_t 2021-08-13 12:51:28 -06:00
f4490f54c5 change Timecode::BBT_Time to use Temporal namespace, plus a couple of other minor changes to enable compilation
This still uses the tempo map object in libs/ardour, not the new one in libs/temporal, and isn't likely to be functional
(though it could be)
2021-08-13 12:51:28 -06:00
9abf90c9d5 add the new timepos_t/timecnt_t header 2021-08-13 12:51:28 -06:00
a80960468d first pass at integrating nutempo v1 with new 64 bit superclock/ticks representation
This compiles libtemporal, but nothing more
2021-08-13 12:51:28 -06:00
e0b5b12129 basic work on a Tempo object that avoids (almost) all floating point arithmetic
Basic conversions between superclock and Beats are provided
2021-08-13 12:51:28 -06:00
4dc048b28a update Temporal::Beats to merge master/nutempo versions, notably with private from-double constructor
This is the libraries-only edition. It still features liberal use of Beats::from_double() but this is now
explicit and will be easier to locate the calls and remove them. Several classes that were using
Beats::to_double() have been (temporarily) made friends of Beats to allow them to keep using it,
pending the much more widespread redesigns of several structures. Once this is done, the friend
relationships can (mostly) be removed. It is expected the ARDOUR::Variant will need to continue
as a friend because it is used to pass beat counts to LV2 as doubles
2021-08-13 12:51:28 -06:00
617fcd660c add operator% and operator%= to Temporal::Beats (taken from nutempo) 2021-08-13 12:51:27 -06:00
c41c622b37 another BBT comparator fix 2021-08-13 12:51:26 -06:00
be831c6870 fix logic error in BBT_Time::operator>= 2021-08-13 12:51:26 -06:00
Hector Martin
4b9e46f11d Fix normalization in Temporal::Beats for times between -1 and 0 beats
Also fix normalization of times with negative beats and positive ticks
2020-11-18 13:40:31 -07:00
John Emmas
754f9bba0c Further change needed for 'libtemporal' 2020-05-29 12:28:13 +01:00
John Emmas
1d23e18efe Initial vcproj changes for building Ardour6 / Mixbus6 with MSVC 2020-05-29 08:33:33 +01:00
70e27e0bf2 fix Beats::operator-() 2020-04-16 21:38:33 -06:00
bca825e515
NO-OP: whitespace 2020-01-14 00:52:24 +01:00
8b3e7fea37 fix Temporal::Beats::operator* 2019-12-18 18:00:53 -07:00
8ec3e5fb54 Fix deprecated-copy warnings
It's long been a guideline (and IIRC a Weff-c++ warning) that either all, or
none, of the copy methods should be defined, but this became a standard warning
in GCC9.  Presumably to account for a later language change though I'm not sure
which.

I don't remember why the ChanMapping copy constructor can't just be a simple
copy (it's just a map of POD), but figure it's safer to just copy what that
does.
2019-12-09 23:25:59 +01:00
ecc2597870
Fix remaining doxygen warnings (!) 2019-09-30 21:03:29 +02:00
bfec73b8c3
NO-OP: whitespace, indent 2019-09-30 21:03:20 +02:00
0301c47f6b
Update core library GPL boilerplate and (C) from git log 2019-08-03 15:53:17 +02:00
8ed33f1bc7 remove use of hardcoded -fPIC compiler flag, and use compiler flag dict instead 2018-10-14 22:06:11 -04:00
9506a294c7 Adapt our remaining MSVC projects for 'boost::atomic' (in case it later gets extended to the other libs)
Stage 1 of 3 (more to follow)
2018-09-30 08:56:12 +01:00
79f01bc889 Initial changes needed for building Mixbus (with MSVC) as version 5
(Mixbus itself will probably need extra changes)
2018-09-10 07:14:59 +01:00
b9c9777b9a When building with MSVC, allow for the fact that Mixbus and Ardour can be using different versions of the SESSION_FILE format 2018-02-15 09:03:32 +00:00
9a20433d98 fix definition of Temporal::Beats::max()
Ticks can exceed PPQN, but if beats are already INT32_MAX, ::normalize() will not work correctly
2018-02-12 11:44:37 -06:00
b2032938b1 Accommodate newly added/removed source(s) in our MSVC project (libtemporal) 2017-09-28 12:27:54 +01:00
657ba64ad2 Rename 'libs/temporal/MSVCtemporal/timecode.vcproj' to 'libs/temporal/MSVCtemporal/temporal.vcproj' 2017-09-28 12:27:54 +01:00
2750f7f485 Rename 'libs/temporal/MSVCtimecode' to 'libs/temporal/MSVCtemporal' 2017-09-28 12:27:53 +01:00
61be0990fa change libtemporal to be versioned like all others 2017-09-25 12:13:54 -04:00
dcb55c508e additional changes to follow library name change from timecode -> temporal 2017-09-25 12:13:54 -04:00
7db12f6b12 convert codebase to use Temporal for various time types 2017-09-24 12:03:54 -04:00
9283bee867 new header file for audio-based time types 2017-09-24 12:03:13 -04:00
48d402c960 part two of initial libtemporal creation 2017-09-24 10:48:00 -04:00
b62c305f20 change libtimecode to libtemporal, add Evoral::Beats, positional types and superclock headers 2017-09-24 10:47:28 -04:00