13
0
Commit Graph

482 Commits

Author SHA1 Message Date
7e2c8ace4b Follow MIDI control values with automation faders.
Fixes bug #6166 (except record).

This attempts to follow the "current" control value somewhat aggressively:

* On locate, slider is set to the value from the top region at the new
  transport position.

* Playback or MIDI input is followed "live".

* Whenever the slider is moved (including automatically), that value is emitted
  as an immediate event to keep external gear in sync.

General idea is that the Ardour slider should act as a mirror of an external
hardware knob, and both should be synced to whatever the control is at the
current transport position.  Since we lack real playback/touch/etc modes for
these for now, we must choose one behaviour, and this seems like the most
reasonable one.

Follow is handled in the audio thread, which is probably not ideal, but since
these controls have no lists and do not record, should be fine.  Probably.
2015-03-26 00:47:34 -04:00
99260742d2 mingw: all code is position independent 2015-03-11 14:58:02 +01:00
4b401d9e34 Add a missing 'typename' specifier to the declaration for 'Evoral::Sequence::set_notes()' 2015-03-07 12:29:15 +00:00
a8aae56d92 Handle edits while playing precisely.
This avoids stuck notes if active notes are edited, but without stopping all
active notes in the region on any edit as before.

This implementation injects note ons in places that aren't actually note
starts.  Depending on how percussive the instrument is, this may not be
desired.  In the future, an option for this would be an improvement, but there
are other places where "start notes in the middle" is a reasonable option.  I
think that should be handled universally if we're to do it at all, so not
considering it a part of this fix for now.
2015-03-05 17:30:31 -05:00
b68a4e5cdc Normalize notes on all channels.
Probably.
2015-02-19 20:23:11 -05:00
450291adfc Fix record/import of note ons with velocity 0.
Best to just do this as early as possible to avoid having to deal with this
situation all over the code.

Also fixes violation of LV2 MIDI specification, which requires no such events
are delivered to plugins.
2015-02-19 18:38:30 -05:00
6fb4bd578e Don't allocate then discard notes on note off.
Silly to make a junk Note just to pass to append_note_off_unlocked, which just
uses the fields that are on the MIDIEvent anyway then throws it away.

Also explicitly dispatch to append_note_off_unlocked in the caller for note ons
with velocity 0 rather than make append_note_on_unlocked deal with it.
2015-02-19 18:38:30 -05:00
6a033a093b Remove unused ifdef gunk. 2015-02-19 18:38:30 -05:00
cb3961d953 Add a test for the constrained cubic interpolation of Evoral::Curve
Add a test, based on the worked example in www.korf.co.uk/spline.pdf, for
the constrained cubic spline interpolation.

The delta values for the float comparisons are rather arbitrary, I'm sorry
to say: they're basically chosen so that everything passes.
2015-02-13 12:25:51 +00:00
9c992fa97c few more basic ControList/Curve Tests 2015-01-20 00:46:58 +01:00
Guido Aulisi
c6e71a683e Curve::_get_vector: fix return value when veclen == 1
When the crossfade length is only 1 frame, I got strange
gain coefficients from get_vector (63 in my case).
The function wrongly returned the x axis value.
2015-01-19 23:55:52 +01:00
5190cbc9b2 2-point Curve Linear Interpolation Test 2015-01-19 23:55:52 +01:00
2a7389d8df minimalistic Evoral::Curve Unit Test. 2015-01-19 22:15:28 +01:00
2abd8b8f06 Add a newly introduced header file to our MSVC project (libevoral)
This change is MSVC specific and shouldn't affect the other builds.
2015-01-10 11:58:58 +00:00
2a251b4570 MusicalTime => Beats. 2015-01-07 00:12:07 -05:00
b56905b9a7 Fix MIDI file descriptor leaks.
Pretty sure this is the cause of MIDI data going missing on save for optimized
builds.  Introduced in 294b99aabf.
2015-01-05 15:50:30 -05:00
07c08e4673 fix incorrect test for valid MIDI events.
Only channel messages have the form <statusbyte>{<nonstatusbyte>..}
2014-12-31 10:32:50 -05:00
e4f61de52f Fix range "arithmetic"
Subtracting anything from an empty range should return an empty range, not an assert() failure
2014-12-31 07:43:43 -05:00
168d187994 Load what we can from broken/truncated MIDI files.
We're still a very long way from tolerant of weird SMF files (libsmf takes a
"crash if input is not exactly perfect" philosophy, if we're going to be polite
and elevate such a thing to "philosophy"), but at least we'll get what's there
from files truncated by old broken versions of Ardour or other situations.
2014-12-30 23:10:11 -05:00
97d344f740 Fix MIDI CC record/playback crash. 2014-12-30 14:45:11 -05:00
cf6e9d3412 Blind fix for MIDI iteration bug. 2014-12-29 15:12:10 -05:00
e584ae0bf9 Mute automation via normal mute button. 2014-12-18 02:26:51 -05:00
d2cafbe95a Remove some aborts that don't really need to be.
Enforce PatchPrimaryKey sanity at the type level rather than attempting to
check for it everywhere.

