I wanted to share a few nuts and bolts of MIDI for iOS development. Specifically, the best frameworks out there, a process for exploring MIDI, etc.
MIDI Frameworks
- AudioKit is by far the best for Swift developers.
- Csound is a music computing system and has infinite potential.
- MIKMIDI is great for Objective-C developers.
MIDI Utilities
Both of these links helped parse MIDI.
Research
My initial process always starts with research. When it comes to MIDI for iOS development, there are a lot of tools.
- http://www.sreal.com/~div/midi-utilities/
- http://www.deluge.co/?q=sfark-utility-download
- http://www.deluge.co/?q=all-things-midi
- http://www.deluge.co/?q=ultimate-midi-tutorial-iphone-ipad
- https://github.com/paulrosen/abcjs/
System
Javascript
MIDI
- Sound.io Midi - This library makes it easy to attach MIDI controllers to web apps.
Swift
Publishing MIDI
Music XML
MusicXML looks scary, but there is Music JSON, so that's promising.
Music JSON
- MusicJSON is a proposal for a standard way of creating music sequence data in JSON.
VexFlow
VexFlow is awesome. The tool precisely taught me how to "think" about music through:
- Clef Properties - List of clef names.
- Key Properties - List of note names.
- Accidentals - List of accidentals.
- Key Signatures - List of valid keys.
- Duration - List of duration codes.
- Articulations - List of articulations
- Ornamentals - List of ornamentals
This table is what I needed to understand what to store.
I like VexFlow and look forward to using the language in the future guitar project.
Music Notation Kit
The author of Music Notation Kit, Kyle Sherman, decided to organize music into different classes, including:
- Staff
- Measure Repeat
- Tone
- Time Signature
- Key
- Note
- Tuplet (Duplet, Triplet, Septuplet)
- Note Collection
- Note Duration
- Repeated Measure
- Measure
Other Noteworthy Links
- http://www.vexflow.com/
- http://badassjs.com/post/41708259332/teoria-a-javascript-music-theory-library-for
- http://badassjs.com/post/40263157904/vexflow-a-music-notation-language-and-renderer
- https://github.com/evilBird/music-notation-swift
- http://www.music-software-development.com/music-sdk.html
- http://guidolib.sourceforge.net/
- http://www.music-software-development.com/music-sdk.html
- http://stackoverflow.com/questions/9797908/musical-scores-api-for-android-and-ios
- https://abcjs.net/
- https://github.com/paulrosen/abcjs/
MIDI Tracks
Free MIDI Performances
Commercial MIDI Tracks
MIDI Sounds
SoundFonts
- Fluid R3 GM - MIT License
- GeneralUser GS by S. Christian Collins
- Magic Sound Font v2.0 by Dennis Deutschmann
- Unison by Peter Jevnisek's
- Musica Theoria v2.0 by Jeff D.
- Zenph Studios Yamaha Disklavier Pro Piano Multisamples for OLPC
- University of Iowa Electronic Music Studio
- Arachno SoundFont, version 1.0 by Maxime Abbey
- TimGM6mb by Tim Brechbill
- FluidR3Mono_GM - MIT License
- Timbres of Heaven v3.2 by Don Allen
- Acoustic Grand Piano and more by Roberto Gordo Saez
- Personal Copy offers high quality
Tools for Devs
Testing SoundFonts
- Buzzwood MIDI Test Page has a suite of MIDI tests you can use to determine if you have a strange-sounding instrument in your SoundFont files.
SoundFont Compression / Decompression
sfArk is a tool that compresses SoundFonts. The tool, developed by Melody Machine Github, provides a Zip-type format for sounds.
- sfArk Compressor
- sfArk Decompressor
- sfArk Command Line - A simple command-line tool to convert sfArk files to sf2 based
- [http://melodymachine.com/sfark.htm](sfArk to sf2 library)
- [https://cloudconvert.com/sfark-to-sf2](sfArk to sf2 Online)
Intellectual Property Law
Business to Business
Web Audio API
Although I'm currently working on an iPhone app, I found these Javascript examples to be useful.
- Web Audio API School by Matt McKeg
- Google Music Lab
- Soundbank by Matt McKeg is a collection of Web Audio API audio slots, supporting audio routing, midi input, and value providers.
- Loop Drop app by Matt McKeg is a MIDI looper, modular synth, and sampler app.
Interesting Advancements in MIDI
-
aeolus Aeolus is a synthesized (i.e., not sampled) pipe organ emulator that should be good enough to make an organist enjoy playing it. It is a software synthesizer optimized for this job, with possibly hundreds of controls for each stop, that enable the user to "voice" his instrument—first presented at the 2nd LAD conference in Karlsruhe, the end of April 2004.
Create Sounds for MIDI Using Soundfont 2 or EX24
If you ever want to create a sound library for MIDI, here are two simple ways: SoundFont or EX24.
SoundFont
SoundFont is old school but still useful. The idea is to assign a Wave file to a MIDI note.
C4 on a MIDI note is note 60.
EX24
This should explain where EX24 originated from and how you can create an ex24 soundbank.
What is sfArk?
It's a lossless audio compression format optimized for SoundFont files. sfArk is free for non-commercial use. Programs to decompress sfArk files exist for Windows, macOS X, and Linux platforms.
sfArk is a closed source format created by a now-defunct company called Melody Machine. It's like a zip file for SoundFont files. When the company died, they also removed the extractor and decompressor utilities. These utilities are around but almost impossible to find. Having spent 2 hours searching for the utilities, I've decided to host them to save others time in the future!
- sfArk Original library for SoundFont compression.
- sfArk decompressor
Swift: Do Try Catch
I've discovered that there are really two ways to accomplish a Try/Catch strategy in Swift. The first example is technically correct but the "shorthand&...