Get the _note_mode set up correctly in a MidiDiskstream
before the initial buffer fill, so that percussive mode tracks play properly from the off (#4737). git-svn-id: svn://localhost/ardour2/branches/3.0@12068 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
8b111ed224
commit
10d37fecc1
@ -107,16 +107,21 @@ MidiTrack::set_record_enabled (bool yn, void *src)
|
||||
void
|
||||
MidiTrack::set_diskstream (boost::shared_ptr<Diskstream> ds)
|
||||
{
|
||||
/* We have to do this here, as Track::set_diskstream will cause a buffer refill,
|
||||
and the diskstream must be set up to fill its buffers using the correct _note_mode.
|
||||
*/
|
||||
boost::shared_ptr<MidiDiskstream> mds = boost::dynamic_pointer_cast<MidiDiskstream> (ds);
|
||||
mds->set_note_mode (_note_mode);
|
||||
|
||||
Track::set_diskstream (ds);
|
||||
|
||||
midi_diskstream()->reset_tracker ();
|
||||
mds->reset_tracker ();
|
||||
|
||||
_diskstream->set_track (this);
|
||||
_diskstream->set_destructive (_mode == Destructive);
|
||||
_diskstream->set_record_enabled (false);
|
||||
|
||||
_diskstream_data_recorded_connection.disconnect ();
|
||||
boost::shared_ptr<MidiDiskstream> mds = boost::dynamic_pointer_cast<MidiDiskstream> (ds);
|
||||
mds->DataRecorded.connect_same_thread (
|
||||
_diskstream_data_recorded_connection,
|
||||
boost::bind (&MidiTrack::diskstream_data_recorded, this, _1));
|
||||
@ -135,6 +140,16 @@ MidiTrack::set_state (const XMLNode& node, int version)
|
||||
{
|
||||
const XMLProperty *prop;
|
||||
|
||||
/* This must happen before Track::set_state(), as there will be a buffer
|
||||
fill during that call, and we must fill buffers using the correct
|
||||
_note_mode.
|
||||
*/
|
||||
if ((prop = node.property (X_("note-mode"))) != 0) {
|
||||
_note_mode = NoteMode (string_2_enum (prop->value(), _note_mode));
|
||||
} else {
|
||||
_note_mode = Sustained;
|
||||
}
|
||||
|
||||
if (Track::set_state (node, version)) {
|
||||
return -1;
|
||||
}
|
||||
@ -142,12 +157,6 @@ MidiTrack::set_state (const XMLNode& node, int version)
|
||||
// No destructive MIDI tracks (yet?)
|
||||
_mode = Normal;
|
||||
|
||||
if ((prop = node.property (X_("note-mode"))) != 0) {
|
||||
_note_mode = NoteMode (string_2_enum (prop->value(), _note_mode));
|
||||
} else {
|
||||
_note_mode = Sustained;
|
||||
}
|
||||
|
||||
if ((prop = node.property ("midi-thru")) != 0) {
|
||||
set_midi_thru (string_is_affirmative (prop->value()));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user