Remove dead file.
2014-12-17 19:43:09 -05:00
ec6626f06a Fix oops in previous commit.
Professionalism is overrated.
2014-12-17 02:10:01 -05:00
0c3f4bd995 Fix occasional crash when recording MIDI. 2014-12-17 01:49:46 -05:00
294b99aabf remove file manager LRU cache from code.
This was a very clever attempt to fix a non-problem. If the platform doesn't have enough file descriptors available
then the platform is broken and we're not going to hack around trying to fix it.
2014-12-10 18:28:55 -05:00
e1e2b919c3 Remove unnecessary includes. 2014-12-06 22:43:06 -05:00
f9c74319a2 Fix seek in linearly interpolated control lists. 2014-12-06 15:44:10 -05:00
4650912ae3 Adapt range when copying between automation types.
For things like copying from pitch bender to a CC.

Also things like fader to pan, but that seems a bit funny.  The conversion
probably needs to be a bit smarter here, perhaps taking the normal into
consideration...
2014-12-06 13:40:35 -05:00
ddb7cc6d66 More potential SMF crash fixes. 2014-12-06 11:19:48 -05:00
2e92ae90a6 Possible half-fix for SMF crash. 2014-12-06 10:37:08 -05:00
ad340333f4 Revert "Create discrete lists for recorded MIDI controls."
This broke saving/restoring interpolation style.

This reverts commit 07a381a8f5.
2014-12-05 00:03:47 -05:00
9eb8b73b43 Call PBD::init from evoral testrunner
This is needed to set _fmode = O_BINARY for libsmf/fread and
fixes takeFiveTest on windows
2014-12-03 17:31:05 +07:00
61f9ca9f3c Use test utility function to find evoral test files
either via EVORAL_TEST_PATH env var or on windows via directory relative
to dll
2014-12-03 17:31:04 +07:00
f6e15a3b6b Use PBD::tmp_writable_directory to write evoral test file into
no need to remove directory as it is temporary
2014-12-03 17:31:04 +07:00
7a3c54f031 Fix evoral test suite. 2014-12-02 23:30:16 -05:00
25efe5953c Fix range of pan controls.
Set default range to [0,1] since [0,0] is problematic and useless anyway.
2014-12-02 19:02:03 -05:00
a13ff7b604 Remove accidentally committed file. 2014-12-02 12:15:54 -05:00
cf47d71761 Fix lost MIDI events due to broken range check. 2014-12-02 03:36:33 -05:00
07a381a8f5 Create discrete lists for recorded MIDI controls. 2014-12-02 00:21:52 -05:00
86de0386c9 Fix automation write/touch. 2014-12-01 23:35:24 -05:00
2b69fa6edf Factor out copy-paste code. 2014-12-01 23:35:24 -05:00
767c0238a3 Replace half-baked param metadata with descriptor.
Among other things, this means that automation controls/lists have the actual
min/max/normal/toggled of parameters, and not those inferred from the Parameter
ID, which is not correct for things like plugin parameters.

Pushing things down to the Evoral::ParmeterDescriptor may be useful in the
future to have lists do smarter things based on parameter range, but currently
I have just pushed down the above-mentioned currently used attributes.
2014-12-01 23:35:24 -05:00
Julien de Kozak
cb8abbe8d2 Make it compile with C++11 support.
Reference : https://bugs.webkit.org/show_bug.cgi?id=59249
2014-12-01 23:18:11 +01:00
43cc295a58 Tidy up comments in Evoral::coverage
Remove old (already #if 0'ed) implementation of Evoral::coverage() and its
comments.

Tidy up the comment enumerating all the possible ways in which two ranges
can overlap, note the Evoral::OverlapType corresponding to each one, and add
comments to the if()s in coverage corresponding to the cases in the list of
overlap types.

Remove some commented-out assert()s that actually do happen, and re-instate
one that really shouldn't.

Fix a small typo (with -> within)
2014-12-01 20:13:04 +00:00
dd5fc9432f Simplify Evoral::RangeList::subtract(), and make it pass amended tests
The various conditionals in Evoral::RangeList::subtract() appear to have
been there to work around
 (a) coverage() not always returning the correct value, &
 (b) the test suite assuming that the ->to point lies outside the range

Now that these are both fixed, the implementation of subtract() becomes
quite a bit clearer. I replaced the if()s with assert()s for now, but these
shouldn't trip if coverage() is working as I expect.

Also (attempt to) clarify the comments in subtract.
2014-12-01 20:13:04 +00:00
d7cc7775f3 Rework Evoral::coverage() to pass unit tests
Rewrite Evoral::coverage() to (hopefully) do what it's supposed to.

Return OverlapNone for invalid ranges: if either of the ranges passed to
Evoral::coverage() have negative length (i.e.  start > end), return OverlapNone
- it seems reasonable to say that a negative-length range can't overlap
anything. Also return OverlapNone from the fallthrough case, though this should
never happen.
2014-12-01 20:03:22 +00:00
47d329ca40 Make tests of Evoral::Range functions include both endpoints in Range
Some of the tests for Evoral::RangeList::subtract() assume that ranges
don't contain their end (->to) point. This appears inconsistent with how
they are used elsewhere.

Add some ASCII art comments to the tests to try to clarify what they're
really testing for, and amend subtractTest1, subtractTest4, & subtractTest5
to incorporate the assumption that ranges include their end points.
2014-12-01 16:52:58 +00:00
0ffeaa6d6a Remove braindead Parameter inheritance abuse. 2014-11-30 23:56:20 -05:00
7eb4e5d22b Replace thinning static state with parameter. 2014-11-30 23:56:20 -05:00