allow to get custom/product/version independent cach dir
[ardour.git] / libs / ardour / midi_track.cc
index 7c1b3a9399cc99a0b0be44a54b20a3ddafef7a79..f1344e7697640eac1d85cf604d8ada3f00a7f584 100644 (file)
@@ -54,7 +54,7 @@
 #include "ardour/session_playlists.h"
 #include "ardour/utils.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 namespace ARDOUR {
 class InterThreadInfo;
@@ -67,8 +67,8 @@ using namespace std;
 using namespace ARDOUR;
 using namespace PBD;
 
-MidiTrack::MidiTrack (Session& sess, string name, Route::Flag flag, TrackMode mode)
-       : Track (sess, name, flag, mode, DataType::MIDI)
+MidiTrack::MidiTrack (Session& sess, string name, TrackMode mode)
+       : Track (sess, name, PresentationInfo::MidiTrack, mode, DataType::MIDI)
        , _immediate_events(1024) // FIXME: size?
        , _step_edit_ring_buffer(64) // FIXME: size?
        , _note_mode(Sustained)
@@ -396,16 +396,6 @@ MidiTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame
                return dret;
        }
 
-       if (_mute_control->list() && _mute_control->automation_playback()) {
-               bool        valid = false;
-               const float mute  = _mute_control->list()->rt_safe_eval(transport_frame, valid);
-               if (mute >= 0.5 && !muted()) {
-                       _mute_control->set_value_unchecked(1.0);  // mute
-               } else if (mute < 0.5 && muted()) {
-                       _mute_control->set_value_unchecked(0.0);  // unmute
-               }
-       }
-
        BufferSet& bufs = _session.get_route_buffers (n_process_buffers());
 
        fill_buffers_with_input (bufs, _input, nframes);
@@ -414,7 +404,7 @@ MidiTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame
        _capture_filter.filter (bufs);
 
        if (_meter_point == MeterInput && ((_monitoring_control->monitoring_choice() & MonitorInput) || _diskstream->record_enabled())) {
-               _meter->run (bufs, start_frame, end_frame, nframes, true);
+               _meter->run (bufs, start_frame, end_frame, 1.0 /*speed()*/, nframes, true);
        }
 
 
@@ -454,12 +444,7 @@ MidiTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame
        process_output_buffers (bufs, start_frame, end_frame, nframes,
                                declick, (!diskstream->record_enabled() && !_session.transport_stopped()));
 
-       for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
-               boost::shared_ptr<Delivery> d = boost::dynamic_pointer_cast<Delivery> (*i);
-               if (d) {
-                       d->flush_buffers (nframes);
-               }
-       }
+       flush_processor_buffers_locked (nframes);
 
        need_butler = diskstream->commit (playback_distance);
 
@@ -716,6 +701,7 @@ MidiTrack::set_parameter_automation_state (Evoral::Parameter param, AutoState st
        case MidiPgmChangeAutomation:
        case MidiPitchBenderAutomation:
        case MidiChannelPressureAutomation:
+       case MidiNotePressureAutomation:
        case MidiSystemExclusiveAutomation:
                /* The track control for MIDI parameters is for immediate events to act
                   as a control surface, write/touch for them is not currently
@@ -772,6 +758,12 @@ MidiTrack::MidiControl::actually_set_value (double val, PBD::Controllable::Group
                        ev[1] = int(val);
                        break;
 
+               case MidiNotePressureAutomation:
+                       ev[0] += MIDI_CMD_NOTE_PRESSURE;
+                       ev[1] = parameter.id();
+                       ev[2] = int(val);
+                       break;
+
                case MidiPitchBenderAutomation:
                        ev[0] += MIDI_CMD_BENDER;
                        ev[1] = 0x7F & int(val);
@@ -920,7 +912,7 @@ MidiTrack::act_on_mute ()
                return;
        }
 
-       if (muted() || _mute_master->muted_by_others_at(MuteMaster::AllPoints)) {
+       if (muted() || _mute_master->muted_by_others_soloing_at (MuteMaster::AllPoints)) {
                /* only send messages for channels we are using */
 
                uint16_t mask = _playback_filter.get_channel_mask();
@@ -947,7 +939,7 @@ void
 MidiTrack::monitoring_changed (bool self, Controllable::GroupControlDisposition gcd)
 {
        Track::monitoring_changed (self, gcd);
-       
+
        /* monitoring state changed, so flush out any on notes at the
         * port level.
         */