From f961fd46874d407c6569e0b6f9ddbede09900b3a Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 18 Oct 2019 03:42:41 +0200 Subject: [PATCH] Add Virtual-Keyboard MIDI port --- libs/ardour/ardour/midiport_manager.h | 7 +++++++ libs/ardour/ardour/session.h | 1 + libs/ardour/globals.cc | 1 + libs/ardour/midiport_manager.cc | 5 +++++ libs/ardour/session_midi.cc | 7 ++++++- 5 files changed, 20 insertions(+), 1 deletion(-) 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 vkbd_output_port () const + { + return boost::dynamic_pointer_cast (_vkbd_out); + } + void set_midi_port_states (const XMLNodeList&); std::list get_midi_port_states () const; @@ -106,6 +112,7 @@ protected: boost::shared_ptr _mmc_out; boost::shared_ptr _scene_in; boost::shared_ptr _scene_out; + boost::shared_ptr _vkbd_out; /* synchronously handled ports: ARDOUR::MidiPort */ boost::shared_ptr _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 mmc_input_port () const; boost::shared_ptr scene_input_port () const; boost::shared_ptr scene_output_port () const; + boost::shared_ptr 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(_vkbd_out)->set_flush_at_cycle_start (true); + /* Now register ports used to send positional sync data (MTC and MIDI Clock) */ boost::shared_ptr 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 +Session::vkbd_output_port () const +{ + return _midi_ports->vkbd_output_port (); +} + boost::shared_ptr Session::midi_clock_output_port () const { return _midi_ports->midi_clock_output_port (); } - boost::shared_ptr Session::mtc_output_port () const {