MIOS Studio 2

MIOS Studio 2 is a Juce based, platform-independent MIDI processing environment which allows to upload an application binary to a MIOS8, STM32F1, STM32F4 and LPC17 core. It also provides MIDI monitors, a virtual MIDI keyboard, a terminal to communicate with MIOS32 applications (partly also used by MIOS8 applications), a SysEx transfer tool and configuration tools for MIDIO128 and MIDIbox CV V1, a SysEx Librarian and a Filebrowser.

Four simple steps to upload a MIOS application

Start MIOS Studio and select the IN (1) and OUT (2) port of the MIDI interface to which you core module is connected:

MIOS Studio will automatically try to contact the core whenever a new MIDI port has been selected, and determine the run state. The detected application will be displayed in the query window.

You can repeat this check by pressing the Query button.

Select the .hex file you want to upload by pressing the browser button (3).

Thereafter press the start button to upload the binary (4).

DONE! - if the upload should fail, please continue at the MIDI troubleshooting guide.

MIOS Terminal

The MIOS Terminal is a very helpful debugging tool for MIOS32 applications. It displays strings which are sent with the MIOS32_MIDI_SendDebugMessage or MIOS32_MIDI_SendDebugHexDump function.

Some MIOS32 applications even provide an interactive command interface:

A small number of MIOS8 applications are sending messages to the terminal as well, e.g. to give you instructions for testing pin connections:

Note: MIOS8 won't respond to a command string sent to the PIC microcontroller. This feature is provided by MIOS32 only!

SysEx Tool

A simple SysEx upload/download/load/save/edit tool which should be self-explaining:

SysEx Librarian

The SysEx Librarian allows to upload/download/load/save/organize banks of various MIDIboxes (and other MIDI devices):

Beside of the classic send/receive/load/save functions for banks/patches/buffers (current patch), it provides a "Transaction" and "Assembly" bank. The Assembly bank is a temporal storage which allows to compose a new bank from different .syx files or received dumps. Once it's ready, the Transaction bank can be completely cleared, the Assembly bank can be moved into the Transaction bank, and then stored into a new .syx file, and/or transfered to the MIDIbox


  • for handling MIDIbox SID patches correctly, you need firmware version v2.041 or higher!
  • for handling MIDIbox 808/Dr patches correctly, you need firmware version v1.3 or higher!

OSC Tool

This tool allows you to send and receive OSC datagrams:

Similar to the SysEx window, there is one frame to enter data that should be sent, and another frame which displays received messages.

Enter the remote host and port over which datagrams should be sent. You can either enter the IP address or the host name of the host that should receive outgoing data (such as "localhost" to send data internally on your PC/Mac).

The local port is the one which receives OSC datagrams from any IP. It's allowed to set the local port to the same number as the remote port if your application requires this.

E.g., by setting remote host to "localhost", and both ports (remote and local) to "10000", outgoing datagrams will be received like on a loopback.

The send window supports multiple OSC messages sent in a bundle. The syntax for entering datagrams is the same as displayed by the receive window.

