-
Notifications
You must be signed in to change notification settings - Fork 1
/
xosc-design-brief.txt
86 lines (60 loc) · 6.06 KB
/
xosc-design-brief.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
XOSC
Connect different OSC capable programs, considering the situation where you have two programs talking via OSC, but then want to have a third or fourth application to also use OSC from those same applications, without having to rewrite code.
Solution:
Just change the target host/port to send OSC to, to XOSC, and XOSC will allow you to patch OSC between applications.
- XOSC does not require any changes to original software to use it
- XOSC has an OSC interface to create connections.
- XOSCope - provides a user interface for showing and creating connections.
- (intra-XOSC) Several instances of XOSC can communicate with each other to create connections between them.
- (net-XOSC) Something like OSC-Groups will allow for communication over the net.
COMPONENTS:
- XOsc - server application which takes care of connections - controlled by osc
- libxosc - provides additional functionality to subscribe and manage connections
IMPLEMENTATION AND INTERFACE
* generic OSC handler
which listens to incoming OSC messages, and stores the address-tags, with info from where they came (host+port), and what type tags they have. Either of these characteristics can change per address-tag.
- register an OSC handler, which will forward the message to the indicated host/port
- and be able to remove it again when a connection is broken
* OSC interface to manage connections
(- not implemented yet; ? still considering whether to implement)
/XOSC/register/client - provide a name for host/port combination - for labeling in interface (args: (opt) port to send messages to) (confirm w/ bool)
/XOSC/register/host - provide a name for host/port combination - for labeling in interface (args: (opt) port to send messages to) (confirm w/ bool)
/XOSC/register/watch - register to be informed about connections and tags (args: (opt) port to send messages to) (confirm w/ bool)
/XOSC/unregister/watch - unregister to be informed about connections and tags (args: (opt) port to send messages to) (confirm w/ bool)
/XOSC/query/tags - query the available tags (args: (opt) port to send data back to)
/XOSC/query/hosts - query the available hosts (args: (opt) port to send data back to)
/XOSC/query/clients - query the present clients (args: (opt) port to send data back to)
/XOSC/query/connections - query the set connections (args: (opt) port to send data back to)
/XOSC/query/connections/tag - query connections for specific tag (args: tag to query, (opt) port to send data back to)
/XOSC/query/connections/host - query connections for specific host (args: host ip, host port, (opt) port to send data back to)
- /XOSC/query/connections/hostname - query connections for specific hostname (args: hostname, (opt) port to send data back to)
? /XOSC/query/connections/client - query connections for specific client (args: host ip, host port, (opt) port to send data back to)
? /XOSC/query/connections/clientname - query connections for specific clientname (args: hostname, (opt) port to send data back to)
/XOSC/info/tag - tagname, sender ip, sender port, sender name (if any)
/XOSC/info/connection/tag - tagname, sender ip, sender port, sender name, receiver ip, receiver port, receiver name (if any)
/XOSC/info/connection/host - tagname, sender ip, port, name (if any), receiver ip, receiver port, receiver name (if any)
/XOSC/info/host - sender ip, sender port, sender name (if any)
/XOSC/info/client - receiver ip, port, name (if any)
/XOSC/subscribe/tag - make a connection to yourself for specific tag (args: tag to connect, (opt) port to send messages to) (confirm w/ bool)
/XOSC/unsubscribe/tag - break a connection to yourself for specific tag (args: tag to connect, (opt) port to send messages to) (confirm w/ bool)
/XOSC/subscribe/host - make a connection to yourself for messages from specific host (args: host ip, port to connect to, (opt) port to send messages to) (confirm w/ bool)
/XOSC/unsubscribe/host - break a connection to yourself for messages from specific host (args: host ip, port to connect to, (opt) port to send messages to) (confirm w/ bool)
- /XOSC/subscribe/hostname - make a connection to yourself for messages from specific host (args: host ip, port to connect to, (opt) port to send messages to) (confirm w/ bool)
- /XOSC/unsubscribe/hostname - break a connection to yourself for messages from specific host (args: host ip, port to connect to, (opt) port to send messages to) (confirm w/ bool)
/XOSC/connect/tag - make a connection for specific tag and host/port (args: target host, target port, tag, (opt) port to send messages to) (confirm w/ bool)
/XOSC/disconnect/tag - break a connection for specific tag and host/port (args: target host, target port, tag, (opt) port to send messages to) (confirm w/ bool)
/XOSC/connect/host - make a connection for specific sender and host/port (args: source host, source port, target host, target port, (opt) port to send messages to) (confirm w/ bool)
/XOSC/disconnect/host - break a connection for specific sender and host/port (args: source host, source port, target host, target port, (opt) port to send messages to) (confirm w/ bool)
- /XOSC/connect/hostname - make a connection for specific sender and hostname (args: source host, source port, target host, target port, (opt) port to send messages to) (confirm w/ bool)
- /XOSC/disconnect/hostname - break a connection for specific sender and hostname (args: source host, source port, target host, target port, (opt) port to send messages to) (confirm w/ bool)
------- advanced -------
--- maybe as a separate program... compare libmapper, e.g. for file formats
* tag renaming/filtering/mapping (a la libmapper - see how far this needs to go)
*/tag/retag - make/break connection for specific tag, and rename it.(+ args: new tagname
*/tag/filter - make/break connection for specific tag, and filter arguments (add. args: ids for slots of original data)
*/tag/retag/filter - make/break connection for specific tag, and rename it, and filter arguments (add. args: new tagname, ids for slots)
*/tag/map - make/break connection and rescale data
*/tag/retag/map
*/tag/filter/map
*/tag/retag/filter/map
------- advanced -------