Commit graph

333 commits

Author SHA1 Message Date
Robin Gareus
ca0c9b3636 Replace "%z" modifier with glib macro for portability. 2015-07-30 17:00:03 +02:00
Ben Loftis
46c8369328 merge fix 2015-07-16 16:13:24 -05:00
Paul Davis
438f3e5141 remove const warning in SMF C code by changing function parameter argument qualifier 2015-06-29 14:18:15 -04:00
nick_m
6ecbeed8e8 Fix ControlList::editor_add () wrt guard points. 2015-06-18 10:03:18 +10:00
nick_m
15819f0896 Automation -use editor_add in gui, record straight lines with fewer points.
- don't keep setting/unsetting write pass when transport frame
	  remains the same (think larger jack buffer sizes)
	- insert guards are now 64 frames after when.
	- refactor previous approach.
2015-06-17 09:54:22 +10:00
nick_m
57ce447fd1 Fix some workflow problems wrt automation.
- clearing automation points sets control to "off" rather than touch.
	- multiple touches on the same pass acts consistently (no more
	  fader jumps on mouse button press
	- use actual value for initial point rather than some arbitrary
	  default. clarify new semantics of add () (with_default->with_initial).
	- clean some whitespace
	- add guard points as needed in stop.
	- catch grab broken signal (i can't trigger it, but the docs seem
	  to think it is essential).
2015-06-17 09:54:22 +10:00
Paul Davis
cc543280d9 We were 2 more debug "bits" away from overflow, so recast PBD::DEBUG mechanism away from a 64bit integer and toward std::bitset.
Clean up a few minor related PBD::DEBUG issues along the way
2015-06-12 18:14:09 -04:00
nick_m
92b69a17da Make Evoral::Event ids unique always.
- probably fixes a lot of cases where note ids are assumed to be
	  unique (they weren't for copies and some others).
	- wrong branch, but it needs testing.
2015-05-24 01:53:34 +10:00
Paul Davis
63ac1b1464 SMF::end_write() is a no-op if there is no _smf structure 2015-04-20 22:46:39 -04:00
Paul Davis
d263cf7ded remove _file_path member from Evoral::SMF 2015-04-20 15:44:20 -04:00
Robin Gareus
96ce9c304e Replace control list locks with RWLocks
towards fixing #6238 and #6096.


GUI thread:
#2  Glib::Threads::Mutex::Lock::Lock
#3  Evoral::ControlList::eval 
#4  Evoral::Control::get_double 
#5  ARDOUR::AutomationControl::get_value
#6  ProcessorEntry::Control::control_changed
..
#15 PBD::Timer::timeout_handler


at the same time: Audio Thread (try-lock, fails)

#0  Evoral::Curve::rt_safe_get_vector
#1  ARDOUR::Amp::setup_gain_automation
#2  ARDOUR::Route::process_output_buffers

Due to the failed try-lock.. AMP::_apply_gain_automation
is false. and Amp::run() uses a different gain factor.
-> click.
2015-04-15 18:13:56 +02:00
David Robillard
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
David Robillard
b68a4e5cdc Normalize notes on all channels.
Probably.
2015-02-19 20:23:11 -05:00
David Robillard
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
David Robillard
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
David Robillard
6a033a093b Remove unused ifdef gunk. 2015-02-19 18:38:30 -05: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
David Robillard
2a251b4570 MusicalTime => Beats. 2015-01-07 00:12:07 -05:00
David Robillard
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
David Robillard
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
David Robillard
97d344f740 Fix MIDI CC record/playback crash. 2014-12-30 14:45:11 -05:00
David Robillard
cf6e9d3412 Blind fix for MIDI iteration bug. 2014-12-29 15:12:10 -05:00
David Robillard
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
David Robillard
ec6626f06a Fix oops in previous commit.
Professionalism is overrated.
2014-12-17 02:10:01 -05:00
David Robillard
0c3f4bd995 Fix occasional crash when recording MIDI. 2014-12-17 01:49:46 -05:00
Paul Davis
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
David Robillard
f9c74319a2 Fix seek in linearly interpolated control lists. 2014-12-06 15:44:10 -05:00
David Robillard
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
David Robillard
ddb7cc6d66 More potential SMF crash fixes. 2014-12-06 11:19:48 -05:00
David Robillard
2e92ae90a6 Possible half-fix for SMF crash. 2014-12-06 10:37:08 -05:00
David Robillard
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
David Robillard
a13ff7b604 Remove accidentally committed file. 2014-12-02 12:15:54 -05:00
David Robillard
07a381a8f5 Create discrete lists for recorded MIDI controls. 2014-12-02 00:21:52 -05:00
David Robillard
86de0386c9 Fix automation write/touch. 2014-12-01 23:35:24 -05:00
David Robillard
2b69fa6edf Factor out copy-paste code. 2014-12-01 23:35:24 -05:00
David Robillard
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
David Robillard
0ffeaa6d6a Remove braindead Parameter inheritance abuse. 2014-11-30 23:56:20 -05:00
David Robillard
7eb4e5d22b Replace thinning static state with parameter. 2014-11-30 23:56:20 -05:00
David Robillard
b68fd1cc25 Remove dead code. 2014-11-30 23:56:20 -05:00
David Robillard
784b96e255 Set discrete by default for boolean parameters. 2014-11-29 01:40:23 -05:00
David Robillard
e55b68298b Fix crash when deleting all points from a line. 2014-11-28 20:04:57 -05:00
John Emmas
25745758aa Changes needed to accommodate building libevoral with MSVC
Note that class 'MusicalTime' needn't be exportable (with a little work, this could be reverted if it affects the other builds)
2014-11-24 12:51:54 +00:00
David Robillard
f1926dc863 Fix build with a certain awful broken compiler. 2014-11-23 16:31:59 -05:00
David Robillard
231e0009b4 Max is max and min is min and I am dumb. 2014-11-22 16:33:32 -05:00
David Robillard
42b5ed3904 Fix clang and MSVC build. 2014-11-22 15:26:41 -05:00
David Robillard
c1cfa12d6e Wrap MusicalTime in a class.
This lets us get a more explicit handle on time conversions, and is the main
step towards using actual beat:tick time and getting away from floating point
precision problems.
2014-11-22 04:05:42 -05:00
David Robillard
cae74309a5 Fix assert failure in control list interpolation.
How we never hit this before is beyond me, it's in some ooooold code.
2014-11-22 00:46:15 -05:00
David Robillard
4bc0d1c475 Fix lost MIDI note offs and controllers.
Fix initial read of discrete MIDI controllers.

Fix spurious note offs when starting to play in the middle of a note.

Faster search for initial event when cached iterator is invalid.

So much for dropping the cached iterator.  The iterator is responsible for
handling note offs, so that doesn't work.  This design means we have some stuck
note issues at the source read level, but they should be taken care of by the
state tracker anyway.
2014-11-20 15:36:11 -05:00
Robin Gareus
b6db707989 amend 484e38053 2014-11-18 05:28:27 +01:00