@@ -255,7 +255,7 @@ | |||||
<item row="0" column="0"> | <item row="0" column="0"> | ||||
<widget class="QLabel" name="label_2"> | <widget class="QLabel" name="label_2"> | ||||
<property name="text"> | <property name="text"> | ||||
<string>Host URL:</string> | |||||
<string>Host URLs:</string> | |||||
</property> | </property> | ||||
<property name="alignment"> | <property name="alignment"> | ||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | ||||
@@ -263,13 +263,16 @@ | |||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="0" column="1"> | <item row="0" column="1"> | ||||
<widget class="QLineEdit" name="le_osc_url"> | |||||
<widget class="QLineEdit" name="le_osc_url_tcp"> | |||||
<property name="frame"> | |||||
<bool>false</bool> | |||||
</property> | |||||
<property name="readOnly"> | <property name="readOnly"> | ||||
<bool>true</bool> | <bool>true</bool> | ||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="1" column="0"> | |||||
<item row="3" column="0"> | |||||
<widget class="QLabel" name="label_7"> | <widget class="QLabel" name="label_7"> | ||||
<property name="text"> | <property name="text"> | ||||
<string>Valid commands:</string> | <string>Valid commands:</string> | ||||
@@ -279,7 +282,7 @@ | |||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="1" column="1"> | |||||
<item row="3" column="1"> | |||||
<widget class="QLabel" name="l_osc_cmds"> | <widget class="QLabel" name="l_osc_cmds"> | ||||
<property name="font"> | <property name="font"> | ||||
<font> | <font> | ||||
@@ -294,7 +297,7 @@ | |||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="2" column="0"> | |||||
<item row="4" column="0"> | |||||
<widget class="QLabel" name="label"> | <widget class="QLabel" name="label"> | ||||
<property name="text"> | <property name="text"> | ||||
<string>Example:</string> | <string>Example:</string> | ||||
@@ -304,7 +307,7 @@ | |||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="2" column="1"> | |||||
<item row="4" column="1"> | |||||
<widget class="QLabel" name="l_example"> | <widget class="QLabel" name="l_example"> | ||||
<property name="font"> | <property name="font"> | ||||
<font> | <font> | ||||
@@ -316,7 +319,7 @@ | |||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="3" column="1"> | |||||
<item row="5" column="1"> | |||||
<widget class="QLabel" name="l_example_help"> | <widget class="QLabel" name="l_example_help"> | ||||
<property name="text"> | <property name="text"> | ||||
<string>TextLabel</string> | <string>TextLabel</string> | ||||
@@ -326,7 +329,7 @@ | |||||
</property> | </property> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item row="4" column="0" colspan="2"> | |||||
<item row="6" column="0" colspan="2"> | |||||
<spacer name="verticalSpacer_2"> | <spacer name="verticalSpacer_2"> | ||||
<property name="orientation"> | <property name="orientation"> | ||||
<enum>Qt::Vertical</enum> | <enum>Qt::Vertical</enum> | ||||
@@ -339,6 +342,32 @@ | |||||
</property> | </property> | ||||
</spacer> | </spacer> | ||||
</item> | </item> | ||||
<item row="1" column="1"> | |||||
<widget class="QLineEdit" name="le_osc_url_udp"> | |||||
<property name="frame"> | |||||
<bool>false</bool> | |||||
</property> | |||||
<property name="readOnly"> | |||||
<bool>true</bool> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="2" column="0" colspan="2"> | |||||
<spacer name="verticalSpacer_5"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Vertical</enum> | |||||
</property> | |||||
<property name="sizeType"> | |||||
<enum>QSizePolicy::Fixed</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>20</width> | |||||
<height>5</height> | |||||
</size> | |||||
</property> | |||||
</spacer> | |||||
</item> | |||||
</layout> | </layout> | ||||
</widget> | </widget> | ||||
</widget> | </widget> | ||||
@@ -680,9 +680,14 @@ CARLA_EXPORT double carla_get_sample_rate(); | |||||
CARLA_EXPORT const char* carla_get_last_error(); | CARLA_EXPORT const char* carla_get_last_error(); | ||||
/*! | /*! | ||||
* Get the current engine OSC URL. | |||||
* Get the current engine OSC URL (TCP). | |||||
*/ | */ | ||||
CARLA_EXPORT const char* carla_get_host_osc_url(); | |||||
CARLA_EXPORT const char* carla_get_host_osc_url_tcp(); | |||||
/*! | |||||
* Get the current engine OSC URL (UDP). | |||||
*/ | |||||
CARLA_EXPORT const char* carla_get_host_osc_url_udp(); | |||||
/*! | /*! | ||||
* Send NSM announce message. | * Send NSM announce message. | ||||
@@ -2085,9 +2085,9 @@ const char* carla_get_last_error() | |||||
return standalone.lastError; | return standalone.lastError; | ||||
} | } | ||||
const char* carla_get_host_osc_url() | |||||
const char* carla_get_host_osc_url_tcp() | |||||
{ | { | ||||
carla_debug("carla_get_host_osc_url()"); | |||||
carla_debug("carla_get_host_osc_url_tcp()"); | |||||
CARLA_ASSERT(standalone.engine != nullptr); | CARLA_ASSERT(standalone.engine != nullptr); | ||||
if (standalone.engine == nullptr) | if (standalone.engine == nullptr) | ||||
@@ -2099,6 +2099,20 @@ const char* carla_get_host_osc_url() | |||||
return standalone.engine->getOscServerPathTCP(); | return standalone.engine->getOscServerPathTCP(); | ||||
} | } | ||||
const char* carla_get_host_osc_url_udp() | |||||
{ | |||||
carla_debug("carla_get_host_osc_url_udp()"); | |||||
CARLA_ASSERT(standalone.engine != nullptr); | |||||
if (standalone.engine == nullptr) | |||||
{ | |||||
standalone.lastError = "Engine is not started"; | |||||
return nullptr; | |||||
} | |||||
return standalone.engine->getOscServerPathUDP(); | |||||
} | |||||
// ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- | ||||
#define NSM_API_VERSION_MAJOR 1 | #define NSM_API_VERSION_MAJOR 1 | ||||
@@ -630,8 +630,11 @@ class Host(object): | |||||
self.lib.carla_get_last_error.argtypes = None | self.lib.carla_get_last_error.argtypes = None | ||||
self.lib.carla_get_last_error.restype = c_char_p | self.lib.carla_get_last_error.restype = c_char_p | ||||
self.lib.carla_get_host_osc_url.argtypes = None | |||||
self.lib.carla_get_host_osc_url.restype = c_char_p | |||||
self.lib.carla_get_host_osc_url_tcp.argtypes = None | |||||
self.lib.carla_get_host_osc_url_tcp.restype = c_char_p | |||||
self.lib.carla_get_host_osc_url_udp.argtypes = None | |||||
self.lib.carla_get_host_osc_url_udp.restype = c_char_p | |||||
self.lib.carla_nsm_announce.argtypes = [c_char_p, c_char_p, c_int] | self.lib.carla_nsm_announce.argtypes = [c_char_p, c_char_p, c_int] | ||||
self.lib.carla_nsm_announce.restype = None | self.lib.carla_nsm_announce.restype = None | ||||
@@ -880,8 +883,11 @@ class Host(object): | |||||
def get_last_error(self): | def get_last_error(self): | ||||
return self.lib.carla_get_last_error() | return self.lib.carla_get_last_error() | ||||
def get_host_osc_url(self): | |||||
return self.lib.carla_get_host_osc_url() | |||||
def get_host_osc_url_tcp(self): | |||||
return self.lib.carla_get_host_osc_url_tcp() | |||||
def get_host_osc_url_udp(self): | |||||
return self.lib.carla_get_host_osc_url_udp() | |||||
def get_buffer_size(self): | def get_buffer_size(self): | ||||
return self.lib.carla_get_buffer_size() | return self.lib.carla_get_buffer_size() | ||||
@@ -24,6 +24,7 @@ from PyQt4.QtGui import QApplication, QInputDialog, QMainWindow | |||||
from liblo import make_method, Address, ServerError, ServerThread | from liblo import make_method, Address, ServerError, ServerThread | ||||
from liblo import send as lo_send | from liblo import send as lo_send | ||||
from liblo import TCP as LO_TCP | from liblo import TCP as LO_TCP | ||||
from liblo import UDP as LO_UDP | |||||
# ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
# Imports (Custom) | # Imports (Custom) | ||||
@@ -480,8 +481,8 @@ class Host(object): | |||||
# OSC Control server | # OSC Control server | ||||
class ControlServer(ServerThread): | class ControlServer(ServerThread): | ||||
def __init__(self, parent): | |||||
ServerThread.__init__(self, 8087, LO_TCP) | |||||
def __init__(self, parent, mode): | |||||
ServerThread.__init__(self, 8087, mode) | |||||
self.fParent = parent | self.fParent = parent | ||||
@@ -730,7 +731,7 @@ class CarlaControlW(QMainWindow): | |||||
print("Connecting to \"%s\" as '%s'..." % (self.lo_address, lo_targetName)) | print("Connecting to \"%s\" as '%s'..." % (self.lo_address, lo_targetName)) | ||||
try: | try: | ||||
self.lo_server = ControlServer(self) | |||||
self.lo_server = ControlServer(self, LO_UDP if self.lo_address.startswith("osc.udp") else LO_TCP) | |||||
except: # ServerError, err: | except: # ServerError, err: | ||||
print("Connecting error!") | print("Connecting error!") | ||||
#print str(err) | #print str(err) | ||||
@@ -829,7 +829,13 @@ class CarlaAboutW(QDialog): | |||||
else: | else: | ||||
self.ui.l_extended.setText(cString(Carla.host.get_extended_license_text())) | self.ui.l_extended.setText(cString(Carla.host.get_extended_license_text())) | ||||
self.ui.le_osc_url.setText(cString(Carla.host.get_host_osc_url()) if Carla.host.is_engine_running() else self.tr("(Engine not running)")) | |||||
if Carla.host.is_engine_running(): | |||||
self.ui.le_osc_url_tcp.setText(cString(Carla.host.get_host_osc_url_tcp())) | |||||
self.ui.le_osc_url_udp.setText(cString(Carla.host.get_host_osc_url_udp())) | |||||
else: | |||||
self.ui.le_osc_url_tcp.setText(self.tr("(Engine not running)")) | |||||
self.ui.le_osc_url_udp.setText(self.tr("(Engine not running)")) | |||||
self.ui.l_osc_cmds.setText("" | self.ui.l_osc_cmds.setText("" | ||||
" /set_active <i-value>\n" | " /set_active <i-value>\n" | ||||