Coder Social home page Coder Social logo

djbottrill / ipmidi_example Goto Github PK

View Code? Open in Web Editor NEW
8.0 2.0 0.0 16 KB

IPMid implementation for Arduino using Multicast UDP

C++ 15.31% C 84.69%
midi-events udp-multicast ipmidi arduino stm32 samd21 bluepill feather-m0 hauptwerk grandorgue

ipmidi_example's Introduction

IPMidi_example

IPMid implementation for Arduino using Multicast UDP

IPMidi Demo program to show how easy it is to send Midi events over UDP multicast For more information on IPMidi please see https://nerds.de/en/ipmidi.html For linux see QmidiNet https://qmidinet.sourceforge.io

IPMidi has very low latency and works well on SAMD21 and STM32 based boards This has been tested on the Adafruit Feather M0 and Generic STM32 BluePIll boards For STM32 this has been tested on STM32 Cores V1.61 https://github.com/stm32duino/Arduino_Core_STM32

This program may not be stylistically perfect for two reasons:

  1. I'm not an expert in C
  2. This example has been cobbled together from code for PCBs I've designed that use I2C to link a master IPMidi scannner to slave scanners connected to Matrix and serial organ keyboards for use with Hauptwerk www.hauptwerk.com or GrandOrgue https://sourceforge.net/projects/ourorgan/ This has been tested with the Adafruit Ethernet FeatherWing as well as a Generic W5500 Ethernet Shields easily found on Ebay.

The program uses a circular buffer which is probably a bit overkill but it's a useful example and very easy to code.

The program shows how to send single or multiple midi events in a single UDP package I'm not sure what the limit is for how many midi events can be sent in a single UDP packet however it's at least 16 you will need to adapt the code to send midi events that are not 3 bytes long but just pack them into sending buffer and QmidiNet or whatever you are using to receive IPMIdi should sort it out.

Receiving IPMidi events is also simple but you will need code to unpack the buffer one event at a time taking into account how many bytes each midi command consists of.

You also need to know that the channel variable here goes from 0 to 15 whilst some Midi devices and software use the convention 1 to 16.

The Demo tune is Bach's Little Fugue in G minor BWV578.

(C) 2019 David J Bottrill, Shady Grove Electronics

You are free to oopy, modify and improve, please seek my permission before using commercially.

ipmidi_example's People

Contributors

djbottrill avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.