Add Virtual-Keyboard MIDI port
authorRobin Gareus <robin@gareus.org>
Fri, 18 Oct 2019 01:42:41 +0000 (03:42 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 18 Oct 2019 01:42:41 +0000 (03:42 +0200)
libs/ardour/ardour/midiport_manager.h
libs/ardour/ardour/session.h
libs/ardour/globals.cc
libs/ardour/midiport_manager.cc
libs/ardour/session_midi.cc

index 58ddf7e5ba3467578dd31daf1a2aaf878bc26895..50a04d0196755b9eae0f6ae50a65db6e4616644e 100644 (file)
@@ -93,6 +93,12 @@ public:
                return _midi_clock_output_port;
        }
 
+       /* Virtual MIDI keyboard output */
+       boost::shared_ptr<ARDOUR::Port> vkbd_output_port () const
+       {
+               return boost::dynamic_pointer_cast<MidiPort> (_vkbd_out);
+       }
+
        void                set_midi_port_states (const XMLNodeList&);
        std::list<XMLNode*> get_midi_port_states () const;
 
@@ -106,6 +112,7 @@ protected:
        boost::shared_ptr<Port> _mmc_out;
        boost::shared_ptr<Port> _scene_in;
        boost::shared_ptr<Port> _scene_out;
+       boost::shared_ptr<Port> _vkbd_out;
 
        /* synchronously handled ports: ARDOUR::MidiPort */
        boost::shared_ptr<MidiPort> _mtc_output_port;
index e87dd18bae7e6d9e930aba8edf75e2d1a5bee934..7adb4fc8276095b035a5ab938cdef5685e45b9a1 100644 (file)
@@ -1200,6 +1200,7 @@ public:
        boost::shared_ptr<Port> mmc_input_port () const;
        boost::shared_ptr<Port> scene_input_port () const;
        boost::shared_ptr<Port> scene_output_port () const;
+       boost::shared_ptr<Port> vkbd_output_port () const;
 
        /* synchronous MIDI ports used for synchronization */
 
index 0f8ae9a4f28b7830e2e452d2d5e401e528b7e7ed..44d9b22748151e6616585543cb02e41be5e2905e 100644 (file)
@@ -593,6 +593,7 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir
        reserved_io_names[_("Monitor")] = true;
        reserved_io_names[_("Master")] = true;
        reserved_io_names["auditioner"] = true; // auditioner.cc  Track (s, "auditioner",...)
+       reserved_io_names[_("Virtual Keyboard")] = false;
 
        /* pure I/O */
        reserved_io_names[X_("Click")] = false; // session.cc ClickIO (*this, X_("Click")
index 0033c80bb092fac89cb461be1a07fe4486635a29..d1048f4ecc45e09e0e6e5457919036f3f72eb375 100644 (file)
@@ -77,6 +77,9 @@ MidiPortManager::create_ports ()
        _scene_in  = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("Scene in"), true);
        _scene_out = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("Scene out"), true);
 
+       _vkbd_out = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("Virtual Keyboard"), true);
+       boost::dynamic_pointer_cast<AsyncMIDIPort>(_vkbd_out)->set_flush_at_cycle_start (true);
+
        /* Now register ports used to send positional sync data (MTC and MIDI Clock) */
 
        boost::shared_ptr<ARDOUR::Port> p;
@@ -102,6 +105,7 @@ MidiPortManager::set_midi_port_states (const XMLNodeList&nodes)
        ports.insert (make_pair (_midi_out->name(), _midi_out));
        ports.insert (make_pair (_mmc_in->name(), _mmc_in));
        ports.insert (make_pair (_mmc_out->name(), _mmc_out));
+       ports.insert (make_pair (_vkbd_out->name(), _vkbd_out));
        ports.insert (make_pair (_scene_out->name(), _scene_out));
        ports.insert (make_pair (_scene_in->name(), _scene_in));
 
@@ -132,6 +136,7 @@ MidiPortManager::get_midi_port_states () const
        ports.insert (make_pair (_midi_out->name(), _midi_out));
        ports.insert (make_pair (_mmc_in->name(), _mmc_in));
        ports.insert (make_pair (_mmc_out->name(), _mmc_out));
+       ports.insert (make_pair (_vkbd_out->name(), _vkbd_out));
        ports.insert (make_pair (_scene_out->name(), _scene_out));
        ports.insert (make_pair (_scene_in->name(), _scene_in));
 
index a305cd7c66e7d5ca1d2123bf4ef7187628f24813..6a1039ea356c4d114003976f33c7f49b1e3fd265 100644 (file)
@@ -692,13 +692,18 @@ Session::scene_input_port () const
        return _midi_ports->scene_input_port ();
 }
 
+boost::shared_ptr<ARDOUR::Port>
+Session::vkbd_output_port () const
+{
+       return _midi_ports->vkbd_output_port ();
+}
+
 boost::shared_ptr<MidiPort>
 Session::midi_clock_output_port () const
 {
        return _midi_ports->midi_clock_output_port ();
 }
 
-
 boost::shared_ptr<MidiPort>
 Session::mtc_output_port () const
 {