Here some examples. To improve the readability, we always take /foo/bar as the free definable path, and we leave out the timestamp (which can optionally be specified by writing @<seconds>.<fraction> before the path.

  • /foo/bar i1234 sends the integer value 1234 (int32)
  • /foo/bar f0.42 sends the floating value 0.42 (float32)
  • /foo/bar sHello! sends the string "Hello!"
  • /foo/bar SHello! sends the alternate string "Hello!"
  • /foo/bar b4:12345678 sends a "blob" with length of 4 bytes, values 0x12, 0x34, 0x56, 0x78
  • /foo/bar h123456789012345678 sends an integer value with double resolution (int64)
  • /foo/bar d3.1415927 sends the floaing value with double resolution (float64)
  • /foo/bar t100.2 sends the timetag 100 (seconds) 2 (fraction)
  • /foo/bar cX sends the ASCII character X
  • /foo/bar r8899AAFF sends the RGB value (numbers in hexadecimal format)
  • /foo/bar m903C7F00 sends a MIDI events (numbers in hexadecimal format, 8 digits required!)
  • /foo/bar T sends "TRUE"
  • /foo/bar F sends "FALSE"
  • /foo/bar N sends "NIL"
  • /foo/bar I sends "Infinitum"
  • /foo/bar [ sends "Beginning of Array"
  • /foo/bar ] sends "End of Array"

MIDIO128 Tool

Allows you to configure the (old, PIC based) MIDIO128 V2 application:

MIDIbox CV Tool

Allows you to configure the MIDIbox CV V1 application:

MIOS Filebrowser

The Filebrowser allows to access a SD Card, which is connected to a MIOS32 based core, via USB MIDI:

It's for example supported by MIDIbox SEQ, MIDIO128, MIDIbox NG, and by all future applications which get use of a SD Card to store informations.

The "Update" button retrieves the directory structure. Once it has been read, files and directories can be selected in the directory tree.
Existing files can be downloaded to your computer at a speed of ca. 40..50 kb/s.
New files can be uploaded from your computer at a speed of ca. 10..20 kb/s.
The edit functions allow to modify files in text or binary (hex) format, which is really helpful for quick changes on application specific configuration files without disconnecting the SD Card from the core, or enabling the MSD driver (which would deactivate USB MIDI).

Command Line Parameters and Batch Mode

MIOS Studio supports following command line parameters:

--help                  this page
--version               shows version number
--batch                 don't open GUI
--in=             optional search string for MIDI IN port
--out=            optional search string for MIDI OUT port
--device_id=        sets the device id, should be done before upload if necessary
--query                 queries the selected core
--upload_hex=     upload specified .hex file to core. Multiple --upload_hex allowed!
--upload_file=    upload specified file to SD Card. Multiple --upload_file allowed!
--send_syx=       send specified .syx file to core. Multiple --send_syx allowed!
--terminal=    send a MIOS terminal command. Multiple --terminal allowed!
--wait=        Waits for the given seconds.
--gui_x=             specifies the initial window X position
--gui_y=             specifies the initial window Y position
--gui_width=     specifies the initial window width
--gui_height=   specifies the initial window height
--gui_title=      changes the name of the application in the title bar
--gui_hide_monitors     disables the MIDI IN/OUT monitor when the GUI is started
--gui_hide_upload       disables the upload panel when the GUI is started
--gui_hide_terminal     disables the terminal panel when the GUI is started
--gui_hide_keyboard     disables the virtual keyboard panel when the GUI is started

Usage examples:

  • MIOS_Studio --in=MIOS32 --out=MIOS32
    starts MIOS Studio with MIDI IN/OUT port matching with 'MIOS32'
  • MIOS_Studio --upload_hex=project.hex
    starts MIOS Studio and uploads the project.hex file immediately
  • MIOS_Studio --batch --upload_hex=project.hex
    starts MIOS Studio without GUI and uploads the project.hex file
  • MIOS_Studio --batch --upload_file=default.ngc --upload_file=default.ngl
    starts MIOS Studio without GUI and uploads two files to SD Card (MIOS32 only)
  • MIOS_Studio --batch --terminal="help" --wait=1
    starts MIOS Studio, executes the "help" command in MIOS Terminal and waits 1 second for response

Most parameters can be combined to a sequence of operations. E.g. upload a .hex file, upload files to SD Card, execute a terminal command and wait some seconds before exit.

Use quotes if strings have to be specified which include spaces (e.g. terminal commands or MIDI IN/OUT ports).
Example: --terminal="load default"

Special note to MacOS users: the binary, which has to be called to pass parameters, is located under MIOS_Studio.app/Contents/MacOS/MIOS_Studio
In order to simplify the access to the binary, just create following aliases (it's assumed, that MIOS Studio has been copied to the /Applications folder):

  alias ms='/Applications/MIOS_Studio.app/Contents/MacOS/MIOS_Studio'
  alias ms_batch='/Applications/MIOS_Studio.app/Contents/MacOS/MIOS_Studio --batch'
By entering these aliases into your ~/.bash_profile, they will be available whenever a new terminal is opened.


Older versions:

Source Code

The source code is available in the GIT Repository. It requires the Juce v2 release to compile; just unpack the files under tools/juce/unpack_me.zip

Known Issues

Firstly it should be highlighted, that the Juce based MIOS Studio 2 solved all MIDI uploading issues of V1 which were mainly related to the MIDI API of Java implemented by Sun and Apple (or third party vendors)!

Currently there is only one known issue:

  • Windows7 64bit: the SysEx communication gets stucked if a MIOS32 core opens more than one USB port (like MIDIbox SEQ V4).
    Workarounds ensure that your are using MIOS32 Bootloader V1.010 or higher, and install the GM5 device driver. Alternatively you could install the Korg USB driver as reported here, but the GM5 driver seems to be better.

Last update: 2023-11-04

Copyright 1998-2023, Thorsten Klose. All rights reserved.