Networking

Networking is a crucial part of communication between machines. Network management and security are critical tasks because of actions that can be triggered remotely, sometimes unintentionally. It is beyond the scope of this guide to provide basic network instruction, but proper network management is essential.
GALAXY can use an IPv4, IPv6, or mDNS address. Their functions are equivalent and they can be mixed within a network. The server can connect and control multiple clients simultaneously. GALAXY’s OSC server listens to two different networking protocols, TCP/IP and UDP, each with its advantages and constraints.
Example: Telnet connection to IPv4 address and the ASCII port
telnet 192.168.71.146 25003
Example: Telnet connection to IPv6 address and the ASCII port
telnet fe80::21c:abff:fe00:584c%en12 25003
Example: Constructing a user-created mDNS address by combining entity name and group name from Compass
From Compass we see the entity name is “MyGALAXY,” and the group name is “MyGroup.”
Entity Name.Group Name.local
telnet MyGalaxy.MyGroup.local 25003
Example: Generating an automatic mDNS address by combining the device type and serial number
A Meyer Sound Galileo GALAXY module is a device type mslg-gx-nnn
where nnn
can be 408, 816, 816aes, or bluehorn.
telnet mslg-gx-816-16342723.local 25003
Note
Telnet is not available on the current macOS. Use the netcat
command (nc) instead.
TCP/IP

The Transmission Control Protocol is connection-oriented, which requires handshaking to set up end-to-end communication. Once a connection is established, data can be sent bi-directionally.
Reliable – TCP manages message acknowledgment, retransmission and timeout. Multiple attempts to deliver the message are made. If some part of the data is lost along the way, the server will re-request the lost part. There is either no missing data, or, in case of multiple timeouts, the connection is dropped.
Ordered – If two messages are sent in sequence over a connection, the first message will reach the receiving application first. If data segments arrive in the wrong order, TCP buffers delay the out-of-order data until it is properly re-ordered and delivered to the application.
Heavyweight – TCP requires three packets to set up a socket connection before any user data can be sent. TCP prevents data congestion.
Streaming – Data is read as a continuous byte stream with nothing to distinguish signal message (segment) boundaries.
UDP

The Universal Data Protocol is a simpler message-based, connectionless protocol, which does not set up a dedicated end-to-end connection. Information is transmitted from source to destination without verifying the readiness or state of the receiver.
On a totally isolated network, statistics show high reliability for UDP, but this reliability decreases when the network is shared with additional clients that consume bandwidth.
UDP has less latency and jitter than TCP, which is an advantage when communicating with meters or other functions that require real-time updates.
Unreliable – When a message is sent, it cannot be known if it will reach its destination. There is no concept of acknowledgment, retransmission, or timeout.
Not ordered – If two messages are sent to the same recipient, the order in which they arrive cannot be predicted.
Lightweight – There is no ordering of messages or tracking connections. It is a small transport layer designed on top of IP.
Datagrams – Packets are sent individually and checked for integrity only if they arrive. Packets have definite boundaries that are honored upon receipt, meaning a read operation at the receiver socket will yield an entire message as it was originally sent.
No congestion control – UDP does not avoid congestion unless congestion control measures are implemented at the application level. Confirmation messages can also be implemented at the application level.
Regular expressions

Regular expressions are an efficient way to quickly configure and query a GALAXY system. For example, to set multiple control points, use a regular expression to denote the range or number of addresses.
The table below shows the most commonly used regular expressions and their functions.
Regular Expression | Function |
---|---|
. | Regular expressions match any single character value |
* | Regular expression wildcard |
\d | Regular expression integer wildcard |
\d+ | Regular expression integer greedy wildcard |
Regular expression examples

For example, to mute all single digit inputs, use the following command:
/processing/input/\d/mute=’true’
To confirm that these inputs are muted, use the following query:
/processing/input/\d/mute
The following information is returned showing that inputs 1–8 are muted:
/processing/input/1/mute='true'
/processing/input/2/mute='true'
/processing/input/3/mute='true'
/processing/input/4/mute='true'
/processing/input/5/mute='true'
/processing/input/6/mute='true'
/processing/input/7/mute='true'
/processing/input/8/mute='true'
You can use a regular expression to return all commands of a certain type, for example, a control point.
To return the value for all control points whose path starts with /project/snapshot/7/
:
/project/snapshot/7/.*
The following responses return all the possible control point/value pairs starting with /project/snapshot/7
:
/project/snapshot/7/comment='hello'
/project/snapshot/7/created='2017
-09-10 22:09:00'
/project/snapshot/7/last_updated='2017-09-10 22:09:00'
/project/snapshot/7/locked='false'
/project/snapshot/7/modified='false'
/project/snapshot/7/name='7'
Tip
See Regular expression commands for more examples.
Using the GALAXY server for OSC

