28
OSC in SuperCollider Server James McCartney

OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

OSC in SuperCollider Server

James McCartney

Page 2: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

OSC in SC

• SC server architecture

• OSC usage in SC server

• thoughts on OSC issues

Page 3: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

SC architecture

• client-server

• client: scripting language

• server: synthesis engine

• client and server speak OSC

Page 4: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

SC client

• dynamic programming language

• Smalltalk object model

• real time garbage collection

• also borrows from Scheme, APL, Icon, Ruby, HMSL.

Page 5: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

SC server

• a virtual machine for audio

• as dynamic as possible

• as simple as possible

• higher level representation left to client

Page 6: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

an audio virtual machine

• functional units

• operations on the functional units

• OSC messages are a way of dynamically editing the virtual machine program

Page 7: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

functional units

• execution tree

• buffer array

• audio and control buses

Page 8: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

execution tree

• internal nodes: groups

• leaf nodes: synths

• synth is a collection of unit generators with a shared lifetime

• unit generator is a basic signal processing element

Page 9: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

execution tree

• the tree is the virtual machine’s program

• synths are the subroutines

• unit generators are the instructions

• order of execution: depth first, left to right

Page 10: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

execution tree

• all nodes are identified by number

• synths have parameters that can be set

• setting a parameter on a group sets the parameter for all synths it contains

Page 11: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

buffer array

• buffers can contain audio or control data

• most buffer commands are asynchronous:

• read/write soundfiles

• alloc, free

• fill by a function

• async commands send a reply when done

Page 12: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

audio & control buses

• synths do not connect directly

• all synth connections are through buses

• unit generators for:

• reading, replacing, summing, crossfading

Page 13: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

usage of OSC

• obeys time stamps! assumes NTP

• single level name space

• notifications of state changes

• queries

• replies for asynchronous commands

• embedded completion msgs for async cmds

Page 14: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

single level name space

• conventional OSC name space not practical

• nodes in the tree may come and go in the hundreds per second (granular synthesis)

• wanted constant time access to nodes

• pattern matching unecessary

• commands can be hashed

Page 15: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

node IDs vs. paths

/group0/group1/group101/synth200/freq/set 440/group0/group1/group101/synth200/amp/set 0.1/group0/group1/group101/synth200/pan/set 0.7

/n_set 200 freq 440 amp 0.1 pan 0.7

instead of sending this:

can send this:

Page 16: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

notifications

• notifications are sent when there is a change in the execution tree

• clients register their interest

• server maintains a list of interested clients

• notifications bubble up from the RT thread to be sent on the NRT thread

Page 17: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

queries

• state of the server

• state of a node

• state of a buffer

• values of synth parameters

• values of control buses

• values in a buffer

Page 18: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

replies to async comands

• async commands reply to the sender when done.

• “/done”, “commandName”

• “/fail”, “commandName”, “errorMsg”

Page 19: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

completion messages

• a command to execute when an async command completes

• embedded in the async command as a blob

• type tag ‘b’

Page 20: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

issues

• identifying replies

• structured data

• nested bundles

• sequenced bundles

• security

Page 21: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

identifying replies

• quoting entire message back - wasteful

• unique numbers in every message - painful

• hash code

• chance of collision negligible

• very low messaging overhead

Page 22: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

structured data

• most RPC schemes can represent rich data (e.g. XML-RPC, SOAP, XDR) such as arrays and key-value pairs (a.k.a. structs, records, maps, dictionaries).

• richer data types allow richer interactions

• OSC has arrays already via ‘[’ and ‘]’ tags

• similarly key-value pairs could use ‘(’ and ‘)’

Page 23: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

structured data

• unfortunately no one implements ‘[’ and ‘]’

• most current hosts’ have data types that are too limited.

• more people are beginning to use tools like SC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types.

Page 24: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

sequenced bundles

• asynchronous messages suspend the bundle

• bundle continues to execute when async command completes

• eliminates need for completion messages

Page 25: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

sequenced bundle example

• Bundle contains these commands:

• load a sound file into a buffer

• start a node that uses the buffer

• wait for the node to end

• free the buffer

Page 26: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

nested bundles. Why?

• no additional guarantees (atomicity)

• consecutive bundles have same behavior

• larger packets not good for UDP

• requires reference counting in the host

• provide no benefits, so let’s remove or deprecate them

Page 27: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

security

• on a network, an open port with a rich command protocol for initiating tasks on a very high priority thread is an invitation for trouble.

• it would be nice for there to be a log in protocol for OSC

Page 28: OSC in SuperCollider Server - Open Sound Controlopensoundcontrol.org/files/OSC_in_SC_Server.pdfSC, Lisp, Scheme, Python, Ruby, Javascript which can handle richer data types. sequenced

http://www.audiosynth.comasynth @ io.com