Feature Quest: Open Sound Control (OSC) and Midicents

Hi Rob,

The OSC protocol is actually at layer 7 of the OSI model.It is encapsulated inside UDP packets, and UDP is a layer 4 protocol. The TCP/IP model is a simplified version of the OSI model in which layers 5-7 are squashed together into a single actual layer, which we call layer 7 to avoid confusion (instead of calling it layer 5). As a result, OSC is layer 7. There are similarities with the HTTP protocol (used for web browsing) here - HTTP does not define at all the HTML language, and is used to fetch images and documents that are non-HTML. HTTP itself is pretty protocol agnostic. It can also pass arguments in GET and POST requests that are quite similar to the data types in OSC. The reason for OSC to exist rather than using HTTP is that guaranteed delivery is not needed - if you are sending something more automation-oriented like a smooth curve and one single data element is missed, it isn’t the end of the world, you can simply get the next one. The guaranteed delivery with TCP based protocols like HTTP leads to overhead since then you need ACK packets, and if the computer misses an event you may not want that event to be triggered a second late because the computer realized it missed the value.

As you say, it is not a perfect analogy regarding email, because email was never intended to have anything to do with sound, but OSC has the word “Sound” directly in its name. Although I get your point regarding semantics, that is generally only possible when it is a fixed prefabricated device or piece of software on the far end that has a predefined “list” of such things, a kind of “OSC API”.

Instead, the standard for live electronics performance (or at least near to it) is to use a product called Max, which is basically a visual programming environment. Each piece is a different program and can be created from the ground up from scratch (although I tend to start with a “template” that I built to save some repetitive work). Because the far end is being coded by me in this case, the addresses that I select are arbitrary, and there are many different things that different people do. I generally tend to use OSC in quite a simple way - when you hit a rehearsal, you get an OSC Message like /rehearsal 0, /rehearsal 1, /rehearsal 2, (address “/rehearsal” with an integer value) and those messages trigger Max to activate those rehearsal numbers and do various musical things like turn certain effects on or off or activate bed track sounds. Because I have a tendency to use OSC for just short simple messages like that instead of firing raw continuous data, MIDI can be a workaround if I map say a MIDI CC to the rehearsal input, and that is what I do right now. However, OSC is simpler and tends to “just work” as long as your address and port are correct and your firewall is adjusted or switched off, and makes it easier to use separate computers for separate tasks. Also, using MIDI limits me to 7 bit values unless I jump through hoops or use something weird like pitchbend to convey the data, and some long pieces may have more than 127 discrete trigger points.

A lot of people work with OSC in different ways than I do. For instance, my teacher prefers to store more of the data in the notation program (like the screenshot above) for more direct control of the sonic environment, and to allow setting the sonic parameters from the same program as the traditionally engraved notes. This method has a lot of appeal as well if the program supports it, since traditional engraving does not really show live electronics events, and this way the notation software has more of a direct representation for what is happening in the live electronics.

One way that I could envision OSC being integrated into Dorico is almost like MIDI controller lanes. You would define one or more OSC listeners in the software (remote IP and port to send the data to) plus OSC address/type combinations associated with those listeners (defining an address and setting a data type for that address to either string, integer, or float). Then you would get something resembling a CC lane for that address/listener combo, and the style of lane would depend on the chosen data type for that particular OSC address. For strings obviously there would be no automation, you would simply add the string value you want to send at the correct point in the timeline. Integer and float could use similar automation controls to MIDI CC, but with possible value ranges that matched the data type. It is really quite similar to MIDI CC except with greater resolution, the ability to choose between integers and floating point, and support for strings. CC# is the equivalent of OSC address, except OSC addresses are arbitrary strings where you can use slashes to denote heirarchy. So OSC is really more a kind of “MIDI CC’s 2.0” in many regards rather than being something completely alien.

I’d like to thank mducharme, Rob and António for this very interesting thread!

OSC integration would be a very powerfully addition to Dorico. It’s the main protocol for communication of suoerCollider which makes it a very powerful. It would open new horizons for electro acoustic composers.

I assume that sending osc bundled messages at specific time points of the score would be not very difficult to program. Since dorico is the new century notation/composition application I think this is a must.

Maronid, on a par with SuperCollider, Csound could be mentioned too… It also supports OSC.

Daniel, I hope that, through the Max/MSP example and remarks in my last reply to you, I’ve offered enough clarification of how I’d like Midicents (anyone can always call them MIDI Cents or MIDI cents, to stave off any odd feelings of self-enforced frenchness — not Cents or cents though, cents not being MIDI-based pitch units to begin with, besides the fact that ‘cent’ is an actual french word, which means that the odd feelings of self-enforced frenchness most likely would not subside) as a MIDI-based Unit System to be available to the end-user in Dorico.

I’d just like to add that it can be used not only as a fine-grained, background-independent musical framework for spectrally-minded Music, but also as a fine-grained, all-encompassing musical framework for the computational, (ethno)musicological representation and implementation of both Western and Non-western Music Traditions. Both these things are at the core of my composition toolkit and interests as a musician, both for compositional and data visualization purposes.

