summaryrefslogtreecommitdiff
path: root/libs/evoral/src
AgeCommit message (Collapse)Author
2018-07-26Fix crash when testing invalid MIDI file.Robin Gareus
smf_delete() does not handle NULL pointers. This fixes a crash when checking if a MIDI source is valid.
2018-07-05system common and system realtime messages are not valid in SMF filesPaul Davis
2018-07-05change all use of g_critical() in libsmf() to g_warning()Paul Davis
g_critical translates to a fatal error in ardour, which is not true for any of these errors.
2018-06-21remove debug outputPaul Davis
2018-06-21remove Session::controllable_by_descriptor() and move code into GenericMIDI ↵Paul Davis
code (the only user). This also removes enums introduced to describe well-known parameters for Mixbus. Lookup now involves string parsing every time, but this is not likely to be a notable cost.
2018-04-08Fix crash when testing unsupported MIDI fileRobin Gareus
smf_delete() does not handle NULL, and segfaults instead. This only crashes with optimized builds. libsmf will call g_critical() earlier and in that case debug-builds call UI::handle_fatal() and ask the user to "click to exit".
2018-01-26Fix some clang warnings (argument with 'nonnull' attribute passed null)Robin Gareus
2017-09-24convert codebase to use Temporal for various time typesPaul Davis
2017-09-24new header file for audio-based time typesPaul Davis
2017-09-18remove Evoral types.cpp since it is no longer requiredPaul Davis
2017-07-27Fix write-pass re-start while in an active write-passRobin Gareus
2017-07-24Update WritePass logic + AutomationList UndoRobin Gareus
Fixes various issues when changing AutomationState while rolling.
2017-07-24Fix ctrl-list guard-points and concurrency issuesRobin Gareus
* 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-07Consistent ControlList freezing -- fixes #7419Robin Gareus
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-04Compatibility with old out-of-range automation-lane dataRobin Gareus
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-06-21Remove duplicates from ControlListRobin Gareus
2017-06-21Clamp values in ControlListRobin Gareus
2017-06-21Implement additional ControlList interpolation methods.Robin Gareus
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-21Remove separate ControlList min/max/default, use ParameterDescriptor.Robin Gareus
2017-06-14Add infrastructure to merge ControlListsRobin Gareus
2017-06-13Apply master-value to automation on disconnect.Robin Gareus
2017-06-08Do not duplicate note id in copy constructornick_m
This fixes selection undo after copy-dragging notes, but there are probably other cases where duplicate note ids may cause problems.
2017-06-03add const-ness: Evaluating a curve does not change it.Robin Gareus
Note that the ControlList's lock and cache are already mutable.
2017-04-26AutomationLine time-unit conversion and paste API updateRobin Gareus
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-02-28c89 compat (gcc4, mingw..)Robin Gareus
2017-02-28Fix loading SMF meta-data > 127 bytes (no more g_critical abort)Robin Gareus
2017-01-09add clamp for adding points to a ControlList from a (G)UIPaul Davis
2016-12-21Fix minor typo in commentNil Geisweiller
2016-12-16"toll free bridging" between smf_tempo_t and Evoral::SMF::TempoPaul Davis
2016-12-16expose SMF tempo information in Evoral::SMFPaul Davis
2016-12-16add function to get number of tempos found in SMF tempo mapPaul Davis
2016-12-16unused but slightly tricky code to add track name/instrument to an SMF file ↵Paul Davis
when saved
2016-12-14add API to Evoral::SMF to retrieve all track/instrument names for use when ↵Paul Davis
importing
2016-12-14extract track and instrument names from SMF while loadingPaul Davis
2016-12-14add braces and warning for unlikely errorPaul Davis
2016-12-14fix incorrect test for textual meta events in libsmfPaul Davis
2016-12-14braces pleasePaul Davis
2016-12-14braces, pleasePaul Davis
2016-12-14free track name/instrument string memory when necessaryPaul Davis
2016-12-14add track and instrument name members to smf_track_tPaul Davis
2016-12-04Remove dead/annoying/unsafe codeDavid Robillard
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-03Remove dead codeDavid Robillard
2016-12-03Fix event type and parameter type confusionDavid Robillard
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-03Remove Evoral::MIDIEventDavid Robillard
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-03Factor out and extend MIDIXML implementationDavid Robillard
2016-12-03Fix Sequence/Event const-correctness issuesDavid Robillard
2016-11-27Fix loading, recording & saving MIDI with PolyKeyPressure events.Robin Gareus
GUI still does not handle this (neither automation lane, nor List Editor), but the file loads, plays and exports correctly.
2016-10-23Don't add initial points for MIDI-CCRobin Gareus
eg. import a .mid that has a CC later in the file. Arodur wrongly added an initial point, effectively moving the event backwards to "0" (no virgin territory)
2016-10-05SMF add support for type-0 files (count channels, not tracks)Robin Gareus
2016-08-19attempt to handle poly-pressure (polyphonic aftertouch) similarly to other ↵Paul Davis
MIDI messages