summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-10-01 03:03:44 +0200
committerRobin Gareus <robin@gareus.org>2017-10-01 03:03:44 +0200
commit05ab7a46b5cf4482ca999625da7405d47fd700a6 (patch)
treee5caae0434d5fa192ae6593bce112a89679d2d6e
parent0431ed3d3e1d91a19f9ce382a5531f71449b2d0c (diff)
Fix recording MIDI
- Fix API call to add region(midi_region) -- set count to "1" - Forward DataRecorded() signal - remove botched merge/rebase" a4a87f56 accidentally brought back code from old-destructive API which was removed in af103cf3 and 08c13007 There is no per track NonLayered record mode anymore, it's session global. - set can_record correctly to not accidentally clear last capture sources for cont'd recording (toggle track's rec-arm)
-rw-r--r--libs/ardour/ardour/disk_io.h3
-rw-r--r--libs/ardour/ardour/disk_writer.h3
-rw-r--r--libs/ardour/ardour/midi_track.h2
-rw-r--r--libs/ardour/audio_track.cc42
-rw-r--r--libs/ardour/disk_writer.cc8
-rw-r--r--libs/ardour/midi_track.cc8
-rw-r--r--libs/ardour/track.cc8
7 files changed, 15 insertions, 59 deletions
diff --git a/libs/ardour/ardour/disk_io.h b/libs/ardour/ardour/disk_io.h
index 63378c4cac..bb93e51298 100644
--- a/libs/ardour/ardour/disk_io.h
+++ b/libs/ardour/ardour/disk_io.h
@@ -50,7 +50,7 @@ class LIBARDOUR_API DiskIOProcessor : public Processor
Recordable = 0x1,
Hidden = 0x2,
Destructive = 0x4,
- NonLayered = 0x8
+ NonLayered = 0x8 // deprecated (kept only for enum compat)
};
static const std::string state_node_name;
@@ -77,7 +77,6 @@ class LIBARDOUR_API DiskIOProcessor : public Processor
bool hidden() const { return _flags & Hidden; }
bool recordable() const { return _flags & Recordable; }
- bool non_layered() const { return _flags & NonLayered; }
virtual void non_realtime_locate (samplepos_t);
diff --git a/libs/ardour/ardour/disk_writer.h b/libs/ardour/ardour/disk_writer.h
index 343bf566ea..fba494d383 100644
--- a/libs/ardour/ardour/disk_writer.h
+++ b/libs/ardour/ardour/disk_writer.h
@@ -97,9 +97,6 @@ public:
virtual void set_record_safe (bool yn);
bool destructive() const { return _flags & Destructive; }
- int set_destructive (bool yn);
- int set_non_layered (bool yn);
- bool can_become_destructive (bool& requires_bounce) const;
/** @return Start position of currently-running capture (in session samples) */
samplepos_t current_capture_start() const { return capture_start_sample; }
diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h
index 93856282c4..417d7688f6 100644
--- a/libs/ardour/ardour/midi_track.h
+++ b/libs/ardour/ardour/midi_track.h
@@ -161,6 +161,8 @@ private:
void track_input_active (IOChange, void*);
void map_input_active (bool);
+ void data_recorded (boost::weak_ptr<MidiSource> src);
+
/** Update automation controls to reflect any changes in buffers. */
void update_controls (BufferSet const& bufs);
void restore_controls ();
diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc
index efce77f6d8..cfcb1fbf14 100644
--- a/libs/ardour/audio_track.cc
+++ b/libs/ardour/audio_track.cc
@@ -64,48 +64,6 @@ AudioTrack::~AudioTrack ()
}
}
-#ifdef XXX_OLD_DESTRUCTIVE_API_XXX
-int
-AudioTrack::set_mode (TrackMode m)
-{
- if (m != _mode) {
-
- if (!Profile->get_trx() && _diskstream->set_destructive (m == Destructive)) {
- return -1;
- }
-
- _diskstream->set_non_layered (m == NonLayered);
- _mode = m;
-
- TrackModeChanged (); /* EMIT SIGNAL */
- }
-
- return 0;
-}
-
-bool
-AudioTrack::can_use_mode (TrackMode m, bool& bounce_required)
-{
- switch (m) {
- case NonLayered:
- case Normal:
- bounce_required = false;
- return true;
-
- case Destructive:
- if (Profile->get_trx()) {
- return false;
- } else {
- return _diskstream->can_become_destructive (bounce_required);
- }
- break;
-
- default:
- return false;
- }
-}
-#endif
-
int
AudioTrack::set_state (const XMLNode& node, int version)
{
diff --git a/libs/ardour/disk_writer.cc b/libs/ardour/disk_writer.cc
index 06218d1ff1..8fec82fa2a 100644
--- a/libs/ardour/disk_writer.cc
+++ b/libs/ardour/disk_writer.cc
@@ -359,7 +359,7 @@ DiskWriter::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp
bool re = record_enabled ();
bool punch_in = _session.config.get_punch_in () && _session.locations()->auto_punch_location ();
bool can_record = _session.actively_recording ();
- can_record |= _session.get_record_enabled () && punch_in && _session.transport_sample () <= _session.locations()->auto_punch_location ()->start ();
+ can_record |= speed != 0 && _session.get_record_enabled () && punch_in && _session.transport_sample () <= _session.locations()->auto_punch_location ()->start ();
_need_butler = false;
@@ -1371,14 +1371,8 @@ DiskWriter::use_destructive_playlist ()
assert((*chan)->write_source);
(*chan)->write_source->set_allow_remove_if_empty (false);
- /* this might be false if we switched modes, so force it */
-
-#ifdef XXX_OLD_DESTRUCTIVE_API_XXX
- (*chan)->write_source->set_destructive (true);
-#else
// should be set when creating the source or loading the state
assert ((*chan)->write_source->destructive());
-#endif
}
/* the source list will never be reset for a destructive track */
diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc
index 20faa80bc8..e6734ed08c 100644
--- a/libs/ardour/midi_track.cc
+++ b/libs/ardour/midi_track.cc
@@ -98,9 +98,17 @@ MidiTrack::init ()
_disk_writer->set_note_mode (_note_mode);
_disk_reader->reset_tracker ();
+ _disk_writer->DataRecorded.connect_same_thread (*this, boost::bind (&MidiTrack::data_recorded, this, _1));
+
return 0;
}
+void
+MidiTrack::data_recorded (boost::weak_ptr<MidiSource> src)
+{
+ DataRecorded (src); /* EMIT SIGNAL */
+}
+
bool
MidiTrack::can_be_record_safe ()
{
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index 45e4bce9b0..de1cc56bf6 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -91,8 +91,6 @@ Track::init ()
if (_mode == Destructive && !Profile->get_trx()) {
dflags = DiskIOProcessor::Flag (dflags | DiskIOProcessor::Destructive);
- } else if (_mode == NonLayered){
- dflags = DiskIOProcessor::Flag(dflags | DiskIOProcessor::NonLayered);
}
_disk_reader.reset (new DiskReader (_session, name(), dflags));
@@ -1035,9 +1033,9 @@ Track::use_captured_midi_sources (SourceList& srcs, CaptureInfos const & capture
continue; /* XXX is this OK? */
}
- // cerr << "add new region, buffer position = " << buffer_position << " @ " << (*ci)->start << endl;
+ cerr << "add new region, len = " << (*ci)->samples << " @ " << (*ci)->start << endl;
- pl->add_region (midi_region, (*ci)->start + preroll_off, _disk_writer->non_layered());
+ pl->add_region (midi_region, (*ci)->start + preroll_off, 1, _session.config.get_layered_record_mode ());
}
pl->thaw ();
@@ -1139,7 +1137,7 @@ Track::use_captured_audio_sources (SourceList& srcs, CaptureInfos const & captur
continue; /* XXX is this OK? */
}
- pl->add_region (region, (*ci)->start + preroll_off, 1, _disk_writer->non_layered());
+ pl->add_region (region, (*ci)->start + preroll_off, 1, _session.config.get_layered_record_mode());
pl->set_layer (region, DBL_MAX);
buffer_position += (*ci)->samples;