All Projects → llloret → osmid

llloret / osmid

Licence: other
osmid is a tool to bridge MIDI and OSC. It is currently in use in Sonic Pi

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
java
68154 projects - #9 most used programming language
Objective-C++
1391 projects
objective c
16641 projects - #2 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to osmid

Iannix
IanniX is a graphical open-source sequencer, based on Iannis Xenakis works, for digital art. IanniX syncs via Open Sound Control (OSC) events and curves to your real-time environment.
Stars: ✭ 238 (+277.78%)
Mutual labels:  osc, midi
Xrnx
The official Renoise Lua Scripting repository
Stars: ✭ 165 (+161.9%)
Mutual labels:  osc, midi
Open Stage Control
Libre and modular OSC / MIDI controller
Stars: ✭ 436 (+592.06%)
Mutual labels:  osc, midi
Midimonster
Multi-protocol control & translation software (ArtNet, MIDI, OSC, sACN, ...)
Stars: ✭ 241 (+282.54%)
Mutual labels:  osc, midi
Fsynth
Web-based and pixels-based collaborative synthesizer
Stars: ✭ 146 (+131.75%)
Mutual labels:  osc, midi
Orca C
Live Programming Environment(C Port)
Stars: ✭ 328 (+420.63%)
Mutual labels:  osc, midi
Touchosc2midi
a (linux compatible) TouchOSC Midi Bridge written in python
Stars: ✭ 44 (-30.16%)
Mutual labels:  osc, midi
MidiGyver
No description or website provided.
Stars: ✭ 67 (+6.35%)
Mutual labels:  osc, midi
Lick
LiCK, Library for ChucK
Stars: ✭ 118 (+87.3%)
Mutual labels:  osc, midi
X32 Behringer
This GIT repo (C language) holds applications and utilities for the Behringer X32 and M32 mixing consoles. Additional details, documentation, implementation examples and apps can be found in my website:
Stars: ✭ 97 (+53.97%)
Mutual labels:  osc, midi
Libossia
A modern C++, cross-environment distributed object model for creative coding and interaction scoring
Stars: ✭ 133 (+111.11%)
Mutual labels:  osc, midi
Pedalinomini
Same features of Pedalino™ in a compact form.
Stars: ✭ 139 (+120.63%)
Mutual labels:  osc, midi
Orca
Esoteric Programming Language
Stars: ✭ 3,636 (+5671.43%)
Mutual labels:  osc, midi
Ofxremoteui
OpenFrameworks addon serves any number of variables (bool, float, int, enum, string, ofColor) on the network, so that you can modify from outside the OF app. Includes a native OSX Client. OSC based.
Stars: ✭ 132 (+109.52%)
Mutual labels:  osc, midi
TouchOSC
A collection of examples and modules for TouchOSC MK2
Stars: ✭ 30 (-52.38%)
Mutual labels:  osc, midi
Score
ossia score, an interactive sequencer for the intermedia arts.
Stars: ✭ 808 (+1182.54%)
Mutual labels:  osc, midi
OSCShark
OSC Shark is a tool for monitoring and analysing OSC (Open Sound Control) packets.
Stars: ✭ 24 (-61.9%)
Mutual labels:  osc, osc-messages
linux-show-player
Linux Show Player - Cue player designed for stage productions
Stars: ✭ 147 (+133.33%)
Mutual labels:  osc, midi
Theconductor
Toolset for making musical applications with Unity, Max and Ableton.
Stars: ✭ 48 (-23.81%)
Mutual labels:  osc, midi
Pedalino
Smart wireless MIDI foot controller for guitarists and more.
Stars: ✭ 105 (+66.67%)
Mutual labels:  osc, midi

Build Status

osmid

osmid aims to provide a lightweight, portable, easy to use tool to convert MIDI to OSC and OSC to MIDI.

It is the software handling the communication with MIDI devices in Sonic Pi.

osmid is divided in 2 tools:

  • m2o: MIDI to OSC conversion
  • o2m: OSC to MIDI conversion

Having two separate tools follows Unix ideas of having a number of smaller standalone tools instead of bigger monolithic ones. Since some projects might want to use just one direction for the conversion, it makes sense to keep this separation.

