A CerealOSC server for midi devices

This is a hard fork of the serialosc server. We like puns and wordgames here, so we'll call it a soft spoon of CerealOSC.

CerealOSC is a Java Swing app that acts as a bridge between applications designed for grid controllers that communicate over MIDI. It also provides the ability to create virtual grids that respond to mouse clicks. The goal of CerealOSC is to provide an entry point for anyone curious about electronic music or programming to try building their own instrument.

Navigate to https://github.com/SitStayCreate/midiosc and download the JAR file located there. CerealOSC is a Java application that requires Java 8 to run. Please download the JRE if you do not already have it installed on your machine. You can find this at Oracle.com


Electronic music is very different from many other styles of music. The barrier to entry is mostly financial and anyone can make compelling music at home. Instead of needing lessons for years as you might with an acoustic instrument, the focus is more on creating short vignettes and looping them. Pedants might debate me on this and they aren't wrong, but this isn't a website for them. It's a website for everyone else. Absolute truths are rarely useful when discussing things that are outside of the realm of hard science; approximate truths are sometimes better in applied sciences and arts. This is to say that practical knowledge often limits the scope in which it is discussed to keep the context manageable.


Grid controllers are usually midi devices that communicate via USB. However, there are other apps that may use other protocols, such as OSC. OSC (open sound control) was created as an alternative to the MIDI protocol and is instead a network protocol. In order for a midi device to communicate with these apps, we need a third app to act as a translator or bridge. CerealOSC is designed to act as a bridge for midi controllers to use OSC based applications.

Midi to OSC adapter

To create a virtual OSC device, first select your MIDI controller from the dropdown menus in CerealOSC. The MIDI in dropdown menu chooses the device that will be sending MIDI data to CerealOSC. The MIDI out dropdown menu selects the device that will be receiving MIDI data from CerealOSC.

Next, select the port you would like CerealOSC to use to receive messages from external apps. Please note, some ports are reserved and may not be used. Please also note, a port may only be opened by one virtual OSC device.

Finally, select the dimensions for your MIDI controller and click create. You currently can choose from an 8x8 grid or a 16x8 grid. The checkbox labeled Invert Y-Axis sets the orientation of your controller. Regular orientation in this case is 0-63/127 starting at the top left corner and ending at the bottom right corner. Inverted orientation, then, starts at the bottom left corner and ends at the top right corner. APC Mini controllers have inverted orientation, while the Pads object in Lemur has regular orientation, for example.

Virtual grid

As of CerealOSC 1.1.0, you also can create a virtual grid if you don't have a midi controller and still want to build your own app. This was something we built to prototype apps on different machines and for others to be able to collaborate without investing in hardware. The short demo video at the top of this page is using this feature with an app named Meadowphysics for Max 7.

This is to say, at the moment, this is as far as we plan on going with this project. We have released the source code under a GPL3 license, so feel free to modify it yourself. Also, lastly, I want to thank everyone who has worked on the JavaOSC library (Illposed, hoijui, etc). This library is well-designed, well-maintained, and easy to use.