OSC is often used as an alternative to the 1983 MIDI standard, when higher resolution and a richer musical parameter space is desired. OSC messages are commonly transported over Ethernet protocols. It gives users more flexibility and facility in addressing and interacting with remote machines.
OSC features an open-ended symbolic naming scheme, high resolution argument data, high resolution time tags, and more. It can pack messages into bundles whose effects must occur simultaneously.
OSC should work out of the box on most small-scale routers and network infrastructures. For large or administered networks, proper settings and bandwidth allocation is necessary.
Note
The GALAXY processor has two independent operating modes: normal mode for loudspeaker management using Compass Control Software or the Compass Go App and Spacemap mode for spatial mixing using the Spacemap Go app. When running virtual GALAXY processors, the port numbering scheme behaves differently depending on the operating mode.
The GALAXY server is always listening to port 25004 for OSC messages, unless you are addressing a virtual GALAXY, which in normal mode starts at port 50504. Decrement the port address by 100 for each additional virtual GALAXY (e.g., second virtual GALAXY has port address of 50404, third has 50304, etc.).

Virtual GALAXY port device numbering normal mode (ASCII ports shown)
In Spacemap mode, the virtual GALAXY server address begins at port 25004 for OSC messages. Increment the port address by 100 for each additional virtual GALAXY in Spacemap mode (e.g., second virtual GALAXY in Spacemap mode has port address of 25104, third has 25204, etc.).
Device | Type | Mode(s) | Device Number(s) | Address |
---|---|---|---|---|
Physical GALAXY | OSC | Normal, Spacemap | 1, 2, 3... | 25004, 25104, 25204... |
Physical GALAXY | ASCII | Normal, Spacemap | 1, 2, 3... | 25003, 25103, 25203... |
Virtual GALAXY | OSC | Normal | 1, 2, 3... | 50504, 50404, 50304... |
Virtual GALAXY | ASCII | Normal | 1, 2, 3... | 50503, 50403, 50303... |
Virtual GALAXY | OSC | Spacemap | 1, 2, 3... | 25004, 25104, 25204... |
Virtual GALAXY | ASCII | Spacemap | 1, 2, 3... | 25003, 25103, 25203... |

Virtual GALAXY port devicenumbering Spacemap mode (ASCII ports shown)
Note
Check the Log tab in Compass to determine the port address of any given GALAXY device.
When the OSC message asks for a response, the GALAXY server will reply within the established connection to the client’s address for TCP, and to the port of emission for UDP.
Subscriptions for TCP clients remain active until they are countermanded by an unsubscribe command, or until the client’s TCP connection is broken.
A UDP subscription remains active until it is countermanded by an unsubscribe command, or the server does not receive any UDP packets from the client for at least 30 seconds. To keep a UDP subscription active in the absence of GALAXY activity, use the keepalive tactic by sending an empty ping OSC message to the server.
OSC message syntax

An OSC message consists of an address, type tag string, and OSC argument(s). A type tag contains at least one character, a comma (,), followed by a sequence of characters corresponding to the sequence of OSC arguments in the OSC message.
OSC messages are sometimes compacted into bundles to conserve bandwidth. GALAXY accepts bundles or individual messages.
OSC arguments

OSC arguments may be any of the following types:
i | 32-bit integer |
f | 32-bit floating point |
s | OSC string |
F | Boolean false |
T | Boolean true |
h | 64-bit integer |
Note
Because some clients do not adhere to the OSC protocol governing argument types, GALAXY is programmed to type cast from integer to Boolean. For example, Boolean True is any positive non-zero integer.
Using the GALAXY server for ASCII

The GALAXY ASCII server is always listening on port 25003. When the message asks for a response, GALAXY will reply within the established connection to the client’s address.
Subscriptions for TCP clients remain active until they are revoked by an unsubscribe command, or until the client’s TCP connection is broken.
ASCII text messages are sent to port 25003 unless you address a virtual GALAXY procesor in normal mode, starting at port 50503. Decrement the port address by 100 for each virtual GALAXY processor in normal mode. Increment the port address by 100 for each virtual GALAXY processor in Spacemap mode.
All ASCII built-in functions are preceded by “:” as shown below:
:recall_snapshot 3
Note
All ASCII text commands must end with the newline character, which consists of a carriage return (CR) or line feed (LF): 0d
or 0a