m2o features

  • Portable: Works under Windows, Linux and Mac
  • Compact
  • Very low latency
  • Customizable: can open a number of midi inputs, or all, and can configure the output UDP socket (if it is necessary to forward differnet MIDI devices to different OSC destinations, it is possible to do that invoking the program multiple times, with the appropriate arguments)
  • OSC address templates, that is, the format of the OSC address can be passed as an argument to the program. If the template parameter is not passed, then templates are NOT used (for example, if you REALLY care about latency - but we are talking about tens of microseconds here...).

o2m features

  • Portable: Works under Windows, Linux and Mac
  • Compact
  • Very low latency
  • For a list of the OSC messages that o2m supports see below in "o2m incoming OSC message format"

Building

For build instruction see INSTALL.md.

osmid is built using C++14 features. The build system is based on cmake. Tested target compiler in Windows is MSVC 2015 Win64, in Linux is gcc 4.9 or later, and on Mac, clang 5.1 or later. Under Windows, prepare using something like: cmake -G "Visual Studio 16 2019" -A x64 .. . On Linux and Mac cmake .. should be enough.

osmid uses the following libs:

  • JUCE for the midi handling and OSC handling (included in the tree)
  • oscpack, for the OSC handling and UDP networking (included in the tree)
  • spdlog, for logging (included in the tree)
  • cxxopts, for program options parsing (included in the tree)

m2o parameters

  • --midiin or -i : open the specified input device - can be specified multiple times to open more than one device. By default it will open all input devices and the ones that are connected live
  • --oschost or -H : send the OSC output to the specified host
  • --oscport or -o : send the OSC output to the specified port - can be specified multiple times to send to more than one port
  • --osctemplate or -t : use the specified OSC output template (use $n: midi port name, $i midi port id, $c: midi channel, $m: message_type). For example: -t /midi/$c/$m
  • --oscrawmidimessage or -r: send the raw MIDI data in the OSC message, instead of a decoded version
  • --monitor or -m: logging level. Number from 0 to 6. Smaller numbers are more verbose
  • --list or -l: List input MIDI devices
  • --heartbeat or -b: sends OSC heartbeat message
  • --help: Display this help message
  • --version: Show the version number

m2o outgoing OSC message format

The address by default is: /midi//(if the message contains channel information). The address can be templated with the -t argument.

The message body is:

  • By default: (int), (string), (i.e. for note_on messages, it will be 2 integers: note, velocity)
  • if -r specified: (int), (string), (blob).

There is also an optional heartbeat message which sends periodic messages with the following format: OSC address pattern: /midi/heartbeat. Message body is OSC array of pairs ,

o2m parameters

  • --list or -l: List output MIDI devices
  • --midiout or -o: open the specified output device - can be specified multiple times to open more than one device. By default it will open all output devices and the ones that are connected live
  • --oscport or -i: OSC Input port (default:57200)
  • --heartbeat or -b: sends OSC heartbeat message. See oscoutputhost and oscoutputport arguments.
  • --oscoutputhost or -H, host to send OSC messages to (default:127.0.0.1). Used for heartbeat
  • --oscoutputport or -O:host to send OSC messages to (default:57120). Used for heartbeat
  • --monitor or -m: logging level. Number from 0 to 6. Smaller numbers are more verbose
  • --help: Display this help message
  • --version: Show the version number

o2m incoming OSC message format

  • The expected OSC address pattern is /(string)"out midi device name or global"/(string)"midi command". You can use * in the device name to send to all devices
  • Recognized midi commands, and the expected OSC body:
    • raw: send a midi command as is. Body can be either a blob or a sequence of int32s
    • note_on: Body is (int32)channel, (int32)note, (int32)velocity
    • note_off: Body is (int32)channel, (int32)note, (int32)velocity
    • control_change: Body is (int32)channel, (int32)control number, (int32)control value
    • pitch_bend: Body is (int32)channel, (int32)value
    • channel_pressure: Body is (int32)channel, (int32)value
    • poly_pressure: Body is (int32)channel, (int32)note, (int32)value
    • program_change: Body is (int32)channel, (int32)program number
    • clock: Body is empty
    • start: Body is empty
    • stop: Body is empty
    • continue: Body is empty
    • active_sense: Body is empty
    • log_level: Body is (int32)log_level. Value from 0 to 6. The smaller the number the more verbose the output.
    • log_to_osc: Body is (int32)enable. 0 -> disable, 1 -> enable

LICENSE

See LICENSE.md file for details.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].