summaryrefslogtreecommitdiff
path: root/libs/ardour/audio_track.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/audio_track.cc')
-rw-r--r--libs/ardour/audio_track.cc168
1 files changed, 16 insertions, 152 deletions
diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc
index 82a2a38c2c..b3727937e2 100644
--- a/libs/ardour/audio_track.cc
+++ b/libs/ardour/audio_track.cc
@@ -43,7 +43,7 @@ using namespace PBD;
AudioTrack::AudioTrack (Session& sess, string name, Route::Flag flag, TrackMode mode)
: Route (sess, name, 1, -1, -1, -1, flag),
_diskstream (0),
- _midi_rec_enable_control (*this, _session.midi_port())
+ _rec_enable_control (*this)
{
AudioDiskstream::Flag dflags = AudioDiskstream::Flag (0);
@@ -65,26 +65,17 @@ AudioTrack::AudioTrack (Session& sess, string name, Route::Flag flag, TrackMode
_mode = mode;
set_diskstream (*ds, this);
-
- // session.SMPTEOffsetChanged.connect (mem_fun (*this, &AudioTrack::handle_smpte_offset_change));
-
- // we do this even though Route already did it in it's init
- reset_midi_control (_session.midi_port(), _session.get_midi_control());
-
}
AudioTrack::AudioTrack (Session& sess, const XMLNode& node)
: Route (sess, "to be renamed", 0, 0, -1, -1),
_diskstream (0),
- _midi_rec_enable_control (*this, _session.midi_port())
+ _rec_enable_control (*this)
{
_freeze_record.state = NoFreeze;
set_state (node);
_declickable = true;
_saved_meter_point = _meter_point;
-
- // we do this even though Route already did it in it's init
- reset_midi_control (_session.midi_port(), _session.get_midi_control());
}
AudioTrack::~AudioTrack ()
@@ -191,7 +182,7 @@ AudioTrack::use_diskstream (string name)
}
int
-AudioTrack::use_diskstream (id_t id)
+AudioTrack::use_diskstream (const PBD::ID& id)
{
AudioDiskstream *dstream;
@@ -235,10 +226,7 @@ AudioTrack::set_record_enable (bool yn, void *src)
set_meter_point (_saved_meter_point, this);
}
- if (_session.get_midi_feedback()) {
- _midi_rec_enable_control.send_feedback (record_enabled());
- }
-
+ _rec_enable_control.Changed ();
}
void
@@ -252,7 +240,6 @@ AudioTrack::set_state (const XMLNode& node)
{
const XMLProperty *prop;
XMLNodeConstIterator iter;
- XMLNodeList midi_kids;
if (Route::set_state (node)) {
return -1;
@@ -271,36 +258,6 @@ AudioTrack::set_state (const XMLNode& node)
_mode = Normal;
}
- midi_kids = node.children ("MIDI");
-
- for (iter = midi_kids.begin(); iter != midi_kids.end(); ++iter) {
-
- XMLNodeList kids;
- XMLNodeConstIterator miter;
- XMLNode* child;
-
- kids = (*iter)->children ();
-
- for (miter = kids.begin(); miter != kids.end(); ++miter) {
-
- child =* miter;
-
- if (child->name() == "rec_enable") {
-
- MIDI::eventType ev = MIDI::on; /* initialize to keep gcc happy */
- MIDI::byte additional = 0; /* ditto */
- MIDI::channel_t chn = 0; /* ditto */
-
- if (get_midi_node_info (child, ev, chn, additional)) {
- _midi_rec_enable_control.set_control_type (chn, ev, additional);
- } else {
- error << string_compose(_("MIDI rec_enable control specification for %1 is incomplete, so it has been ignored"), _name) << endmsg;
- }
- }
- }
- }
-
-
if ((prop = node.property ("diskstream-id")) == 0) {
/* some old sessions use the diskstream name rather than the ID */
@@ -317,7 +274,7 @@ AudioTrack::set_state (const XMLNode& node)
} else {
- id_t id = strtoull (prop->value().c_str(), 0, 10);
+ PBD::ID id (prop->value());
if (use_diskstream (id)) {
return -1;
@@ -366,7 +323,7 @@ AudioTrack::state(bool full_state)
{
XMLNode& root (Route::state(full_state));
XMLNode* freeze_node;
- char buf[32];
+ char buf[64];
if (_freeze_record.playlist) {
XMLNode* inode;
@@ -378,7 +335,7 @@ AudioTrack::state(bool full_state)
for (vector<FreezeRecordInsertInfo*>::iterator i = _freeze_record.insert_info.begin(); i != _freeze_record.insert_info.end(); ++i) {
inode = new XMLNode (X_("insert"));
- snprintf (buf, sizeof (buf), "%" PRIu64, (*i)->id);
+ (*i)->id.print (buf);
inode->add_property (X_("id"), buf);
inode->add_child_copy ((*i)->state);
@@ -402,29 +359,6 @@ AudioTrack::state(bool full_state)
align_node->add_property (X_("style"), buf);
root.add_child_nocopy (*align_node);
- /* MIDI control */
-
- MIDI::channel_t chn;
- MIDI::eventType ev;
- MIDI::byte additional;
- XMLNode* midi_node = 0;
- XMLNode* child;
- XMLNodeList midikids;
-
- midikids = root.children ("MIDI");
- if (!midikids.empty()) {
- midi_node = midikids.front();
- }
- else {
- midi_node = root.add_child ("MIDI");
- }
-
- if (_midi_rec_enable_control.get_control_info (chn, ev, additional) && midi_node) {
-
- child = midi_node->add_child ("rec_enable");
- set_midi_node_info (child, ev, chn, additional);
- }
-
XMLNode* remote_control_node = new XMLNode (X_("remote_control"));
snprintf (buf, sizeof (buf), "%d", _remote_control_id);
remote_control_node->add_property (X_("id"), buf);
@@ -445,7 +379,7 @@ AudioTrack::state(bool full_state)
diskstream.
*/
- snprintf (buf, sizeof (buf), "%" PRIu64, _diskstream->id());
+ _diskstream->id().print (buf);
root.add_property ("diskstream-id", buf);
return root;
@@ -506,7 +440,7 @@ AudioTrack::set_state_part_two ()
FreezeRecordInsertInfo* frii = new FreezeRecordInsertInfo (*((*citer)->children().front()));
frii->insert = 0;
- sscanf (prop->value().c_str(), "%" PRIu64, &frii->id);
+ frii->id = prop->value ();
_freeze_record.insert_info.push_back (frii);
}
}
@@ -1054,93 +988,23 @@ AudioTrack::freeze_state() const
return _freeze_record.state;
}
-
-void
-AudioTrack::reset_midi_control (MIDI::Port* port, bool on)
+AudioTrack::RecEnableControllable::RecEnableControllable (AudioTrack& s)
+ : track (s)
{
- MIDI::channel_t chn;
- MIDI::eventType ev;
- MIDI::byte extra;
-
- Route::reset_midi_control (port, on);
-
- _midi_rec_enable_control.get_control_info (chn, ev, extra);
- if (!on) {
- chn = -1;
- }
- _midi_rec_enable_control.midi_rebind (port, chn);
}
void
-AudioTrack::send_all_midi_feedback ()
-{
- if (_session.get_midi_feedback()) {
-
- Route::send_all_midi_feedback();
-
- _midi_rec_enable_control.send_feedback (record_enabled());
- }
-}
-
-
-AudioTrack::MIDIRecEnableControl::MIDIRecEnableControl (AudioTrack& s, MIDI::Port* port)
- : MIDI::Controllable (port, 0), track (s), setting(false)
-{
- last_written = false; /* XXX need a good out of bound value */
-}
-
-void
-AudioTrack::MIDIRecEnableControl::set_value (float val)
+AudioTrack::RecEnableControllable::set_value (float val)
{
bool bval = ((val >= 0.5f) ? true: false);
-
- setting = true;
track.set_record_enable (bval, this);
- setting = false;
-}
-
-void
-AudioTrack::MIDIRecEnableControl::send_feedback (bool value)
-{
-
- if (!setting && get_midi_feedback()) {
- MIDI::byte val = (MIDI::byte) (value ? 127: 0);
- MIDI::channel_t ch = 0;
- MIDI::eventType ev = MIDI::none;
- MIDI::byte additional = 0;
- MIDI::EventTwoBytes data;
-
- if (get_control_info (ch, ev, additional)) {
- data.controller_number = additional;
- data.value = val;
-
- track._session.send_midi_message (get_port(), ev, ch, data);
- }
- }
-
}
-MIDI::byte*
-AudioTrack::MIDIRecEnableControl::write_feedback (MIDI::byte* buf, int32_t& bufsize, bool val, bool force)
+float
+AudioTrack::RecEnableControllable::get_value (void) const
{
- if (get_midi_feedback()) {
-
- MIDI::channel_t ch = 0;
- MIDI::eventType ev = MIDI::none;
- MIDI::byte additional = 0;
-
- if (get_control_info (ch, ev, additional)) {
- if (val != last_written || force) {
- *buf++ = ev & ch;
- *buf++ = additional; /* controller number */
- *buf++ = (MIDI::byte) (val ? 127: 0);
- last_written = val;
- bufsize -= 3;
- }
- }
- }
-
- return buf;
+ if (track.record_enabled()) { return 1.0f; }
+ return 0.0f;
}
void