Midiosc is a Java Swing app that acts as a bridge between applications designed for the Monome Grid and grid controllers that communicate over MIDI. It also provides the ability to create virtual grids that respond to mouse clicks. The goal of midiosc is to provide an entry point for anyone curious about Monome, electronic music, or programming to try building their own instrument.
Navigate to https://github.com/SitStayCreate/midiosc and download the JAR file located there. Midiosc 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
There is an organization named Monome you may never have heard of, but the music you listen to would not be the same if they did not exist. They make a variety of electronic instruments and controllers, but what makes them unique is that they are less focused on profits and more focused on impact.
Their most iconic product is the Grid, an array of decoupled lights and buttons that is built to be redesigned. The genius of the Grid isn't its sleek design or sustainably sourced and high quality parts. The genius of the grid is how easy it is to hack. Before the maker era where everyone knows somebody with a 3d printer, Monome created a visionary product that invited the consumer to play the role of producer. The controller itself does nothing without 3rd party software. Monome provides some very helpful training documents and some ready to use and interesting examples, but these are not part of the controller, they are available for anyone to use.
The Monome story could end right here and they would have still earned their place with the Robert Moog's and Leon Theremin's of history. But it does not end with the Grid. Instead of doing what so many others would after experiencing success, they choose to remain small and to keep focusing on impact instead of profits.
Copied by many and rivaled by none, their efforts have inspired an entire community and their forum serves as a gathering place for the creators of many open source projects. Rather than fight for a piece of an imaginary pie, we hope to increase the long-term viability of their projects by using our efforts to +1 their ideas. It's only a zero-sum game if you make it that way. Now, let's begin.
Monome's Grid controller is a device that communicates via USB. However, the apps that the Grid communicates with communicate using a network protocol called OSC. OSC (open sound control) was created as an alternative to the MIDI protocol. In order for a serial device to communicate with these apps, we need a third app to act as a translator or bridge. Monome's serialosc program provides this function in their ecosystem. It listens for serial devices and assigns them a port to communicate over OSC.
Serialosc runs as a daemon (background process) and listens on port 12002. If you have serialosc installed you will need to stop it or midiosc will not work.
To do this with macOS, run the following command in terminal: launchctl unload /Library/LaunchAgents/org.monome.serialosc.plist
We haven't tested how to do this in Windows because we don't have a Windows machine we use to make music, but we think Stop-Process in PowerShell would work if you can't stop it in task manager. If you have a Windows 10 machine where you need help with this, reach out to us on Github. We would use the opportunity to document this for Windows users.
To create a virtual OSC device, first select your MIDI controller from the dropdown menus in midiosc. The MIDI in dropdown menu chooses the device that will be sending MIDI data to midiosc. The MIDI out dropdown menu selects the device that will be receiving MIDI data from midiosc.
Next, select the port you would like midiosc 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.
As of midiosc 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 Monome's app named Meadowphysics for Max 7.
Midiosc has some additional limitations. If you are someone who is familiar with Monome's products, you may have come here looking for an Arc emulator. Midiosc does not respond to messages for the Arc controller. The reason for this is there really isn't a midi controller that can emulate an Arc, we have never used an Arc so will have difficulty designing a virtual version of one, and we are more interested in multitouch and capacitive controllers than rotary controllers at the moment.
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 take a stab at 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.