Go implementation of a library to represent MIDI data.
This began as a passion project to learn and implement a workable amount of the MIDI 1.0 specification from scratch so I could have complete control over certain specific digital instruments and DAW controls.
I had been trying to solve a very specific problem I was having with a hardware MIDI controller and its percussion pads too. The library then began growing into a general representation of the specification(s) from there.
go get github.com/matthewfritz/go-midi
- ✅ Note-On
- ✅ Note-Off
- ✅ Polyphonic Key Pressure
- ✅ Channel Pressure
- ✅ Program Change
- ✅ Pitch Bend Change
- Control Change
- ✅ Velocity
- ✅ Running Status
- ✅ Pitch
- Modulation
- MTC Quarter Frame
- Song Position Pointer
- Song Select
- Tune Request
- End of Exclusive Messages (EOX)
- MIDI Start
- MIDI Stop
- MIDI Continue
- Active Sensing
- System Reset
- Universal Non-Real-Time
- Universal Real-Time
Once the MIDI 1.0 Roadmap is at least halfway done I will start planning out the roadmap for implementing the current MIDI 2.0 specification.
Official MIDI Specifications - the official MIDI 1.0 and 2.0 specifications from the MIDI Alliance.
The Midi Manual by David Miles Huber. Reading this book was the catalyst for breaking into MIDI programming and gave me enough of a technical foundation to begin this project.
Summary of MIDI 1.0 Messages - ten-thousand foot view of MIDI 1.0 messages from the MIDI Association.
GM 1 Sound Set - general list of the sounds available in General MIDI Level 1 from the MIDI Association.
MIDI Tutorial for Programmers (Carnegie-Mellon University) | MIDI Tutorial for Programmers (Music-Software-Development.com) - tutorial about MIDI 1.0 from a software development perspective.
David's MIDI Spec - distilled version of the MIDI 1.0 specification from 1995 written by David Van Brink.
General MIDI Instrument Patch Map - general MIDI instruments and their family groups.
General MIDI Percussion Key Map - general MIDI note numbers within channel 10 (percussion channel).
An Introduction to Music Concepts - an introduction to music concepts, geared toward software developers, with examples in Java and written by Roger B. Dannenberg.