{"id":399,"date":"2019-12-19T16:43:50","date_gmt":"2019-12-19T21:43:50","guid":{"rendered":"https:\/\/itp.nyu.edu\/networks\/?page_id=399"},"modified":"2020-02-23T14:10:00","modified_gmt":"2020-02-23T19:10:00","slug":"open-sound-control","status":"publish","type":"page","link":"https:\/\/itp.nyu.edu\/networks\/explanations\/open-sound-control\/","title":{"rendered":"Open Sound Control"},"content":{"rendered":"<h4><span class=\"ez-toc-section\" id=\"I_Introduction_to_OSC\"><\/span><b>I. Introduction to OSC<\/b><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"font-weight: 400\">Open Sound Control (OSC) is a protocol for communication among computers, sound synthesizers, and other multimedia devices that is optimized for modern networking technology. OSC\u2019s advantages include interoperability, accuracy, flexibility, and enhanced organization and documentation.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>1.1 Purpose and History<\/b><\/p>\n<p><span style=\"font-weight: 400\">OSC was invented in 1997 by Adrian Freed and Matt Wright at The Center for New Music and Audio Technologies (CNMAT). It was developed to meet the needs of musicians that wanted more control over sound parameters than the current standard, Musical Instrument Digital Interface (MIDI), could provide, and its initial purpose was to enable computers, sound synthesizers, and other multimedia devices to communicate with each other<\/span><span style=\"font-weight: 400\">.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>1.2 Transmission Principles<\/b><\/p>\n<p><span style=\"font-weight: 400\">OSC supports a client\/server architecture, in which a client sends OSC data to a server. Usually, OSC requires an IP address and host number for connection, especially to open a remote control from one device to another over a local network. Each service can only listen or send data through its assigned port<\/span><span style=\"font-weight: 400\">. For example, if you are using one application on your smartphone to control another on your laptop, you need to set up the corresponding IP address and the port number on the smartphone to decide which destination the data will go to, as well as define the same port number on the laptop side. When transmitted over serial, such as USB, OSC requires extra data as an indicator. SLIP(Serial Line Internet Protocol), for example, can be used as a framing protocol to packetize data over serial<\/span><span style=\"font-weight: 400\">. The datagram and serial stream transmission will be explained in more detail in the second chapter of this article.<\/span><\/p>\n<p><span style=\"font-weight: 400\">The unit of transmission of OSC is an OSC Stream. This can be carried in message-based network protocol such as User Datagram Protocol (UDP), or stream-based protocol such as Transmission Control Protocol (TCP). The following diagram illustrates the format structure of an OSC stream.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-505 size-large aligncenter\" src=\"https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/format-1024x670.png\" alt=\"\" width=\"590\" height=\"386\" srcset=\"https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/format-1024x670.png 1024w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/format-300x196.png 300w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/format-768x503.png 768w\" sizes=\"(max-width: 590px) 85vw, 590px\" \/><\/p>\n<p style=\"text-align: center\"><span style=\"font-weight: 400\">Diagram 1- Architectural Overview of an OSC Stream<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><b>1.3 Format Structure<\/b><\/p>\n<p><span style=\"font-weight: 400\">OSC streams are sequences of frames defined with respect to a point in time called a time tag, and these frames are called bundles (as OSC Bundle in Diagram 1). A bundle is a sequence of messages and\/or an OSC-string identifier \u201c#bundle\u201d, and an OSC time tag, followed by zero or more elements. The OSC message is the basic unit of OSC data consisting of an address pattern, a type tag string, and arguments. The following sections will describe the OSC time tag and the OSC message in detail.<\/span><\/p>\n<p><b>1.3.1 OSC Time Tag<\/b><\/p>\n<p><span style=\"font-weight: 400\">A time tag specifies the desired absolute time at which the messages in the bundle should take effect. For example, it can be used to schedule when a note should be played. If a received OSC stream contains only a single bundle, the OSC server should unpack it and invoke the corresponding OSC method. Otherwise, the time tag determines when the OSC methods should be invoked<\/span><span style=\"font-weight: 400\">. If the time tag represents a time in the future, the server should store the bundle until the specified time arrives. If the time tag is equal to or before the current time, the server should unpack it and invoke the method immediately.<\/span><\/p>\n<p><b>1.3.2 OSC Address Pattern<\/b><\/p>\n<p><span style=\"font-weight: 400\">An OSC address pattern is a character string beginning with the forward slash (\/), as it is the full path from the root of the address space tree to a particular node. For example, the address \/voices\/3\/freq refers to a node named \u2018freq\u2019 that is a child of a node named \u20183\u2019 that is a child of a top-level node named \u2018voices\u2019<\/span><span style=\"font-weight: 400\">. Since the address is with a slash-delimited format like a Uniform Resource Locator (<\/span><a href=\"https:\/\/itp.nyu.edu\/networks\/explanations\/a-gentle-introduction-to-http\/#h.dgr99lk5gdr8\"><span style=\"font-weight: 400\">URL<\/span><\/a><span style=\"font-weight: 400\">) or file system pathname, it is human-readable and easy to organize.<\/span><\/p>\n<p><b>1.3.3 OSC Type Tag String and Arguments<\/b><span style=\"font-weight: 400\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">A type tag string is a string beginning with a comma (,), followed by a sequence of characters corresponding exactly to the sequence of OSC Arguments in the given message<\/span><span style=\"font-weight: 400\">. Each character after the comma is called an OSC Type Tag and represents the type of the corresponding OSC Argument. The different data types OSC Arguments support are int32, float32, ASCII strings, and blobs. Other types of data some OSC implementations support are 64-bit numbers, RGBA color, \u2018True\u2019, and \u2018False\u2019<\/span><span style=\"font-weight: 400\">.<\/span><\/p>\n<h4><\/h4>\n<h4><span class=\"ez-toc-section\" id=\"II_OSC_as_a_Transport-independent_Protocol\"><\/span><b>II. OSC as a Transport-independent Protocol\u00a0<\/b><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"font-weight: 400\">OSC is a network protocol that is \u2018transport-independent\u2019 and carries messages in binary format<\/span><span style=\"font-weight: 400\">. Transport-independence means it can be free from compatibility problems and work <\/span><span style=\"font-weight: 400\">over all the various transport options.<\/span><span style=\"font-weight: 400\"> A common transport protocol used with the OSC format is UDP\/IP, but OSC can be encapsulated in any digital communication protocol.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">The Open Systems Interconnect (OSI) model defines a communication model where applications communicate through a layered stack, where the transmitted message passes from the highest layer of the stack to its lowest layer on the transmitting end, and from the lowest layer to the highest layer on the receiver. <\/span><span style=\"font-weight: 400\">The reason why OSC is transport-independent is that it <\/span><span style=\"font-weight: 400\">is classified as a Layer 6 or Presentation Layer entity<\/span><span style=\"font-weight: 400\"> in the context of the OSI Model<\/span><span style=\"font-weight: 400\">. This layer formats and encrypts data to be sent across a network, providing independence from differences in data representation, for example, different <\/span><span style=\"font-weight: 400\">features such as security, compression, and encryption built in many of transport protocols.<\/span><span style=\"font-weight: 400\"> OSC does not encrypt data, but it <\/span><span style=\"font-weight: 400\">is responsible for the delivery and formatting of information to the application layer for further processing.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center\"><span style=\"font-weight: 400\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-506 aligncenter\" style=\"font-size: 12px\" src=\"https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osi_model-1024x631.png\" alt=\"\" width=\"590\" height=\"364\" srcset=\"https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osi_model-1024x631.png 1024w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osi_model-300x185.png 300w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osi_model-768x473.png 768w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osi_model.png 1544w\" sizes=\"(max-width: 590px) 85vw, 590px\" \/>Diagram 2- OSC in the OSI Model<\/span><\/p>\n<p><span style=\"font-weight: 400\">The specific features of each transport can affect the quality and availability of stream data in the application layer.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>2.1 Datagram Transports: UDP<\/b><\/p>\n<p><span style=\"font-weight: 400\">A datagram transport such as UDP(User Datagram Protocol) is a non-assured transport. Each packet is either delivered in its entirety or not delivered at all. Packets may be out of order, in which case OSC time tags can be used to recover the correct order. In the case of UDP, if the packet exceeds the maximum transmission unit (MTU) the packet may be fragmented over multiple pieces. The fragmentation can introduce extra delay as the UDP\/IP stack must then reassemble the pieces before delivering the packet to an application.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Here\u2019s an example that showcases how to map OSC messages <\/span><span style=\"font-weight: 400\">\u201c\/s_new\u201d\u201c,s\u201d\u201c,i\u201d\u201cdefault\u201d 100<\/span><span style=\"font-weight: 400\"> to plain Javascript objects, receive and send the bundle over Node.js&#8217;s UDP sockets. (<\/span><a href=\"https:\/\/www.npmjs.com\/package\/osc\"><span style=\"font-weight: 400\">osc.js library<\/span><\/a><span style=\"font-weight: 400\">)<\/span><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-508 aligncenter\" src=\"https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osc-udp-1024x964.png\" alt=\"\" width=\"590\" height=\"555\" srcset=\"https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osc-udp-1024x964.png 1024w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osc-udp-300x282.png 300w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osc-udp-768x723.png 768w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osc-udp.png 1356w\" sizes=\"(max-width: 590px) 85vw, 590px\" \/><\/p>\n<p style=\"text-align: center\"><span style=\"font-weight: 400\">Diagram 3 &#8211; Receiving and Sending OSC Message over Node.js\u2019s UDP Sockets<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>2.2 Serial Stream Transports: TCP<\/b><\/p>\n<p><span style=\"font-weight: 400\">Serial transports such as TCP (Transmission Control Protocol)\u00a0 provide a continuous data stream between endpoints. The OSC content format does not define a means for representing the beginning and end of a packet. In particular, the OSC bundle can contain any number of encapsulated messages and there is no way for a parser to determine the total number until the end of the packet is reached.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Therefore the major need for sending OSC on serial transport is that the packets must be encoded with some extra data to indicate where the packet boundaries are, called a framing protocol, for example, the SLIP framing protocol<\/span><span style=\"font-weight: 400\">. SLIP modifies a standard <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/TCP\/IP\"><span style=\"font-weight: 400\">TCP\/IP<\/span><\/a><span style=\"font-weight: 400\"> datagram by:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">appending a special &#8220;END&#8221; <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Byte\"><span style=\"font-weight: 400\">byte<\/span><\/a><span style=\"font-weight: 400\"> to it, which distinguishes datagram boundaries in the byte stream,<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">if the END byte occurs in the data to be sent, the two-byte sequence ESC, ESC_END is sent instead,<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">if the ESC byte occurs in the data, the two-byte sequence ESC, ESC_ESC is sent.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">variants of the protocol may begin, as well as the end, packets with END.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Specifically for OSC, we use the &#8220;double-ENDed&#8221; variant of SLIP which places the SLIP_END character at both the start and the end of a frame<\/span><span style=\"font-weight: 400\">. Here\u2019s an example of sending a package over serial in C<\/span><span style=\"font-weight: 400\">:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-507 aligncenter\" src=\"https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osc-serial-635x1024.png\" alt=\"\" width=\"590\" height=\"951\" srcset=\"https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osc-serial-635x1024.png 635w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osc-serial-186x300.png 186w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osc-serial-768x1238.png 768w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/osc-serial.png 1042w\" sizes=\"(max-width: 590px) 85vw, 590px\" \/><\/p>\n<p style=\"text-align: center\"><span style=\"font-weight: 400\">Diagram 4 &#8211; Sending OSC Message over Serial<\/span><\/p>\n<h4><\/h4>\n<h4><span class=\"ez-toc-section\" id=\"III_Comparison_between_MIDI_and_OSC\"><\/span><b>III. Comparison between MIDI and OSC<\/b><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"font-weight: 400\">The MIDI protocol, first released in 1983, was developed by a group of American and Japanese synthesizer manufacturers, who wanted to create a standard protocol to transfer musical data between instruments. This standardization was accomplished by having predefined messages, a standard transfer protocol, and a standard file format. Any MIDI capable device can connect to any other MIDI device and communicate. There are thousands of software and hardware products that support MIDI, compared to the dozens that support OSC<\/span><span style=\"font-weight: 400\">. In contrast, OSC is an open-source network protocol with a dynamic, open-ended, URL style-naming scheme, which allows the user to determine the address space<\/span><span style=\"font-weight: 400\">.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>3.1 Addressing Feature<\/b><\/p>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td><\/td>\n<td><span style=\"font-weight: 400\">OSC<\/span><\/td>\n<td><span style=\"font-weight: 400\">MIDI<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Example of\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Messages<\/span><\/td>\n<td><span style=\"font-weight: 400\">channel\/4\/freq 1454.1<\/span><\/p>\n<p><span style=\"font-weight: 400\">play-note\/17 0.5<\/span><\/td>\n<td><span style=\"font-weight: 400\">0x90 0x3C 0x7F (Note On for C4, max velocity)<\/span><\/p>\n<p><span style=\"font-weight: 400\">0x90 0x40 0x7F (Note On for E4, max velocity)<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Message\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Types<\/span><\/td>\n<td><span style=\"font-weight: 400\">Human-readable, User-defined<\/span><\/td>\n<td><span style=\"font-weight: 400\">Byte-encoded,<\/span><\/p>\n<p><span style=\"font-weight: 400\">Predetermined<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center\"><span style=\"font-weight: 400\">Table 1 &#8211;\u00a0 Comparison of OSC and MIDI<\/span><\/p>\n<p><span style=\"font-weight: 400\">As mentioned in section II, the specifics of OSC, which are a large part of its uniqueness and strengths, are the naming scheme, numeric and symbolic argument messages, pattern matching language, high-resolution time tags, bundles of messages, and a query system to dynamically find the capabilities of an OSC server and get documentation<\/span><span style=\"font-weight: 400\">. Its biggest strength, which allows each user to design an address space instead of selecting a predetermined set of parameter names, is also its weakness since it is easily adaptable to situations never envisioned by the designers<\/span><span style=\"font-weight: 400\">. Because each user can name their own address spaces, these fields can easily be identified by name, it could be confusing sometimes for people who don\u2019t know the actual data packaged inside to see the same name address used in different applications in different ways. The lack of standardization of OSC is one of the reasons it has never replaced MIDI.<\/span><\/p>\n<p><span style=\"font-weight: 400\">The MIDI protocol uses a compact binary message format with a limited number of fields<\/span> <span style=\"font-weight: 400\">due to the low bandwidth of the connection and the need for <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Real-time_computing\"><span style=\"font-weight: 400\">real-time<\/span><\/a><span style=\"font-weight: 400\"> accuracy<\/span><span style=\"font-weight: 400\">. <\/span><span style=\"font-weight: 400\">Each MIDI connection carries a stream of MIDI messages made up of 8-bit bytes. Most messages consist of a status <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Byte\"><span style=\"font-weight: 400\">byte<\/span><\/a><span style=\"font-weight: 400\">, channel number in the low 4 bits, for a total of 16 channels, and an <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Opcode\"><span style=\"font-weight: 400\">opcode<\/span><\/a><span style=\"font-weight: 400\"> in the high 4 bits, followed by one or two data bytes.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Although the string-based OSC namespace is more efficient for a human to evaluate, a numerical value is much more efficient for the computer because computers are arithmetic devices. For example, in a performance where a mapped point is changed one hundred times a second, the human would not be expected to read that value for every message sent; however, the computer is. Hence, the message is optimized for the entity that requires it least during the performance.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>3.2 Speed Comparison<\/b><\/p>\n<p><span style=\"font-weight: 400\">There is a belief in the NIME community that OSC is a fast communications protocol; for example, \u201cThe choice for OSC \u2026 was for its high speed, powerful protocol, and independency<\/span><span style=\"font-weight: 400\">\u201d. Statements such as these are normally based on a comparison between the data transmission rate between OSC and MIDI in their typical applications. It is, however, misleading to compare the speed of OSC to MIDI based on the data transmission rate because OSC does not have a data transmission rate.<\/span><\/p>\n<p><span style=\"font-weight: 400\">OSC does not define anything below the presentation layer in the OSI model, and <\/span><span style=\"font-weight: 400\">its messages are transported across the internet and within local subnets using <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/UDP\/IP\"><span style=\"font-weight: 400\">UDP\/IP<\/span><\/a><span style=\"font-weight: 400\"> and Ethernet, which has a standard data rate of at least 10 Megabits per second (10 Mbps). <\/span><span style=\"font-weight: 400\">MIDI, however, can be defined using the OSI model from its application layer right down to the physical layer<\/span><span style=\"font-weight: 400\">. That\u2019s why the speed comparison between OSC and MIDI is always made at the <\/span><span style=\"font-weight: 400\">10 Megabits per second in OSC and <\/span><span style=\"font-weight: 400\">31.25 Kilobits per second (31.25 Kbps) in MIDI<\/span><span style=\"font-weight: 400\">, so the inventor of OSC Wright and Freed state that MIDI is \u201croughly 300 times slower\u201d than OSC.<\/span><\/p>\n<p><span style=\"font-weight: 400\">However, <\/span><span style=\"font-weight: 400\">when carried on Ethernet, MIDI bits move at the same data rate as OSC bits carried on Ethernet because the data rate is a factor of the transport, not the protocol<\/span><span style=\"font-weight: 400\">. In the meanwhile,<\/span> <span style=\"font-weight: 400\">in terms of throughput, MIDI can actually have better throughput than OSC because it takes fewer bytes to make common MIDI messages than it does to make comparable OSC messages.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>3.3 Applications<\/b><\/p>\n<p><span style=\"font-weight: 400\">OSC is typically transmitted over ethernet<\/span><span style=\"font-weight: 400\">. <\/span><span style=\"font-weight: 400\">Typical applications of OSC are originally in the same area as MIDI applications. OSC\u2019s typical application areas are sensor\/gesture-based electronic musical instruments, mapping nonmusical data to sound, multiple users shared musical control, the web interface to sound synthesis, networked Local Area Network (LAN) musical performance, Wide Area Network (WAN) performance, and virtual reality<\/span><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">MIDI often defines a hardware interface, for example, the MIDI cable and the MIDI pad. One common MIDI application is to play a MIDI keyboard or other controller and use it to trigger a digital sound module, which contains synthesized musical sounds, to generate sounds, which the audience hears produced by a keyboard amplifier.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>3.4 Fun Facts: <\/b><b>\u00a0Inaccurate Comparisons between OSC and MIDI<\/b><\/p>\n<p><span style=\"font-weight: 400\">The MIDI Association pointed out that some articles about new OSC supported products appearing in publications have contained potentially misleading statements and inaccurate comparisons between OSC and MIDI. The following is a chart comparing OSC to MIDI, provided in the document &#8220;Open Sound Control &#8211; A Flexible Protocol for sensor networking&#8221; published in the OSC official website.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-509 aligncenter\" src=\"https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/Screen-Shot-2020-02-23-at-14.04.24-1024x966.png\" alt=\"\" width=\"590\" height=\"557\" srcset=\"https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/Screen-Shot-2020-02-23-at-14.04.24-1024x966.png 1024w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/Screen-Shot-2020-02-23-at-14.04.24-300x283.png 300w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/Screen-Shot-2020-02-23-at-14.04.24-768x724.png 768w, https:\/\/itp.nyu.edu\/networks\/wp-content\/uploads\/2019\/12\/Screen-Shot-2020-02-23-at-14.04.24.png 1304w\" sizes=\"(max-width: 590px) 85vw, 590px\" \/><\/p>\n<p style=\"text-align: center\"><span style=\"font-weight: 400\">Table 2 &#8211;\u00a0 Comparing OSC to MIDI, the chart provided by <\/span><span style=\"font-weight: 400\">Freed, Schmeder, Zbyszynski<\/span><\/p>\n<p><span style=\"font-weight: 400\">While OSC can do many things that MIDI is not designed to do, The MIDI Association states that some of the claimed advantages listed in this chart are only true under specific conditions, such as when using the MIDI DIN transport or using predefined messages. The MIDI Association corrects the following statements including:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">MIDI is a hardware transport-independent protocol, MIDI is as Fast as OSC, MIDI supports multiple data formats,\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">MIDI offers pre-defined and product-specific message structures, MIDI offers greater interoperability than OSC,\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">MIDI has applications in a wide variety of areas besides music,\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">&#8220;Time-tagging&#8221; of MIDI events is possible on all the same transports as OSC, and\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">MIDI sends clocks at quarter-frame SMPTE accuracy<\/span><span style=\"font-weight: 400\">.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h4><span class=\"ez-toc-section\" id=\"IV_Conclusion\"><\/span><b>IV. Conclusion<\/b><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><span style=\"font-weight: 400\">In short, OSC is a network protocol that is transport-independent and carries messages as bundles. This protocol provides real-time control of sound and other media processing and has been used in web interactivity tools, software synthesizers, a large variety of programming languages, and hardware devices for sensor measurement.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li><b> References<\/b><\/li>\n<\/ol>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Wright, M., Freed, A., Momeni A. <\/span><i><span style=\"font-weight: 400\">Open Sound Control: State of the Art 2003<\/span><\/i><span style=\"font-weight: 400\">. Proceedings of the 3rd Conference on New Instruments for Musical Expression (NIME 03), Montreal, Canada, 2003.<\/span><\/li>\n<li style=\"font-weight: 400\"><a href=\"http:\/\/opensoundcontrol.org\"><i><span style=\"font-weight: 400\">Open Sound Control website<\/span><\/i><\/a><span style=\"font-weight: 400\">: <\/span><span style=\"font-weight: 400\">opensoundcontrol.org<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Wright, M. <\/span><i><span style=\"font-weight: 400\">Open Sound Control: an enabling technology for musical networking in Organised Sound.<\/span><\/i><span style=\"font-weight: 400\"> 10(3), Cambridge University Press, 2005.<\/span><\/li>\n<li style=\"font-weight: 400\"><a href=\"http:\/\/www.midi.org\/aboutmidi\/midi-osc.php\"><span style=\"font-weight: 400\">MIDI Manufacturers Association Incorporated<\/span><\/a><span style=\"font-weight: 400\">: https:\/\/www.midi.org\/articles\/white-paper-comparison-of-midi-and-osc<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Brandi Rose, Thomas Haighton, Danyi Liu. <\/span><i><span style=\"font-weight: 400\">Open Sound Control<\/span><\/i><span style=\"font-weight: 400\">, 2015<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Fraietta, A., <\/span><i><span style=\"font-weight: 400\">The Smart Controller: an integrated electronic instrument for real-time performance using programmable logic control<\/span><\/i><span style=\"font-weight: 400\">, School of Contemporary Arts. 2006, University of Western Sydney.<\/span><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/www.webopedia.com\/quick_ref\/OSI_Layers.asp\"><span style=\"font-weight: 400\">OSI Model<\/span><\/a><span style=\"font-weight: 400\">: https:\/\/www.webopedia.com\/quick_ref\/OSI_Layers.asp<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Adrian Freed, Andy Schmeder. <\/span><i><span style=\"font-weight: 400\">Features and Future of Open Sound Control version 1.1 for NIME.<\/span><\/i><\/li>\n<li style=\"font-weight: 400\"><i><span style=\"font-weight: 400\">Open Sound Control &#8211; A Flexible Protocol for sensor networking: <\/span><\/i><a href=\"http:\/\/opensoundcontrol.org\/files\/OSC-Demo.pdf\"><span style=\"font-weight: 400\">http:\/\/opensoundcontrol.org\/files\/OSC-Demo.pdf<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><i><span style=\"font-weight: 400\">White Paper: Comparison of MIDI and OSC<\/span><\/i><span style=\"font-weight: 400\">: <\/span><a href=\"https:\/\/www.midi.org\/midi\/articles\/white-paper-comparison-of-midi-and-osc\"><span style=\"font-weight: 400\">https:\/\/www.midi.org\/midi\/articles\/white-paper-comparison-of-midi-and-osc<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Andrew Schmeder and Adrian Freed and David Wessel. <\/span><i><span style=\"font-weight: 400\">Best Practices for Open Sound Control<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Open Sound Control. <\/span><a href=\"https:\/\/en.flossmanuals.net\/pure-data\/_full\/#osc\"><span style=\"font-weight: 400\">https:\/\/en.flossmanuals.net\/pure-data\/_full\/#osc<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">OSC over the USB serial transport. <\/span><a href=\"http:\/\/cnmat.berkeley.edu\/content\/osc-over-usb-serial-transport\"><span style=\"font-weight: 400\">http:\/\/cnmat.berkeley.edu\/content\/osc-over-usb-serial-transport<\/span><\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>I. Introduction to OSC Open Sound Control (OSC) is a protocol for communication among computers, sound synthesizers, and other multimedia devices that is optimized for modern networking technology. OSC\u2019s advantages include interoperability, accuracy, flexibility, and enhanced organization and documentation. &nbsp; 1.1 Purpose and History OSC was invented in 1997 by Adrian Freed and Matt Wright &hellip; <a href=\"https:\/\/itp.nyu.edu\/networks\/explanations\/open-sound-control\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Open Sound Control&#8221;<\/span><\/a><\/p>\n","protected":false},"author":28,"featured_media":0,"parent":19,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-399","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/itp.nyu.edu\/networks\/wp-json\/wp\/v2\/pages\/399"}],"collection":[{"href":"https:\/\/itp.nyu.edu\/networks\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/itp.nyu.edu\/networks\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/itp.nyu.edu\/networks\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/itp.nyu.edu\/networks\/wp-json\/wp\/v2\/comments?post=399"}],"version-history":[{"count":3,"href":"https:\/\/itp.nyu.edu\/networks\/wp-json\/wp\/v2\/pages\/399\/revisions"}],"predecessor-version":[{"id":512,"href":"https:\/\/itp.nyu.edu\/networks\/wp-json\/wp\/v2\/pages\/399\/revisions\/512"}],"up":[{"embeddable":true,"href":"https:\/\/itp.nyu.edu\/networks\/wp-json\/wp\/v2\/pages\/19"}],"wp:attachment":[{"href":"https:\/\/itp.nyu.edu\/networks\/wp-json\/wp\/v2\/media?parent=399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}