Make recorded MIDI controls discrete, take 2.
Hopefully-desired behaviour is that controls created in the GUI are linear, so clicking in stuff works like other automation, but controls that originated from recording are set to discrete so Ardour plays back the input exactly, instead of doing crazy things like linear interpolation of already high-rate user input, hold pedals, and so on. Hopefully that remains the desired behaviour, because we're basically screwed for ever making any control discrete by default, since we only save the mode to XML at all if it's not the default, which is currently linear.
This commit is contained in:
parent
ad340333f4
commit
0bf778c847
@ -34,6 +34,7 @@
|
|||||||
#include "pbd/pthread_utils.h"
|
#include "pbd/pthread_utils.h"
|
||||||
#include "pbd/basename.h"
|
#include "pbd/basename.h"
|
||||||
|
|
||||||
|
#include "evoral/Control.hpp"
|
||||||
#include "evoral/EventSink.hpp"
|
#include "evoral/EventSink.hpp"
|
||||||
|
|
||||||
#include "ardour/debug.h"
|
#include "ardour/debug.h"
|
||||||
@ -303,6 +304,14 @@ MidiSource::mark_midi_streaming_write_completed (Evoral::Sequence<Evoral::Musica
|
|||||||
{
|
{
|
||||||
if (_model) {
|
if (_model) {
|
||||||
_model->end_write (option, end);
|
_model->end_write (option, end);
|
||||||
|
|
||||||
|
/* Make captured controls discrete to play back user input exactly. */
|
||||||
|
for (MidiModel::Controls::iterator i = _model->controls().begin(); i != _model->controls().end(); ++i) {
|
||||||
|
if (i->second->list()) {
|
||||||
|
i->second->list()->set_interpolation(Evoral::ControlList::Discrete);
|
||||||
|
_interpolation_style.insert(std::make_pair(i->second->parameter(), Evoral::ControlList::Discrete));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_writing = false;
|
_writing = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user