summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-10-18 03:42:41 +0200
committerRobin Gareus <robin@gareus.org>2019-10-18 03:42:41 +0200
commitf961fd46874d407c6569e0b6f9ddbede09900b3a (patch)
treececea699655afcb4d42830f79672f70f019470ea /libs/ardour
parentf4ebb5995da8e7d6af7c8c74b1797140df53b3c0 (diff)
Add Virtual-Keyboard MIDI port
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/midiport_manager.h7
-rw-r--r--libs/ardour/ardour/session.h1
-rw-r--r--libs/ardour/globals.cc1
-rw-r--r--libs/ardour/midiport_manager.cc5
-rw-r--r--libs/ardour/session_midi.cc7
5 files changed, 20 insertions, 1 deletions
diff --git a/libs/ardour/ardour/midiport_manager.h b/libs/ardour/ardour/midiport_manager.h
index 58ddf7e5ba..50a04d0196 100644
--- a/libs/ardour/ardour/midiport_manager.h
+++ b/libs/ardour/ardour/midiport_manager.h
@@ -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;
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index e87dd18bae..7adb4fc827 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -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 */
diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc
index 0f8ae9a4f2..44d9b22748 100644
--- a/libs/ardour/globals.cc
+++ b/libs/ardour/globals.cc
@@ -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")
diff --git a/libs/ardour/midiport_manager.cc b/libs/ardour/midiport_manager.cc
index 0033c80bb0..d1048f4ecc 100644
--- a/libs/ardour/midiport_manager.cc
+++ b/libs/ardour/midiport_manager.cc
@@ -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));
diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc
index a305cd7c66..6a1039ea35 100644
--- a/libs/ardour/session_midi.cc
+++ b/libs/ardour/session_midi.cc
@@ -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
{