13
0
Commit Graph

588 Commits

Author SHA1 Message Date
a41198305e Update WritePass logic + AutomationList Undo
Fixes various issues when changing AutomationState while rolling.
2017-07-24 21:00:12 +02:00
2006701f73 Fix ctrl-list guard-points and concurrency issues
* lock list when editing (prevent concurrent modification of insert
  iterator
* don't add a guard-point if an event is already present between the
  target and guard-point-position
* remove existing automation-events (old guard points) when
  touching automation w/o change
* don't unset "new write pass" when not rolling
  (fixes issues when not rolling but locating with write-enabled)
2017-07-24 01:59:08 +02:00
deba170d6c Consistent ControlList freezing -- fixes #7419
AudioRegion::set_fade_in() freezes the original ControlList, then
assigns a new one and thaws that.
Frozen state needs to be retained during assignment.

Related: The overloaded assignment operator in AutomationList
performed duplicate signal emission and didn't freeze the list.
2017-07-07 02:35:00 +02:00
c4578db595 Compatibility with old out-of-range automation-lane data
Ardour may have ignored log-scale for parameters 0..N and allowed
writing '0'. Force those values into the valid range on session load.
Also mark the list as "needs sorting" which removes potential duplicates.
2017-07-04 20:12:51 +02:00
8dcc28c9ad Remove duplicates from ControlList 2017-06-21 18:12:31 +02:00
3d15499cda Clamp values in ControlList 2017-06-21 18:12:29 +02:00
d6c47def09 Implement additional ControlList interpolation methods.
The Control and ControlList uses the raw value (eg. coefficient for gain,
Hz for frequencies) and those Lists are stored in existing sessions.

In the vast majority of cases interpolating automation values using exp/log
scale for dB, freq makes more sense -- it's also what the fader does.

Adding additional interpolation methods is future proof (we might at allow
to even add different methods per automation point (to the next) like other
DAWs do.

Currently it's mainly used in preparation for consistent GUI automation-
lanes. Between 2 points there's always a visual straight line.
2017-06-21 18:12:26 +02:00
36e32e5641 Remove separate ControlList min/max/default, use ParameterDescriptor. 2017-06-21 18:12:23 +02:00
fe83e1e2ed Move logarithmic property into Evoral, add rangesteps
This allows complete mathematical description of a given parameter
and parameter values.

Semantic type abstraction is reserved for Ardour::ParameterDescriptor.
2017-06-21 18:12:14 +02:00
8b917c4c16 Add infrastructure to merge ControlLists 2017-06-14 02:40:09 +02:00
8e6f71b8c1 Apply master-value to automation on disconnect. 2017-06-13 20:57:37 +02:00
2bc2aea009 Implement slaved boolean automation and update mute special-case 2017-06-10 14:38:21 +02:00
nick_m
d455806a73 Do not duplicate note id in copy constructor
This fixes selection undo after copy-dragging notes, but there
are probably other cases where duplicate note ids may cause problems.
2017-06-08 23:11:56 +10:00
c2cb60ea03 add const-ness: Evaluating a curve does not change it.
Note that the ControlList's lock and cache are already mutable.
2017-06-03 13:55:02 +02:00
0b5db91ee9 AutomationLine time-unit conversion and paste API update
This fixes copy/paste of MIDI automation (time-unit: beat) from/to
Parameter automation (time-unit: samples).

It also fixes repeatedly pasting with tempo-ramps: pre-multiply length
before converting to samples.
2017-04-26 23:37:27 +02:00
ce2c3a9c70 c89 compat (gcc4, mingw..) 2017-02-28 21:33:13 +01:00
29fcca147b Fix loading SMF meta-data > 127 bytes (no more g_critical abort) 2017-02-28 16:29:10 +01:00
994f5cec0e centralize computation of tempo from SMF information 2017-02-08 19:07:10 +01:00
129708ad85 add clamp for adding points to a ControlList from a (G)UI 2017-01-09 12:42:08 +00:00
Nil Geisweiller
6431c4a6d9 More 8 whitespace to tab indentation fixes 2016-12-22 14:20:13 +02:00
Nil Geisweiller
c1127c245b Fix minor typo in comment 2016-12-21 23:09:40 +01:00
Nil Geisweiller
4c66e36b91 Fix indentation 8 whitespaces to tab 2016-12-21 23:09:40 +01:00
6a0ea65885 "toll free bridging" between smf_tempo_t and Evoral::SMF::Tempo 2016-12-16 13:45:43 +00:00
c0aa738395 expose SMF tempo information in Evoral::SMF 2016-12-16 10:43:52 +00:00
2378e7b60c add function to get number of tempos found in SMF tempo map 2016-12-16 10:43:41 +00:00
fe0761d404 unused but slightly tricky code to add track name/instrument to an SMF file when saved 2016-12-16 09:36:52 +00:00
76dca432f0 add comments about limitations for Evoral::SMF and tracks 2016-12-16 09:36:52 +00:00
d2fd01c241 add API to Evoral::SMF to retrieve all track/instrument names for use when importing 2016-12-14 11:46:26 +00:00
7e0dbd06db extract track and instrument names from SMF while loading 2016-12-14 11:46:26 +00:00
24160a3b85 add braces and warning for unlikely error 2016-12-14 11:46:26 +00:00
ff6f8ca6c4 fix incorrect test for textual meta events in libsmf 2016-12-14 11:46:26 +00:00
54ef5fadc2 braces please 2016-12-14 11:46:26 +00:00
d5074be4f1 braces, please 2016-12-14 11:46:26 +00:00
8002a0c66e free track name/instrument string memory when necessary 2016-12-14 11:46:26 +00:00
28caef7d81 add track and instrument name members to smf_track_t 2016-12-14 11:46:26 +00:00
f04c1ca4db I can't find a source file called MIDIXML.cpp (??) 2016-12-08 13:55:11 +00:00
fe45f9bc21 Set MidiPgmChangeAutomation control value 2016-12-07 12:45:01 +01:00
388765e8ce Remove boost_system test kludge 2016-12-04 19:15:29 -05:00
5ab2e34b2c Update evoral test suite 2016-12-04 18:49:56 -05:00
9a848d5ba6 Fix configuration 2016-12-04 18:26:30 -05:00
1438191938 Improve coverage of evoral tests 2016-12-04 15:40:21 -05:00
9dbc524060 Improve coverage of evoral tests 2016-12-04 15:17:08 -05:00
9aac954744 Add missing include 2016-12-04 15:16:08 -05:00
b51321bd7d Make libpbd and evoral capable of standalone build
Just an update to slightly rotten wscripts, shouldn't be any changes during an
ardour build.  Motivation being a short development cycle for working on evoral
and/or its test suite.
2016-12-04 15:15:11 -05:00
7d2ed46b63 Remove dead/annoying/unsafe code
Note the old Note::operator= was unsafe, since it made shallow copies of the on
and off events, which results in a double delete of events when the notes are
destructed.
2016-12-04 15:10:05 -05:00
454df30ae5 Fix Sequence test 2016-12-03 15:49:13 -05:00
d17f58e531 Remove dead code 2016-12-03 15:28:23 -05:00
398a318934 Fix event type and parameter type confusion
I'm not sure if this is really the best way to do event types (should it
just be a completely static enum in evoral, or completely dynamic and
provided by the type map, or a mix like currently?), but previously the
event type was frequently set to either total garbage, or parameter
types, which are a different thing.

This fixes all those cases, and makes Evoral::EventType an enum so the
compiler will warn about implicit conversions from int.
2016-12-03 15:28:19 -05:00
08fffeffec Remove Evoral::MIDIEvent
It is slightly questionable whether type specific methods like
velocity() belong on Event at all, these may be better off as free
functions.  However the code currently uses them as methods in many
places, and it seems like a step in the right direction, since, for
example, we might some day have events that have a velocity but aren't
stored as MIDI messages (e.g. if Ardour uses an internal musical model
that is more expressive).

In any case, the former inheritance and plethora of sloppy casts is
definitely not the right thing.
2016-12-03 15:18:21 -05:00
875b1367b2 Factor out and extend MIDIXML implementation 2016-12-03 15:18:20 -05:00