Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
The Most Real-World-Useful iPad Instrument, Microtonal and Metal as well.
branch: master

This branch is even with rfielding:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
Classes
Shaders
kickAxe.xcodeproj
.DS_Store
.gitignore
Entitlements.plist
MainWindow.xib
Mugician_a.png
Mugician_b.png
Mugician_c.png
README
big512.png
full.png
icon.png
kickAxe-Info.plist
kickAxe_Prefix.pch
main.m
mugician.presets

README

Mugician is an iPad instrument that was designed for real-world use.  It is different in that you can play with real virtuosity on the iPad without external devices, and you can play fretlessly to do microtonal music - which is generally impossible to do correctly on anything that is modeled on a keyboard or fretted guitar.  It resembles Roger Linn's Linnstrument prototype.  It is similar to TapSynth, which originally convinced me that this layout is the one that I should use.  ExpressionPad is also pretty similar, though it came after Mugician.  Some of the ideas in Mugician, such as the pitch handling, were explicitly given to me by Jordan Rudess as a way to get some of the capabilities of his Morphwiz program.  I have gigged with it myself, and have many users that use it for real gigs and in the studio.

Unfortunately I have to make the licensing terms more prominent, please read the License at the bottom and make an attempt to follow it before you download and compile this code.  You can have your app removed from the store, or your developer certificate revoked if Apple deems you to be a bad actor in the app store for any reason.  Remember that Apple doesn't need any sort of legal reason to remove you.  So, if you come here in peace... just read on and do not worry.

WHAT IS IT?:

I suggest that you read the manual for the instrument:

http://rrr00bb.blogspot.com/2010/08/mugician-heiroglyphics.html


THE INSTRUMENT:

This is what Mugician is capable of (at least!).  I have professional musicians using it on a daily basis.   It has appeared on Underoath's Disambiguation, Gorillaz 'The Fall', JordanRudess+ProjectRnL collaboration, have seen live footage by Ekoostik Hookah, White Rainbow, Michael Atonal Vick, etc.  I even have at least one group (Army Of The Hollow) working on an orchestra of Mugicians, in this case, a Black Metal Microtonal Maqam orchestra(!)   I have been told that it is becoming a bit of a standard among fretless guitar players.  A lot of people will be mad if we fill it full of useless junk that's not related to making a playable instrument.  This is what I mean by 'playable':
 
http://www.youtube.com/watch?v=psKLWzTZveg

For a sense of what (if anything) is special about Mugician:

http://www.youtube.com/watch?v=rikE-2v5Icg&NR=1

For a sense of how minimal this is, note that a build that I submit to the store is only 50k in size.  A PNG screenshot is nearly twice that size!  A typical iPad music app can easily be a 12Mb.  It really boggles my mind.  But small size matters because the various levels of cache will miss more often if things are just generally huge everywhere.  When I write code for Mugician, I think more about branch prediction misses than anything else.

LATENCY:

Please measure latency with a mic panned left and instrument panned right through a mixer and compare the acoustic vs electronic peaks.  If latency is much above 30ms, it is as bad as the build being broke.  A 100ms Mugician is as useless as if it never even compiled.  Unfortunately, a very large number of instruments in the store either don't understand this concept at all, or are living beyond their means computationally.  There is no point at all in having a fantastic sound engine if you can't actually play it like an instrument due to latency, or worse, to have some incredible graphics that just causes the sound or playability to come out horrible.

DISCLAIMER:

This code is NUTS.  Much was decided in just a few days after I got my iPad and figured out AudioQueue.  It was rushed to reach the international deadline for iPads to come out.  Then there was a very long time... months... of simply tweaking magic numbers with headphones on.  Those months were followed by simply practicing without coding, and waiting for good musicians to emerge.  The UI is quite hard-coded, and it's not completely necessary for me to have done this.

My new Instrument Pythagoras normalizes the renderer coordinates around { <-1,-1>, <1,1> } and moves the controls out into UIKit.  Surprisingly, it didn't affect latency too much to do this.  I am trying to make libpd work in that code, but I can't get the latency anywhere near where it needs to be.  The buffer latency is very low, but sending changes out to the synth are apparently queueing up.  I can compare side-by-side with Mugician's engine, and the difference is very obvious.  It might be purely my mistake though.  If you know libpd well, please contact me if you think you can help with Pythagoras.  This is Pythagoras:

http://www.youtube.com/watch?v=2X9AqiUVF_U

It is a lot like Mugician, except internally the code is much cleaner, it's tuned to physical rather than diatonic fourths, and because of that, I am able to show microtonal markers that capture what is going on in the patterns of the spectrum.

TODO:

Any Max/MSP or Pd users out there: a useful utility would be one that takes the left sound channel and the right sound channel and computes the latency in milliseconds in the peak between the two (ie: left is acoustic mic of the ipad, while right is an electronic line in from the ipad) in order to get real statistical information on latency and jitter.  There needs to be a catalog of applications with these numbers up against the features that probably influenced this outcome.  At the moment, I am doing this task by eye in a very painfully slow way.  I bring up the waveform in an editor and eyeball the stereo version of the waveform and figure out latency for a few points.  This doesn't allow me to accurately get jitter numbers.  It also makes it too hard to do this against a large number of applications.


LICENSE: 

You can submit changes to this repository, but please do it on your own branch for my sanity's sake.  
If you submit something to Apple, at least change the name and app id, and MAKE SURE that your app and Mugician can be co-installed on the same iPad.

1) Give me credit for your code being a fork of "the Mugician free open source project".  Credit must be posted in your app description so that you cannot avoid mentioning the existence of the free version of Mugician in your app description.  I know that it sounds hard to sell a paid version of something that is free.  But that is the whole point of it.  If you contribute something really cool to my source code tree, then by all means go ahead and sell your own fork of Mugician as your reward.  If you don't like this, then sit down and write your own program from scratch.  Some things that you want to fold in to your project I won't want to fold into mine, but I think it's fair that if you use my program that you give me the option of using your innovations unless you can convince me to write an agreement to free you of that obligation.  (see item 5)

2) DON'T BREAK MY EXISTING MUGICIAN USERS PLEASE.  

3) Don't confuse my users.  Mugician is my trademark.  Come up with your own name if you submit to Apple.  Specifically, you cannot name your app "Mugician Pro" or "Mugician HD" in order to try to collect download fees without contributing anything.  It must also be clear that your branch is your own fork of the Mugician project.  As an example, hwado called his build of Mugician "Musician" in an attempt to confuse my users like this, in combination with completely hiding the fact that it's derived from Mugician.  

4) Verify that the store version of Mugician can co-install with anything that you submit to Apple without problems.

5) Any versions that you add into the store shall be buildable from a branch of this Mugician project and hosted in this repository on github, with only one exception:  If you have a compelling reason why you cannot do this, then contact me and I can write in an exception for you.  This exception will be version controlled in this README file for all to see, with my name on the commit.  This is here for two reasons.  The first is to discourage app spammers from submitting rebuilds with no value added to the project.  The second is to make it not worth the effort to use this as a vehicle for spreading malware.

6) I don't want a leech developer posting a malware, nagware, or adware version of this instrument under any circumstances.  If I suspect that something bad has been inserted into a Mugician derived project, I will buy one copy and open it up in a hex editor and monitor the ipad for network traffic, and all your time spent learning iOS dev will end up being a waste if you get caught inserting malware into other people's stuff.  Apple will not tolerate bad actors in the dev community because there are already too many developers submitting apps.  Mugician is very small and can only be using a few APIs with good reason, so it's very easy to detect something out of the ordinary.  If this is what you plan to do, then I suggest that you pick a safer project to do it to than mine.



NOTE: 

You cannot submit this as it is to the Apple Store even if you changed the name and app id.  It does things that need to be commented out before you can do a submit to Apple.

Contact me at rob.fielding@gmail.com for details.



MISCELLANEOUS:

I am hijacking github for a static web files site.  So here's some URLs that people with authorized iPads can install

itms-services://?action=download-manifest&url=https://github.com/rfielding/Mugician/downloads/Pythagoras_v015p16.plist
Something went wrong with that request. Please try again.