This said, and to conclude, if I had to choose only one, between Midicents and OSC, as a must-have feature for Dorico, I’d definitely go for OSC since it covers a much wider net of musicians, including myself.

Thanks for this fascinating thread. I’ve written a couple of pieces for instruments and electronics (Kyma) in Dorico, and I did not even consider the possibility of controlling electronics directly from Dorico. That would be incredibly useful.

I, for one, am chuffed to see more people from “my tribe”, if you will, reminding there’s more to composing for media (I include electronics here) than Hollywood-style film scoring. I’d love to see all of this, although just having a way to share the transport would be a welcome first step.

Sure, LSalgueiro, it is great to hear from other musicians wanting Dorico to evolve into a homestead for XXIst-century Music, and wanting to open Dorico up to the rich digital and technological environments surrounding it… But did it break the wall of “sufficient demand” (to retain Daniel’s expression)? Apparently, not.

“Apparently, not”?
Daniel hasn’t checked into this thread for four days. I wouldn’t take that as an indication of anything at all, except that he’s an extremely busy man with loads of other priorities.

Pianoleo, I wasn’t referring solely, or even mainly, to Daniel not responding, though he did respond to many other Dorico trivia in the meantime, so your justification seems off. The thread’s visible loss of momentum is one of the main culprits for my observation. To conclude, it doesn’t look good…

I’m also for OSC and transport control, and even ReWire or a similar technology. ReWire was enough for me with Sibelius for many projects involving tape electronics, although it wasn’t always reliable.

To be fair, António, there’s nothing urgent in this thread for Daniel to answer. Please do not jump into conclusions like that. Remember that bumping threads is not a correct attitude in this forum, and sometimes answers take time :wink:

Marc, I don’t even know what you are going on about… I cogently responded to LSalgueiro, then to pianoleo, and now to you. I hope you do realise that you have put this thread on top with your comment too. And I hope you realise that tone policing and unfounded allegations/accusations aren’t well-seen or well-taken by anyone, anywhere.

Lucas, I hope at least that this thread gets back on track and gains momentum again, and more people like you show up to express their interest, to see if we can break the wall of “sufficient demand” (to retain Daniel’s expression)… If enough people do so, it could actually happen. This said, it doesn’t seem like it will… We’ll see.

There have always been plans to implement some sort of bridge since day one, it’s just that it’s very far away in the roadmap. And you’ve got to understand that it’s a longshot, considering features vital to the engraving of contemporary notation are still ways ahead. I remember Daniel expressing some reluctance towards ReWire at first; if you’ll allow me to paraphrase instead of searching for a four-year-old post, it had to do with improvements to be had using other, newer technologies (much in the same way that Dorico implements microtonality using note expression instead of pitch bend, I assume). However, I also recall a twitter exchange much more recently where ReWire seemed on the table.

LSalgueiro, I have no issue with anything you said, though I’d like to point out that ReWire and OSC aren’t the same and both should be available, but my point is more about making it visible that there is “sufficient demand” (again, Daniel’s expression)… That end-users that are interested exist in sufficient numbers to make it worthwhile for the development team to implement these features (in the case of this thread, mainly OSC). Besides, roadmaps are prospective, and as such mainly indicative, they aren’t cast in stone.

To conclude, I hope that this thread picks up again, gains momentum, with more people showing up to express their interest… If enough people do so, it could actually happen. This said, it doesn’t seem like it will… We’ll see.

I would also highly appreciate OSC support in Dorico. I have my self-made microtonal sampler in Max and I love to connect it via OSC with Open Music (by IRCAM).
I bought D1 and D2 but still use Finale because I can send some self-made midi information (by using an unused controller to send cent pitch deviations to the Max Sampler) as costume expression attached to the note.
Unfortunately this is not possible with Dorico but implementing OSC would make it possible and better than my Finale workaround.

gratkowski, I’m curious why you couldn’t use the MIDI controller lanes in Play mode to do the same thing in Dorico? Is it that you cannot easily associate the change in MIDI controller with a specific note? If so, how about defining playing techniques that map onto specific controller values in an expression map? It really seems to me like your workflow is possible in a couple of ways in Dorico.

Daniel, I won’t go into gratkowski’s specific setup, but since OpenMusic’s pitch content is in Midicents, I’d like to point ou that what you suggest as a general strategy seems rather daunting, to put it mildly… It implies the creation of 198 Playing Techniques (for -1, +1, -2, +2, … , -99, +99 deviation in cents), and then applying them every time, through MIDI controller or by hand, to dozens, hundreds, or even thousands of notes on a score — it would be overwhelmingly time-consuming. And let’s not delve into the readability aspect…

Inthefold, please stop deleting your last message and then immediately posting it again. It’s tantamount to bumping and it’s really irritating.
Yes, just my opinion, but I’d bet others share it, and no, I have no right to tell you what to do.